@fluidframework/container-loader 2.70.0-361788 → 2.70.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +4 -0
- package/api-report/container-loader.legacy.alpha.api.md +13 -0
- package/dist/container.d.ts +7 -4
- package/dist/container.d.ts.map +1 -1
- package/dist/container.js +89 -14
- package/dist/container.js.map +1 -1
- package/dist/containerContext.d.ts +1 -0
- package/dist/containerContext.d.ts.map +1 -1
- package/dist/containerContext.js +1 -0
- package/dist/containerContext.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/legacyAlpha.d.ts +1 -0
- package/dist/packageVersion.d.ts +1 -1
- package/dist/packageVersion.d.ts.map +1 -1
- package/dist/packageVersion.js +1 -1
- package/dist/packageVersion.js.map +1 -1
- package/dist/pendingLocalStateStore.d.ts +84 -0
- package/dist/pendingLocalStateStore.d.ts.map +1 -0
- package/dist/pendingLocalStateStore.js +157 -0
- package/dist/pendingLocalStateStore.js.map +1 -0
- package/dist/protocol.d.ts +1 -0
- package/dist/protocol.d.ts.map +1 -1
- package/dist/protocol.js +43 -1
- package/dist/protocol.js.map +1 -1
- package/dist/utils.d.ts +1 -0
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +0 -4
- package/dist/utils.js.map +1 -1
- package/lib/container.d.ts +7 -4
- package/lib/container.d.ts.map +1 -1
- package/lib/container.js +90 -15
- package/lib/container.js.map +1 -1
- package/lib/containerContext.d.ts +1 -0
- package/lib/containerContext.d.ts.map +1 -1
- package/lib/containerContext.js +1 -0
- package/lib/containerContext.js.map +1 -1
- package/lib/index.d.ts +1 -0
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +1 -0
- package/lib/index.js.map +1 -1
- package/lib/legacyAlpha.d.ts +1 -0
- package/lib/packageVersion.d.ts +1 -1
- package/lib/packageVersion.d.ts.map +1 -1
- package/lib/packageVersion.js +1 -1
- package/lib/packageVersion.js.map +1 -1
- package/lib/pendingLocalStateStore.d.ts +84 -0
- package/lib/pendingLocalStateStore.d.ts.map +1 -0
- package/lib/pendingLocalStateStore.js +153 -0
- package/lib/pendingLocalStateStore.js.map +1 -0
- package/lib/protocol.d.ts +1 -0
- package/lib/protocol.d.ts.map +1 -1
- package/lib/protocol.js +41 -0
- package/lib/protocol.js.map +1 -1
- package/lib/utils.d.ts +1 -0
- package/lib/utils.d.ts.map +1 -1
- package/lib/utils.js +0 -4
- package/lib/utils.js.map +1 -1
- package/package.json +11 -11
- package/src/container.ts +124 -30
- package/src/containerContext.ts +2 -0
- package/src/index.ts +1 -0
- package/src/packageVersion.ts +1 -1
- package/src/pendingLocalStateStore.ts +160 -0
- package/src/protocol.ts +49 -0
- package/src/utils.ts +6 -0
package/CHANGELOG.md
CHANGED
|
@@ -203,6 +203,19 @@ export interface OnDemandSummaryResults {
|
|
|
203
203
|
readonly summarySubmitted: boolean;
|
|
204
204
|
}
|
|
205
205
|
|
|
206
|
+
// @alpha @legacy
|
|
207
|
+
export class PendingLocalStateStore<TKey> {
|
|
208
|
+
[Symbol.iterator](): Iterator<[TKey, string]>;
|
|
209
|
+
clear(): void;
|
|
210
|
+
delete(key: TKey): boolean;
|
|
211
|
+
entries(): Iterator<[TKey, string]>;
|
|
212
|
+
get(key: TKey): string | undefined;
|
|
213
|
+
has(key: TKey): boolean;
|
|
214
|
+
keys(): IterableIterator<TKey>;
|
|
215
|
+
set(key: TKey, pendingLocalState: string): this;
|
|
216
|
+
get size(): number;
|
|
217
|
+
}
|
|
218
|
+
|
|
206
219
|
// @beta @legacy
|
|
207
220
|
export type ProtocolHandlerBuilder = (attributes: IDocumentAttributes, snapshot: IQuorumSnapshot, sendProposal: (key: string, value: any) => number) => IProtocolHandler;
|
|
208
221
|
|
package/dist/container.d.ts
CHANGED
|
@@ -141,6 +141,7 @@ export declare class Container extends EventEmitterWithErrorHandling<IContainerE
|
|
|
141
141
|
private readonly subLogger;
|
|
142
142
|
private readonly detachedBlobStorage;
|
|
143
143
|
private readonly protocolHandlerBuilder;
|
|
144
|
+
private readonly signalAudience;
|
|
144
145
|
private readonly client;
|
|
145
146
|
private readonly mc;
|
|
146
147
|
/**
|
|
@@ -347,12 +348,14 @@ export declare class Container extends EventEmitterWithErrorHandling<IContainerE
|
|
|
347
348
|
private instantiateRuntime;
|
|
348
349
|
private readonly updateDirtyContainerState;
|
|
349
350
|
/**
|
|
350
|
-
*
|
|
351
|
-
* This controls the "connected" state of the ContainerRuntime as well
|
|
352
|
-
* @param connected - Is the container currently connected?
|
|
351
|
+
* Send the connected status to the runtime.
|
|
353
352
|
* @param readonly - Is the container in readonly mode?
|
|
353
|
+
* @param onlyCallSetConnectionStateIfConnectedOrDisconnected - If true, only
|
|
354
|
+
* call older `setConnectionState` on the runtime if the connection state is
|
|
355
|
+
* either Connected or Disconnected. This exists to preserve older behavior
|
|
356
|
+
* where the runtime was only notified of these two states.
|
|
354
357
|
*/
|
|
355
|
-
private
|
|
358
|
+
private setConnectionStatus;
|
|
356
359
|
private handleDeltaConnectionArg;
|
|
357
360
|
}
|
|
358
361
|
/**
|
package/dist/container.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"container.d.ts","sourceRoot":"","sources":["../src/container.ts"],"names":[],"mappings":"AAAA;;;GAGG;AASH,OAAO,EACN,WAAW,EACX,KAAK,SAAS,EACd,KAAK,uBAAuB,EAC5B,MAAM,uCAAuC,CAAC;AAC/C,OAAO,KAAK,EAGX,kBAAkB,EAClB,UAAU,EACV,gBAAgB,EAChB,kBAAkB,EAClB,aAAa,EACb,iBAAiB,EAMjB,YAAY,EAEZ,cAAc,EAEd,MAAM,gDAAgD,CAAC;AAExD,OAAO,EACN,KAAK,WAAW,EAEhB,KAAK,QAAQ,EACb,KAAK,wBAAwB,EAE7B,MAAM,iCAAiC,CAAC;AAGzC,OAAO,EAEN,KAAK,cAAc,EACnB,KAAK,cAAc,EAInB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAEN,KAAK,uBAAuB,EAC5B,KAAK,YAAY,EAGjB,KAAK,YAAY,EAGjB,KAAK,gBAAgB,EAOrB,KAAK,yBAAyB,EAG9B,MAAM,6CAA6C,CAAC;AAWrD,OAAO,EAEN,KAAK,mBAAmB,EACxB,6BAA6B,EAe7B,MAAM,0CAA0C,CAAC;AAWlD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AA4BvD,OAAO,EAGN,KAAK,sBAAsB,
|
|
1
|
+
{"version":3,"file":"container.d.ts","sourceRoot":"","sources":["../src/container.ts"],"names":[],"mappings":"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"}
|
package/dist/container.js
CHANGED
|
@@ -216,12 +216,16 @@ class Container extends internal_5.EventEmitterWithErrorHandling {
|
|
|
216
216
|
// in the order that is not possible in real life, that it may not expect.
|
|
217
217
|
// Ideally, we should supply pendingLocalState?.clientId here as well, not in constructor, but it does not matter (at least today)
|
|
218
218
|
this.connectionStateHandler.initProtocol(this.protocolHandler);
|
|
219
|
-
// Propagate current connection state through the system.
|
|
220
|
-
const readonly = this.readOnlyInfo.readonly ?? false;
|
|
221
219
|
// This call does not look like needed any more, with delaying all connection-related events past loaded phase.
|
|
222
220
|
// Yet, there could be some customer code that would break if we do not deliver it.
|
|
223
221
|
// Will be removed in further PRs with proper changeset.
|
|
224
|
-
|
|
222
|
+
const runtime = this._runtime;
|
|
223
|
+
if (runtime !== undefined &&
|
|
224
|
+
// Check for older runtime that may need this call
|
|
225
|
+
!("setConnectionStatus" in runtime) &&
|
|
226
|
+
runtime.disposed === false) {
|
|
227
|
+
runtime.setConnectionState(false /* canSendOps */, this.clientId);
|
|
228
|
+
}
|
|
225
229
|
// Deliver delayed calls to DeltaManager - we ignored "connect" events while loading.
|
|
226
230
|
const cm = this._deltaManager.connectionManager;
|
|
227
231
|
if (cm.connected) {
|
|
@@ -381,6 +385,7 @@ class Container extends internal_5.EventEmitterWithErrorHandling {
|
|
|
381
385
|
}, error);
|
|
382
386
|
this.close((0, internal_5.normalizeError)(error));
|
|
383
387
|
});
|
|
388
|
+
this.signalAudience = new audience_js_1.Audience();
|
|
384
389
|
/**
|
|
385
390
|
* Lifecycle state of the container, used mainly to prevent re-entrancy and telemetry
|
|
386
391
|
*
|
|
@@ -524,9 +529,8 @@ class Container extends internal_5.EventEmitterWithErrorHandling {
|
|
|
524
529
|
// Tracking alternative ways to handle this in AB#4129.
|
|
525
530
|
this.options = { ...options };
|
|
526
531
|
this.scope = scope;
|
|
527
|
-
this.protocolHandlerBuilder =
|
|
528
|
-
|
|
529
|
-
((attributes, quorumSnapshot, sendProposal) => new protocol_js_1.ProtocolHandler(attributes, quorumSnapshot, sendProposal, new audience_js_1.Audience(), (clientId) => this.clientsWhoShouldHaveLeft.has(clientId)));
|
|
532
|
+
this.protocolHandlerBuilder = (0, protocol_js_1.wrapProtocolHandlerBuilder)(protocolHandlerBuilder ??
|
|
533
|
+
((attributes, quorumSnapshot, sendProposal) => new protocol_js_1.ProtocolHandler(attributes, quorumSnapshot, sendProposal, new audience_js_1.Audience(), (clientId) => this.clientsWhoShouldHaveLeft.has(clientId))), this.signalAudience);
|
|
530
534
|
// Note that we capture the createProps here so we can replicate the creation call when we want to clone.
|
|
531
535
|
this.clone = async (_loadProps, createParamOverrides) => {
|
|
532
536
|
return Container.load(_loadProps, {
|
|
@@ -1330,7 +1334,7 @@ class Container extends internal_5.EventEmitterWithErrorHandling {
|
|
|
1330
1334
|
});
|
|
1331
1335
|
deltaManager.on("readonly", (readonly) => {
|
|
1332
1336
|
if (this.loaded) {
|
|
1333
|
-
this.
|
|
1337
|
+
this.setConnectionStatus(readonly);
|
|
1334
1338
|
}
|
|
1335
1339
|
this.emit("readonly", readonly);
|
|
1336
1340
|
});
|
|
@@ -1406,7 +1410,18 @@ class Container extends internal_5.EventEmitterWithErrorHandling {
|
|
|
1406
1410
|
const clientId = this.connectionStateHandler.clientId;
|
|
1407
1411
|
(0, internal_2.assert)(clientId !== undefined, 0x96e /* there has to be clientId */);
|
|
1408
1412
|
this.protocolHandler.audience.setCurrentClientId(clientId);
|
|
1413
|
+
this.signalAudience.setCurrentClientId(clientId);
|
|
1414
|
+
}
|
|
1415
|
+
else if (this.connectionState === connectionState_js_1.ConnectionState.CatchingUp) {
|
|
1416
|
+
// Signal-based Audience does not wait for ops. So provide clientId
|
|
1417
|
+
// as soon as possible.
|
|
1418
|
+
const clientId = this.connectionStateHandler.pendingClientId;
|
|
1419
|
+
(0, internal_2.assert)(clientId !== undefined, 0xc89 /* catching up without clientId */);
|
|
1420
|
+
this.signalAudience.setCurrentClientId(clientId);
|
|
1409
1421
|
}
|
|
1422
|
+
this.setConnectionStatus(
|
|
1423
|
+
/* readonly */ this.readOnlyInfo.readonly ?? false,
|
|
1424
|
+
/* onlyCallSetConnectionStateIfConnectedOrDisconnected */ true);
|
|
1410
1425
|
// We communicate only transitions to Connected & Disconnected states, skipping all other states.
|
|
1411
1426
|
// This can be changed in the future, for example we likely should add "CatchingUp" event on Container.
|
|
1412
1427
|
if (this.connectionState !== connectionState_js_1.ConnectionState.Connected &&
|
|
@@ -1414,7 +1429,6 @@ class Container extends internal_5.EventEmitterWithErrorHandling {
|
|
|
1414
1429
|
return;
|
|
1415
1430
|
}
|
|
1416
1431
|
// Both protocol and context should not be undefined if we got so far.
|
|
1417
|
-
this.setContextConnectedState(connected, this.readOnlyInfo.readonly ?? false);
|
|
1418
1432
|
this.protocolHandler.setConnectionState(connected, this.clientId);
|
|
1419
1433
|
(0, internal_5.raiseConnectedEvent)(this.mc.logger, this, connected, this.clientId, disconnectedReason?.text);
|
|
1420
1434
|
}
|
|
@@ -1546,6 +1560,7 @@ class Container extends internal_5.EventEmitterWithErrorHandling {
|
|
|
1546
1560
|
storage: this.storageAdapter,
|
|
1547
1561
|
quorum: this.protocolHandler.quorum,
|
|
1548
1562
|
audience: this.protocolHandler.audience,
|
|
1563
|
+
signalAudience: this.signalAudience,
|
|
1549
1564
|
loader,
|
|
1550
1565
|
submitFn: (type, contents, batch, metadata) => this.submitContainerMessage(type, contents, batch, metadata),
|
|
1551
1566
|
submitSummaryFn: (summaryOp, referenceSequenceNumber) => this.submitSummaryMessage(summaryOp, referenceSequenceNumber),
|
|
@@ -1580,15 +1595,75 @@ class Container extends internal_5.EventEmitterWithErrorHandling {
|
|
|
1580
1595
|
}
|
|
1581
1596
|
}
|
|
1582
1597
|
/**
|
|
1583
|
-
*
|
|
1584
|
-
* This controls the "connected" state of the ContainerRuntime as well
|
|
1585
|
-
* @param connected - Is the container currently connected?
|
|
1598
|
+
* Send the connected status to the runtime.
|
|
1586
1599
|
* @param readonly - Is the container in readonly mode?
|
|
1600
|
+
* @param onlyCallSetConnectionStateIfConnectedOrDisconnected - If true, only
|
|
1601
|
+
* call older `setConnectionState` on the runtime if the connection state is
|
|
1602
|
+
* either Connected or Disconnected. This exists to preserve older behavior
|
|
1603
|
+
* where the runtime was only notified of these two states.
|
|
1587
1604
|
*/
|
|
1588
|
-
|
|
1605
|
+
setConnectionStatus(readonly, onlyCallSetConnectionStateIfConnectedOrDisconnected = false) {
|
|
1589
1606
|
if (this._runtime?.disposed === false && this.loaded) {
|
|
1590
|
-
this.runtime.
|
|
1591
|
-
|
|
1607
|
+
const setConnectionStatus = this.runtime.setConnectionStatus?.bind(this.runtime);
|
|
1608
|
+
if (setConnectionStatus === undefined) {
|
|
1609
|
+
if (!onlyCallSetConnectionStateIfConnectedOrDisconnected ||
|
|
1610
|
+
this.connectionState === connectionState_js_1.ConnectionState.Connected ||
|
|
1611
|
+
this.connectionState === connectionState_js_1.ConnectionState.Disconnected) {
|
|
1612
|
+
this.runtime.setConnectionState(this.connectionState === connectionState_js_1.ConnectionState.Connected &&
|
|
1613
|
+
!readonly /* container can send ops if connected to service and not in readonly mode */, this.clientId);
|
|
1614
|
+
}
|
|
1615
|
+
}
|
|
1616
|
+
else {
|
|
1617
|
+
const pendingClientConnectionId = this.connectionStateHandler.pendingClientId;
|
|
1618
|
+
const connectionState = this.connectionState;
|
|
1619
|
+
switch (connectionState) {
|
|
1620
|
+
case connectionState_js_1.ConnectionState.EstablishingConnection: {
|
|
1621
|
+
setConnectionStatus({
|
|
1622
|
+
connectionState,
|
|
1623
|
+
canSendOps: false,
|
|
1624
|
+
readonly,
|
|
1625
|
+
});
|
|
1626
|
+
break;
|
|
1627
|
+
}
|
|
1628
|
+
case connectionState_js_1.ConnectionState.CatchingUp: {
|
|
1629
|
+
// When catching up, we have a pending clientId, but it
|
|
1630
|
+
// is not usable for ops. Send clientId with canSendOps false.
|
|
1631
|
+
(0, internal_2.assert)(pendingClientConnectionId !== undefined, 0xc8a /* catching up without clientId */);
|
|
1632
|
+
setConnectionStatus({
|
|
1633
|
+
connectionState,
|
|
1634
|
+
pendingClientConnectionId,
|
|
1635
|
+
canSendOps: false,
|
|
1636
|
+
readonly,
|
|
1637
|
+
});
|
|
1638
|
+
break;
|
|
1639
|
+
}
|
|
1640
|
+
case connectionState_js_1.ConnectionState.Connected: {
|
|
1641
|
+
// When connected, we have an active clientId. Pass it along
|
|
1642
|
+
// with canSendOps true/false based on readonly.
|
|
1643
|
+
const clientConnectionId = this.clientId;
|
|
1644
|
+
(0, internal_2.assert)(clientConnectionId !== undefined, 0xc8b /* connected without clientId */);
|
|
1645
|
+
(0, internal_2.assert)(clientConnectionId === pendingClientConnectionId, 0xc8c /* connected with different clientId than pending */);
|
|
1646
|
+
setConnectionStatus({
|
|
1647
|
+
connectionState,
|
|
1648
|
+
clientConnectionId,
|
|
1649
|
+
canSendOps: !readonly,
|
|
1650
|
+
readonly,
|
|
1651
|
+
});
|
|
1652
|
+
break;
|
|
1653
|
+
}
|
|
1654
|
+
case connectionState_js_1.ConnectionState.Disconnected: {
|
|
1655
|
+
setConnectionStatus({
|
|
1656
|
+
connectionState,
|
|
1657
|
+
priorPendingClientConnectionId: pendingClientConnectionId,
|
|
1658
|
+
priorConnectedClientConnectionId: this.clientId,
|
|
1659
|
+
canSendOps: false,
|
|
1660
|
+
readonly,
|
|
1661
|
+
});
|
|
1662
|
+
break;
|
|
1663
|
+
}
|
|
1664
|
+
// No default
|
|
1665
|
+
}
|
|
1666
|
+
}
|
|
1592
1667
|
}
|
|
1593
1668
|
}
|
|
1594
1669
|
handleDeltaConnectionArg(deltaConnectionArg, connectionArgs) {
|