@fluidframework/container-loader 2.0.0-internal.5.4.2 → 2.0.0-internal.6.0.1
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/CHANGELOG.md +81 -0
- package/dist/connectionManager.d.ts +1 -1
- package/dist/connectionManager.d.ts.map +1 -1
- package/dist/connectionManager.js +24 -25
- package/dist/connectionManager.js.map +1 -1
- package/dist/connectionStateHandler.d.ts +2 -1
- package/dist/connectionStateHandler.d.ts.map +1 -1
- package/dist/connectionStateHandler.js +9 -16
- package/dist/connectionStateHandler.js.map +1 -1
- package/dist/container.d.ts +10 -5
- package/dist/container.d.ts.map +1 -1
- package/dist/container.js +161 -99
- package/dist/container.js.map +1 -1
- package/dist/containerContext.d.ts +2 -7
- package/dist/containerContext.d.ts.map +1 -1
- package/dist/containerContext.js +2 -14
- package/dist/containerContext.js.map +1 -1
- package/dist/containerStorageAdapter.js +3 -5
- package/dist/containerStorageAdapter.js.map +1 -1
- package/dist/contracts.d.ts +11 -2
- package/dist/contracts.d.ts.map +1 -1
- package/dist/contracts.js +3 -3
- package/dist/contracts.js.map +1 -1
- package/dist/debugLogger.js +2 -3
- package/dist/debugLogger.js.map +1 -1
- package/dist/deltaManager.d.ts +16 -3
- package/dist/deltaManager.d.ts.map +1 -1
- package/dist/deltaManager.js +62 -24
- package/dist/deltaManager.js.map +1 -1
- package/dist/deltaQueue.js +1 -2
- package/dist/deltaQueue.js.map +1 -1
- package/dist/loader.d.ts +12 -0
- package/dist/loader.d.ts.map +1 -1
- package/dist/loader.js +57 -42
- package/dist/loader.js.map +1 -1
- package/dist/packageVersion.d.ts +1 -1
- package/dist/packageVersion.js +1 -1
- package/dist/packageVersion.js.map +1 -1
- package/dist/protocol.d.ts.map +1 -1
- package/dist/protocol.js +2 -3
- package/dist/protocol.js.map +1 -1
- package/dist/utils.d.ts +8 -1
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +24 -6
- package/dist/utils.js.map +1 -1
- package/lib/connectionManager.d.ts +1 -1
- package/lib/connectionManager.d.ts.map +1 -1
- package/lib/connectionManager.js +25 -26
- package/lib/connectionManager.js.map +1 -1
- package/lib/connectionStateHandler.d.ts +2 -1
- package/lib/connectionStateHandler.d.ts.map +1 -1
- package/lib/connectionStateHandler.js +9 -16
- package/lib/connectionStateHandler.js.map +1 -1
- package/lib/container.d.ts +10 -5
- package/lib/container.d.ts.map +1 -1
- package/lib/container.js +160 -98
- package/lib/container.js.map +1 -1
- package/lib/containerContext.d.ts +2 -7
- package/lib/containerContext.d.ts.map +1 -1
- package/lib/containerContext.js +2 -14
- package/lib/containerContext.js.map +1 -1
- package/lib/containerStorageAdapter.js +3 -5
- package/lib/containerStorageAdapter.js.map +1 -1
- package/lib/contracts.d.ts +11 -2
- package/lib/contracts.d.ts.map +1 -1
- package/lib/contracts.js +3 -3
- package/lib/contracts.js.map +1 -1
- package/lib/debugLogger.js +2 -3
- package/lib/debugLogger.js.map +1 -1
- package/lib/deltaManager.d.ts +16 -3
- package/lib/deltaManager.d.ts.map +1 -1
- package/lib/deltaManager.js +62 -24
- package/lib/deltaManager.js.map +1 -1
- package/lib/deltaQueue.js +1 -2
- package/lib/deltaQueue.js.map +1 -1
- package/lib/loader.d.ts +12 -0
- package/lib/loader.d.ts.map +1 -1
- package/lib/loader.js +57 -42
- package/lib/loader.js.map +1 -1
- package/lib/packageVersion.d.ts +1 -1
- package/lib/packageVersion.js +1 -1
- package/lib/packageVersion.js.map +1 -1
- package/lib/protocol.d.ts.map +1 -1
- package/lib/protocol.js +2 -3
- package/lib/protocol.js.map +1 -1
- package/lib/utils.d.ts +8 -1
- package/lib/utils.d.ts.map +1 -1
- package/lib/utils.js +22 -5
- package/lib/utils.js.map +1 -1
- package/package.json +14 -14
- package/src/connectionManager.ts +7 -3
- package/src/connectionStateHandler.ts +3 -2
- package/src/container.ts +113 -27
- package/src/containerContext.ts +0 -16
- package/src/contracts.ts +16 -5
- package/src/deltaManager.ts +22 -5
- package/src/loader.ts +37 -23
- package/src/packageVersion.ts +1 -1
- package/src/protocol.ts +0 -1
- package/src/utils.ts +29 -0
package/src/loader.ts
CHANGED
|
@@ -37,7 +37,7 @@ import {
|
|
|
37
37
|
IResolvedUrl,
|
|
38
38
|
IUrlResolver,
|
|
39
39
|
} from "@fluidframework/driver-definitions";
|
|
40
|
-
import {
|
|
40
|
+
import { UsageError } from "@fluidframework/container-utils";
|
|
41
41
|
import { Container, IPendingContainerState } from "./container";
|
|
42
42
|
import { IParsedUrl, parseUrl } from "./utils";
|
|
43
43
|
import { pkgVersion } from "./packageVersion";
|
|
@@ -45,11 +45,7 @@ import { ProtocolHandlerBuilder } from "./protocol";
|
|
|
45
45
|
import { DebugLogger } from "./debugLogger";
|
|
46
46
|
|
|
47
47
|
function canUseCache(request: IRequest): boolean {
|
|
48
|
-
|
|
49
|
-
return true;
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
return request.headers[LoaderHeader.cache] !== false;
|
|
48
|
+
return request.headers?.[LoaderHeader.cache] === true;
|
|
53
49
|
}
|
|
54
50
|
|
|
55
51
|
function ensureResolvedUrlDefined(
|
|
@@ -68,6 +64,9 @@ export class RelativeLoader implements ILoader {
|
|
|
68
64
|
private readonly loader: ILoader | undefined,
|
|
69
65
|
) {}
|
|
70
66
|
|
|
67
|
+
/**
|
|
68
|
+
* @deprecated - Will be removed in future major release. Migrate all usage of IFluidRouter to the Container's IFluidRouter/request.
|
|
69
|
+
*/
|
|
71
70
|
public get IFluidRouter(): IFluidRouter {
|
|
72
71
|
return this;
|
|
73
72
|
}
|
|
@@ -99,6 +98,9 @@ export class RelativeLoader implements ILoader {
|
|
|
99
98
|
return this.loader.resolve(request);
|
|
100
99
|
}
|
|
101
100
|
|
|
101
|
+
/**
|
|
102
|
+
* @deprecated - Will be removed in future major release. Migrate all usage of IFluidRouter to the Container's IFluidRouter/request.
|
|
103
|
+
*/
|
|
102
104
|
public async request(request: IRequest): Promise<IResponse> {
|
|
103
105
|
if (request.url.startsWith("/")) {
|
|
104
106
|
const container = await this.resolve(request);
|
|
@@ -348,6 +350,9 @@ export class Loader implements IHostLoader {
|
|
|
348
350
|
});
|
|
349
351
|
}
|
|
350
352
|
|
|
353
|
+
/**
|
|
354
|
+
* @deprecated - Will be removed in future major release. Migrate all usage of IFluidRouter to the Container's IFluidRouter/request.
|
|
355
|
+
*/
|
|
351
356
|
public get IFluidRouter(): IFluidRouter {
|
|
352
357
|
return this;
|
|
353
358
|
}
|
|
@@ -383,6 +388,9 @@ export class Loader implements IHostLoader {
|
|
|
383
388
|
});
|
|
384
389
|
}
|
|
385
390
|
|
|
391
|
+
/**
|
|
392
|
+
* @deprecated - Will be removed in future major release. Migrate all usage of IFluidRouter to the Container's IFluidRouter/request.
|
|
393
|
+
*/
|
|
386
394
|
public async request(request: IRequest): Promise<IResponse> {
|
|
387
395
|
return PerformanceEvent.timedExecAsync(
|
|
388
396
|
this.mc.logger,
|
|
@@ -456,11 +464,29 @@ export class Loader implements IHostLoader {
|
|
|
456
464
|
// If set in both query string and headers, use query string. Also write the value from the query string into the header either way.
|
|
457
465
|
request.headers[LoaderHeader.version] =
|
|
458
466
|
parsed.version ?? request.headers[LoaderHeader.version];
|
|
467
|
+
const cacheHeader = request.headers[LoaderHeader.cache];
|
|
459
468
|
const canCache =
|
|
460
|
-
|
|
461
|
-
|
|
469
|
+
// Take header value if present, else use ILoaderOptions.cache value
|
|
470
|
+
(cacheHeader !== undefined ? cacheHeader === true : this.cachingEnabled) &&
|
|
462
471
|
pendingLocalState === undefined;
|
|
463
|
-
const fromSequenceNumber = request.headers[LoaderHeader.sequenceNumber]
|
|
472
|
+
const fromSequenceNumber = request.headers[LoaderHeader.sequenceNumber] as
|
|
473
|
+
| number
|
|
474
|
+
| undefined;
|
|
475
|
+
const opsBeforeReturn = request.headers[LoaderHeader.loadMode]?.opsBeforeReturn as
|
|
476
|
+
| string
|
|
477
|
+
| undefined;
|
|
478
|
+
|
|
479
|
+
if (
|
|
480
|
+
opsBeforeReturn === "sequenceNumber" &&
|
|
481
|
+
(fromSequenceNumber === undefined || fromSequenceNumber < 0)
|
|
482
|
+
) {
|
|
483
|
+
// If opsBeforeReturn is set to "sequenceNumber", then fromSequenceNumber should be set to a non-negative integer.
|
|
484
|
+
throw new UsageError("sequenceNumber must be set to a non-negative integer");
|
|
485
|
+
} else if (opsBeforeReturn !== "sequenceNumber" && fromSequenceNumber !== undefined) {
|
|
486
|
+
// If opsBeforeReturn is not set to "sequenceNumber", then fromSequenceNumber should be undefined (default value).
|
|
487
|
+
// In this case, we should throw an error since opsBeforeReturn is not explicitly set to "sequenceNumber".
|
|
488
|
+
throw new UsageError('opsBeforeReturn must be set to "sequenceNumber"');
|
|
489
|
+
}
|
|
464
490
|
|
|
465
491
|
let container: Container;
|
|
466
492
|
if (canCache) {
|
|
@@ -477,24 +503,11 @@ export class Loader implements IHostLoader {
|
|
|
477
503
|
container = await this.loadContainer(request, resolvedAsFluid, pendingLocalState);
|
|
478
504
|
}
|
|
479
505
|
|
|
480
|
-
if (container.deltaManager.lastSequenceNumber <= fromSequenceNumber) {
|
|
481
|
-
await new Promise<void>((resolve, reject) => {
|
|
482
|
-
function opHandler(message: ISequencedDocumentMessage) {
|
|
483
|
-
if (message.sequenceNumber > fromSequenceNumber) {
|
|
484
|
-
resolve();
|
|
485
|
-
container.removeListener("op", opHandler);
|
|
486
|
-
}
|
|
487
|
-
}
|
|
488
|
-
|
|
489
|
-
container.on("op", opHandler);
|
|
490
|
-
});
|
|
491
|
-
}
|
|
492
|
-
|
|
493
506
|
return { container, parsed };
|
|
494
507
|
}
|
|
495
508
|
|
|
496
509
|
private get cachingEnabled() {
|
|
497
|
-
return this.services.options.cache
|
|
510
|
+
return this.services.options.cache === true;
|
|
498
511
|
}
|
|
499
512
|
|
|
500
513
|
private async loadContainer(
|
|
@@ -508,6 +521,7 @@ export class Loader implements IHostLoader {
|
|
|
508
521
|
version: request.headers?.[LoaderHeader.version] ?? undefined,
|
|
509
522
|
loadMode: request.headers?.[LoaderHeader.loadMode],
|
|
510
523
|
pendingLocalState,
|
|
524
|
+
loadToSequenceNumber: request.headers?.[LoaderHeader.sequenceNumber],
|
|
511
525
|
},
|
|
512
526
|
{
|
|
513
527
|
canReconnect: request.headers?.[LoaderHeader.reconnect],
|
package/src/packageVersion.ts
CHANGED
package/src/protocol.ts
CHANGED
|
@@ -55,7 +55,6 @@ export class ProtocolHandler extends ProtocolOpHandler implements IProtocolHandl
|
|
|
55
55
|
super(
|
|
56
56
|
attributes.minimumSequenceNumber,
|
|
57
57
|
attributes.sequenceNumber,
|
|
58
|
-
OnlyValidTermValue,
|
|
59
58
|
quorumSnapshot.members,
|
|
60
59
|
quorumSnapshot.proposals,
|
|
61
60
|
quorumSnapshot.values,
|
package/src/utils.ts
CHANGED
|
@@ -14,6 +14,7 @@ import {
|
|
|
14
14
|
import { ISummaryTree, ISnapshotTree, SummaryType } from "@fluidframework/protocol-definitions";
|
|
15
15
|
import { LoggingError } from "@fluidframework/telemetry-utils";
|
|
16
16
|
import {
|
|
17
|
+
CombinedAppAndProtocolSummary,
|
|
17
18
|
DeltaStreamConnectionForbiddenError,
|
|
18
19
|
isCombinedAppAndProtocolSummary,
|
|
19
20
|
} from "@fluidframework/driver-utils";
|
|
@@ -51,6 +52,34 @@ export function parseUrl(url: string): IParsedUrl | undefined {
|
|
|
51
52
|
: undefined;
|
|
52
53
|
}
|
|
53
54
|
|
|
55
|
+
/**
|
|
56
|
+
* Combine the app summary and protocol summary in 1 tree.
|
|
57
|
+
* @param appSummary - Summary of the app.
|
|
58
|
+
* @param protocolSummary - Summary of the protocol.
|
|
59
|
+
* @internal
|
|
60
|
+
*/
|
|
61
|
+
export function combineAppAndProtocolSummary(
|
|
62
|
+
appSummary: ISummaryTree,
|
|
63
|
+
protocolSummary: ISummaryTree,
|
|
64
|
+
): CombinedAppAndProtocolSummary {
|
|
65
|
+
assert(
|
|
66
|
+
!isCombinedAppAndProtocolSummary(appSummary),
|
|
67
|
+
0x5a8 /* app summary is already a combined tree! */,
|
|
68
|
+
);
|
|
69
|
+
assert(
|
|
70
|
+
!isCombinedAppAndProtocolSummary(protocolSummary),
|
|
71
|
+
0x5a9 /* protocol summary is already a combined tree! */,
|
|
72
|
+
);
|
|
73
|
+
const createNewSummary: CombinedAppAndProtocolSummary = {
|
|
74
|
+
type: SummaryType.Tree,
|
|
75
|
+
tree: {
|
|
76
|
+
".protocol": protocolSummary,
|
|
77
|
+
".app": appSummary,
|
|
78
|
+
},
|
|
79
|
+
};
|
|
80
|
+
return createNewSummary;
|
|
81
|
+
}
|
|
82
|
+
|
|
54
83
|
/**
|
|
55
84
|
* Converts summary tree (for upload) to snapshot tree (for download).
|
|
56
85
|
* Summary tree blobs contain contents, but snapshot tree blobs normally
|