cojson 0.8.38 → 0.8.39
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 +7 -0
- package/dist/native/PeerState.js +11 -2
- package/dist/native/PeerState.js.map +1 -1
- package/dist/native/{SyncStateSubscriptionManager.js → SyncStateManager.js} +35 -24
- package/dist/native/SyncStateManager.js.map +1 -0
- package/dist/native/coValueCore.js +3 -0
- package/dist/native/coValueCore.js.map +1 -1
- package/dist/native/exports.js.map +1 -1
- package/dist/native/sync.js +34 -10
- package/dist/native/sync.js.map +1 -1
- package/dist/web/PeerState.js +11 -2
- package/dist/web/PeerState.js.map +1 -1
- package/dist/web/{SyncStateSubscriptionManager.js → SyncStateManager.js} +35 -24
- package/dist/web/SyncStateManager.js.map +1 -0
- package/dist/web/coValueCore.js +3 -0
- package/dist/web/coValueCore.js.map +1 -1
- package/dist/web/exports.js.map +1 -1
- package/dist/web/sync.js +34 -10
- package/dist/web/sync.js.map +1 -1
- package/package.json +1 -1
- package/src/PeerState.ts +12 -2
- package/src/{SyncStateSubscriptionManager.ts → SyncStateManager.ts} +48 -35
- package/src/coValueCore.ts +6 -0
- package/src/exports.ts +2 -1
- package/src/sync.ts +57 -23
- package/src/tests/PeerState.test.ts +49 -0
- package/src/tests/PriorityBasedMessageQueue.test.ts +6 -73
- package/src/tests/{SyncStateSubscriptionManager.test.ts → SyncStateManager.test.ts} +109 -25
- package/src/tests/group.test.ts +6 -9
- package/src/tests/sync.test.ts +112 -71
- package/src/tests/testUtils.ts +108 -4
- package/dist/native/SyncStateSubscriptionManager.js.map +0 -1
- package/dist/web/SyncStateSubscriptionManager.js.map +0 -1
package/src/tests/sync.test.ts
CHANGED
|
@@ -1,18 +1,21 @@
|
|
|
1
|
-
import { describe, expect, test, vi } from "vitest";
|
|
1
|
+
import { afterEach, describe, expect, test, vi } from "vitest";
|
|
2
2
|
import { expectMap } from "../coValue.js";
|
|
3
|
-
import { CoValueHeader } from "../coValueCore.js";
|
|
4
|
-
import { RawAccountID } from "../coValues/account.js";
|
|
5
|
-
import { MapOpPayload, RawCoMap } from "../coValues/coMap.js";
|
|
6
|
-
import { RawGroup } from "../coValues/group.js";
|
|
3
|
+
import type { CoValueHeader } from "../coValueCore.js";
|
|
4
|
+
import type { RawAccountID } from "../coValues/account.js";
|
|
5
|
+
import { type MapOpPayload, RawCoMap } from "../coValues/coMap.js";
|
|
6
|
+
import type { RawGroup } from "../coValues/group.js";
|
|
7
7
|
import { WasmCrypto } from "../crypto/WasmCrypto.js";
|
|
8
8
|
import { stableStringify } from "../jsonStringify.js";
|
|
9
9
|
import { LocalNode } from "../localNode.js";
|
|
10
10
|
import { getPriorityFromHeader } from "../priority.js";
|
|
11
11
|
import { connectedPeers, newQueuePair } from "../streamUtils.js";
|
|
12
|
-
import { SyncMessage } from "../sync.js";
|
|
12
|
+
import type { SyncMessage } from "../sync.js";
|
|
13
13
|
import {
|
|
14
|
+
blockMessageTypeOnOutgoingPeer,
|
|
15
|
+
createTestMetricReader,
|
|
14
16
|
createTestNode,
|
|
15
17
|
randomAnonymousAccountAndSessionID,
|
|
18
|
+
tearDownTestMetricReader,
|
|
16
19
|
waitFor,
|
|
17
20
|
} from "./testUtils.js";
|
|
18
21
|
|
|
@@ -1654,12 +1657,7 @@ describe("SyncManager - knownStates vs optimisticKnownStates", () => {
|
|
|
1654
1657
|
await client.syncManager.actuallySyncCoValue(mapOnClient.core);
|
|
1655
1658
|
|
|
1656
1659
|
// Wait for the full sync to complete
|
|
1657
|
-
await
|
|
1658
|
-
return client.syncManager.syncStateSubscriptionManager.getIsCoValueFullyUploadedIntoPeer(
|
|
1659
|
-
"jazzCloudConnection",
|
|
1660
|
-
mapOnClient.core.id,
|
|
1661
|
-
);
|
|
1662
|
-
});
|
|
1660
|
+
await mapOnClient.core.waitForSync();
|
|
1663
1661
|
|
|
1664
1662
|
const peerStateClient = client.syncManager.peers["jazzCloudConnection"]!;
|
|
1665
1663
|
const peerStateJazzCloud =
|
|
@@ -1687,31 +1685,17 @@ describe("SyncManager - knownStates vs optimisticKnownStates", () => {
|
|
|
1687
1685
|
map.set("key1", "value1", "trusting");
|
|
1688
1686
|
|
|
1689
1687
|
await client.syncManager.actuallySyncCoValue(map.core);
|
|
1690
|
-
await
|
|
1691
|
-
return client.syncManager.syncStateSubscriptionManager.getIsCoValueFullyUploadedIntoPeer(
|
|
1692
|
-
"jazzCloudConnection",
|
|
1693
|
-
map.core.id,
|
|
1694
|
-
);
|
|
1695
|
-
});
|
|
1688
|
+
await map.core.waitForSync();
|
|
1696
1689
|
|
|
1697
1690
|
// Block the content messages
|
|
1698
1691
|
// The main difference between optimisticKnownStates and knownStates is that
|
|
1699
1692
|
// optimisticKnownStates is updated when the content messages are sent,
|
|
1700
1693
|
// while knownStates is only updated when we receive the "known" messages
|
|
1701
1694
|
// that are acknowledging the receipt of the content messages
|
|
1702
|
-
const
|
|
1703
|
-
|
|
1704
|
-
|
|
1705
|
-
|
|
1706
|
-
|
|
1707
|
-
pushSpy.mockImplementation(async (msg) => {
|
|
1708
|
-
if (msg.action === "content") {
|
|
1709
|
-
blockedMessages.push(msg);
|
|
1710
|
-
return Promise.resolve();
|
|
1711
|
-
}
|
|
1712
|
-
|
|
1713
|
-
return push.call(jazzCloudConnectionAsPeer.outgoing, msg);
|
|
1714
|
-
});
|
|
1695
|
+
const outgoing = blockMessageTypeOnOutgoingPeer(
|
|
1696
|
+
jazzCloudConnectionAsPeer,
|
|
1697
|
+
"content",
|
|
1698
|
+
);
|
|
1715
1699
|
|
|
1716
1700
|
map.set("key2", "value2", "trusting");
|
|
1717
1701
|
|
|
@@ -1726,18 +1710,10 @@ describe("SyncManager - knownStates vs optimisticKnownStates", () => {
|
|
|
1726
1710
|
// Restore the implementation of push and send the blocked messages
|
|
1727
1711
|
// After this the full sync can be completed and the other node will
|
|
1728
1712
|
// respond with a "known" message acknowledging the receipt of the content messages
|
|
1729
|
-
|
|
1713
|
+
outgoing.unblock();
|
|
1714
|
+
await outgoing.sendBlockedMessages();
|
|
1730
1715
|
|
|
1731
|
-
|
|
1732
|
-
await jazzCloudConnectionAsPeer.outgoing.push(msg);
|
|
1733
|
-
}
|
|
1734
|
-
|
|
1735
|
-
await waitFor(() => {
|
|
1736
|
-
return client.syncManager.syncStateSubscriptionManager.getIsCoValueFullyUploadedIntoPeer(
|
|
1737
|
-
"jazzCloudConnection",
|
|
1738
|
-
map.core.id,
|
|
1739
|
-
);
|
|
1740
|
-
});
|
|
1716
|
+
await map.core.waitForSync();
|
|
1741
1717
|
|
|
1742
1718
|
expect(peerState.optimisticKnownStates.get(map.core.id)).toEqual(
|
|
1743
1719
|
peerState.knownStates.get(map.core.id),
|
|
@@ -1757,12 +1733,7 @@ describe("SyncManager.addPeer", () => {
|
|
|
1757
1733
|
await client.syncManager.actuallySyncCoValue(map.core);
|
|
1758
1734
|
|
|
1759
1735
|
// Wait for initial sync
|
|
1760
|
-
await
|
|
1761
|
-
return client.syncManager.syncStateSubscriptionManager.getIsCoValueFullyUploadedIntoPeer(
|
|
1762
|
-
"jazzCloudConnection",
|
|
1763
|
-
map.core.id,
|
|
1764
|
-
);
|
|
1765
|
-
});
|
|
1736
|
+
await map.core.waitForSync();
|
|
1766
1737
|
|
|
1767
1738
|
// Store the initial known states
|
|
1768
1739
|
const initialKnownStates =
|
|
@@ -1802,12 +1773,7 @@ describe("SyncManager.addPeer", () => {
|
|
|
1802
1773
|
await client.syncManager.actuallySyncCoValue(map.core);
|
|
1803
1774
|
|
|
1804
1775
|
// Wait for initial sync
|
|
1805
|
-
await
|
|
1806
|
-
return client.syncManager.syncStateSubscriptionManager.getIsCoValueFullyUploadedIntoPeer(
|
|
1807
|
-
"jazzCloudConnection",
|
|
1808
|
-
map.core.id,
|
|
1809
|
-
);
|
|
1810
|
-
});
|
|
1776
|
+
await map.core.waitForSync();
|
|
1811
1777
|
|
|
1812
1778
|
// Connect second peer with different ID
|
|
1813
1779
|
const [brandNewPeer] = connectedPeers("brandNewPeer", "unusedPeer", {
|
|
@@ -1894,10 +1860,7 @@ describe("SyncManager.addPeer", () => {
|
|
|
1894
1860
|
|
|
1895
1861
|
client.syncManager.addPeer(jazzCloudConnectionAsPeer);
|
|
1896
1862
|
|
|
1897
|
-
await
|
|
1898
|
-
jazzCloudConnectionAsPeer.id,
|
|
1899
|
-
map.core.id,
|
|
1900
|
-
);
|
|
1863
|
+
await map.core.waitForSync();
|
|
1901
1864
|
|
|
1902
1865
|
expect(jazzCloud.coValuesStore.get(map.id).state.type).toBe("available");
|
|
1903
1866
|
});
|
|
@@ -1960,7 +1923,7 @@ describe("loadCoValueCore with retry", () => {
|
|
|
1960
1923
|
});
|
|
1961
1924
|
});
|
|
1962
1925
|
|
|
1963
|
-
describe("
|
|
1926
|
+
describe("waitForSyncWithPeer", () => {
|
|
1964
1927
|
test("should resolve when the coValue is fully uploaded into the peer", async () => {
|
|
1965
1928
|
const { client, jazzCloudConnectionAsPeer: peer } =
|
|
1966
1929
|
createTwoConnectedNodes();
|
|
@@ -1973,12 +1936,7 @@ describe("waitForUploadIntoPeer", () => {
|
|
|
1973
1936
|
await client.syncManager.actuallySyncCoValue(map.core);
|
|
1974
1937
|
|
|
1975
1938
|
await expect(
|
|
1976
|
-
|
|
1977
|
-
client.syncManager.waitForUploadIntoPeer(peer.id, map.core.id),
|
|
1978
|
-
new Promise((_, reject) =>
|
|
1979
|
-
setTimeout(() => reject(new Error("Timeout")), 100),
|
|
1980
|
-
),
|
|
1981
|
-
]),
|
|
1939
|
+
client.syncManager.waitForSyncWithPeer(peer.id, map.core.id, 100),
|
|
1982
1940
|
).resolves.toBe(true);
|
|
1983
1941
|
});
|
|
1984
1942
|
|
|
@@ -1998,16 +1956,99 @@ describe("waitForUploadIntoPeer", () => {
|
|
|
1998
1956
|
await client.syncManager.actuallySyncCoValue(map.core);
|
|
1999
1957
|
|
|
2000
1958
|
await expect(
|
|
2001
|
-
|
|
2002
|
-
client.syncManager.waitForUploadIntoPeer(peer.id, map.core.id),
|
|
2003
|
-
new Promise((_, reject) =>
|
|
2004
|
-
setTimeout(() => reject(new Error("Timeout")), 100),
|
|
2005
|
-
),
|
|
2006
|
-
]),
|
|
1959
|
+
client.syncManager.waitForSyncWithPeer(peer.id, map.core.id, 100),
|
|
2007
1960
|
).rejects.toThrow("Timeout");
|
|
2008
1961
|
});
|
|
2009
1962
|
});
|
|
2010
1963
|
|
|
1964
|
+
describe("metrics", () => {
|
|
1965
|
+
afterEach(() => {
|
|
1966
|
+
tearDownTestMetricReader();
|
|
1967
|
+
});
|
|
1968
|
+
|
|
1969
|
+
test("should correctly track the number of connected peers", async () => {
|
|
1970
|
+
const metricReader = createTestMetricReader();
|
|
1971
|
+
const [admin, session] = randomAnonymousAccountAndSessionID();
|
|
1972
|
+
const node = new LocalNode(admin, session, Crypto);
|
|
1973
|
+
|
|
1974
|
+
let connectedPeers = await metricReader.getMetricValue("jazz.peers", {
|
|
1975
|
+
role: "peer",
|
|
1976
|
+
});
|
|
1977
|
+
expect(connectedPeers).toBeUndefined();
|
|
1978
|
+
let connectedServerPeers = await metricReader.getMetricValue("jazz.peers", {
|
|
1979
|
+
role: "server",
|
|
1980
|
+
});
|
|
1981
|
+
expect(connectedServerPeers).toBeUndefined();
|
|
1982
|
+
|
|
1983
|
+
// Add a first peer
|
|
1984
|
+
const [inPeer1, outPeer1] = newQueuePair();
|
|
1985
|
+
node.syncManager.addPeer({
|
|
1986
|
+
id: "peer-1",
|
|
1987
|
+
incoming: inPeer1,
|
|
1988
|
+
outgoing: outPeer1,
|
|
1989
|
+
role: "peer",
|
|
1990
|
+
crashOnClose: false,
|
|
1991
|
+
});
|
|
1992
|
+
|
|
1993
|
+
connectedPeers = await metricReader.getMetricValue("jazz.peers", {
|
|
1994
|
+
role: "peer",
|
|
1995
|
+
});
|
|
1996
|
+
expect(connectedPeers).toBe(1);
|
|
1997
|
+
|
|
1998
|
+
// Add another peer
|
|
1999
|
+
const [inPeer2, outPeer2] = newQueuePair();
|
|
2000
|
+
node.syncManager.addPeer({
|
|
2001
|
+
id: "peer-2",
|
|
2002
|
+
incoming: inPeer2,
|
|
2003
|
+
outgoing: outPeer2,
|
|
2004
|
+
role: "peer",
|
|
2005
|
+
crashOnClose: false,
|
|
2006
|
+
});
|
|
2007
|
+
|
|
2008
|
+
connectedPeers = await metricReader.getMetricValue("jazz.peers", {
|
|
2009
|
+
role: "peer",
|
|
2010
|
+
});
|
|
2011
|
+
expect(connectedPeers).toBe(2);
|
|
2012
|
+
|
|
2013
|
+
// Add a server peer
|
|
2014
|
+
const [inServer1, outServer1] = newQueuePair();
|
|
2015
|
+
node.syncManager.addPeer({
|
|
2016
|
+
id: "server-1",
|
|
2017
|
+
incoming: inServer1,
|
|
2018
|
+
outgoing: outServer1,
|
|
2019
|
+
role: "server",
|
|
2020
|
+
crashOnClose: false,
|
|
2021
|
+
});
|
|
2022
|
+
connectedServerPeers = await metricReader.getMetricValue("jazz.peers", {
|
|
2023
|
+
role: "server",
|
|
2024
|
+
});
|
|
2025
|
+
expect(connectedServerPeers).toBe(1);
|
|
2026
|
+
connectedPeers = await metricReader.getMetricValue("jazz.peers", {
|
|
2027
|
+
role: "peer",
|
|
2028
|
+
});
|
|
2029
|
+
expect(connectedPeers).toBe(2);
|
|
2030
|
+
|
|
2031
|
+
// @ts-expect-error Simulating peer-1 closing
|
|
2032
|
+
await outPeer1.push("Disconnected");
|
|
2033
|
+
await waitFor(() => node.syncManager.peers["peer-1"]?.closed);
|
|
2034
|
+
|
|
2035
|
+
connectedPeers = await metricReader.getMetricValue("jazz.peers", {
|
|
2036
|
+
role: "peer",
|
|
2037
|
+
});
|
|
2038
|
+
expect(connectedPeers).toBe(1);
|
|
2039
|
+
|
|
2040
|
+
// @ts-expect-error Simulating server-1 closing
|
|
2041
|
+
await outServer1.push("Disconnected");
|
|
2042
|
+
|
|
2043
|
+
await waitFor(() => node.syncManager.peers["server-1"]?.closed);
|
|
2044
|
+
|
|
2045
|
+
connectedServerPeers = await metricReader.getMetricValue("jazz.peers", {
|
|
2046
|
+
role: "server",
|
|
2047
|
+
});
|
|
2048
|
+
expect(connectedServerPeers).toBe(0);
|
|
2049
|
+
});
|
|
2050
|
+
});
|
|
2051
|
+
|
|
2011
2052
|
function groupContentEx(group: RawGroup) {
|
|
2012
2053
|
return {
|
|
2013
2054
|
action: "content",
|
package/src/tests/testUtils.ts
CHANGED
|
@@ -1,11 +1,18 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { metrics } from "@opentelemetry/api";
|
|
2
|
+
import {
|
|
3
|
+
AggregationTemporality,
|
|
4
|
+
InMemoryMetricExporter,
|
|
5
|
+
MeterProvider,
|
|
6
|
+
MetricReader,
|
|
7
|
+
} from "@opentelemetry/sdk-metrics";
|
|
8
|
+
import { expect, vi } from "vitest";
|
|
2
9
|
import { ControlledAgent } from "../coValues/account.js";
|
|
3
10
|
import { WasmCrypto } from "../crypto/WasmCrypto.js";
|
|
4
|
-
import { CoID, RawCoValue } from "../exports.js";
|
|
5
|
-
import { SessionID } from "../ids.js";
|
|
11
|
+
import type { CoID, RawCoValue } from "../exports.js";
|
|
12
|
+
import type { SessionID } from "../ids.js";
|
|
6
13
|
import { LocalNode } from "../localNode.js";
|
|
7
14
|
import { connectedPeers } from "../streamUtils.js";
|
|
8
|
-
import { Peer } from "../sync.js";
|
|
15
|
+
import type { Peer, SyncMessage } from "../sync.js";
|
|
9
16
|
import { expectGroup } from "../typeUtils/expectGroup.js";
|
|
10
17
|
|
|
11
18
|
const Crypto = await WasmCrypto.create();
|
|
@@ -233,6 +240,35 @@ export async function loadCoValueOrFail<V extends RawCoValue>(
|
|
|
233
240
|
return value;
|
|
234
241
|
}
|
|
235
242
|
|
|
243
|
+
export function blockMessageTypeOnOutgoingPeer(
|
|
244
|
+
peer: Peer,
|
|
245
|
+
messageType: SyncMessage["action"],
|
|
246
|
+
) {
|
|
247
|
+
const push = peer.outgoing.push;
|
|
248
|
+
const pushSpy = vi.spyOn(peer.outgoing, "push");
|
|
249
|
+
|
|
250
|
+
const blockedMessages: SyncMessage[] = [];
|
|
251
|
+
|
|
252
|
+
pushSpy.mockImplementation(async (msg) => {
|
|
253
|
+
if (msg.action === messageType) {
|
|
254
|
+
blockedMessages.push(msg);
|
|
255
|
+
return Promise.resolve();
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
return push.call(peer.outgoing, msg);
|
|
259
|
+
});
|
|
260
|
+
|
|
261
|
+
return {
|
|
262
|
+
sendBlockedMessages: async () => {
|
|
263
|
+
for (const msg of blockedMessages) {
|
|
264
|
+
await push.call(peer.outgoing, msg);
|
|
265
|
+
}
|
|
266
|
+
blockedMessages.length = 0;
|
|
267
|
+
},
|
|
268
|
+
unblock: () => pushSpy.mockRestore(),
|
|
269
|
+
};
|
|
270
|
+
}
|
|
271
|
+
|
|
236
272
|
export function hotSleep(ms: number) {
|
|
237
273
|
const before = Date.now();
|
|
238
274
|
while (Date.now() < before + ms) {
|
|
@@ -240,3 +276,71 @@ export function hotSleep(ms: number) {
|
|
|
240
276
|
}
|
|
241
277
|
return before;
|
|
242
278
|
}
|
|
279
|
+
|
|
280
|
+
/**
|
|
281
|
+
* This is a test metric reader that uses an in-memory metric exporter and exposes a method to get the value of a metric given its name and attributes.
|
|
282
|
+
*
|
|
283
|
+
* This is useful for testing the values of metrics that are collected by the SDK.
|
|
284
|
+
*
|
|
285
|
+
* TODO: We may want to rethink how we access metrics (see `getMetricValue` method) to make it more flexible.
|
|
286
|
+
*/
|
|
287
|
+
class TestMetricReader extends MetricReader {
|
|
288
|
+
private _exporter = new InMemoryMetricExporter(
|
|
289
|
+
AggregationTemporality.CUMULATIVE,
|
|
290
|
+
);
|
|
291
|
+
|
|
292
|
+
protected onShutdown(): Promise<void> {
|
|
293
|
+
throw new Error("Method not implemented.");
|
|
294
|
+
}
|
|
295
|
+
protected onForceFlush(): Promise<void> {
|
|
296
|
+
throw new Error("Method not implemented.");
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
async getMetricValue(
|
|
300
|
+
name: string,
|
|
301
|
+
attributes: { [key: string]: string | number } = {},
|
|
302
|
+
) {
|
|
303
|
+
await this.collectAndExport();
|
|
304
|
+
const metric = this._exporter
|
|
305
|
+
.getMetrics()[0]
|
|
306
|
+
?.scopeMetrics[0]?.metrics.find((m) => m.descriptor.name === name);
|
|
307
|
+
|
|
308
|
+
const dp = metric?.dataPoints.find(
|
|
309
|
+
(dp) => JSON.stringify(dp.attributes) === JSON.stringify(attributes),
|
|
310
|
+
);
|
|
311
|
+
|
|
312
|
+
this._exporter.reset();
|
|
313
|
+
|
|
314
|
+
return dp?.value;
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
async collectAndExport(): Promise<void> {
|
|
318
|
+
const result = await this.collect();
|
|
319
|
+
await new Promise<void>((resolve, reject) => {
|
|
320
|
+
this._exporter.export(result.resourceMetrics, (result) => {
|
|
321
|
+
if (result.error != null) {
|
|
322
|
+
reject(result.error);
|
|
323
|
+
} else {
|
|
324
|
+
resolve();
|
|
325
|
+
}
|
|
326
|
+
});
|
|
327
|
+
});
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
export function createTestMetricReader() {
|
|
332
|
+
const metricReader = new TestMetricReader();
|
|
333
|
+
const success = metrics.setGlobalMeterProvider(
|
|
334
|
+
new MeterProvider({
|
|
335
|
+
readers: [metricReader],
|
|
336
|
+
}),
|
|
337
|
+
);
|
|
338
|
+
|
|
339
|
+
expect(success).toBe(true);
|
|
340
|
+
|
|
341
|
+
return metricReader;
|
|
342
|
+
}
|
|
343
|
+
|
|
344
|
+
export function tearDownTestMetricReader() {
|
|
345
|
+
metrics.disable();
|
|
346
|
+
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"SyncStateSubscriptionManager.js","sourceRoot":"","sources":["../../src/SyncStateSubscriptionManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"SyncStateSubscriptionManager.js","sourceRoot":"","sources":["../../src/SyncStateSubscriptionManager.ts"],"names":[],"mappings":"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"}
|