@fluidframework/debugger 1.4.0-121020 → 2.0.0-dev-rc.1.0.0.225277

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 (112) hide show
  1. package/.eslintrc.js +9 -10
  2. package/CHANGELOG.md +117 -0
  3. package/README.md +33 -33
  4. package/api-extractor-esm.json +4 -0
  5. package/api-extractor-lint.json +4 -0
  6. package/api-extractor.json +2 -2
  7. package/api-report/debugger.api.md +157 -0
  8. package/dist/debugger-alpha.d.ts +36 -0
  9. package/dist/debugger-beta.d.ts +35 -0
  10. package/dist/debugger-public.d.ts +35 -0
  11. package/dist/debugger-untrimmed.d.ts +193 -0
  12. package/dist/{fluidDebugger.js → fluidDebugger.cjs} +12 -4
  13. package/dist/fluidDebugger.cjs.map +1 -0
  14. package/dist/fluidDebugger.d.ts +8 -2
  15. package/dist/fluidDebugger.d.ts.map +1 -1
  16. package/dist/{fluidDebuggerController.js → fluidDebuggerController.cjs} +29 -56
  17. package/dist/fluidDebuggerController.cjs.map +1 -0
  18. package/dist/fluidDebuggerController.d.ts +6 -2
  19. package/dist/fluidDebuggerController.d.ts.map +1 -1
  20. package/dist/{fluidDebuggerUi.js → fluidDebuggerUi.cjs} +45 -50
  21. package/dist/fluidDebuggerUi.cjs.map +1 -0
  22. package/dist/fluidDebuggerUi.d.ts +9 -0
  23. package/dist/fluidDebuggerUi.d.ts.map +1 -1
  24. package/dist/index.cjs +14 -0
  25. package/dist/index.cjs.map +1 -0
  26. package/dist/index.d.ts +3 -3
  27. package/dist/index.d.ts.map +1 -1
  28. package/dist/{messageSchema.js → messageSchema.cjs} +1 -12
  29. package/dist/messageSchema.cjs.map +1 -0
  30. package/dist/messageSchema.d.ts.map +1 -1
  31. package/dist/{sanitize.js → sanitize.cjs} +2 -2
  32. package/dist/sanitize.cjs.map +1 -0
  33. package/dist/{sanitizer.js → sanitizer.cjs} +29 -34
  34. package/dist/sanitizer.cjs.map +1 -0
  35. package/dist/sanitizer.d.ts.map +1 -1
  36. package/dist/tsdoc-metadata.json +11 -0
  37. package/lib/debugger-alpha.d.mts +36 -0
  38. package/lib/debugger-beta.d.mts +35 -0
  39. package/lib/debugger-public.d.mts +35 -0
  40. package/lib/debugger-untrimmed.d.mts +193 -0
  41. package/lib/{fluidDebugger.d.ts → fluidDebugger.d.mts} +9 -3
  42. package/lib/fluidDebugger.d.mts.map +1 -0
  43. package/lib/{fluidDebugger.js → fluidDebugger.mjs} +11 -3
  44. package/lib/fluidDebugger.mjs.map +1 -0
  45. package/lib/{fluidDebuggerController.d.ts → fluidDebuggerController.d.mts} +8 -4
  46. package/lib/fluidDebuggerController.d.mts.map +1 -0
  47. package/lib/{fluidDebuggerController.js → fluidDebuggerController.mjs} +20 -47
  48. package/lib/fluidDebuggerController.mjs.map +1 -0
  49. package/lib/{fluidDebuggerUi.d.ts → fluidDebuggerUi.d.mts} +10 -1
  50. package/lib/fluidDebuggerUi.d.mts.map +1 -0
  51. package/lib/{fluidDebuggerUi.js → fluidDebuggerUi.mjs} +44 -49
  52. package/lib/fluidDebuggerUi.mjs.map +1 -0
  53. package/lib/index.d.mts +8 -0
  54. package/lib/index.d.mts.map +1 -0
  55. package/lib/index.mjs +8 -0
  56. package/lib/index.mjs.map +1 -0
  57. package/lib/{messageSchema.d.ts → messageSchema.d.mts} +1 -1
  58. package/lib/messageSchema.d.mts.map +1 -0
  59. package/lib/{messageSchema.js → messageSchema.mjs} +1 -12
  60. package/lib/messageSchema.mjs.map +1 -0
  61. package/lib/{sanitize.d.ts → sanitize.d.mts} +1 -1
  62. package/lib/sanitize.d.mts.map +1 -0
  63. package/lib/{sanitize.js → sanitize.mjs} +2 -16
  64. package/lib/sanitize.mjs.map +1 -0
  65. package/lib/{sanitizer.d.ts → sanitizer.d.mts} +1 -15
  66. package/lib/sanitizer.d.mts.map +1 -0
  67. package/lib/{sanitizer.js → sanitizer.mjs} +19 -42
  68. package/lib/sanitizer.mjs.map +1 -0
  69. package/lib/test/types/validateDebuggerPrevious.generated.d.mts +2 -0
  70. package/lib/test/types/validateDebuggerPrevious.generated.d.mts.map +1 -0
  71. package/lib/test/types/{validateDebuggerPrevious.js → validateDebuggerPrevious.generated.mjs} +5 -5
  72. package/lib/test/types/validateDebuggerPrevious.generated.mjs.map +1 -0
  73. package/package.json +114 -44
  74. package/prettier.config.cjs +8 -0
  75. package/src/fluidDebugger.ts +38 -30
  76. package/src/fluidDebuggerController.ts +353 -323
  77. package/src/fluidDebuggerUi.ts +316 -293
  78. package/src/index.ts +3 -3
  79. package/src/messageSchema.ts +356 -367
  80. package/src/sanitize.ts +29 -29
  81. package/src/sanitizer.ts +702 -651
  82. package/tsconfig.json +13 -15
  83. package/dist/fluidDebugger.js.map +0 -1
  84. package/dist/fluidDebuggerController.js.map +0 -1
  85. package/dist/fluidDebuggerUi.js.map +0 -1
  86. package/dist/index.js +0 -20
  87. package/dist/index.js.map +0 -1
  88. package/dist/messageSchema.js.map +0 -1
  89. package/dist/sanitize.js.map +0 -1
  90. package/dist/sanitizer.js.map +0 -1
  91. package/images/Screenshot1.jpg +0 -0
  92. package/images/Screenshot2.jpg +0 -0
  93. package/lib/fluidDebugger.d.ts.map +0 -1
  94. package/lib/fluidDebugger.js.map +0 -1
  95. package/lib/fluidDebuggerController.d.ts.map +0 -1
  96. package/lib/fluidDebuggerController.js.map +0 -1
  97. package/lib/fluidDebuggerUi.d.ts.map +0 -1
  98. package/lib/fluidDebuggerUi.js.map +0 -1
  99. package/lib/index.d.ts +0 -8
  100. package/lib/index.d.ts.map +0 -1
  101. package/lib/index.js +0 -8
  102. package/lib/index.js.map +0 -1
  103. package/lib/messageSchema.d.ts.map +0 -1
  104. package/lib/messageSchema.js.map +0 -1
  105. package/lib/sanitize.d.ts.map +0 -1
  106. package/lib/sanitize.js.map +0 -1
  107. package/lib/sanitizer.d.ts.map +0 -1
  108. package/lib/sanitizer.js.map +0 -1
  109. package/lib/test/types/validateDebuggerPrevious.d.ts +0 -2
  110. package/lib/test/types/validateDebuggerPrevious.d.ts.map +0 -1
  111. package/lib/test/types/validateDebuggerPrevious.js.map +0 -1
  112. package/tsconfig.esnext.json +0 -7
