@fluidframework/replay-driver 2.0.0-dev.7.4.0.215930 → 2.0.0-dev.7.4.0.216897
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/api-extractor-lint.json +13 -0
- package/api-extractor.json +0 -4
- package/api-report/replay-driver.api.md +9 -9
- package/dist/replay-driver-alpha.d.ts +31 -158
- package/dist/replay-driver-beta.d.ts +31 -158
- package/dist/replay-driver-public.d.ts +31 -158
- package/dist/replay-driver-untrimmed.d.ts +19 -0
- package/dist/replayController.cjs +2 -0
- package/dist/replayController.cjs.map +1 -1
- package/dist/replayController.d.ts +2 -0
- package/dist/replayController.d.ts.map +1 -1
- package/dist/replayDocumentService.cjs +1 -0
- package/dist/replayDocumentService.cjs.map +1 -1
- package/dist/replayDocumentService.d.ts +1 -0
- package/dist/replayDocumentService.d.ts.map +1 -1
- package/dist/replayDocumentServiceFactory.cjs +3 -0
- package/dist/replayDocumentServiceFactory.cjs.map +1 -1
- package/dist/replayDocumentServiceFactory.d.ts +3 -0
- package/dist/replayDocumentServiceFactory.d.ts.map +1 -1
- package/dist/storageImplementations.cjs +12 -0
- package/dist/storageImplementations.cjs.map +1 -1
- package/dist/storageImplementations.d.ts +13 -0
- package/dist/storageImplementations.d.ts.map +1 -1
- package/lib/replay-driver-alpha.d.ts +31 -158
- package/lib/replay-driver-beta.d.ts +31 -158
- package/lib/replay-driver-public.d.ts +31 -158
- package/lib/replay-driver-untrimmed.d.ts +19 -0
- package/lib/replayController.d.ts +2 -0
- package/lib/replayController.d.ts.map +1 -1
- package/lib/replayController.mjs +2 -0
- package/lib/replayController.mjs.map +1 -1
- package/lib/replayDocumentService.d.ts +1 -0
- package/lib/replayDocumentService.d.ts.map +1 -1
- package/lib/replayDocumentService.mjs +1 -0
- package/lib/replayDocumentService.mjs.map +1 -1
- package/lib/replayDocumentServiceFactory.d.ts +3 -0
- package/lib/replayDocumentServiceFactory.d.ts.map +1 -1
- package/lib/replayDocumentServiceFactory.mjs +3 -0
- package/lib/replayDocumentServiceFactory.mjs.map +1 -1
- package/lib/storageImplementations.d.ts +13 -0
- package/lib/storageImplementations.d.ts.map +1 -1
- package/lib/storageImplementations.mjs +12 -0
- package/lib/storageImplementations.mjs.map +1 -1
- package/package.json +9 -8
- package/src/replayController.ts +2 -0
- package/src/replayDocumentService.ts +1 -0
- package/src/replayDocumentServiceFactory.ts +3 -0
- package/src/storageImplementations.ts +13 -0
|
@@ -13,6 +13,9 @@ import { ITelemetryLoggerExt } from '@fluidframework/telemetry-utils';
|
|
|
13
13
|
import { ITree } from '@fluidframework/protocol-definitions';
|
|
14
14
|
import { IVersion } from '@fluidframework/protocol-definitions';
|
|
15
15
|
|
|
16
|
+
/**
|
|
17
|
+
* @internal
|
|
18
|
+
*/
|
|
16
19
|
export declare class FileSnapshotReader extends ReadDocumentStorageServiceBase implements IDocumentStorageService {
|
|
17
20
|
protected static readonly FileStorageVersionTreeId = "FileStorageTreeId";
|
|
18
21
|
protected docId?: string;
|
|
@@ -32,6 +35,7 @@ export declare class FileSnapshotReader extends ReadDocumentStorageServiceBase i
|
|
|
32
35
|
|
|
33
36
|
/**
|
|
34
37
|
* Structure of snapshot on disk, when we store snapshot as single file
|
|
38
|
+
* @internal
|
|
35
39
|
*/
|
|
36
40
|
export declare interface IFileSnapshot {
|
|
37
41
|
tree: ITree;
|
|
@@ -40,6 +44,9 @@ export declare interface IFileSnapshot {
|
|
|
40
44
|
};
|
|
41
45
|
}
|
|
42
46
|
|
|
47
|
+
/**
|
|
48
|
+
* @internal
|
|
49
|
+
*/
|
|
43
50
|
export declare class OpStorage extends ReadDocumentStorageServiceBase {
|
|
44
51
|
getVersions(versionId: string | null, count: number): Promise<IVersion[]>;
|
|
45
52
|
getSnapshotTree(version?: IVersion): Promise<ISnapshotTree | null>;
|
|
@@ -48,6 +55,7 @@ export declare class OpStorage extends ReadDocumentStorageServiceBase {
|
|
|
48
55
|
|
|
49
56
|
/**
|
|
50
57
|
* Partial implementation of IDocumentStorageService
|
|
58
|
+
* @internal
|
|
51
59
|
*/
|
|
52
60
|
export declare abstract class ReadDocumentStorageServiceBase implements IDocumentStorageService {
|
|
53
61
|
abstract getVersions(versionId: string | null, count: number): Promise<api.IVersion[]>;
|
|
@@ -63,6 +71,7 @@ export declare abstract class ReadDocumentStorageServiceBase implements IDocumen
|
|
|
63
71
|
* Replay controller object
|
|
64
72
|
* It controls where we start (snapshot, local file, no snapshots)
|
|
65
73
|
* As well as dispatch of ops
|
|
74
|
+
* @internal
|
|
66
75
|
*/
|
|
67
76
|
export declare abstract class ReplayController extends ReadDocumentStorageServiceBase {
|
|
68
77
|
/**
|
|
@@ -106,6 +115,7 @@ export declare abstract class ReplayController extends ReadDocumentStorageServic
|
|
|
106
115
|
* The Replay document service dummies out the snapshot and the delta storage.
|
|
107
116
|
* Delta connection simulates the socket by fetching the ops from delta storage
|
|
108
117
|
* and emitting them with a pre determined delay
|
|
118
|
+
* @internal
|
|
109
119
|
*/
|
|
110
120
|
export declare class ReplayDocumentService implements api_2.IDocumentService {
|
|
111
121
|
private readonly controller;
|
|
@@ -133,6 +143,9 @@ export declare class ReplayDocumentService implements api_2.IDocumentService {
|
|
|
133
143
|
connectToDeltaStream(client: IClient): Promise<api_2.IDocumentDeltaConnection>;
|
|
134
144
|
}
|
|
135
145
|
|
|
146
|
+
/**
|
|
147
|
+
* @internal
|
|
148
|
+
*/
|
|
136
149
|
export declare class ReplayDocumentServiceFactory implements IDocumentServiceFactory {
|
|
137
150
|
private readonly documentServiceFactory;
|
|
138
151
|
private readonly controller;
|
|
@@ -148,6 +161,9 @@ export declare class ReplayDocumentServiceFactory implements IDocumentServiceFac
|
|
|
148
161
|
createContainer(createNewSummary: ISummaryTree, resolvedUrl: IResolvedUrl, logger?: ITelemetryBaseLogger, clientIsSummarizer?: boolean): Promise<IDocumentService>;
|
|
149
162
|
}
|
|
150
163
|
|
|
164
|
+
/**
|
|
165
|
+
* @internal
|
|
166
|
+
*/
|
|
151
167
|
export declare class SnapshotStorage extends ReadDocumentStorageServiceBase {
|
|
152
168
|
protected readonly storage: IDocumentStorageService;
|
|
153
169
|
protected readonly docTree: ISnapshotTree | null;
|
|
@@ -158,6 +174,9 @@ export declare class SnapshotStorage extends ReadDocumentStorageServiceBase {
|
|
|
158
174
|
readBlob(blobId: string): Promise<ArrayBufferLike>;
|
|
159
175
|
}
|
|
160
176
|
|
|
177
|
+
/**
|
|
178
|
+
* @internal
|
|
179
|
+
*/
|
|
161
180
|
export declare class StaticStorageDocumentServiceFactory implements IDocumentServiceFactory {
|
|
162
181
|
protected readonly storage: IDocumentStorageService;
|
|
163
182
|
constructor(storage: IDocumentStorageService);
|
|
@@ -6,6 +6,7 @@ import { IDocumentService, IDocumentStorageService, ISummaryContext } from "@flu
|
|
|
6
6
|
import * as api from "@fluidframework/protocol-definitions";
|
|
7
7
|
/**
|
|
8
8
|
* Partial implementation of IDocumentStorageService
|
|
9
|
+
* @internal
|
|
9
10
|
*/
|
|
10
11
|
export declare abstract class ReadDocumentStorageServiceBase implements IDocumentStorageService {
|
|
11
12
|
abstract getVersions(versionId: string | null, count: number): Promise<api.IVersion[]>;
|
|
@@ -20,6 +21,7 @@ export declare abstract class ReadDocumentStorageServiceBase implements IDocumen
|
|
|
20
21
|
* Replay controller object
|
|
21
22
|
* It controls where we start (snapshot, local file, no snapshots)
|
|
22
23
|
* As well as dispatch of ops
|
|
24
|
+
* @internal
|
|
23
25
|
*/
|
|
24
26
|
export declare abstract class ReplayController extends ReadDocumentStorageServiceBase {
|
|
25
27
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"replayController.d.ts","sourceRoot":"","sources":["../src/replayController.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACN,gBAAgB,EAChB,uBAAuB,EACvB,eAAe,EACf,MAAM,oCAAoC,CAAC;AAC5C,OAAO,KAAK,GAAG,MAAM,sCAAsC,CAAC;AAE5D
|
|
1
|
+
{"version":3,"file":"replayController.d.ts","sourceRoot":"","sources":["../src/replayController.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACN,gBAAgB,EAChB,uBAAuB,EACvB,eAAe,EACf,MAAM,oCAAoC,CAAC;AAC5C,OAAO,KAAK,GAAG,MAAM,sCAAsC,CAAC;AAE5D;;;GAGG;AACH,8BAAsB,8BAA+B,YAAW,uBAAuB;aACtE,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;aAC7E,eAAe,CAAC,OAAO,CAAC,EAAE,GAAG,CAAC,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,GAAG,IAAI,CAAC;aAC1E,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;IAErD,wBAAwB,CACpC,OAAO,EAAE,GAAG,CAAC,YAAY,EACzB,OAAO,EAAE,eAAe,GACtB,OAAO,CAAC,MAAM,CAAC;IAIL,UAAU,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC;IAInE,eAAe,CAAC,MAAM,EAAE,GAAG,CAAC,cAAc,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC;IAInF,IAAW,aAAa,IAAI,MAAM,CAEjC;CACD;AAED;;;;;GAKG;AACH,8BAAsB,gBAAiB,SAAQ,8BAA8B;IAC5E;;;;;OAKG;aACa,WAAW,CAAC,eAAe,EAAE,gBAAgB,GAAG,OAAO,CAAC,OAAO,CAAC;IAEhF;;;OAGG;aACa,qBAAqB,IAAI,OAAO,CAAC,MAAM,CAAC;IAExD;;;;OAIG;aACa,OAAO,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAE9D;;;;;;;;OAQG;aACa,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,OAAO;IAE/E;;;;;OAKG;aACa,MAAM,CACrB,OAAO,EAAE,CAAC,EAAE,EAAE,GAAG,CAAC,yBAAyB,EAAE,KAAK,IAAI,EACtD,UAAU,EAAE,GAAG,CAAC,yBAAyB,EAAE,GACzC,OAAO,CAAC,IAAI,CAAC;CAChB"}
|
package/lib/replayController.mjs
CHANGED
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
*/
|
|
5
5
|
/**
|
|
6
6
|
* Partial implementation of IDocumentStorageService
|
|
7
|
+
* @internal
|
|
7
8
|
*/
|
|
8
9
|
export class ReadDocumentStorageServiceBase {
|
|
9
10
|
async uploadSummaryWithContext(summary, context) {
|
|
@@ -23,6 +24,7 @@ export class ReadDocumentStorageServiceBase {
|
|
|
23
24
|
* Replay controller object
|
|
24
25
|
* It controls where we start (snapshot, local file, no snapshots)
|
|
25
26
|
* As well as dispatch of ops
|
|
27
|
+
* @internal
|
|
26
28
|
*/
|
|
27
29
|
export class ReplayController extends ReadDocumentStorageServiceBase {
|
|
28
30
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"replayController.mjs","sourceRoot":"","sources":["../src/replayController.ts"],"names":[],"mappings":"AAAA;;;GAGG;AASH
|
|
1
|
+
{"version":3,"file":"replayController.mjs","sourceRoot":"","sources":["../src/replayController.ts"],"names":[],"mappings":"AAAA;;;GAGG;AASH;;;GAGG;AACH,MAAM,OAAgB,8BAA8B;IAK5C,KAAK,CAAC,wBAAwB,CACpC,OAAyB,EACzB,OAAwB;QAExB,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;IACtC,CAAC;IAEM,KAAK,CAAC,UAAU,CAAC,IAAqB;QAC5C,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;IACtC,CAAC;IAEM,KAAK,CAAC,eAAe,CAAC,MAA0B;QACtD,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;IACtC,CAAC;IAED,IAAW,aAAa;QACvB,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;IACtC,CAAC;CACD;AAED;;;;;GAKG;AACH,MAAM,OAAgB,gBAAiB,SAAQ,8BAA8B;CA2C5E","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport {\n\tIDocumentService,\n\tIDocumentStorageService,\n\tISummaryContext,\n} from \"@fluidframework/driver-definitions\";\nimport * as api from \"@fluidframework/protocol-definitions\";\n\n/**\n * Partial implementation of IDocumentStorageService\n * @internal\n */\nexport abstract class ReadDocumentStorageServiceBase implements IDocumentStorageService {\n\tpublic abstract getVersions(versionId: string | null, count: number): Promise<api.IVersion[]>;\n\tpublic abstract getSnapshotTree(version?: api.IVersion): Promise<api.ISnapshotTree | null>;\n\tpublic abstract readBlob(blobId: string): Promise<ArrayBufferLike>;\n\n\tpublic async uploadSummaryWithContext(\n\t\tsummary: api.ISummaryTree,\n\t\tcontext: ISummaryContext,\n\t): Promise<string> {\n\t\tthrow new Error(\"Invalid operation\");\n\t}\n\n\tpublic async createBlob(file: ArrayBufferLike): Promise<api.ICreateBlobResponse> {\n\t\tthrow new Error(\"Invalid operation\");\n\t}\n\n\tpublic async downloadSummary(handle: api.ISummaryHandle): Promise<api.ISummaryTree> {\n\t\tthrow new Error(\"Invalid operation\");\n\t}\n\n\tpublic get repositoryUrl(): string {\n\t\tthrow new Error(\"Invalid operation\");\n\t}\n}\n\n/**\n * Replay controller object\n * It controls where we start (snapshot, local file, no snapshots)\n * As well as dispatch of ops\n * @internal\n */\nexport abstract class ReplayController extends ReadDocumentStorageServiceBase {\n\t/**\n\t * Initialize reply controller\n\t * @param documentService - the real document service\n\t * @returns Whether or not the controller should be used.\n\t * If `false` is returned, caller should fallback to original storage.\n\t */\n\tpublic abstract initStorage(documentService: IDocumentService): Promise<boolean>;\n\n\t/**\n\t * Returns sequence number to start processing ops\n\t * Should be zero if not using snapshot, and snapshot seq# otherwise\n\t */\n\tpublic abstract getStartingOpSequence(): Promise<number>;\n\n\t/**\n\t * Returns last op number to fetch from current op\n\t * Note: this API is called while replay() is in progress - next batch of ops is downloaded in parallel\n\t * @param currentOp - current op\n\t */\n\tpublic abstract fetchTo(currentOp: number): number | undefined;\n\n\t/**\n\t * Returns true if no more ops should be processed (or downloaded for future processing).\n\t * It's called at end of each batch with latest op timestamp.\n\t * Also it's called when there are no more ops available (lastTimeStamp === undefined).\n\t * If false is returned and there are no more ops, request for more ops is made every 2 seconds.\n\t * Note: this API is called while replay() is in progress - next batch of ops is downloaded in parallel\n\t * @param currentOp - current op\n\t * @param lastTimeStamp - timestamp of last op (if more ops are available). Undefined otherwise.\n\t */\n\tpublic abstract isDoneFetch(currentOp: number, lastTimeStamp?: number): boolean;\n\n\t/**\n\t * Replay batch of ops\n\t * NOTE: new batch of ops is fetched (fetchTo() & isDoneFetch() APIs are called) while this call is in flights\n\t * @param emitter - callback to emit ops\n\t * @param fetchedOps - ops to process\n\t */\n\tpublic abstract replay(\n\t\temitter: (op: api.ISequencedDocumentMessage[]) => void,\n\t\tfetchedOps: api.ISequencedDocumentMessage[],\n\t): Promise<void>;\n}\n"]}
|
|
@@ -9,6 +9,7 @@ import { ReplayController } from "./replayController";
|
|
|
9
9
|
* The Replay document service dummies out the snapshot and the delta storage.
|
|
10
10
|
* Delta connection simulates the socket by fetching the ops from delta storage
|
|
11
11
|
* and emitting them with a pre determined delay
|
|
12
|
+
* @internal
|
|
12
13
|
*/
|
|
13
14
|
export declare class ReplayDocumentService implements api.IDocumentService {
|
|
14
15
|
private readonly controller;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"replayDocumentService.d.ts","sourceRoot":"","sources":["../src/replayDocumentService.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,GAAG,MAAM,oCAAoC,CAAC;AAC1D,OAAO,EAAE,OAAO,EAAE,MAAM,sCAAsC,CAAC;AAE/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAGtD
|
|
1
|
+
{"version":3,"file":"replayDocumentService.d.ts","sourceRoot":"","sources":["../src/replayDocumentService.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,GAAG,MAAM,oCAAoC,CAAC;AAC1D,OAAO,EAAE,OAAO,EAAE,MAAM,sCAAsC,CAAC;AAE/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAGtD;;;;;GAKG;AAEH,qBAAa,qBAAsB,YAAW,GAAG,CAAC,gBAAgB;IAkBhE,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,YAAY;WAlBV,MAAM,CACzB,eAAe,EAAE,GAAG,CAAC,gBAAgB,EACrC,UAAU,EAAE,gBAAgB,GAC1B,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC;gBAcd,UAAU,EAAE,GAAG,CAAC,uBAAuB,EACvC,YAAY,EAAE,GAAG,CAAC,wBAAwB;IAGrD,OAAO;IAGd,IAAW,WAAW,IAAI,GAAG,CAAC,YAAY,CAEzC;IAED;;;OAGG;IACU,gBAAgB,IAAI,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC;IAIrE;;;OAGG;IACU,qBAAqB,IAAI,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC;IAI/E;;;;;OAKG;IACU,oBAAoB,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC;CAGzF"}
|
|
@@ -8,6 +8,7 @@ import { ReplayDocumentDeltaConnection } from "./replayDocumentDeltaConnection.m
|
|
|
8
8
|
* The Replay document service dummies out the snapshot and the delta storage.
|
|
9
9
|
* Delta connection simulates the socket by fetching the ops from delta storage
|
|
10
10
|
* and emitting them with a pre determined delay
|
|
11
|
+
* @internal
|
|
11
12
|
*/
|
|
12
13
|
// eslint-disable-next-line import/namespace
|
|
13
14
|
export class ReplayDocumentService {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"replayDocumentService.mjs","sourceRoot":"","sources":["../src/replayDocumentService.ts"],"names":[],"mappings":"AAAA;;;GAGG;OAII,EAAE,wBAAwB,EAAE;OAE5B,EAAE,6BAA6B,EAAE;AAExC
|
|
1
|
+
{"version":3,"file":"replayDocumentService.mjs","sourceRoot":"","sources":["../src/replayDocumentService.ts"],"names":[],"mappings":"AAAA;;;GAGG;OAII,EAAE,wBAAwB,EAAE;OAE5B,EAAE,6BAA6B,EAAE;AAExC;;;;;GAKG;AACH,4CAA4C;AAC5C,MAAM,OAAO,qBAAqB;IAC1B,MAAM,CAAC,KAAK,CAAC,MAAM,CACzB,eAAqC,EACrC,UAA4B;QAE5B,MAAM,aAAa,GAAG,MAAM,UAAU,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC;QACpE,IAAI,CAAC,aAAa,EAAE;YACnB,OAAO,eAAe,CAAC;SACvB;QAED,MAAM,eAAe,GAAG,6BAA6B,CAAC,MAAM,CAC3D,MAAM,eAAe,CAAC,qBAAqB,EAAE,EAC7C,UAAU,CACV,CAAC;QACF,OAAO,IAAI,qBAAqB,CAAC,UAAU,EAAE,eAAe,CAAC,CAAC;IAC/D,CAAC;IAED,YACkB,UAAuC,EACvC,YAA0C;QAD1C,eAAU,GAAV,UAAU,CAA6B;QACvC,iBAAY,GAAZ,YAAY,CAA8B;IACzD,CAAC;IAEG,OAAO,KAAI,CAAC;IAEnB,8EAA8E;IAC9E,IAAW,WAAW;QACrB,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;IACpC,CAAC;IAED;;;OAGG;IACI,KAAK,CAAC,gBAAgB;QAC5B,OAAO,IAAI,CAAC,UAAU,CAAC;IACxB,CAAC;IAED;;;OAGG;IACI,KAAK,CAAC,qBAAqB;QACjC,OAAO,IAAI,wBAAwB,EAAE,CAAC;IACvC,CAAC;IAED;;;;;OAKG;IACI,KAAK,CAAC,oBAAoB,CAAC,MAAe;QAChD,OAAO,IAAI,CAAC,YAAY,CAAC;IAC1B,CAAC;CACD","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport * as api from \"@fluidframework/driver-definitions\";\nimport { IClient } from \"@fluidframework/protocol-definitions\";\nimport { EmptyDeltaStorageService } from \"./emptyDeltaStorageService\";\nimport { ReplayController } from \"./replayController\";\nimport { ReplayDocumentDeltaConnection } from \"./replayDocumentDeltaConnection\";\n\n/**\n * The Replay document service dummies out the snapshot and the delta storage.\n * Delta connection simulates the socket by fetching the ops from delta storage\n * and emitting them with a pre determined delay\n * @internal\n */\n// eslint-disable-next-line import/namespace\nexport class ReplayDocumentService implements api.IDocumentService {\n\tpublic static async create(\n\t\tdocumentService: api.IDocumentService,\n\t\tcontroller: ReplayController,\n\t): Promise<api.IDocumentService> {\n\t\tconst useController = await controller.initStorage(documentService);\n\t\tif (!useController) {\n\t\t\treturn documentService;\n\t\t}\n\n\t\tconst deltaConnection = ReplayDocumentDeltaConnection.create(\n\t\t\tawait documentService.connectToDeltaStorage(),\n\t\t\tcontroller,\n\t\t);\n\t\treturn new ReplayDocumentService(controller, deltaConnection);\n\t}\n\n\tconstructor(\n\t\tprivate readonly controller: api.IDocumentStorageService,\n\t\tprivate readonly deltaStorage: api.IDocumentDeltaConnection,\n\t) {}\n\n\tpublic dispose() {}\n\n\t// TODO: Issue-2109 Implement detach container api or put appropriate comment.\n\tpublic get resolvedUrl(): api.IResolvedUrl {\n\t\tthrow new Error(\"Not implemented\");\n\t}\n\n\t/**\n\t * Connects to a storage endpoint for snapshot service and blobs.\n\t * @returns returns the dummy document storage service for replay driver.\n\t */\n\tpublic async connectToStorage(): Promise<api.IDocumentStorageService> {\n\t\treturn this.controller;\n\t}\n\n\t/**\n\t * Connects to a delta storage endpoint for getting ops between a range.\n\t * @returns returns the dummy document delta storage service for replay driver.\n\t */\n\tpublic async connectToDeltaStorage(): Promise<api.IDocumentDeltaStorageService> {\n\t\treturn new EmptyDeltaStorageService();\n\t}\n\n\t/**\n\t * Connects to a delta storage endpoint of provided documentService to get ops and then replaying\n\t * them so as to mimic a delta stream endpoint.\n\t * @param client - Client that connects to socket.\n\t * @returns returns the delta stream service which replay ops from --from to --to arguments.\n\t */\n\tpublic async connectToDeltaStream(client: IClient): Promise<api.IDocumentDeltaConnection> {\n\t\treturn this.deltaStorage;\n\t}\n}\n"]}
|
|
@@ -6,6 +6,9 @@ import { IDocumentService, IDocumentServiceFactory, IResolvedUrl } from "@fluidf
|
|
|
6
6
|
import { ISummaryTree } from "@fluidframework/protocol-definitions";
|
|
7
7
|
import { ITelemetryBaseLogger } from "@fluidframework/core-interfaces";
|
|
8
8
|
import { ReplayController } from "./replayController";
|
|
9
|
+
/**
|
|
10
|
+
* @internal
|
|
11
|
+
*/
|
|
9
12
|
export declare class ReplayDocumentServiceFactory implements IDocumentServiceFactory {
|
|
10
13
|
private readonly documentServiceFactory;
|
|
11
14
|
private readonly controller;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"replayDocumentServiceFactory.d.ts","sourceRoot":"","sources":["../src/replayDocumentServiceFactory.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACN,gBAAgB,EAChB,uBAAuB,EACvB,YAAY,EACZ,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,sCAAsC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AAEvE,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAItD,qBAAa,4BAA6B,YAAW,uBAAuB;IAa1E,OAAO,CAAC,QAAQ,CAAC,sBAAsB;IACvC,OAAO,CAAC,QAAQ,CAAC,UAAU;WAbd,MAAM,CACnB,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,MAAM,EACV,sBAAsB,EAAE,uBAAuB;gBAS9B,sBAAsB,EAAE,uBAAuB,EAC/C,UAAU,EAAE,gBAAgB;IAG9C;;;;;OAKG;IACU,qBAAqB,CACjC,WAAW,EAAE,YAAY,EACzB,MAAM,CAAC,EAAE,oBAAoB,EAC7B,kBAAkB,CAAC,EAAE,OAAO,GAC1B,OAAO,CAAC,gBAAgB,CAAC;IAmBf,eAAe,CAC3B,gBAAgB,EAAE,YAAY,EAC9B,WAAW,EAAE,YAAY,EACzB,MAAM,CAAC,EAAE,oBAAoB,EAC7B,kBAAkB,CAAC,EAAE,OAAO,GAC1B,OAAO,CAAC,gBAAgB,CAAC;CAG5B"}
|
|
1
|
+
{"version":3,"file":"replayDocumentServiceFactory.d.ts","sourceRoot":"","sources":["../src/replayDocumentServiceFactory.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACN,gBAAgB,EAChB,uBAAuB,EACvB,YAAY,EACZ,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,sCAAsC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AAEvE,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAItD;;GAEG;AACH,qBAAa,4BAA6B,YAAW,uBAAuB;IAa1E,OAAO,CAAC,QAAQ,CAAC,sBAAsB;IACvC,OAAO,CAAC,QAAQ,CAAC,UAAU;WAbd,MAAM,CACnB,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,MAAM,EACV,sBAAsB,EAAE,uBAAuB;gBAS9B,sBAAsB,EAAE,uBAAuB,EAC/C,UAAU,EAAE,gBAAgB;IAG9C;;;;;OAKG;IACU,qBAAqB,CACjC,WAAW,EAAE,YAAY,EACzB,MAAM,CAAC,EAAE,oBAAoB,EAC7B,kBAAkB,CAAC,EAAE,OAAO,GAC1B,OAAO,CAAC,gBAAgB,CAAC;IAmBf,eAAe,CAC3B,gBAAgB,EAAE,YAAY,EAC9B,WAAW,EAAE,YAAY,EACzB,MAAM,CAAC,EAAE,oBAAoB,EAC7B,kBAAkB,CAAC,EAAE,OAAO,GAC1B,OAAO,CAAC,gBAAgB,CAAC;CAG5B"}
|
|
@@ -5,6 +5,9 @@
|
|
|
5
5
|
import { createChildLogger } from "@fluidframework/telemetry-utils";
|
|
6
6
|
import { ReplayControllerStatic } from "./replayDocumentDeltaConnection.mjs";
|
|
7
7
|
import { ReplayDocumentService } from "./replayDocumentService.mjs";
|
|
8
|
+
/**
|
|
9
|
+
* @internal
|
|
10
|
+
*/
|
|
8
11
|
export class ReplayDocumentServiceFactory {
|
|
9
12
|
static create(from, to, documentServiceFactory) {
|
|
10
13
|
return new ReplayDocumentServiceFactory(documentServiceFactory, new ReplayControllerStatic(from, to));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"replayDocumentServiceFactory.mjs","sourceRoot":"","sources":["../src/replayDocumentServiceFactory.ts"],"names":[],"mappings":"AAAA;;;GAGG;OASI,EAAE,iBAAiB,EAAE,MAAM,iCAAiC;OAE5D,EAAE,sBAAsB,EAAE;OAC1B,EAAE,qBAAqB,EAAE;AAEhC,MAAM,OAAO,4BAA4B;IACjC,MAAM,CAAC,MAAM,CACnB,IAAY,EACZ,EAAU,EACV,sBAA+C;QAE/C,OAAO,IAAI,4BAA4B,CACtC,sBAAsB,EACtB,IAAI,sBAAsB,CAAC,IAAI,EAAE,EAAE,CAAC,CACpC,CAAC;IACH,CAAC;IAED,YACkB,sBAA+C,EAC/C,UAA4B;QAD5B,2BAAsB,GAAtB,sBAAsB,CAAyB;QAC/C,eAAU,GAAV,UAAU,CAAkB;IAC3C,CAAC;IAEJ;;;;;OAKG;IACI,KAAK,CAAC,qBAAqB,CACjC,WAAyB,EACzB,MAA6B,EAC7B,kBAA4B;QAE5B,iEAAiE;QACjE,wGAAwG;QACxG,MAAM,YAAY,GAAG,iBAAiB,CAAC;YACtC,MAAM;YACN,UAAU,EAAE,EAAE,GAAG,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE;SACvC,CAAC,CAAC;QAEH,OAAO,qBAAqB,CAAC,MAAM,CAClC,MAAM,IAAI,CAAC,sBAAsB,CAAC,qBAAqB,CACtD,WAAW,EACX,YAAY,EACZ,kBAAkB,CAClB,EACD,IAAI,CAAC,UAAU,CACf,CAAC;IACH,CAAC;IAED,8EAA8E;IACvE,KAAK,CAAC,eAAe,CAC3B,gBAA8B,EAC9B,WAAyB,EACzB,MAA6B,EAC7B,kBAA4B;QAE5B,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;IACpC,CAAC;CACD","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport {\n\tIDocumentService,\n\tIDocumentServiceFactory,\n\tIResolvedUrl,\n} from \"@fluidframework/driver-definitions\";\nimport { ISummaryTree } from \"@fluidframework/protocol-definitions\";\nimport { ITelemetryBaseLogger } from \"@fluidframework/core-interfaces\";\nimport { createChildLogger } from \"@fluidframework/telemetry-utils\";\nimport { ReplayController } from \"./replayController\";\nimport { ReplayControllerStatic } from \"./replayDocumentDeltaConnection\";\nimport { ReplayDocumentService } from \"./replayDocumentService\";\n\nexport class ReplayDocumentServiceFactory implements IDocumentServiceFactory {\n\tpublic static create(\n\t\tfrom: number,\n\t\tto: number,\n\t\tdocumentServiceFactory: IDocumentServiceFactory,\n\t) {\n\t\treturn new ReplayDocumentServiceFactory(\n\t\t\tdocumentServiceFactory,\n\t\t\tnew ReplayControllerStatic(from, to),\n\t\t);\n\t}\n\n\tpublic constructor(\n\t\tprivate readonly documentServiceFactory: IDocumentServiceFactory,\n\t\tprivate readonly controller: ReplayController,\n\t) {}\n\n\t/**\n\t * Creates a replay document service which uses the document service of provided\n\t * documentServiceFactory for connecting to delta stream endpoint.\n\t * @param resolvedUrl - URL to be used for connecting to endpoints.\n\t * @returns returns the requested document service\n\t */\n\tpublic async createDocumentService(\n\t\tresolvedUrl: IResolvedUrl,\n\t\tlogger?: ITelemetryBaseLogger,\n\t\tclientIsSummarizer?: boolean,\n\t): Promise<IDocumentService> {\n\t\t// Always include isReplay: true on events for the Replay Driver.\n\t\t// It's used in testing/debugging scenarios, so we want to be able to filter these events out sometimes.\n\t\tconst replayLogger = createChildLogger({\n\t\t\tlogger,\n\t\t\tproperties: { all: { isReplay: true } },\n\t\t});\n\n\t\treturn ReplayDocumentService.create(\n\t\t\tawait this.documentServiceFactory.createDocumentService(\n\t\t\t\tresolvedUrl,\n\t\t\t\treplayLogger,\n\t\t\t\tclientIsSummarizer,\n\t\t\t),\n\t\t\tthis.controller,\n\t\t);\n\t}\n\n\t// TODO: Issue-2109 Implement detach container api or put appropriate comment.\n\tpublic async createContainer(\n\t\tcreateNewSummary: ISummaryTree,\n\t\tresolvedUrl: IResolvedUrl,\n\t\tlogger?: ITelemetryBaseLogger,\n\t\tclientIsSummarizer?: boolean,\n\t): Promise<IDocumentService> {\n\t\tthrow new Error(\"Not implemented\");\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"file":"replayDocumentServiceFactory.mjs","sourceRoot":"","sources":["../src/replayDocumentServiceFactory.ts"],"names":[],"mappings":"AAAA;;;GAGG;OASI,EAAE,iBAAiB,EAAE,MAAM,iCAAiC;OAE5D,EAAE,sBAAsB,EAAE;OAC1B,EAAE,qBAAqB,EAAE;AAEhC;;GAEG;AACH,MAAM,OAAO,4BAA4B;IACjC,MAAM,CAAC,MAAM,CACnB,IAAY,EACZ,EAAU,EACV,sBAA+C;QAE/C,OAAO,IAAI,4BAA4B,CACtC,sBAAsB,EACtB,IAAI,sBAAsB,CAAC,IAAI,EAAE,EAAE,CAAC,CACpC,CAAC;IACH,CAAC;IAED,YACkB,sBAA+C,EAC/C,UAA4B;QAD5B,2BAAsB,GAAtB,sBAAsB,CAAyB;QAC/C,eAAU,GAAV,UAAU,CAAkB;IAC3C,CAAC;IAEJ;;;;;OAKG;IACI,KAAK,CAAC,qBAAqB,CACjC,WAAyB,EACzB,MAA6B,EAC7B,kBAA4B;QAE5B,iEAAiE;QACjE,wGAAwG;QACxG,MAAM,YAAY,GAAG,iBAAiB,CAAC;YACtC,MAAM;YACN,UAAU,EAAE,EAAE,GAAG,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE;SACvC,CAAC,CAAC;QAEH,OAAO,qBAAqB,CAAC,MAAM,CAClC,MAAM,IAAI,CAAC,sBAAsB,CAAC,qBAAqB,CACtD,WAAW,EACX,YAAY,EACZ,kBAAkB,CAClB,EACD,IAAI,CAAC,UAAU,CACf,CAAC;IACH,CAAC;IAED,8EAA8E;IACvE,KAAK,CAAC,eAAe,CAC3B,gBAA8B,EAC9B,WAAyB,EACzB,MAA6B,EAC7B,kBAA4B;QAE5B,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;IACpC,CAAC;CACD","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport {\n\tIDocumentService,\n\tIDocumentServiceFactory,\n\tIResolvedUrl,\n} from \"@fluidframework/driver-definitions\";\nimport { ISummaryTree } from \"@fluidframework/protocol-definitions\";\nimport { ITelemetryBaseLogger } from \"@fluidframework/core-interfaces\";\nimport { createChildLogger } from \"@fluidframework/telemetry-utils\";\nimport { ReplayController } from \"./replayController\";\nimport { ReplayControllerStatic } from \"./replayDocumentDeltaConnection\";\nimport { ReplayDocumentService } from \"./replayDocumentService\";\n\n/**\n * @internal\n */\nexport class ReplayDocumentServiceFactory implements IDocumentServiceFactory {\n\tpublic static create(\n\t\tfrom: number,\n\t\tto: number,\n\t\tdocumentServiceFactory: IDocumentServiceFactory,\n\t) {\n\t\treturn new ReplayDocumentServiceFactory(\n\t\t\tdocumentServiceFactory,\n\t\t\tnew ReplayControllerStatic(from, to),\n\t\t);\n\t}\n\n\tpublic constructor(\n\t\tprivate readonly documentServiceFactory: IDocumentServiceFactory,\n\t\tprivate readonly controller: ReplayController,\n\t) {}\n\n\t/**\n\t * Creates a replay document service which uses the document service of provided\n\t * documentServiceFactory for connecting to delta stream endpoint.\n\t * @param resolvedUrl - URL to be used for connecting to endpoints.\n\t * @returns returns the requested document service\n\t */\n\tpublic async createDocumentService(\n\t\tresolvedUrl: IResolvedUrl,\n\t\tlogger?: ITelemetryBaseLogger,\n\t\tclientIsSummarizer?: boolean,\n\t): Promise<IDocumentService> {\n\t\t// Always include isReplay: true on events for the Replay Driver.\n\t\t// It's used in testing/debugging scenarios, so we want to be able to filter these events out sometimes.\n\t\tconst replayLogger = createChildLogger({\n\t\t\tlogger,\n\t\t\tproperties: { all: { isReplay: true } },\n\t\t});\n\n\t\treturn ReplayDocumentService.create(\n\t\t\tawait this.documentServiceFactory.createDocumentService(\n\t\t\t\tresolvedUrl,\n\t\t\t\treplayLogger,\n\t\t\t\tclientIsSummarizer,\n\t\t\t),\n\t\t\tthis.controller,\n\t\t);\n\t}\n\n\t// TODO: Issue-2109 Implement detach container api or put appropriate comment.\n\tpublic async createContainer(\n\t\tcreateNewSummary: ISummaryTree,\n\t\tresolvedUrl: IResolvedUrl,\n\t\tlogger?: ITelemetryBaseLogger,\n\t\tclientIsSummarizer?: boolean,\n\t): Promise<IDocumentService> {\n\t\tthrow new Error(\"Not implemented\");\n\t}\n}\n"]}
|
|
@@ -8,6 +8,7 @@ import { ITelemetryLoggerExt } from "@fluidframework/telemetry-utils";
|
|
|
8
8
|
import { ReadDocumentStorageServiceBase } from "./replayController";
|
|
9
9
|
/**
|
|
10
10
|
* Structure of snapshot on disk, when we store snapshot as single file
|
|
11
|
+
* @internal
|
|
11
12
|
*/
|
|
12
13
|
export interface IFileSnapshot {
|
|
13
14
|
tree: ITree;
|
|
@@ -15,6 +16,9 @@ export interface IFileSnapshot {
|
|
|
15
16
|
[key: string]: ITree;
|
|
16
17
|
};
|
|
17
18
|
}
|
|
19
|
+
/**
|
|
20
|
+
* @internal
|
|
21
|
+
*/
|
|
18
22
|
export declare class FileSnapshotReader extends ReadDocumentStorageServiceBase implements IDocumentStorageService {
|
|
19
23
|
protected static readonly FileStorageVersionTreeId = "FileStorageTreeId";
|
|
20
24
|
protected docId?: string;
|
|
@@ -31,6 +35,9 @@ export declare class FileSnapshotReader extends ReadDocumentStorageServiceBase i
|
|
|
31
35
|
getSnapshotTree(versionRequested?: IVersion): Promise<ISnapshotTree | null>;
|
|
32
36
|
readBlob(blobId: string): Promise<ArrayBufferLike>;
|
|
33
37
|
}
|
|
38
|
+
/**
|
|
39
|
+
* @internal
|
|
40
|
+
*/
|
|
34
41
|
export declare class SnapshotStorage extends ReadDocumentStorageServiceBase {
|
|
35
42
|
protected readonly storage: IDocumentStorageService;
|
|
36
43
|
protected readonly docTree: ISnapshotTree | null;
|
|
@@ -40,6 +47,9 @@ export declare class SnapshotStorage extends ReadDocumentStorageServiceBase {
|
|
|
40
47
|
getSnapshotTree(versionRequested?: IVersion): Promise<ISnapshotTree | null>;
|
|
41
48
|
readBlob(blobId: string): Promise<ArrayBufferLike>;
|
|
42
49
|
}
|
|
50
|
+
/**
|
|
51
|
+
* @internal
|
|
52
|
+
*/
|
|
43
53
|
export declare class OpStorage extends ReadDocumentStorageServiceBase {
|
|
44
54
|
getVersions(versionId: string | null, count: number): Promise<IVersion[]>;
|
|
45
55
|
getSnapshotTree(version?: IVersion): Promise<ISnapshotTree | null>;
|
|
@@ -54,6 +64,9 @@ export declare class StaticStorageDocumentService implements IDocumentService {
|
|
|
54
64
|
connectToDeltaStorage(): Promise<IDocumentDeltaStorageService>;
|
|
55
65
|
connectToDeltaStream(client: IClient): Promise<IDocumentDeltaConnection>;
|
|
56
66
|
}
|
|
67
|
+
/**
|
|
68
|
+
* @internal
|
|
69
|
+
*/
|
|
57
70
|
export declare class StaticStorageDocumentServiceFactory implements IDocumentServiceFactory {
|
|
58
71
|
protected readonly storage: IDocumentStorageService;
|
|
59
72
|
constructor(storage: IDocumentStorageService);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"storageImplementations.d.ts","sourceRoot":"","sources":["../src/storageImplementations.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EACN,wBAAwB,EACxB,4BAA4B,EAC5B,gBAAgB,EAChB,uBAAuB,EACvB,uBAAuB,EACvB,YAAY,EACZ,MAAM,oCAAoC,CAAC;AAE5C,OAAO,EACN,OAAO,EACP,aAAa,EACb,KAAK,EACL,QAAQ,EACR,YAAY,EACZ,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAEtE,OAAO,EAAE,8BAA8B,EAAE,MAAM,oBAAoB,CAAC;AAEpE
|
|
1
|
+
{"version":3,"file":"storageImplementations.d.ts","sourceRoot":"","sources":["../src/storageImplementations.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,6 +6,9 @@ import { assert } from "@fluidframework/core-utils";
|
|
|
6
6
|
import { buildSnapshotTree } from "@fluidframework/driver-utils";
|
|
7
7
|
import { EmptyDeltaStorageService } from "./emptyDeltaStorageService.mjs";
|
|
8
8
|
import { ReadDocumentStorageServiceBase } from "./replayController.mjs";
|
|
9
|
+
/**
|
|
10
|
+
* @internal
|
|
11
|
+
*/
|
|
9
12
|
export class FileSnapshotReader extends ReadDocumentStorageServiceBase {
|
|
10
13
|
constructor(json) {
|
|
11
14
|
super();
|
|
@@ -55,6 +58,9 @@ export class FileSnapshotReader extends ReadDocumentStorageServiceBase {
|
|
|
55
58
|
}
|
|
56
59
|
// IVersion.treeId used to communicate between getVersions() & getSnapshotTree() calls to indicate IVersion is ours.
|
|
57
60
|
FileSnapshotReader.FileStorageVersionTreeId = "FileStorageTreeId";
|
|
61
|
+
/**
|
|
62
|
+
* @internal
|
|
63
|
+
*/
|
|
58
64
|
export class SnapshotStorage extends ReadDocumentStorageServiceBase {
|
|
59
65
|
constructor(storage, docTree) {
|
|
60
66
|
super();
|
|
@@ -81,6 +87,9 @@ export class SnapshotStorage extends ReadDocumentStorageServiceBase {
|
|
|
81
87
|
return this.storage.readBlob(blobId);
|
|
82
88
|
}
|
|
83
89
|
}
|
|
90
|
+
/**
|
|
91
|
+
* @internal
|
|
92
|
+
*/
|
|
84
93
|
export class OpStorage extends ReadDocumentStorageServiceBase {
|
|
85
94
|
async getVersions(versionId, count) {
|
|
86
95
|
return [];
|
|
@@ -109,6 +118,9 @@ export class StaticStorageDocumentService {
|
|
|
109
118
|
return new Promise(() => { });
|
|
110
119
|
}
|
|
111
120
|
}
|
|
121
|
+
/**
|
|
122
|
+
* @internal
|
|
123
|
+
*/
|
|
112
124
|
export class StaticStorageDocumentServiceFactory {
|
|
113
125
|
constructor(storage) {
|
|
114
126
|
this.storage = storage;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"storageImplementations.mjs","sourceRoot":"","sources":["../src/storageImplementations.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 } from \"@fluidframework/core-utils\";\nimport {\n\tIDocumentDeltaConnection,\n\tIDocumentDeltaStorageService,\n\tIDocumentService,\n\tIDocumentServiceFactory,\n\tIDocumentStorageService,\n\tIResolvedUrl,\n} from \"@fluidframework/driver-definitions\";\nimport { buildSnapshotTree } from \"@fluidframework/driver-utils\";\nimport {\n\tIClient,\n\tISnapshotTree,\n\tITree,\n\tIVersion,\n\tISummaryTree,\n} from \"@fluidframework/protocol-definitions\";\nimport { ITelemetryLoggerExt } from \"@fluidframework/telemetry-utils\";\nimport { EmptyDeltaStorageService } from \"./emptyDeltaStorageService\";\nimport { ReadDocumentStorageServiceBase } from \"./replayController\";\n\n/**\n * Structure of snapshot on disk, when we store snapshot as single file\n */\nexport interface IFileSnapshot {\n\ttree: ITree;\n\tcommits: { [key: string]: ITree };\n}\n\nexport class FileSnapshotReader\n\textends ReadDocumentStorageServiceBase\n\timplements IDocumentStorageService\n{\n\t// IVersion.treeId used to communicate between getVersions() & getSnapshotTree() calls to indicate IVersion is ours.\n\tprotected static readonly FileStorageVersionTreeId = \"FileStorageTreeId\";\n\n\tprotected docId?: string;\n\tprotected docTree: ISnapshotTree;\n\tprotected blobs: Map<string, ArrayBufferLike>;\n\tprotected readonly commits: { [key: string]: ITree } = {};\n\tprotected readonly trees: { [key: string]: ISnapshotTree } = {};\n\n\tpublic constructor(json: IFileSnapshot) {\n\t\tsuper();\n\t\tthis.commits = json.commits;\n\n\t\tthis.blobs = new Map<string, ArrayBufferLike>();\n\t\tthis.docTree = buildSnapshotTree(json.tree.entries, this.blobs);\n\t}\n\n\tpublic async getVersions(versionId: string | null, count: number): Promise<IVersion[]> {\n\t\tif (this.docId === undefined || this.docId === versionId || versionId === null) {\n\t\t\tif (versionId !== null) {\n\t\t\t\tthis.docId = versionId;\n\t\t\t}\n\t\t\treturn [{ id: \"latest\", treeId: \"\" }];\n\t\t}\n\n\t\tif (this.commits[versionId] !== undefined) {\n\t\t\treturn [{ id: versionId, treeId: FileSnapshotReader.FileStorageVersionTreeId }];\n\t\t}\n\t\tthrow new Error(`Unknown version ID: ${versionId}`);\n\t}\n\n\tpublic async getSnapshotTree(versionRequested?: IVersion): Promise<ISnapshotTree | null> {\n\t\tif (!versionRequested || versionRequested.id === \"latest\") {\n\t\t\treturn this.docTree;\n\t\t}\n\t\tif (versionRequested.treeId !== FileSnapshotReader.FileStorageVersionTreeId) {\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-base-to-string\n\t\t\tthrow new Error(`Unknown version id: ${versionRequested}`);\n\t\t}\n\n\t\tlet snapshotTree = this.trees[versionRequested.id];\n\t\tif (snapshotTree === undefined) {\n\t\t\tconst tree = this.commits[versionRequested.id];\n\t\t\tif (tree === undefined) {\n\t\t\t\tthrow new Error(`Can't find version ${versionRequested.id}`);\n\t\t\t}\n\n\t\t\tthis.trees[versionRequested.id] = snapshotTree = buildSnapshotTree(\n\t\t\t\ttree.entries,\n\t\t\t\tthis.blobs,\n\t\t\t);\n\t\t}\n\t\treturn snapshotTree;\n\t}\n\n\tpublic async readBlob(blobId: string): Promise<ArrayBufferLike> {\n\t\tconst blob = this.blobs.get(blobId);\n\t\tif (blob !== undefined) {\n\t\t\treturn blob;\n\t\t}\n\t\tthrow new Error(`Unknown blob ID: ${blobId}`);\n\t}\n}\n\nexport class SnapshotStorage extends ReadDocumentStorageServiceBase {\n\tprotected docId?: string;\n\n\tconstructor(\n\t\tprotected readonly storage: IDocumentStorageService,\n\t\tprotected readonly docTree: ISnapshotTree | null,\n\t) {\n\t\tsuper();\n\t\tassert(!!this.docTree, 0x0b0 /* \"Missing document snapshot tree!\" */);\n\t}\n\n\tpublic async getVersions(versionId: string | null, count: number): Promise<IVersion[]> {\n\t\tif (this.docId === undefined || this.docId === versionId || versionId === null) {\n\t\t\tif (versionId !== null) {\n\t\t\t\tthis.docId = versionId;\n\t\t\t}\n\t\t\treturn [{ id: \"latest\", treeId: \"\" }];\n\t\t}\n\t\treturn this.storage.getVersions(versionId, count);\n\t}\n\n\tpublic async getSnapshotTree(versionRequested?: IVersion): Promise<ISnapshotTree | null> {\n\t\tif (versionRequested && versionRequested.id !== \"latest\") {\n\t\t\treturn this.storage.getSnapshotTree(versionRequested);\n\t\t}\n\n\t\treturn this.docTree;\n\t}\n\n\tpublic async readBlob(blobId: string): Promise<ArrayBufferLike> {\n\t\treturn this.storage.readBlob(blobId);\n\t}\n}\n\nexport class OpStorage extends ReadDocumentStorageServiceBase {\n\tpublic async getVersions(versionId: string | null, count: number): Promise<IVersion[]> {\n\t\treturn [];\n\t}\n\n\tpublic async getSnapshotTree(version?: IVersion): Promise<ISnapshotTree | null> {\n\t\tthrow new Error(\"no snapshot tree should be asked when playing ops\");\n\t}\n\n\tpublic async readBlob(blobId: string): Promise<ArrayBufferLike> {\n\t\tthrow new Error(`Unknown blob ID: ${blobId}`);\n\t}\n}\n\nexport class StaticStorageDocumentService implements IDocumentService {\n\tconstructor(\n\t\tpublic readonly resolvedUrl: IResolvedUrl,\n\t\tprivate readonly storage: IDocumentStorageService,\n\t) {}\n\n\tpublic dispose() {}\n\n\tpublic async connectToStorage(): Promise<IDocumentStorageService> {\n\t\treturn this.storage;\n\t}\n\n\tpublic async connectToDeltaStorage(): Promise<IDocumentDeltaStorageService> {\n\t\treturn new EmptyDeltaStorageService();\n\t}\n\n\tpublic async connectToDeltaStream(client: IClient): Promise<IDocumentDeltaConnection> {\n\t\t// We have no delta stream, so make it not return forever...\n\t\treturn new Promise(() => {});\n\t}\n}\n\nexport class StaticStorageDocumentServiceFactory implements IDocumentServiceFactory {\n\tpublic constructor(protected readonly storage: IDocumentStorageService) {}\n\n\tpublic async createDocumentService(\n\t\tfileURL: IResolvedUrl,\n\t\tlogger?: ITelemetryLoggerExt,\n\t\tclientIsSummarizer?: boolean,\n\t): Promise<IDocumentService> {\n\t\treturn new StaticStorageDocumentService(fileURL, this.storage);\n\t}\n\n\t// TODO: Issue-2109 Implement detach container api or put appropriate comment.\n\tpublic async createContainer(\n\t\tcreateNewSummary: ISummaryTree,\n\t\tresolvedUrl: IResolvedUrl,\n\t\tlogger: ITelemetryLoggerExt,\n\t\tclientIsSummarizer?: boolean,\n\t): Promise<IDocumentService> {\n\t\tthrow new Error(\"Not implemented\");\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"file":"storageImplementations.mjs","sourceRoot":"","sources":["../src/storageImplementations.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 } from \"@fluidframework/core-utils\";\nimport {\n\tIDocumentDeltaConnection,\n\tIDocumentDeltaStorageService,\n\tIDocumentService,\n\tIDocumentServiceFactory,\n\tIDocumentStorageService,\n\tIResolvedUrl,\n} from \"@fluidframework/driver-definitions\";\nimport { buildSnapshotTree } from \"@fluidframework/driver-utils\";\nimport {\n\tIClient,\n\tISnapshotTree,\n\tITree,\n\tIVersion,\n\tISummaryTree,\n} from \"@fluidframework/protocol-definitions\";\nimport { ITelemetryLoggerExt } from \"@fluidframework/telemetry-utils\";\nimport { EmptyDeltaStorageService } from \"./emptyDeltaStorageService\";\nimport { ReadDocumentStorageServiceBase } from \"./replayController\";\n\n/**\n * Structure of snapshot on disk, when we store snapshot as single file\n * @internal\n */\nexport interface IFileSnapshot {\n\ttree: ITree;\n\tcommits: { [key: string]: ITree };\n}\n\n/**\n * @internal\n */\nexport class FileSnapshotReader\n\textends ReadDocumentStorageServiceBase\n\timplements IDocumentStorageService\n{\n\t// IVersion.treeId used to communicate between getVersions() & getSnapshotTree() calls to indicate IVersion is ours.\n\tprotected static readonly FileStorageVersionTreeId = \"FileStorageTreeId\";\n\n\tprotected docId?: string;\n\tprotected docTree: ISnapshotTree;\n\tprotected blobs: Map<string, ArrayBufferLike>;\n\tprotected readonly commits: { [key: string]: ITree } = {};\n\tprotected readonly trees: { [key: string]: ISnapshotTree } = {};\n\n\tpublic constructor(json: IFileSnapshot) {\n\t\tsuper();\n\t\tthis.commits = json.commits;\n\n\t\tthis.blobs = new Map<string, ArrayBufferLike>();\n\t\tthis.docTree = buildSnapshotTree(json.tree.entries, this.blobs);\n\t}\n\n\tpublic async getVersions(versionId: string | null, count: number): Promise<IVersion[]> {\n\t\tif (this.docId === undefined || this.docId === versionId || versionId === null) {\n\t\t\tif (versionId !== null) {\n\t\t\t\tthis.docId = versionId;\n\t\t\t}\n\t\t\treturn [{ id: \"latest\", treeId: \"\" }];\n\t\t}\n\n\t\tif (this.commits[versionId] !== undefined) {\n\t\t\treturn [{ id: versionId, treeId: FileSnapshotReader.FileStorageVersionTreeId }];\n\t\t}\n\t\tthrow new Error(`Unknown version ID: ${versionId}`);\n\t}\n\n\tpublic async getSnapshotTree(versionRequested?: IVersion): Promise<ISnapshotTree | null> {\n\t\tif (!versionRequested || versionRequested.id === \"latest\") {\n\t\t\treturn this.docTree;\n\t\t}\n\t\tif (versionRequested.treeId !== FileSnapshotReader.FileStorageVersionTreeId) {\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-base-to-string\n\t\t\tthrow new Error(`Unknown version id: ${versionRequested}`);\n\t\t}\n\n\t\tlet snapshotTree = this.trees[versionRequested.id];\n\t\tif (snapshotTree === undefined) {\n\t\t\tconst tree = this.commits[versionRequested.id];\n\t\t\tif (tree === undefined) {\n\t\t\t\tthrow new Error(`Can't find version ${versionRequested.id}`);\n\t\t\t}\n\n\t\t\tthis.trees[versionRequested.id] = snapshotTree = buildSnapshotTree(\n\t\t\t\ttree.entries,\n\t\t\t\tthis.blobs,\n\t\t\t);\n\t\t}\n\t\treturn snapshotTree;\n\t}\n\n\tpublic async readBlob(blobId: string): Promise<ArrayBufferLike> {\n\t\tconst blob = this.blobs.get(blobId);\n\t\tif (blob !== undefined) {\n\t\t\treturn blob;\n\t\t}\n\t\tthrow new Error(`Unknown blob ID: ${blobId}`);\n\t}\n}\n\n/**\n * @internal\n */\nexport class SnapshotStorage extends ReadDocumentStorageServiceBase {\n\tprotected docId?: string;\n\n\tconstructor(\n\t\tprotected readonly storage: IDocumentStorageService,\n\t\tprotected readonly docTree: ISnapshotTree | null,\n\t) {\n\t\tsuper();\n\t\tassert(!!this.docTree, 0x0b0 /* \"Missing document snapshot tree!\" */);\n\t}\n\n\tpublic async getVersions(versionId: string | null, count: number): Promise<IVersion[]> {\n\t\tif (this.docId === undefined || this.docId === versionId || versionId === null) {\n\t\t\tif (versionId !== null) {\n\t\t\t\tthis.docId = versionId;\n\t\t\t}\n\t\t\treturn [{ id: \"latest\", treeId: \"\" }];\n\t\t}\n\t\treturn this.storage.getVersions(versionId, count);\n\t}\n\n\tpublic async getSnapshotTree(versionRequested?: IVersion): Promise<ISnapshotTree | null> {\n\t\tif (versionRequested && versionRequested.id !== \"latest\") {\n\t\t\treturn this.storage.getSnapshotTree(versionRequested);\n\t\t}\n\n\t\treturn this.docTree;\n\t}\n\n\tpublic async readBlob(blobId: string): Promise<ArrayBufferLike> {\n\t\treturn this.storage.readBlob(blobId);\n\t}\n}\n\n/**\n * @internal\n */\nexport class OpStorage extends ReadDocumentStorageServiceBase {\n\tpublic async getVersions(versionId: string | null, count: number): Promise<IVersion[]> {\n\t\treturn [];\n\t}\n\n\tpublic async getSnapshotTree(version?: IVersion): Promise<ISnapshotTree | null> {\n\t\tthrow new Error(\"no snapshot tree should be asked when playing ops\");\n\t}\n\n\tpublic async readBlob(blobId: string): Promise<ArrayBufferLike> {\n\t\tthrow new Error(`Unknown blob ID: ${blobId}`);\n\t}\n}\n\nexport class StaticStorageDocumentService implements IDocumentService {\n\tconstructor(\n\t\tpublic readonly resolvedUrl: IResolvedUrl,\n\t\tprivate readonly storage: IDocumentStorageService,\n\t) {}\n\n\tpublic dispose() {}\n\n\tpublic async connectToStorage(): Promise<IDocumentStorageService> {\n\t\treturn this.storage;\n\t}\n\n\tpublic async connectToDeltaStorage(): Promise<IDocumentDeltaStorageService> {\n\t\treturn new EmptyDeltaStorageService();\n\t}\n\n\tpublic async connectToDeltaStream(client: IClient): Promise<IDocumentDeltaConnection> {\n\t\t// We have no delta stream, so make it not return forever...\n\t\treturn new Promise(() => {});\n\t}\n}\n\n/**\n * @internal\n */\nexport class StaticStorageDocumentServiceFactory implements IDocumentServiceFactory {\n\tpublic constructor(protected readonly storage: IDocumentStorageService) {}\n\n\tpublic async createDocumentService(\n\t\tfileURL: IResolvedUrl,\n\t\tlogger?: ITelemetryLoggerExt,\n\t\tclientIsSummarizer?: boolean,\n\t): Promise<IDocumentService> {\n\t\treturn new StaticStorageDocumentService(fileURL, this.storage);\n\t}\n\n\t// TODO: Issue-2109 Implement detach container api or put appropriate comment.\n\tpublic async createContainer(\n\t\tcreateNewSummary: ISummaryTree,\n\t\tresolvedUrl: IResolvedUrl,\n\t\tlogger: ITelemetryLoggerExt,\n\t\tclientIsSummarizer?: boolean,\n\t): Promise<IDocumentService> {\n\t\tthrow new Error(\"Not implemented\");\n\t}\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fluidframework/replay-driver",
|
|
3
|
-
"version": "2.0.0-dev.7.4.0.
|
|
3
|
+
"version": "2.0.0-dev.7.4.0.216897",
|
|
4
4
|
"description": "Document replay version of Socket.IO implementation",
|
|
5
5
|
"homepage": "https://fluidframework.com",
|
|
6
6
|
"repository": {
|
|
@@ -15,13 +15,13 @@
|
|
|
15
15
|
"module": "lib/index.mjs",
|
|
16
16
|
"types": "dist/index.d.ts",
|
|
17
17
|
"dependencies": {
|
|
18
|
-
"@fluid-internal/client-utils": "2.0.0-dev.7.4.0.
|
|
19
|
-
"@fluidframework/core-interfaces": "2.0.0-dev.7.4.0.
|
|
20
|
-
"@fluidframework/core-utils": "2.0.0-dev.7.4.0.
|
|
21
|
-
"@fluidframework/driver-definitions": "2.0.0-dev.7.4.0.
|
|
22
|
-
"@fluidframework/driver-utils": "2.0.0-dev.7.4.0.
|
|
18
|
+
"@fluid-internal/client-utils": "2.0.0-dev.7.4.0.216897",
|
|
19
|
+
"@fluidframework/core-interfaces": "2.0.0-dev.7.4.0.216897",
|
|
20
|
+
"@fluidframework/core-utils": "2.0.0-dev.7.4.0.216897",
|
|
21
|
+
"@fluidframework/driver-definitions": "2.0.0-dev.7.4.0.216897",
|
|
22
|
+
"@fluidframework/driver-utils": "2.0.0-dev.7.4.0.216897",
|
|
23
23
|
"@fluidframework/protocol-definitions": "^3.0.0",
|
|
24
|
-
"@fluidframework/telemetry-utils": "2.0.0-dev.7.4.0.
|
|
24
|
+
"@fluidframework/telemetry-utils": "2.0.0-dev.7.4.0.216897"
|
|
25
25
|
},
|
|
26
26
|
"devDependencies": {
|
|
27
27
|
"@fluid-tools/build-cli": "^0.28.0",
|
|
@@ -67,12 +67,13 @@
|
|
|
67
67
|
"build:compile": "fluid-build . --task compile",
|
|
68
68
|
"build:docs": "fluid-build . --task api",
|
|
69
69
|
"build:esnext": "tsc-multi --config ../../../common/build/build-common/tsc-multi.esm.json",
|
|
70
|
+
"check:release-tags": "api-extractor run --local --config ./api-extractor-lint.json",
|
|
70
71
|
"ci:build:docs": "api-extractor run",
|
|
71
72
|
"clean": "rimraf --glob dist lib \"**/*.tsbuildinfo\" \"**/*.build.log\" _api-extractor-temp",
|
|
72
73
|
"eslint": "eslint --format stylish src",
|
|
73
74
|
"eslint:fix": "eslint --format stylish src --fix --fix-type problem,suggestion,layout",
|
|
74
75
|
"format": "npm run prettier:fix",
|
|
75
|
-
"lint": "npm run prettier && npm run eslint",
|
|
76
|
+
"lint": "npm run prettier && npm run check:release-tags && npm run eslint",
|
|
76
77
|
"lint:fix": "npm run prettier:fix && npm run eslint:fix",
|
|
77
78
|
"prettier": "prettier --check . --cache --ignore-path ../../../.prettierignore",
|
|
78
79
|
"prettier:fix": "prettier --write . --cache --ignore-path ../../../.prettierignore",
|
package/src/replayController.ts
CHANGED
|
@@ -12,6 +12,7 @@ import * as api from "@fluidframework/protocol-definitions";
|
|
|
12
12
|
|
|
13
13
|
/**
|
|
14
14
|
* Partial implementation of IDocumentStorageService
|
|
15
|
+
* @internal
|
|
15
16
|
*/
|
|
16
17
|
export abstract class ReadDocumentStorageServiceBase implements IDocumentStorageService {
|
|
17
18
|
public abstract getVersions(versionId: string | null, count: number): Promise<api.IVersion[]>;
|
|
@@ -42,6 +43,7 @@ export abstract class ReadDocumentStorageServiceBase implements IDocumentStorage
|
|
|
42
43
|
* Replay controller object
|
|
43
44
|
* It controls where we start (snapshot, local file, no snapshots)
|
|
44
45
|
* As well as dispatch of ops
|
|
46
|
+
* @internal
|
|
45
47
|
*/
|
|
46
48
|
export abstract class ReplayController extends ReadDocumentStorageServiceBase {
|
|
47
49
|
/**
|
|
@@ -13,6 +13,7 @@ import { ReplayDocumentDeltaConnection } from "./replayDocumentDeltaConnection";
|
|
|
13
13
|
* The Replay document service dummies out the snapshot and the delta storage.
|
|
14
14
|
* Delta connection simulates the socket by fetching the ops from delta storage
|
|
15
15
|
* and emitting them with a pre determined delay
|
|
16
|
+
* @internal
|
|
16
17
|
*/
|
|
17
18
|
// eslint-disable-next-line import/namespace
|
|
18
19
|
export class ReplayDocumentService implements api.IDocumentService {
|
|
@@ -15,6 +15,9 @@ import { ReplayController } from "./replayController";
|
|
|
15
15
|
import { ReplayControllerStatic } from "./replayDocumentDeltaConnection";
|
|
16
16
|
import { ReplayDocumentService } from "./replayDocumentService";
|
|
17
17
|
|
|
18
|
+
/**
|
|
19
|
+
* @internal
|
|
20
|
+
*/
|
|
18
21
|
export class ReplayDocumentServiceFactory implements IDocumentServiceFactory {
|
|
19
22
|
public static create(
|
|
20
23
|
from: number,
|
|
@@ -26,12 +26,16 @@ import { ReadDocumentStorageServiceBase } from "./replayController";
|
|
|
26
26
|
|
|
27
27
|
/**
|
|
28
28
|
* Structure of snapshot on disk, when we store snapshot as single file
|
|
29
|
+
* @internal
|
|
29
30
|
*/
|
|
30
31
|
export interface IFileSnapshot {
|
|
31
32
|
tree: ITree;
|
|
32
33
|
commits: { [key: string]: ITree };
|
|
33
34
|
}
|
|
34
35
|
|
|
36
|
+
/**
|
|
37
|
+
* @internal
|
|
38
|
+
*/
|
|
35
39
|
export class FileSnapshotReader
|
|
36
40
|
extends ReadDocumentStorageServiceBase
|
|
37
41
|
implements IDocumentStorageService
|
|
@@ -100,6 +104,9 @@ export class FileSnapshotReader
|
|
|
100
104
|
}
|
|
101
105
|
}
|
|
102
106
|
|
|
107
|
+
/**
|
|
108
|
+
* @internal
|
|
109
|
+
*/
|
|
103
110
|
export class SnapshotStorage extends ReadDocumentStorageServiceBase {
|
|
104
111
|
protected docId?: string;
|
|
105
112
|
|
|
@@ -134,6 +141,9 @@ export class SnapshotStorage extends ReadDocumentStorageServiceBase {
|
|
|
134
141
|
}
|
|
135
142
|
}
|
|
136
143
|
|
|
144
|
+
/**
|
|
145
|
+
* @internal
|
|
146
|
+
*/
|
|
137
147
|
export class OpStorage extends ReadDocumentStorageServiceBase {
|
|
138
148
|
public async getVersions(versionId: string | null, count: number): Promise<IVersion[]> {
|
|
139
149
|
return [];
|
|
@@ -170,6 +180,9 @@ export class StaticStorageDocumentService implements IDocumentService {
|
|
|
170
180
|
}
|
|
171
181
|
}
|
|
172
182
|
|
|
183
|
+
/**
|
|
184
|
+
* @internal
|
|
185
|
+
*/
|
|
173
186
|
export class StaticStorageDocumentServiceFactory implements IDocumentServiceFactory {
|
|
174
187
|
public constructor(protected readonly storage: IDocumentStorageService) {}
|
|
175
188
|
|