@@ -0,0 +1,193 @@
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
+ * @internal
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
+ * @internal
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
+ * @internal
49
+ */
50
+ export declare class DebugReplayController extends ReplayController implements IDebuggerController {
51
+ static create(createUi: debuggerUIFactory): DebugReplayController | null;
52
+ protected static readonly WindowClosedSeq = -1;
53
+ protected static seqFromTree(documentStorageService: IDocumentStorageService, tree: ISnapshotTree | null): Promise<number>;
54
+ protected ui: IDebuggerUI;
55
+ protected stepsDeferred?: Deferred<number>;
56
+ protected startSeqDeferred: Deferred<number>;
57
+ protected retryFetchOpsOnEndOfFile: boolean;
58
+ protected documentService?: IDocumentService;
59
+ protected documentStorageService?: IDocumentStorageService;
60
+ protected versions: IVersion[];
61
+ protected stepsToPlay: number;
62
+ protected lastOpReached: boolean;
63
+ protected versionCount: number;
64
+ protected storage?: ReadDocumentStorageServiceBase;
65
+ private shouldUseController;
66
+ connectToUi(ui: IDebuggerUI): void;
67
+ onClose(): void;
68
+ onVersionSelection(version: IVersion): Promise<void>;
69
+ onOpButtonClick(steps: number): void;
70
+ onSnapshotFileSelection(file: File): void;
71
+ onDownloadOpsButtonClick(anonymize: boolean): Promise<string>;
72
+ private fetchOpsFromDeltaStorage;
73
+ fetchTo(currentOp: number): number | undefined;
74
+ isSelectionMade(): boolean;
75
+ downloadVersionInfo(documentStorageService: IDocumentStorageService, prevRequest: Promise<void>, index: number, version: IVersion): Promise<void>;
76
+ initStorage(documentService: IDocumentService): Promise<boolean>;
77
+ readBlob(blobId: string): Promise<ArrayBufferLike>;
78
+ getVersions(versionId: string | null, count: number): Promise<IVersion[]>;
79
+ getSnapshotTree(versionRequested?: IVersion): Promise<ISnapshotTree | null>;
80
+ getStartingOpSequence(): Promise<number>;
81
+ /**
82
+ * Return true if we are done processing ops
83
+ */
84
+ isDoneFetch(currentOp: number, lastTimeStamp?: number): boolean;
85
+ replay(emitter: (op: ISequencedDocumentMessage[]) => void, fetchedOps: ISequencedDocumentMessage[]): Promise<void>;
86
+ protected resolveStorage(seq: number, storage: ReadDocumentStorageServiceBase, version: IVersion | string): void;
87
+ }
88
+
89
+ /**
90
+ * @alpha
91
+ */
92
+ export declare namespace FluidDebugger {
93
+ /**
94
+ * Creates document service wrapper that pops up Debugger window and allows user to play ops one by one.
95
+ * User can chose to start with any snapshot
96
+ * If pop-ups are disabled, we continue without debugger.
97
+ * @param documentService - original document service to use to fetch ops / snapshots.
98
+ * @internal
99
+ */
100
+ export function createFromService(documentService: IDocumentService): Promise<IDocumentService>;
101
+ /**
102
+ * @alpha
103
+ */
104
+ export function createFromServiceFactory(documentServiceFactory: IDocumentServiceFactory): Promise<IDocumentServiceFactory>;
105
+ }
106
+
107
+ /**
108
+ * @internal
109
+ */
110
+ export declare interface IDebuggerController {
111
+ /**
112
+ * Initialization. UI layers calls into controller to connect the two.
113
+ * @param ui - UI layer
114
+ */
115
+ connectToUi(ui: IDebuggerUI): any;
116
+ /**
117
+ * Called by UI layer when debugger window is closed by user
118
+ * If called before user makes selection of snapshot/file, original
119
+ * document service is returned to loader (instead of debugger service) and normal document load continues.
120
+ */
121
+ onClose(): void;
122
+ /**
123
+ * UI Layer notifies about selection of version to continue.
124
+ * On successful load, versionSelected() is called.
125
+ * @param version - Snapshot version to start from.
126
+ */
127
+ onVersionSelection(version: IVersion): void;
128
+ /**
129
+ * UI Layer notifies about selection of version to continue.
130
+ * On successful load, versionSelected() is called.
131
+ * @param version - File to load snapshot from
132
+ */
133
+ onSnapshotFileSelection(file: File): void;
134
+ /**
135
+ * "next op" button is clicked in the UI
136
+ * @param steps - number of ops to play.
137
+ */
138
+ onOpButtonClick(steps: number): void;
139
+ /**
140
+ * "Download ops" option is clicked in the UI. Returns JSON of the full opStream when available.
141
+ * @param anonymize - anonymize the ops json using the sanitization tool
142
+ */
143
+ onDownloadOpsButtonClick(anonymize: boolean): Promise<string>;
144
+ }
145
+
146
+ /**
147
+ * @internal
148
+ */
149
+ export declare interface IDebuggerUI {
150
+ /**
151
+ * Version information is provided.
152
+ * Expect updates (information about seq#, timestamp) through updateVersion() calls
153
+ */
154
+ addVersions(version: IVersion[]): void;
155
+ /**
156
+ * Call when new version is downloaded from storage
157
+ * Expect multiple callbacks.
158
+ */
159
+ updateVersion(index: number, version: IVersion, seqNumber: number): void;
160
+ /**
161
+ * Called in response to successful onVersionSelection() or onSnapshotFileSelection() call
162
+ * and provides extra information about selection.
163
+ * It expected that UI layer would change its mode as result of this call, i.e. switch to
164
+ * displaying op playback controls (if this is supported)
165
+ * Note: There maybe no call to versionSelected() in response to onSnapshotFileSelection() call
166
+ * if file does not exist, has wrong name of wrong format.
167
+ * @param version - version, file name, or undefined if playing ops.
168
+ */
169
+ versionSelected(seqNumber: number, version: IVersion | string): void;
170
+ /**
171
+ * Called by controller in response to new ops being downloaded
172
+ * Called with disable = true if there are no (currently) ops to play
173
+ */
174
+ disableNextOpButton(disable: boolean): void;
175
+ /**
176
+ * Called by controller when new ops arrive (or we are done playing previous batch)
177
+ * Indicates next batch of ops that would be played when UI calls controller's onOpButtonClick()
178
+ * Called with ops=[] when there are no ops to play.
179
+ */
180
+ updateNextOpText(ops: ISequencedDocumentMessage[]): void;
181
+ /**
182
+ * Called periodically when new versions are downloaded from server
183
+ */
184
+ updateVersionText(versionsLeft: number): void;
185
+ /**
186
+ * Called periodically to notify about last known op
187
+ * @param lastKnownOp - seq number of last known op. -1 if can't play ops in this mode (load from file)
188
+ * @param stillLoading - true if we did not reach yet the end of the stream
189
+ */
190
+ updateLastOpText(lastKnownOp: number, stillLoading: boolean): void;
191
+ }
192
+
193
+ export { }
@@ -6,8 +6,12 @@
6
6
  Object.defineProperty(exports, "__esModule", { value: true });
7
7
  exports.FluidDebugger = void 0;
8
8
  const replay_driver_1 = require("@fluidframework/replay-driver");
9
- const fluidDebuggerController_1 = require("./fluidDebuggerController");
10
- const fluidDebuggerUi_1 = require("./fluidDebuggerUi");
9
+ const fluidDebuggerController_1 = require("./fluidDebuggerController.cjs");
10
+ const fluidDebuggerUi_1 = require("./fluidDebuggerUi.cjs");
11
+ /**
12
+ * @alpha
13
+ */
14
+ // eslint-disable-next-line @typescript-eslint/no-namespace
11
15
  var FluidDebugger;
12
16
  (function (FluidDebugger) {
13
17
  /**
@@ -15,6 +19,7 @@ var FluidDebugger;
15
19
  * User can chose to start with any snapshot
16
20
  * If pop-ups are disabled, we continue without debugger.
17
21
  * @param documentService - original document service to use to fetch ops / snapshots.
22
+ * @internal
18
23
  */
19
24
  async function createFromService(documentService) {
20
25
  const controller = createFluidDebugger();
@@ -24,6 +29,9 @@ var FluidDebugger;
24
29
  return replay_driver_1.ReplayDocumentService.create(documentService, controller);
25
30
  }
26
31
  FluidDebugger.createFromService = createFromService;
32
+ /**
33
+ * @alpha
34
+ */
27
35
  async function createFromServiceFactory(documentServiceFactory) {
28
36
  const controller = createFluidDebugger();
29
37
  if (!controller) {
@@ -37,5 +45,5 @@ var FluidDebugger;
37
45
  * These classes do not know each other and talk through interfaces
38
46
  */
39
47
  const createFluidDebugger = () => fluidDebuggerController_1.DebugReplayController.create((controller) => fluidDebuggerUi_1.DebuggerUI.create(controller));
40
- })(FluidDebugger = exports.FluidDebugger || (exports.FluidDebugger = {}));
41
- //# sourceMappingURL=fluidDebugger.js.map
48
+ })(FluidDebugger || (exports.FluidDebugger = FluidDebugger = {}));
49
+ //# sourceMappingURL=fluidDebugger.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fluidDebugger.cjs","sourceRoot":"","sources":["../src/fluidDebugger.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAGH,iEAAoG;AACpG,2EAAkE;AAClE,2DAA+C;AAE/C;;GAEG;AACH,2DAA2D;AAC3D,IAAiB,aAAa,CAqC7B;AArCD,WAAiB,aAAa;IAC7B;;;;;;OAMG;IACI,KAAK,UAAU,iBAAiB,CACtC,eAAiC;QAEjC,MAAM,UAAU,GAAG,mBAAmB,EAAE,CAAC;QACzC,IAAI,CAAC,UAAU,EAAE;YAChB,OAAO,eAAe,CAAC;SACvB;QACD,OAAO,qCAAqB,CAAC,MAAM,CAAC,eAAe,EAAE,UAAU,CAAC,CAAC;IAClE,CAAC;IARqB,+BAAiB,oBAQtC,CAAA;IAED;;OAEG;IACI,KAAK,UAAU,wBAAwB,CAC7C,sBAA+C;QAE/C,MAAM,UAAU,GAAG,mBAAmB,EAAE,CAAC;QACzC,IAAI,CAAC,UAAU,EAAE;YAChB,OAAO,sBAAsB,CAAC;SAC9B;QACD,OAAO,IAAI,4CAA4B,CAAC,sBAAsB,EAAE,UAAU,CAAC,CAAC;IAC7E,CAAC;IARqB,sCAAwB,2BAQ7C,CAAA;IAED;;;OAGG;IACH,MAAM,mBAAmB,GAAG,GAAG,EAAE,CAChC,+CAAqB,CAAC,MAAM,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,4BAAU,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC;AAC9E,CAAC,EArCgB,aAAa,6BAAb,aAAa,QAqC7B","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { IDocumentService, IDocumentServiceFactory } from \"@fluidframework/driver-definitions\";\nimport { ReplayDocumentService, ReplayDocumentServiceFactory } from \"@fluidframework/replay-driver\";\nimport { DebugReplayController } from \"./fluidDebuggerController\";\nimport { DebuggerUI } from \"./fluidDebuggerUi\";\n\n/**\n * @alpha\n */\n// eslint-disable-next-line @typescript-eslint/no-namespace\nexport namespace FluidDebugger {\n\t/**\n\t * Creates document service wrapper that pops up Debugger window and allows user to play ops one by one.\n\t * User can chose to start with any snapshot\n\t * If pop-ups are disabled, we continue without debugger.\n\t * @param documentService - original document service to use to fetch ops / snapshots.\n\t * @internal\n\t */\n\texport async function createFromService(\n\t\tdocumentService: IDocumentService,\n\t): Promise<IDocumentService> {\n\t\tconst controller = createFluidDebugger();\n\t\tif (!controller) {\n\t\t\treturn documentService;\n\t\t}\n\t\treturn ReplayDocumentService.create(documentService, controller);\n\t}\n\n\t/**\n\t * @alpha\n\t */\n\texport async function createFromServiceFactory(\n\t\tdocumentServiceFactory: IDocumentServiceFactory,\n\t): Promise<IDocumentServiceFactory> {\n\t\tconst controller = createFluidDebugger();\n\t\tif (!controller) {\n\t\t\treturn documentServiceFactory;\n\t\t}\n\t\treturn new ReplayDocumentServiceFactory(documentServiceFactory, controller);\n\t}\n\n\t/**\n\t * Binds DebuggerUI & DebugReplayController together\n\t * These classes do not know each other and talk through interfaces\n\t */\n\tconst createFluidDebugger = () =>\n\t\tDebugReplayController.create((controller) => DebuggerUI.create(controller));\n}\n"]}
@@ -3,15 +3,21 @@
3
3
  * Licensed under the MIT License.
4
4
  */
5
5
  import { IDocumentService, IDocumentServiceFactory } from "@fluidframework/driver-definitions";
6
- import { ReplayDocumentServiceFactory } from "@fluidframework/replay-driver";
6
+ /**
7
+ * @alpha
8
+ */
7
9
  export declare namespace FluidDebugger {
8
10
  /**
9
11
  * Creates document service wrapper that pops up Debugger window and allows user to play ops one by one.
10
12
  * User can chose to start with any snapshot
11
13
  * If pop-ups are disabled, we continue without debugger.
12
14
  * @param documentService - original document service to use to fetch ops / snapshots.
15
+ * @internal
13
16
  */
14
17
  function createFromService(documentService: IDocumentService): Promise<IDocumentService>;
15
- function createFromServiceFactory(documentServiceFactory: IDocumentServiceFactory): Promise<IDocumentServiceFactory | ReplayDocumentServiceFactory>;
18
+ /**
19
+ * @alpha
20
+ */
21
+ function createFromServiceFactory(documentServiceFactory: IDocumentServiceFactory): Promise<IDocumentServiceFactory>;
16
22
  }
17
23
  //# sourceMappingURL=fluidDebugger.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"fluidDebugger.d.ts","sourceRoot":"","sources":["../src/fluidDebugger.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,MAAM,oCAAoC,CAAC;AAC/F,OAAO,EAAyB,4BAA4B,EAAE,MAAM,+BAA+B,CAAC;AAIpG,yBAAiB,aAAa,CAAC;IAC3B;;;;;OAKG;IACH,SAAsB,iBAAiB,CACnC,eAAe,EAAE,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAMhE;IAED,SAAsB,wBAAwB,CAC1C,sBAAsB,EAAE,uBAAuB,mEASlD;CAOJ"}
1
+ {"version":3,"file":"fluidDebugger.d.ts","sourceRoot":"","sources":["../src/fluidDebugger.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,MAAM,oCAAoC,CAAC;AAK/F;;GAEG;AAEH,yBAAiB,aAAa,CAAC;IAC9B;;;;;;OAMG;IACH,SAAsB,iBAAiB,CACtC,eAAe,EAAE,gBAAgB,GAC/B,OAAO,CAAC,gBAAgB,CAAC,CAM3B;IAED;;OAEG;IACH,SAAsB,wBAAwB,CAC7C,sBAAsB,EAAE,uBAAuB,GAC7C,OAAO,CAAC,uBAAuB,CAAC,CAMlC;CAQD"}
@@ -3,39 +3,21 @@
3
3
  * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
4
4
  * Licensed under the MIT License.
5
5
  */
6
- var __asyncValues = (this && this.__asyncValues) || function (o) {
7
- if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
8
- var m = o[Symbol.asyncIterator], i;
9
- return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i);
10
- function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }
11
- function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }
12
- };
13
- var __await = (this && this.__await) || function (v) { return this instanceof __await ? (this.v = v, this) : new __await(v); }
14
- var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _arguments, generator) {
15
- if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
16
- var g = generator.apply(thisArg, _arguments || []), i, q = [];
17
- return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i;
18
- function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }
19
- function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }
20
- function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }
21
- function fulfill(value) { resume("next", value); }
22
- function reject(value) { resume("throw", value); }
23
- function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }
24
- };
25
6
  Object.defineProperty(exports, "__esModule", { value: true });
26
7
  exports.DebugReplayController = void 0;
27
- const common_utils_1 = require("@fluidframework/common-utils");
8
+ const core_utils_1 = require("@fluidframework/core-utils");
28
9
  const driver_utils_1 = require("@fluidframework/driver-utils");
29
10
  const replay_driver_1 = require("@fluidframework/replay-driver");
30
- const sanitizer_1 = require("./sanitizer");
11
+ const sanitizer_1 = require("./sanitizer.cjs");
31
12
  /**
32
13
  * Replay controller that uses pop-up window to control op playback
14
+ * @internal
33
15
  */
34
16
  class DebugReplayController extends replay_driver_1.ReplayController {
35
17
  constructor() {
36
18
  super(...arguments);
37
19
  this.ui = null; // Not to check on every line that it's not null
38
- this.startSeqDeferred = new common_utils_1.Deferred();
20
+ this.startSeqDeferred = new core_utils_1.Deferred();
39
21
  // True will cause us ping server indefinitely waiting for new ops
40
22
  this.retryFetchOpsOnEndOfFile = false;
41
23
  this.versions = [];
@@ -43,8 +25,9 @@ class DebugReplayController extends replay_driver_1.ReplayController {
43
25
  this.lastOpReached = false;
44
26
  this.versionCount = 0;
45
27
  }
28
+ // eslint-disable-next-line @rushstack/no-new-null
46
29
  static create(createUi) {
47
- if (typeof localStorage === "object" && localStorage !== null && localStorage.FluidDebugger) {
30
+ if (typeof localStorage === "object" && localStorage?.FluidDebugger) {
48
31
  const controller = new DebugReplayController();
49
32
  const ui = createUi(controller);
50
33
  if (ui) {
@@ -131,21 +114,10 @@ class DebugReplayController extends replay_driver_1.ReplayController {
131
114
  return JSON.stringify(messages, undefined, 2);
132
115
  }
133
116
  async fetchOpsFromDeltaStorage(documentDeltaStorageService) {
134
- var e_1, _a;
135
117
  const deltaGenerator = generateSequencedMessagesFromDeltaStorage(documentDeltaStorageService);
136
118
  let messages = [];
137
- try {
138
- for (var deltaGenerator_1 = __asyncValues(deltaGenerator), deltaGenerator_1_1; deltaGenerator_1_1 = await deltaGenerator_1.next(), !deltaGenerator_1_1.done;) {
139
- const message = deltaGenerator_1_1.value;
140
- messages = messages.concat(message);
141
- }
142
- }
143
- catch (e_1_1) { e_1 = { error: e_1_1 }; }
144
- finally {
145
- try {
146
- if (deltaGenerator_1_1 && !deltaGenerator_1_1.done && (_a = deltaGenerator_1.return)) await _a.call(deltaGenerator_1);
147
- }
148
- finally { if (e_1) throw e_1.error; }
119
+ for await (const message of deltaGenerator) {
120
+ messages = messages.concat(message);
149
121
  }
150
122
  return messages;
151
123
  }
@@ -173,9 +145,9 @@ class DebugReplayController extends replay_driver_1.ReplayController {
173
145
  if (this.shouldUseController !== undefined) {
174
146
  return this.shouldUseController;
175
147
  }
176
- (0, common_utils_1.assert)(!!documentService, 0x080 /* "Invalid document service!" */);
177
- (0, common_utils_1.assert)(!this.documentService, 0x081 /* "Document service already set!" */);
178
- (0, common_utils_1.assert)(!this.documentStorageService, 0x082 /* "Document storage service already set!" */);
148
+ (0, core_utils_1.assert)(!!documentService, 0x080 /* "Invalid document service!" */);
149
+ (0, core_utils_1.assert)(!this.documentService, 0x081 /* "Document service already set!" */);
150
+ (0, core_utils_1.assert)(!this.documentStorageService, 0x082 /* "Document storage service already set!" */);
179
151
  this.documentService = documentService;
180
152
  this.documentStorageService = await documentService.connectToStorage();
181
153
  // User can chose "file" at any moment in time!
@@ -204,8 +176,9 @@ class DebugReplayController extends replay_driver_1.ReplayController {
204
176
  this.ui.updateVersionText(0);
205
177
  });
206
178
  // This hangs until the user makes a selection or closes the window.
207
- this.shouldUseController = await this.startSeqDeferred.promise !== DebugReplayController.WindowClosedSeq;
208
- (0, common_utils_1.assert)(this.isSelectionMade() === this.shouldUseController, 0x083 /* "User selection status does not match replay controller use status!" */);
179
+ this.shouldUseController =
180
+ (await this.startSeqDeferred.promise) !== DebugReplayController.WindowClosedSeq;
181
+ (0, core_utils_1.assert)(this.isSelectionMade() === this.shouldUseController, 0x083 /* "User selection status does not match replay controller use status!" */);
209
182
  return this.shouldUseController;
210
183
  }
211
184
  async readBlob(blobId) {
@@ -214,12 +187,14 @@ class DebugReplayController extends replay_driver_1.ReplayController {
214
187
  }
215
188
  throw new Error("Reading blob before storage is setup properly");
216
189
  }
190
+ // eslint-disable-next-line @rushstack/no-new-null
217
191
  async getVersions(versionId, count) {
218
192
  if (this.storage !== undefined) {
219
193
  return this.storage.getVersions(versionId, count);
220
194
  }
221
195
  throw new Error("initStorage() was not called!");
222
196
  }
197
+ // eslint-disable-next-line @rushstack/no-new-null
223
198
  async getSnapshotTree(versionRequested) {
224
199
  if (this.storage !== undefined) {
225
200
  return this.storage.getSnapshotTree(versionRequested);
@@ -257,7 +232,7 @@ class DebugReplayController extends replay_driver_1.ReplayController {
257
232
  }
258
233
  if (this.stepsToPlay === 0) {
259
234
  this.ui.disableNextOpButton(false);
260
- this.stepsDeferred = new common_utils_1.Deferred();
235
+ this.stepsDeferred = new core_utils_1.Deferred();
261
236
  this.ui.updateNextOpText(_fetchedOps);
262
237
  this.stepsToPlay = await this.stepsDeferred.promise;
263
238
  this.stepsDeferred = undefined;
@@ -277,26 +252,24 @@ class DebugReplayController extends replay_driver_1.ReplayController {
277
252
  }
278
253
  }
279
254
  resolveStorage(seq, storage, version) {
280
- (0, common_utils_1.assert)(!this.isSelectionMade(), 0x084 /* "On storage resolve, user selection already made!" */);
281
- (0, common_utils_1.assert)(!!storage, 0x085 /* "On storage resolve, missing storage!" */);
255
+ (0, core_utils_1.assert)(!this.isSelectionMade(), 0x084 /* "On storage resolve, user selection already made!" */);
256
+ (0, core_utils_1.assert)(!!storage, 0x085 /* "On storage resolve, missing storage!" */);
282
257
  this.storage = storage;
283
- (0, common_utils_1.assert)(this.isSelectionMade(), 0x086 /* "After storage resolve, user selection status still false!" */);
258
+ (0, core_utils_1.assert)(this.isSelectionMade(), 0x086 /* "After storage resolve, user selection status still false!" */);
284
259
  this.ui.versionSelected(seq, version);
285
260
  this.startSeqDeferred.resolve(seq);
286
261
  }
287
262
  }
288
263
  exports.DebugReplayController = DebugReplayController;
289
264
  DebugReplayController.WindowClosedSeq = -1; // Seq# to indicate that user closed window
290
- function generateSequencedMessagesFromDeltaStorage(deltaStorage) {
291
- return __asyncGenerator(this, arguments, function* generateSequencedMessagesFromDeltaStorage_1() {
292
- const stream = deltaStorage.fetchMessages(1, undefined);
293
- while (true) {
294
- const result = yield __await(stream.read());
295
- if (result.done) {
296
- return yield __await(void 0);
297
- }
298
- yield yield __await(result.value);
265
+ async function* generateSequencedMessagesFromDeltaStorage(deltaStorage) {
266
+ const stream = deltaStorage.fetchMessages(1, undefined);
267
+ while (true) {
268
+ const result = await stream.read();
269
+ if (result.done) {
270
+ return;
299
271
  }
300
- });
272
+ yield result.value;
273
+ }
301
274
  }
302
- //# sourceMappingURL=fluidDebuggerController.js.map
275
+ //# sourceMappingURL=fluidDebuggerController.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fluidDebuggerController.cjs","sourceRoot":"","sources":["../src/fluidDebuggerController.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { assert, Deferred } from \"@fluidframework/core-utils\";\nimport {\n\tIDocumentService,\n\tIDocumentStorageService,\n\tIDocumentDeltaStorageService,\n} from \"@fluidframework/driver-definitions\";\nimport { readAndParse } from \"@fluidframework/driver-utils\";\nimport {\n\tIDocumentAttributes,\n\tISequencedDocumentMessage,\n\tISnapshotTree,\n\tIVersion,\n} from \"@fluidframework/protocol-definitions\";\nimport {\n\tFileSnapshotReader,\n\tIFileSnapshot,\n\tReadDocumentStorageServiceBase,\n\tReplayController,\n\tSnapshotStorage,\n} from \"@fluidframework/replay-driver\";\nimport { IDebuggerController, IDebuggerUI } from \"./fluidDebuggerUi\";\nimport { Sanitizer } from \"./sanitizer\";\n\n/**\n * @internal\n */\n// eslint-disable-next-line @rushstack/no-new-null\nexport type debuggerUIFactory = (controller: IDebuggerController) => IDebuggerUI | null;\n\n/**\n * Replay controller that uses pop-up window to control op playback\n * @internal\n */\nexport class DebugReplayController extends ReplayController implements IDebuggerController {\n\t// eslint-disable-next-line @rushstack/no-new-null\n\tpublic static create(createUi: debuggerUIFactory): DebugReplayController | null {\n\t\tif (typeof localStorage === \"object\" && localStorage?.FluidDebugger) {\n\t\t\tconst controller = new DebugReplayController();\n\t\t\tconst ui = createUi(controller);\n\t\t\tif (ui) {\n\t\t\t\treturn controller;\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t}\n\n\tprotected static readonly WindowClosedSeq = -1; // Seq# to indicate that user closed window\n\n\tprotected static async seqFromTree(\n\t\tdocumentStorageService: IDocumentStorageService,\n\t\ttree: ISnapshotTree | null,\n\t): Promise<number> {\n\t\tif (!tree) {\n\t\t\treturn 0;\n\t\t}\n\n\t\tconst attributesHash = tree.trees[\".protocol\"].blobs.attributes;\n\t\tconst attrib = await readAndParse<IDocumentAttributes>(\n\t\t\tdocumentStorageService,\n\t\t\tattributesHash,\n\t\t);\n\t\treturn attrib.sequenceNumber;\n\t}\n\n\tprotected ui: IDebuggerUI = null as any as IDebuggerUI; // Not to check on every line that it's not null\n\tprotected stepsDeferred?: Deferred<number>;\n\tprotected startSeqDeferred = new Deferred<number>();\n\n\t// True will cause us ping server indefinitely waiting for new ops\n\tprotected retryFetchOpsOnEndOfFile = false;\n\n\tprotected documentService?: IDocumentService;\n\tprotected documentStorageService?: IDocumentStorageService;\n\tprotected versions: IVersion[] = [];\n\tprotected stepsToPlay: number = 0;\n\tprotected lastOpReached = false;\n\tprotected versionCount = 0;\n\n\tprotected storage?: ReadDocumentStorageServiceBase;\n\n\t// Member to prevent repeated initialization in initStorage(...), which also\n\t// returns if this controller should be used or function as a passthrough\n\tprivate shouldUseController: boolean | undefined;\n\n\tpublic connectToUi(ui: IDebuggerUI): void {\n\t\tthis.ui = ui;\n\t}\n\n\tpublic onClose() {\n\t\tthis.startSeqDeferred.resolve(DebugReplayController.WindowClosedSeq);\n\t}\n\n\tpublic async onVersionSelection(version: IVersion) {\n\t\tif (!this.documentStorageService) {\n\t\t\tthrow new Error(\"onVersionSelection: no storage\");\n\t\t}\n\n\t\tconst tree = await this.documentStorageService.getSnapshotTree(version);\n\t\tconst seq = await DebugReplayController.seqFromTree(this.documentStorageService, tree);\n\t\tthis.resolveStorage(seq, new SnapshotStorage(this.documentStorageService, tree), version);\n\t}\n\n\tpublic onOpButtonClick(steps: number) {\n\t\tif (this.stepsDeferred && !Number.isNaN(steps) && steps > 0) {\n\t\t\tthis.stepsDeferred.resolve(steps);\n\t\t}\n\t}\n\n\tpublic onSnapshotFileSelection(file: File) {\n\t\tif (!/^snapshot.*\\.json/.exec(file.name)) {\n\t\t\talert(`Incorrect file name: ${file.name}`);\n\t\t\treturn;\n\t\t}\n\t\tif (/.*_expanded.*/.exec(file.name)) {\n\t\t\talert(`Incorrect file name - please use non-extended files: ${file.name}`);\n\t\t\treturn;\n\t\t}\n\n\t\tconst reader = new FileReader();\n\t\treader.onload = async () => {\n\t\t\tif (this.documentStorageService) {\n\t\t\t\tconst text = reader.result as string;\n\t\t\t\ttry {\n\t\t\t\t\tconst json: IFileSnapshot = JSON.parse(text) as IFileSnapshot;\n\t\t\t\t\t/*\n Const docStorage = this.documentStorageService;\n const storage = {\n read: (blobId: string) => this.read(docStorage, blobId),\n };\n const seq = await DebugReplayController.seqFromTree(\n storage as IDocumentStorageService,\n tree);\n this.startSeqDeferred.resolve(seq);\n */\n\t\t\t\t\t// No ability to load ops, so just say - pick up from infinite op.\n\t\t\t\t\tthis.retryFetchOpsOnEndOfFile = false;\n\t\t\t\t\tthis.lastOpReached = true;\n\t\t\t\t\tthis.resolveStorage(\n\t\t\t\t\t\tNumber.MAX_SAFE_INTEGER,\n\t\t\t\t\t\tnew FileSnapshotReader(json),\n\t\t\t\t\t\tfile.name,\n\t\t\t\t\t);\n\t\t\t\t} catch (error) {\n\t\t\t\t\talert(`Error parsing file: ${error}`);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\treader.readAsText(file, \"utf-8\");\n\t}\n\n\tpublic async onDownloadOpsButtonClick(anonymize: boolean): Promise<string> {\n\t\tif (this.documentService === undefined) {\n\t\t\tthrow new Error(\"DocumentService required\");\n\t\t}\n\n\t\tconst documentDeltaStorageService = await this.documentService.connectToDeltaStorage();\n\t\tlet messages = await this.fetchOpsFromDeltaStorage(documentDeltaStorageService);\n\n\t\tif (anonymize) {\n\t\t\tconst sanitizer = new Sanitizer(messages, false /* fullScrub */, false /* noBail */);\n\t\t\tmessages = sanitizer.sanitize();\n\t\t}\n\n\t\treturn JSON.stringify(messages, undefined, 2);\n\t}\n\n\tprivate async fetchOpsFromDeltaStorage(\n\t\tdocumentDeltaStorageService,\n\t): Promise<ISequencedDocumentMessage[]> {\n\t\tconst deltaGenerator = generateSequencedMessagesFromDeltaStorage(\n\t\t\tdocumentDeltaStorageService,\n\t\t);\n\t\tlet messages: ISequencedDocumentMessage[] = [];\n\t\tfor await (const message of deltaGenerator) {\n\t\t\tmessages = messages.concat(message);\n\t\t}\n\t\treturn messages;\n\t}\n\n\tpublic fetchTo(currentOp: number): number | undefined {\n\t\treturn undefined;\n\t}\n\n\t// Returns true if version / file / ops selections is made.\n\tpublic isSelectionMade() {\n\t\treturn this.storage !== undefined;\n\t}\n\n\tpublic async downloadVersionInfo(\n\t\tdocumentStorageService: IDocumentStorageService,\n\t\tprevRequest: Promise<void>,\n\t\tindex: number,\n\t\tversion: IVersion,\n\t): Promise<void> {\n\t\tif (this.isSelectionMade()) {\n\t\t\treturn;\n\t\t}\n\n\t\tawait prevRequest;\n\n\t\tconst treeV = await documentStorageService.getSnapshotTree(version);\n\t\tconst seqV = await DebugReplayController.seqFromTree(documentStorageService, treeV);\n\n\t\tif (!this.isSelectionMade()) {\n\t\t\tthis.versionCount--;\n\t\t\tthis.ui.updateVersionText(this.versionCount);\n\t\t\tthis.ui.updateVersion(index, version, seqV);\n\t\t}\n\t}\n\n\tpublic async initStorage(documentService: IDocumentService): Promise<boolean> {\n\t\tif (this.shouldUseController !== undefined) {\n\t\t\treturn this.shouldUseController;\n\t\t}\n\n\t\tassert(!!documentService, 0x080 /* \"Invalid document service!\" */);\n\t\tassert(!this.documentService, 0x081 /* \"Document service already set!\" */);\n\t\tassert(!this.documentStorageService, 0x082 /* \"Document storage service already set!\" */);\n\t\tthis.documentService = documentService;\n\t\tthis.documentStorageService = await documentService.connectToStorage();\n\n\t\t// User can chose \"file\" at any moment in time!\n\t\tif (!this.isSelectionMade()) {\n\t\t\tthis.versions = await this.documentStorageService.getVersions(\"\", 50);\n\t\t\tif (!this.isSelectionMade()) {\n\t\t\t\tthis.ui.addVersions(this.versions);\n\t\t\t\tthis.ui.updateVersionText(this.versionCount);\n\t\t\t}\n\t\t}\n\n\t\tthis.versionCount = this.versions.length;\n\n\t\t// Download all versions - do 10 downloads in parallel to avoid being throttled\n\t\tconst buckets = 10;\n\t\tconst work: Promise<void>[] = [];\n\t\tfor (let i = 0; i < buckets; i++) {\n\t\t\tlet prevRequest = Promise.resolve();\n\t\t\tfor (let index = i; index < this.versions.length; index += buckets) {\n\t\t\t\tconst version = this.versions[index];\n\t\t\t\tprevRequest = this.downloadVersionInfo(\n\t\t\t\t\tthis.documentStorageService,\n\t\t\t\t\tprevRequest,\n\t\t\t\t\tindex,\n\t\t\t\t\tversion,\n\t\t\t\t);\n\t\t\t}\n\t\t\twork.push(prevRequest);\n\t\t}\n\n\t\t// Don't wait for stuff to populate.\n\t\t// eslint-disable-next-line @typescript-eslint/no-floating-promises\n\t\tPromise.all(work).then(() => {\n\t\t\tthis.ui.updateVersionText(0);\n\t\t});\n\n\t\t// This hangs until the user makes a selection or closes the window.\n\t\tthis.shouldUseController =\n\t\t\t(await this.startSeqDeferred.promise) !== DebugReplayController.WindowClosedSeq;\n\n\t\tassert(\n\t\t\tthis.isSelectionMade() === this.shouldUseController,\n\t\t\t0x083 /* \"User selection status does not match replay controller use status!\" */,\n\t\t);\n\t\treturn this.shouldUseController;\n\t}\n\n\tpublic async readBlob(blobId: string): Promise<ArrayBufferLike> {\n\t\tif (this.storage !== undefined) {\n\t\t\treturn this.storage.readBlob(blobId);\n\t\t}\n\t\tthrow new Error(\"Reading blob before storage is setup properly\");\n\t}\n\n\t// eslint-disable-next-line @rushstack/no-new-null\n\tpublic async getVersions(versionId: string | null, count: number): Promise<IVersion[]> {\n\t\tif (this.storage !== undefined) {\n\t\t\treturn this.storage.getVersions(versionId, count);\n\t\t}\n\t\tthrow new Error(\"initStorage() was not called!\");\n\t}\n\n\t// eslint-disable-next-line @rushstack/no-new-null\n\tpublic async getSnapshotTree(versionRequested?: IVersion): Promise<ISnapshotTree | null> {\n\t\tif (this.storage !== undefined) {\n\t\t\treturn this.storage.getSnapshotTree(versionRequested);\n\t\t}\n\t\tthrow new Error(\"Reading snapshot tree before storage is setup properly\");\n\t}\n\n\tpublic async getStartingOpSequence() {\n\t\treturn this.startSeqDeferred.promise;\n\t}\n\n\t/**\n\t * Return true if we are done processing ops\n\t */\n\tpublic isDoneFetch(currentOp: number, lastTimeStamp?: number): boolean {\n\t\tif (lastTimeStamp === undefined) {\n\t\t\tthis.lastOpReached = true;\n\t\t\tif (currentOp === Number.MAX_SAFE_INTEGER) {\n\t\t\t\tthis.ui.updateLastOpText(-1, false);\n\t\t\t} else {\n\t\t\t\tthis.ui.updateLastOpText(currentOp, false);\n\t\t\t}\n\t\t} else {\n\t\t\tthis.ui.updateLastOpText(currentOp, true);\n\t\t}\n\t\treturn this.lastOpReached && !this.retryFetchOpsOnEndOfFile;\n\t}\n\n\tpublic async replay(\n\t\temitter: (op: ISequencedDocumentMessage[]) => void,\n\t\tfetchedOps: ISequencedDocumentMessage[],\n\t): Promise<void> {\n\t\tlet _fetchedOps = fetchedOps;\n\t\t// eslint-disable-next-line no-constant-condition\n\t\twhile (true) {\n\t\t\tif (_fetchedOps.length === 0) {\n\t\t\t\tthis.ui.updateNextOpText([]);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (this.stepsToPlay === 0) {\n\t\t\t\tthis.ui.disableNextOpButton(false);\n\t\t\t\tthis.stepsDeferred = new Deferred<number>();\n\n\t\t\t\tthis.ui.updateNextOpText(_fetchedOps);\n\n\t\t\t\tthis.stepsToPlay = await this.stepsDeferred.promise;\n\n\t\t\t\tthis.stepsDeferred = undefined;\n\t\t\t\tthis.ui.disableNextOpButton(true);\n\t\t\t}\n\n\t\t\tlet playOps: ISequencedDocumentMessage[];\n\t\t\tif (this.stepsToPlay >= _fetchedOps.length) {\n\t\t\t\tplayOps = _fetchedOps;\n\t\t\t\tthis.stepsToPlay -= _fetchedOps.length;\n\t\t\t\t_fetchedOps = [];\n\t\t\t} else {\n\t\t\t\tplayOps = _fetchedOps.splice(0, this.stepsToPlay);\n\t\t\t\tthis.stepsToPlay = 0;\n\t\t\t}\n\t\t\temitter(playOps);\n\t\t}\n\t}\n\n\tprotected resolveStorage(\n\t\tseq: number,\n\t\tstorage: ReadDocumentStorageServiceBase,\n\t\tversion: IVersion | string,\n\t) {\n\t\tassert(\n\t\t\t!this.isSelectionMade(),\n\t\t\t0x084 /* \"On storage resolve, user selection already made!\" */,\n\t\t);\n\t\tassert(!!storage, 0x085 /* \"On storage resolve, missing storage!\" */);\n\t\tthis.storage = storage;\n\t\tassert(\n\t\t\tthis.isSelectionMade(),\n\t\t\t0x086 /* \"After storage resolve, user selection status still false!\" */,\n\t\t);\n\n\t\tthis.ui.versionSelected(seq, version);\n\t\tthis.startSeqDeferred.resolve(seq);\n\t}\n}\n\nasync function* generateSequencedMessagesFromDeltaStorage(\n\tdeltaStorage: IDocumentDeltaStorageService,\n) {\n\tconst stream = deltaStorage.fetchMessages(1, undefined);\n\twhile (true) {\n\t\tconst result = await stream.read();\n\t\tif (result.done) {\n\t\t\treturn;\n\t\t}\n\t\tyield result.value;\n\t}\n}\n"]}
@@ -2,14 +2,18 @@
2
2
  * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
3
  * Licensed under the MIT License.
4
4
  */
5
- import { Deferred } from "@fluidframework/common-utils";
5
+ import { Deferred } from "@fluidframework/core-utils";
6
6
  import { IDocumentService, IDocumentStorageService } from "@fluidframework/driver-definitions";
7
7
  import { ISequencedDocumentMessage, ISnapshotTree, IVersion } from "@fluidframework/protocol-definitions";
8
8
  import { ReadDocumentStorageServiceBase, ReplayController } from "@fluidframework/replay-driver";
9
9
  import { IDebuggerController, IDebuggerUI } from "./fluidDebuggerUi";
10
- export declare type debuggerUIFactory = (controller: IDebuggerController) => IDebuggerUI | null;
10
+ /**
11
+ * @internal
12
+ */
13
+ export type debuggerUIFactory = (controller: IDebuggerController) => IDebuggerUI | null;
11
14
  /**
12
15
  * Replay controller that uses pop-up window to control op playback
16
+ * @internal
13
17
  */
14
18
  export declare class DebugReplayController extends ReplayController implements IDebuggerController {
15
19
  static create(createUi: debuggerUIFactory): DebugReplayController | null;
@@ -1 +1 @@
1
- {"version":3,"file":"fluidDebuggerController.d.ts","sourceRoot":"","sources":["../src/fluidDebuggerController.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fluidDebuggerController.d.ts","sourceRoot":"","sources":["../src/fluidDebuggerController.ts"],"names":[],"mappings":"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"}