@livestore/common 0.3.0-dev.19 → 0.3.0-dev.21
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/dist/.tsbuildinfo +1 -1
- package/dist/adapter-types.d.ts +4 -3
- package/dist/adapter-types.d.ts.map +1 -1
- package/dist/adapter-types.js +1 -0
- package/dist/adapter-types.js.map +1 -1
- package/dist/debug-info.d.ts +1 -1
- package/dist/devtools/devtools-messages-client-session.d.ts +41 -22
- package/dist/devtools/devtools-messages-client-session.d.ts.map +1 -1
- package/dist/devtools/devtools-messages-client-session.js +26 -7
- package/dist/devtools/devtools-messages-client-session.js.map +1 -1
- package/dist/devtools/devtools-messages-common.d.ts +16 -12
- package/dist/devtools/devtools-messages-common.d.ts.map +1 -1
- package/dist/devtools/devtools-messages-common.js +15 -5
- package/dist/devtools/devtools-messages-common.js.map +1 -1
- package/dist/devtools/devtools-messages-leader.d.ts +74 -106
- package/dist/devtools/devtools-messages-leader.d.ts.map +1 -1
- package/dist/devtools/devtools-messages-leader.js +52 -37
- package/dist/devtools/devtools-messages-leader.js.map +1 -1
- package/dist/devtools/devtools-sessioninfo.d.ts +28 -0
- package/dist/devtools/devtools-sessioninfo.d.ts.map +1 -0
- package/dist/devtools/devtools-sessioninfo.js +34 -0
- package/dist/devtools/devtools-sessioninfo.js.map +1 -0
- package/dist/devtools/devtools-sessions-channel.d.ts +28 -0
- package/dist/devtools/devtools-sessions-channel.d.ts.map +1 -0
- package/dist/devtools/devtools-sessions-channel.js +34 -0
- package/dist/devtools/devtools-sessions-channel.js.map +1 -0
- package/dist/devtools/index.d.ts +27 -49
- package/dist/devtools/index.d.ts.map +1 -1
- package/dist/devtools/index.js +10 -55
- package/dist/devtools/index.js.map +1 -1
- package/dist/devtools/mod.d.ts +39 -0
- package/dist/devtools/mod.d.ts.map +1 -0
- package/dist/devtools/mod.js +27 -0
- package/dist/devtools/mod.js.map +1 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/leader-thread/leader-worker-devtools.d.ts.map +1 -1
- package/dist/leader-thread/leader-worker-devtools.js +73 -31
- package/dist/leader-thread/leader-worker-devtools.js.map +1 -1
- package/dist/otel.d.ts +2 -0
- package/dist/otel.d.ts.map +1 -1
- package/dist/otel.js +5 -0
- package/dist/otel.js.map +1 -1
- package/dist/query-builder/impl.d.ts +3 -3
- package/dist/query-builder/impl.d.ts.map +1 -1
- package/dist/rehydrate-from-mutationlog.js.map +1 -1
- package/dist/schema/db-schema/dsl/field-defs.d.ts.map +1 -1
- package/dist/schema/db-schema/dsl/field-defs.js.map +1 -1
- package/dist/schema/db-schema/dsl/mod.js.map +1 -1
- package/dist/schema/system-tables.d.ts +2 -2
- package/dist/sync/ClientSessionSyncProcessor.d.ts +6 -1
- package/dist/sync/ClientSessionSyncProcessor.d.ts.map +1 -1
- package/dist/sync/ClientSessionSyncProcessor.js +2 -2
- package/dist/sync/ClientSessionSyncProcessor.js.map +1 -1
- package/dist/util.d.ts +2 -2
- package/dist/util.d.ts.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +3 -3
- package/src/adapter-types.ts +2 -1
- package/src/devtools/devtools-messages-client-session.ts +26 -10
- package/src/devtools/devtools-messages-common.ts +38 -13
- package/src/devtools/devtools-messages-leader.ts +61 -46
- package/src/devtools/devtools-sessioninfo.ts +99 -0
- package/src/devtools/mod.ts +36 -0
- package/src/index.ts +1 -1
- package/src/leader-thread/leader-worker-devtools.ts +83 -36
- package/src/leader-thread/make-leader-thread-layer.ts +1 -1
- package/src/otel.ts +8 -0
- package/src/rehydrate-from-mutationlog.ts +1 -1
- package/src/schema/db-schema/dsl/field-defs.ts +2 -1
- package/src/schema/db-schema/dsl/mod.ts +1 -1
- package/src/sync/ClientSessionSyncProcessor.ts +7 -1
- package/src/version.ts +1 -1
- package/dist/devtools/devtools-bridge.d.ts +0 -16
- package/dist/devtools/devtools-bridge.d.ts.map +0 -1
- package/dist/devtools/devtools-bridge.js +0 -2
- package/dist/devtools/devtools-bridge.js.map +0 -1
- package/src/devtools/devtools-bridge.ts +0 -17
- package/src/devtools/index.ts +0 -76
@@ -0,0 +1,34 @@
|
|
1
|
+
import { Data, Duration, Effect, FiberMap, HashSet, Schedule, Schema, Stream, Subscribable, SubscriptionRef, } from '@livestore/utils/effect';
|
2
|
+
export const RequestSessions = Schema.TaggedStruct('RequestSessions', {});
|
3
|
+
export const SessionInfo = Schema.TaggedStruct('SessionInfo', {
|
4
|
+
storeId: Schema.String,
|
5
|
+
clientId: Schema.String,
|
6
|
+
sessionId: Schema.String,
|
7
|
+
});
|
8
|
+
export const Message = Schema.Union(RequestSessions, SessionInfo);
|
9
|
+
/** Usually called in client session */
|
10
|
+
export const provideSessionInfo = ({ webChannel, sessionInfo, }) => Effect.gen(function* () {
|
11
|
+
yield* webChannel.send(sessionInfo);
|
12
|
+
yield* webChannel.listen.pipe(Stream.flatten(), Stream.filter(Schema.is(RequestSessions)), Stream.tap(() => webChannel.send(sessionInfo)), Stream.runDrain);
|
13
|
+
});
|
14
|
+
/** Usually called in devtools */
|
15
|
+
export const requestSessionInfoSubscription = ({ webChannel, pollInterval = Duration.seconds(1), staleTimeout = Duration.seconds(5), }) => Effect.gen(function* () {
|
16
|
+
yield* webChannel
|
17
|
+
.send(RequestSessions.make({}))
|
18
|
+
.pipe(Effect.repeat(Schedule.spaced(pollInterval)), Effect.interruptible, Effect.tapCauseLogPretty, Effect.forkScoped);
|
19
|
+
const timeoutFiberMap = yield* FiberMap.make();
|
20
|
+
const sessionInfoSubRef = yield* SubscriptionRef.make(HashSet.empty());
|
21
|
+
yield* webChannel.listen.pipe(Stream.flatten(), Stream.filter(Schema.is(SessionInfo)), Stream.map(Data.struct), Stream.tap(Effect.fn(function* (sessionInfo) {
|
22
|
+
yield* SubscriptionRef.getAndUpdate(sessionInfoSubRef, HashSet.add(sessionInfo));
|
23
|
+
// Remove sessionInfo from cache after staleTimeout (unless a new identical item resets the timeout)
|
24
|
+
yield* FiberMap.run(timeoutFiberMap, sessionInfo, Effect.gen(function* () {
|
25
|
+
yield* Effect.sleep(staleTimeout);
|
26
|
+
yield* SubscriptionRef.getAndUpdate(sessionInfoSubRef, HashSet.remove(sessionInfo));
|
27
|
+
}));
|
28
|
+
})), Stream.runDrain, Effect.tapCauseLogPretty, Effect.forkScoped);
|
29
|
+
return Subscribable.make({
|
30
|
+
get: sessionInfoSubRef.get.pipe(Effect.map((sessionInfos) => new Set(sessionInfos))),
|
31
|
+
changes: sessionInfoSubRef.changes.pipe(Stream.map((sessionInfos) => new Set(sessionInfos))),
|
32
|
+
});
|
33
|
+
});
|
34
|
+
//# sourceMappingURL=devtools-sessioninfo.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"devtools-sessioninfo.js","sourceRoot":"","sources":["../../src/devtools/devtools-sessioninfo.ts"],"names":[],"mappings":"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"}
|
@@ -0,0 +1,28 @@
|
|
1
|
+
import type { ParseResult, Scope, WebChannel } from '@livestore/utils/effect';
|
2
|
+
import { Duration, Effect, Schema, Subscribable } from '@livestore/utils/effect';
|
3
|
+
export declare const RequestSessions: Schema.TaggedStruct<"RequestSessions", {}>;
|
4
|
+
export type RequestSessions = typeof RequestSessions.Type;
|
5
|
+
export declare const SessionInfo: Schema.TaggedStruct<"SessionInfo", {
|
6
|
+
storeId: typeof Schema.String;
|
7
|
+
clientId: typeof Schema.String;
|
8
|
+
sessionId: typeof Schema.String;
|
9
|
+
}>;
|
10
|
+
export type SessionInfo = typeof SessionInfo.Type;
|
11
|
+
export declare const Message: Schema.Union<[Schema.TaggedStruct<"RequestSessions", {}>, Schema.TaggedStruct<"SessionInfo", {
|
12
|
+
storeId: typeof Schema.String;
|
13
|
+
clientId: typeof Schema.String;
|
14
|
+
sessionId: typeof Schema.String;
|
15
|
+
}>]>;
|
16
|
+
export type Message = typeof Message.Type;
|
17
|
+
/** Usually called in client session */
|
18
|
+
export declare const provideSessionInfo: ({ webChannel, sessionInfo, }: {
|
19
|
+
webChannel: WebChannel.WebChannel<Message, Message>;
|
20
|
+
sessionInfo: SessionInfo;
|
21
|
+
}) => Effect.Effect<void, ParseResult.ParseError>;
|
22
|
+
/** Usually called in devtools */
|
23
|
+
export declare const requestSessionInfoSubscription: ({ webChannel, pollInterval, staleTimeout, }: {
|
24
|
+
webChannel: WebChannel.WebChannel<Message, Message>;
|
25
|
+
pollInterval?: Duration.DurationInput;
|
26
|
+
staleTimeout?: Duration.DurationInput;
|
27
|
+
}) => Effect.Effect<Subscribable.Subscribable<Set<SessionInfo>>, ParseResult.ParseError, Scope.Scope>;
|
28
|
+
//# sourceMappingURL=devtools-sessions-channel.d.ts.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"devtools-sessions-channel.d.ts","sourceRoot":"","sources":["../../src/devtools/devtools-sessions-channel.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAA;AAC7E,OAAO,EAEL,QAAQ,EACR,MAAM,EAIN,MAAM,EAEN,YAAY,EAEb,MAAM,yBAAyB,CAAA;AAEhC,eAAO,MAAM,eAAe,4CAA6C,CAAA;AACzE,MAAM,MAAM,eAAe,GAAG,OAAO,eAAe,CAAC,IAAI,CAAA;AAEzD,eAAO,MAAM,WAAW;;;;EAItB,CAAA;AACF,MAAM,MAAM,WAAW,GAAG,OAAO,WAAW,CAAC,IAAI,CAAA;AAEjD,eAAO,MAAM,OAAO;;;;IAA6C,CAAA;AACjE,MAAM,MAAM,OAAO,GAAG,OAAO,OAAO,CAAC,IAAI,CAAA;AAEzC,uCAAuC;AACvC,eAAO,MAAM,kBAAkB,GAAI,8BAGhC;IACD,UAAU,EAAE,UAAU,CAAC,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;IACnD,WAAW,EAAE,WAAW,CAAA;CACzB,KAAG,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,WAAW,CAAC,UAAU,CAU1C,CAAA;AAEJ,iCAAiC;AACjC,eAAO,MAAM,8BAA8B,GAAI,6CAI5C;IACD,UAAU,EAAE,UAAU,CAAC,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;IACnD,YAAY,CAAC,EAAE,QAAQ,CAAC,aAAa,CAAA;IACrC,YAAY,CAAC,EAAE,QAAQ,CAAC,aAAa,CAAA;CACtC,KAAG,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,YAAY,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,EAAE,WAAW,CAAC,UAAU,EAAE,KAAK,CAAC,KAAK,CA2C9F,CAAA"}
|
@@ -0,0 +1,34 @@
|
|
1
|
+
import { Data, Duration, Effect, FiberMap, HashSet, Schedule, Schema, Stream, Subscribable, SubscriptionRef, } from '@livestore/utils/effect';
|
2
|
+
export const RequestSessions = Schema.TaggedStruct('RequestSessions', {});
|
3
|
+
export const SessionInfo = Schema.TaggedStruct('SessionInfo', {
|
4
|
+
storeId: Schema.String,
|
5
|
+
clientId: Schema.String,
|
6
|
+
sessionId: Schema.String,
|
7
|
+
});
|
8
|
+
export const Message = Schema.Union(RequestSessions, SessionInfo);
|
9
|
+
/** Usually called in client session */
|
10
|
+
export const provideSessionInfo = ({ webChannel, sessionInfo, }) => Effect.gen(function* () {
|
11
|
+
yield* webChannel.send(sessionInfo);
|
12
|
+
yield* webChannel.listen.pipe(Stream.flatten(), Stream.filter(Schema.is(RequestSessions)), Stream.tap(() => webChannel.send(sessionInfo)), Stream.runDrain);
|
13
|
+
});
|
14
|
+
/** Usually called in devtools */
|
15
|
+
export const requestSessionInfoSubscription = ({ webChannel, pollInterval = Duration.seconds(1), staleTimeout = Duration.seconds(5), }) => Effect.gen(function* () {
|
16
|
+
yield* webChannel
|
17
|
+
.send(RequestSessions.make({}))
|
18
|
+
.pipe(Effect.repeat(Schedule.spaced(pollInterval)), Effect.interruptible, Effect.tapCauseLogPretty, Effect.forkScoped);
|
19
|
+
const timeoutFiberMap = yield* FiberMap.make();
|
20
|
+
const sessionInfoSubRef = yield* SubscriptionRef.make(HashSet.empty());
|
21
|
+
yield* webChannel.listen.pipe(Stream.flatten(), Stream.filter(Schema.is(SessionInfo)), Stream.map(Data.struct), Stream.tap(Effect.fn(function* (sessionInfo) {
|
22
|
+
yield* SubscriptionRef.getAndUpdate(sessionInfoSubRef, HashSet.add(sessionInfo));
|
23
|
+
// Remove sessionInfo from cache after staleTimeout (unless a new identical item resets the timeout)
|
24
|
+
yield* FiberMap.run(timeoutFiberMap, sessionInfo, Effect.gen(function* () {
|
25
|
+
yield* Effect.sleep(staleTimeout);
|
26
|
+
yield* SubscriptionRef.getAndUpdate(sessionInfoSubRef, HashSet.remove(sessionInfo));
|
27
|
+
}));
|
28
|
+
})), Stream.runDrain, Effect.tapCauseLogPretty, Effect.forkScoped);
|
29
|
+
return Subscribable.make({
|
30
|
+
get: sessionInfoSubRef.get.pipe(Effect.map((sessionInfos) => new Set(sessionInfos))),
|
31
|
+
changes: sessionInfoSubRef.changes.pipe(Stream.map((sessionInfos) => new Set(sessionInfos))),
|
32
|
+
});
|
33
|
+
});
|
34
|
+
//# sourceMappingURL=devtools-sessions-channel.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"devtools-sessions-channel.js","sourceRoot":"","sources":["../../src/devtools/devtools-sessions-channel.ts"],"names":[],"mappings":"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"}
|
package/dist/devtools/index.d.ts
CHANGED
@@ -1,61 +1,39 @@
|
|
1
|
-
import
|
2
|
-
import { Schema, WebChannel } from '@livestore/utils/effect';
|
1
|
+
import { Schema } from '@livestore/utils/effect';
|
3
2
|
export * from './devtools-messages.js';
|
4
3
|
export * from './devtools-window-message.js';
|
5
|
-
export * from './devtools-
|
6
|
-
export declare
|
7
|
-
const AppHostReady_base: Schema.TaggedStruct<"LSD.WebBridge.AppHostReady", {
|
8
|
-
appHostId: typeof Schema.String;
|
9
|
-
isLeader: typeof Schema.Boolean;
|
10
|
-
}>;
|
11
|
-
export class AppHostReady extends AppHostReady_base {
|
12
|
-
}
|
13
|
-
const DevtoolsReady_base: Schema.TaggedStruct<"LSD.WebBridge.DevtoolsReady", {
|
14
|
-
devtoolsId: typeof Schema.String;
|
15
|
-
}>;
|
16
|
-
export class DevtoolsReady extends DevtoolsReady_base {
|
17
|
-
}
|
18
|
-
const ConnectToDevtools_base: Schema.TaggedStruct<"LSD.WebBridge.ConnectToDevtools", {
|
19
|
-
devtoolsId: typeof Schema.String;
|
20
|
-
appHostId: typeof Schema.String;
|
21
|
-
/**
|
22
|
-
* Given the m:n relationship between devtools and app hosts and the fact that appHostIds are usually
|
23
|
-
* sticky, we generate a new unique id for the lifetime of the web bridge.
|
24
|
-
*/
|
25
|
-
webBridgeId: typeof Schema.String;
|
26
|
-
isLeader: typeof Schema.Boolean;
|
27
|
-
storeId: typeof Schema.String;
|
28
|
-
}>;
|
29
|
-
export class ConnectToDevtools extends ConnectToDevtools_base {
|
30
|
-
}
|
31
|
-
const AppHostWillDisconnect_base: Schema.TaggedStruct<"LSD.WebBridge.AppHostWillDisconnect", {
|
32
|
-
appHostId: typeof Schema.String;
|
33
|
-
}>;
|
34
|
-
export class AppHostWillDisconnect extends AppHostWillDisconnect_base {
|
35
|
-
}
|
36
|
-
const All_base: Schema.Union<[typeof AppHostReady, typeof DevtoolsReady, typeof ConnectToDevtools, typeof AppHostWillDisconnect]>;
|
37
|
-
export class All extends All_base {
|
38
|
-
}
|
39
|
-
export const makeBroadcastChannel: (key?: string) => Effect.Effect<WebChannel.WebChannel<typeof All.Type, typeof All.Type>, never, Scope.Scope>;
|
40
|
-
export {};
|
41
|
-
}
|
42
|
-
export declare const DevtoolsMode: Schema.Union<[Schema.TaggedStruct<"from-search-params", {}>, Schema.TaggedStruct<"expo", {
|
4
|
+
export * as SessionsChannel from './devtools-sessions-channel.js';
|
5
|
+
export declare const ClientSessionInfo: Schema.Struct<{
|
43
6
|
storeId: typeof Schema.String;
|
44
7
|
clientId: typeof Schema.String;
|
45
8
|
sessionId: typeof Schema.String;
|
9
|
+
}>;
|
10
|
+
export declare const DevtoolsMode: Schema.Union<[Schema.TaggedStruct<"expo", {
|
11
|
+
clientSessionInfo: Schema.UndefinedOr<Schema.Struct<{
|
12
|
+
storeId: typeof Schema.String;
|
13
|
+
clientId: typeof Schema.String;
|
14
|
+
sessionId: typeof Schema.String;
|
15
|
+
}>>;
|
46
16
|
}>, Schema.TaggedStruct<"node", {
|
47
|
-
|
48
|
-
|
49
|
-
|
17
|
+
clientSessionInfo: Schema.UndefinedOr<Schema.Struct<{
|
18
|
+
storeId: typeof Schema.String;
|
19
|
+
clientId: typeof Schema.String;
|
20
|
+
sessionId: typeof Schema.String;
|
21
|
+
}>>;
|
50
22
|
url: typeof Schema.String;
|
51
23
|
}>, Schema.TaggedStruct<"web", {
|
52
|
-
|
53
|
-
|
54
|
-
|
24
|
+
clientSessionInfo: Schema.UndefinedOr<Schema.Struct<{
|
25
|
+
storeId: typeof Schema.String;
|
26
|
+
clientId: typeof Schema.String;
|
27
|
+
sessionId: typeof Schema.String;
|
28
|
+
}>>;
|
55
29
|
}>, Schema.TaggedStruct<"browser-extension", {
|
56
|
-
|
57
|
-
|
58
|
-
|
30
|
+
clientSessionInfo: Schema.UndefinedOr<Schema.Struct<{
|
31
|
+
storeId: typeof Schema.String;
|
32
|
+
clientId: typeof Schema.String;
|
33
|
+
sessionId: typeof Schema.String;
|
34
|
+
}>>;
|
59
35
|
}>]>;
|
60
36
|
export type DevtoolsMode = typeof DevtoolsMode.Type;
|
37
|
+
export declare const DevtoolsModeTag: Schema.SchemaClass<"expo" | "node" | "web" | "browser-extension", "expo" | "node" | "web" | "browser-extension", never>;
|
38
|
+
export type DevtoolsModeTag = typeof DevtoolsModeTag.Type;
|
61
39
|
//# sourceMappingURL=index.d.ts.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/devtools/index.ts"],"names":[],"mappings":"AAAA,OAAO,
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/devtools/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAEhD,cAAc,wBAAwB,CAAA;AACtC,cAAc,8BAA8B,CAAA;AAC5C,OAAO,KAAK,eAAe,MAAM,gCAAgC,CAAA;AACjE,eAAO,MAAM,iBAAiB;;;;EAI5B,CAAA;AAEF,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;IAexB,CAAA;AAED,MAAM,MAAM,YAAY,GAAG,OAAO,YAAY,CAAC,IAAI,CAAA;AAEnD,eAAO,MAAM,eAAe,yHAA6D,CAAA;AACzF,MAAM,MAAM,eAAe,GAAG,OAAO,eAAe,CAAC,IAAI,CAAA"}
|
package/dist/devtools/index.js
CHANGED
@@ -1,68 +1,23 @@
|
|
1
|
-
import { Schema
|
1
|
+
import { Schema } from '@livestore/utils/effect';
|
2
2
|
export * from './devtools-messages.js';
|
3
3
|
export * from './devtools-window-message.js';
|
4
|
-
export * from './devtools-
|
5
|
-
export
|
6
|
-
(function (WebBridge) {
|
7
|
-
class AppHostReady extends Schema.TaggedStruct('LSD.WebBridge.AppHostReady', {
|
8
|
-
appHostId: Schema.String,
|
9
|
-
// storeId: Schema.String,
|
10
|
-
isLeader: Schema.Boolean,
|
11
|
-
}) {
|
12
|
-
}
|
13
|
-
WebBridge.AppHostReady = AppHostReady;
|
14
|
-
class DevtoolsReady extends Schema.TaggedStruct('LSD.WebBridge.DevtoolsReady', {
|
15
|
-
devtoolsId: Schema.String,
|
16
|
-
}) {
|
17
|
-
}
|
18
|
-
WebBridge.DevtoolsReady = DevtoolsReady;
|
19
|
-
class ConnectToDevtools extends Schema.TaggedStruct('LSD.WebBridge.ConnectToDevtools', {
|
20
|
-
devtoolsId: Schema.String,
|
21
|
-
appHostId: Schema.String,
|
22
|
-
/**
|
23
|
-
* Given the m:n relationship between devtools and app hosts and the fact that appHostIds are usually
|
24
|
-
* sticky, we generate a new unique id for the lifetime of the web bridge.
|
25
|
-
*/
|
26
|
-
webBridgeId: Schema.String,
|
27
|
-
isLeader: Schema.Boolean,
|
28
|
-
storeId: Schema.String,
|
29
|
-
}) {
|
30
|
-
}
|
31
|
-
WebBridge.ConnectToDevtools = ConnectToDevtools;
|
32
|
-
class AppHostWillDisconnect extends Schema.TaggedStruct('LSD.WebBridge.AppHostWillDisconnect', {
|
33
|
-
appHostId: Schema.String,
|
34
|
-
}) {
|
35
|
-
}
|
36
|
-
WebBridge.AppHostWillDisconnect = AppHostWillDisconnect;
|
37
|
-
// export class DevtoolsWillDisconnect extends Schema.TaggedStruct('LSD.WebBridge.DevtoolsWillDisconnect', {
|
38
|
-
// appHostId: Schema.String,
|
39
|
-
// }) {}
|
40
|
-
class All extends Schema.Union(AppHostReady, DevtoolsReady, ConnectToDevtools, AppHostWillDisconnect) {
|
41
|
-
}
|
42
|
-
WebBridge.All = All;
|
43
|
-
WebBridge.makeBroadcastChannel = (key) => WebChannel.broadcastChannel({
|
44
|
-
channelName: `livestore-web-bridge-devtools${key ? `-${key}` : ''}`,
|
45
|
-
schema: All,
|
46
|
-
});
|
47
|
-
})(WebBridge || (WebBridge = {}));
|
48
|
-
export const DevtoolsMode = Schema.Union(Schema.TaggedStruct('from-search-params', {}), Schema.TaggedStruct('expo', {
|
4
|
+
export * as SessionsChannel from './devtools-sessions-channel.js';
|
5
|
+
export const ClientSessionInfo = Schema.Struct({
|
49
6
|
storeId: Schema.String,
|
50
7
|
clientId: Schema.String,
|
51
8
|
sessionId: Schema.String,
|
9
|
+
});
|
10
|
+
export const DevtoolsMode = Schema.Union(Schema.TaggedStruct('expo', {
|
11
|
+
clientSessionInfo: Schema.UndefinedOr(ClientSessionInfo),
|
52
12
|
}),
|
53
13
|
// TODO add storeId, clientId and sessionId for Node
|
54
14
|
Schema.TaggedStruct('node', {
|
55
|
-
|
56
|
-
clientId: Schema.String,
|
57
|
-
sessionId: Schema.String,
|
15
|
+
clientSessionInfo: Schema.UndefinedOr(ClientSessionInfo),
|
58
16
|
url: Schema.String,
|
59
17
|
}), Schema.TaggedStruct('web', {
|
60
|
-
|
61
|
-
clientId: Schema.String,
|
62
|
-
sessionId: Schema.String,
|
18
|
+
clientSessionInfo: Schema.UndefinedOr(ClientSessionInfo),
|
63
19
|
}), Schema.TaggedStruct('browser-extension', {
|
64
|
-
|
65
|
-
clientId: Schema.String,
|
66
|
-
sessionId: Schema.String,
|
20
|
+
clientSessionInfo: Schema.UndefinedOr(ClientSessionInfo),
|
67
21
|
}));
|
22
|
+
export const DevtoolsModeTag = DevtoolsMode.pipe(Schema.pluck('_tag'), Schema.typeSchema);
|
68
23
|
//# sourceMappingURL=index.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/devtools/index.ts"],"names":[],"mappings":"
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/devtools/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAEhD,cAAc,wBAAwB,CAAA;AACtC,cAAc,8BAA8B,CAAA;AAC5C,OAAO,KAAK,eAAe,MAAM,gCAAgC,CAAA;AACjE,MAAM,CAAC,MAAM,iBAAiB,GAAG,MAAM,CAAC,MAAM,CAAC;IAC7C,OAAO,EAAE,MAAM,CAAC,MAAM;IACtB,QAAQ,EAAE,MAAM,CAAC,MAAM;IACvB,SAAS,EAAE,MAAM,CAAC,MAAM;CACzB,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,YAAY,GAAG,MAAM,CAAC,KAAK,CACtC,MAAM,CAAC,YAAY,CAAC,MAAM,EAAE;IAC1B,iBAAiB,EAAE,MAAM,CAAC,WAAW,CAAC,iBAAiB,CAAC;CACzD,CAAC;AACF,oDAAoD;AACpD,MAAM,CAAC,YAAY,CAAC,MAAM,EAAE;IAC1B,iBAAiB,EAAE,MAAM,CAAC,WAAW,CAAC,iBAAiB,CAAC;IACxD,GAAG,EAAE,MAAM,CAAC,MAAM;CACnB,CAAC,EACF,MAAM,CAAC,YAAY,CAAC,KAAK,EAAE;IACzB,iBAAiB,EAAE,MAAM,CAAC,WAAW,CAAC,iBAAiB,CAAC;CACzD,CAAC,EACF,MAAM,CAAC,YAAY,CAAC,mBAAmB,EAAE;IACvC,iBAAiB,EAAE,MAAM,CAAC,WAAW,CAAC,iBAAiB,CAAC;CACzD,CAAC,CACH,CAAA;AAID,MAAM,CAAC,MAAM,eAAe,GAAG,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC,CAAA"}
|
@@ -0,0 +1,39 @@
|
|
1
|
+
import { Schema } from '@livestore/utils/effect';
|
2
|
+
export * from './devtools-messages.js';
|
3
|
+
export * from './devtools-window-message.js';
|
4
|
+
export * as SessionInfo from './devtools-sessioninfo.js';
|
5
|
+
export declare const ClientSessionInfo: Schema.Struct<{
|
6
|
+
storeId: typeof Schema.String;
|
7
|
+
clientId: typeof Schema.String;
|
8
|
+
sessionId: typeof Schema.String;
|
9
|
+
}>;
|
10
|
+
export declare const DevtoolsMode: Schema.Union<[Schema.TaggedStruct<"expo", {
|
11
|
+
clientSessionInfo: Schema.optional<Schema.Struct<{
|
12
|
+
storeId: typeof Schema.String;
|
13
|
+
clientId: typeof Schema.String;
|
14
|
+
sessionId: typeof Schema.String;
|
15
|
+
}>>;
|
16
|
+
}>, Schema.TaggedStruct<"node", {
|
17
|
+
clientSessionInfo: Schema.UndefinedOr<Schema.Struct<{
|
18
|
+
storeId: typeof Schema.String;
|
19
|
+
clientId: typeof Schema.String;
|
20
|
+
sessionId: typeof Schema.String;
|
21
|
+
}>>;
|
22
|
+
url: typeof Schema.String;
|
23
|
+
}>, Schema.TaggedStruct<"web", {
|
24
|
+
clientSessionInfo: Schema.UndefinedOr<Schema.Struct<{
|
25
|
+
storeId: typeof Schema.String;
|
26
|
+
clientId: typeof Schema.String;
|
27
|
+
sessionId: typeof Schema.String;
|
28
|
+
}>>;
|
29
|
+
}>, Schema.TaggedStruct<"browser-extension", {
|
30
|
+
clientSessionInfo: Schema.UndefinedOr<Schema.Struct<{
|
31
|
+
storeId: typeof Schema.String;
|
32
|
+
clientId: typeof Schema.String;
|
33
|
+
sessionId: typeof Schema.String;
|
34
|
+
}>>;
|
35
|
+
}>]>;
|
36
|
+
export type DevtoolsMode = typeof DevtoolsMode.Type;
|
37
|
+
export declare const DevtoolsModeTag: Schema.SchemaClass<"expo" | "node" | "web" | "browser-extension", "expo" | "node" | "web" | "browser-extension", never>;
|
38
|
+
export type DevtoolsModeTag = typeof DevtoolsModeTag.Type;
|
39
|
+
//# sourceMappingURL=mod.d.ts.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"mod.d.ts","sourceRoot":"","sources":["../../src/devtools/mod.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAEhD,cAAc,wBAAwB,CAAA;AACtC,cAAc,8BAA8B,CAAA;AAC5C,OAAO,KAAK,WAAW,MAAM,2BAA2B,CAAA;AACxD,eAAO,MAAM,iBAAiB;;;;EAI5B,CAAA;AAEF,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;IAmBxB,CAAA;AAED,MAAM,MAAM,YAAY,GAAG,OAAO,YAAY,CAAC,IAAI,CAAA;AAEnD,eAAO,MAAM,eAAe,yHAA6D,CAAA;AACzF,MAAM,MAAM,eAAe,GAAG,OAAO,eAAe,CAAC,IAAI,CAAA"}
|
@@ -0,0 +1,27 @@
|
|
1
|
+
import { Schema } from '@livestore/utils/effect';
|
2
|
+
export * from './devtools-messages.js';
|
3
|
+
export * from './devtools-window-message.js';
|
4
|
+
export * as SessionInfo from './devtools-sessioninfo.js';
|
5
|
+
export const ClientSessionInfo = Schema.Struct({
|
6
|
+
storeId: Schema.String,
|
7
|
+
clientId: Schema.String,
|
8
|
+
sessionId: Schema.String,
|
9
|
+
});
|
10
|
+
export const DevtoolsMode = Schema.Union(Schema.TaggedStruct('expo', {
|
11
|
+
// TODO get rid of embedded `clientSessionInfo`
|
12
|
+
clientSessionInfo: Schema.optional(ClientSessionInfo),
|
13
|
+
}),
|
14
|
+
// TODO add storeId, clientId and sessionId for Node
|
15
|
+
Schema.TaggedStruct('node', {
|
16
|
+
// TODO get rid of embedded `clientSessionInfo`
|
17
|
+
clientSessionInfo: Schema.UndefinedOr(ClientSessionInfo),
|
18
|
+
url: Schema.String,
|
19
|
+
}), Schema.TaggedStruct('web', {
|
20
|
+
// TODO get rid of embedded `clientSessionInfo`
|
21
|
+
clientSessionInfo: Schema.UndefinedOr(ClientSessionInfo),
|
22
|
+
}), Schema.TaggedStruct('browser-extension', {
|
23
|
+
// TODO get rid of embedded `clientSessionInfo`
|
24
|
+
clientSessionInfo: Schema.UndefinedOr(ClientSessionInfo),
|
25
|
+
}));
|
26
|
+
export const DevtoolsModeTag = DevtoolsMode.pipe(Schema.pluck('_tag'), Schema.typeSchema);
|
27
|
+
//# sourceMappingURL=mod.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"mod.js","sourceRoot":"","sources":["../../src/devtools/mod.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAEhD,cAAc,wBAAwB,CAAA;AACtC,cAAc,8BAA8B,CAAA;AAC5C,OAAO,KAAK,WAAW,MAAM,2BAA2B,CAAA;AACxD,MAAM,CAAC,MAAM,iBAAiB,GAAG,MAAM,CAAC,MAAM,CAAC;IAC7C,OAAO,EAAE,MAAM,CAAC,MAAM;IACtB,QAAQ,EAAE,MAAM,CAAC,MAAM;IACvB,SAAS,EAAE,MAAM,CAAC,MAAM;CACzB,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,YAAY,GAAG,MAAM,CAAC,KAAK,CACtC,MAAM,CAAC,YAAY,CAAC,MAAM,EAAE;IAC1B,+CAA+C;IAC/C,iBAAiB,EAAE,MAAM,CAAC,QAAQ,CAAC,iBAAiB,CAAC;CACtD,CAAC;AACF,oDAAoD;AACpD,MAAM,CAAC,YAAY,CAAC,MAAM,EAAE;IAC1B,+CAA+C;IAC/C,iBAAiB,EAAE,MAAM,CAAC,WAAW,CAAC,iBAAiB,CAAC;IACxD,GAAG,EAAE,MAAM,CAAC,MAAM;CACnB,CAAC,EACF,MAAM,CAAC,YAAY,CAAC,KAAK,EAAE;IACzB,+CAA+C;IAC/C,iBAAiB,EAAE,MAAM,CAAC,WAAW,CAAC,iBAAiB,CAAC;CACzD,CAAC,EACF,MAAM,CAAC,YAAY,CAAC,mBAAmB,EAAE;IACvC,+CAA+C;IAC/C,iBAAiB,EAAE,MAAM,CAAC,WAAW,CAAC,iBAAiB,CAAC;CACzD,CAAC,CACH,CAAA;AAID,MAAM,CAAC,MAAM,eAAe,GAAG,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC,CAAA"}
|
package/dist/index.d.ts
CHANGED
@@ -8,7 +8,7 @@ export * from './rehydrate-from-mutationlog.js';
|
|
8
8
|
export * from './query-info.js';
|
9
9
|
export * from './derived-mutations.js';
|
10
10
|
export * from './sync/index.js';
|
11
|
-
export * as Devtools from './devtools/
|
11
|
+
export * as Devtools from './devtools/mod.js';
|
12
12
|
export * from './debug-info.js';
|
13
13
|
export * from './bounded-collections.js';
|
14
14
|
export * from './version.js';
|
package/dist/index.d.ts.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,2BAA2B,CAAA;AACzC,cAAc,WAAW,CAAA;AACzB,cAAc,oBAAoB,CAAA;AAClC,cAAc,mCAAmC,CAAA;AACjD,cAAc,eAAe,CAAA;AAC7B,cAAc,4BAA4B,CAAA;AAC1C,cAAc,iCAAiC,CAAA;AAC/C,cAAc,iBAAiB,CAAA;AAC/B,cAAc,wBAAwB,CAAA;AACtC,cAAc,iBAAiB,CAAA;AAC/B,OAAO,KAAK,QAAQ,MAAM,
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,2BAA2B,CAAA;AACzC,cAAc,WAAW,CAAA;AACzB,cAAc,oBAAoB,CAAA;AAClC,cAAc,mCAAmC,CAAA;AACjD,cAAc,eAAe,CAAA;AAC7B,cAAc,4BAA4B,CAAA;AAC1C,cAAc,iCAAiC,CAAA;AAC/C,cAAc,iBAAiB,CAAA;AAC/B,cAAc,wBAAwB,CAAA;AACtC,cAAc,iBAAiB,CAAA;AAC/B,OAAO,KAAK,QAAQ,MAAM,mBAAmB,CAAA;AAC7C,cAAc,iBAAiB,CAAA;AAC/B,cAAc,0BAA0B,CAAA;AACxC,cAAc,cAAc,CAAA;AAC5B,cAAc,wBAAwB,CAAA;AACtC,OAAO,KAAK,SAAS,MAAM,qBAAqB,CAAA;AAChD,cAAc,WAAW,CAAA"}
|
package/dist/index.js
CHANGED
@@ -8,7 +8,7 @@ export * from './rehydrate-from-mutationlog.js';
|
|
8
8
|
export * from './query-info.js';
|
9
9
|
export * from './derived-mutations.js';
|
10
10
|
export * from './sync/index.js';
|
11
|
-
export * as Devtools from './devtools/
|
11
|
+
export * as Devtools from './devtools/mod.js';
|
12
12
|
export * from './debug-info.js';
|
13
13
|
export * from './bounded-collections.js';
|
14
14
|
export * from './version.js';
|
package/dist/index.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,2BAA2B,CAAA;AACzC,cAAc,WAAW,CAAA;AACzB,cAAc,oBAAoB,CAAA;AAClC,cAAc,mCAAmC,CAAA;AACjD,cAAc,eAAe,CAAA;AAC7B,cAAc,4BAA4B,CAAA;AAC1C,cAAc,iCAAiC,CAAA;AAC/C,cAAc,iBAAiB,CAAA;AAC/B,cAAc,wBAAwB,CAAA;AACtC,cAAc,iBAAiB,CAAA;AAC/B,OAAO,KAAK,QAAQ,MAAM,
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,2BAA2B,CAAA;AACzC,cAAc,WAAW,CAAA;AACzB,cAAc,oBAAoB,CAAA;AAClC,cAAc,mCAAmC,CAAA;AACjD,cAAc,eAAe,CAAA;AAC7B,cAAc,4BAA4B,CAAA;AAC1C,cAAc,iCAAiC,CAAA;AAC/C,cAAc,iBAAiB,CAAA;AAC/B,cAAc,wBAAwB,CAAA;AACtC,cAAc,iBAAiB,CAAA;AAC/B,OAAO,KAAK,QAAQ,MAAM,mBAAmB,CAAA;AAC7C,cAAc,iBAAiB,CAAA;AAC/B,cAAc,0BAA0B,CAAA;AACxC,cAAc,cAAc,CAAA;AAC5B,cAAc,wBAAwB,CAAA;AACtC,OAAO,KAAK,SAAS,MAAM,qBAAqB,CAAA;AAChD,cAAc,WAAW,CAAA"}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"leader-worker-devtools.d.ts","sourceRoot":"","sources":["../../src/leader-thread/leader-worker-devtools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAA6C,MAAM,yBAAyB,CAAA;
|
1
|
+
{"version":3,"file":"leader-worker-devtools.d.ts","sourceRoot":"","sources":["../../src/leader-thread/leader-worker-devtools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAA6C,MAAM,yBAAyB,CAAA;AAG3F,OAAO,EAAwD,eAAe,EAAE,MAAM,aAAa,CAAA;AAEnG,OAAO,KAAK,EAAE,eAAe,EAAuB,MAAM,YAAY,CAAA;AACtE,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAK5C,eAAO,MAAM,YAAY,GAAI,SAAS,eAAe,4IAwCsB,CAAA"}
|
@@ -1,4 +1,5 @@
|
|
1
1
|
import { Effect, FiberMap, Option, Stream, SubscriptionRef } from '@livestore/utils/effect';
|
2
|
+
import { nanoid } from '@livestore/utils/nanoid';
|
2
3
|
import { Devtools, IntentionalShutdownCause, liveStoreVersion, UnexpectedError } from '../index.js';
|
3
4
|
import { MUTATION_LOG_META_TABLE, SCHEMA_META_TABLE, SCHEMA_MUTATIONS_META_TABLE } from '../schema/mod.js';
|
4
5
|
import { LeaderThreadCtx } from './types.js';
|
@@ -29,13 +30,26 @@ export const bootDevtools = (options) => Effect.gen(function* () {
|
|
29
30
|
const listenToDevtools = ({ incomingMessages, sendMessage, persistenceInfo, }) => Effect.gen(function* () {
|
30
31
|
const { syncBackend, makeSqliteDb, dbReadModel, dbMutationLog, shutdownStateSubRef, shutdownChannel, syncProcessor, clientId, devtools, } = yield* LeaderThreadCtx;
|
31
32
|
const subscriptionFiberMap = yield* FiberMap.make();
|
33
|
+
const handledRequestIds = new Set();
|
32
34
|
yield* incomingMessages.pipe(Stream.tap((decodedEvent) => Effect.gen(function* () {
|
33
|
-
|
35
|
+
const { requestId } = decodedEvent;
|
36
|
+
const reqPayload = { requestId, liveStoreVersion, clientId };
|
37
|
+
// yield* Effect.logDebug(
|
38
|
+
// `[@livestore/common:leader-thread:devtools] incomingMessage: ${decodedEvent._tag} (${requestId})`,
|
39
|
+
// decodedEvent,
|
40
|
+
// )
|
34
41
|
if (decodedEvent._tag === 'LSD.Leader.Disconnect') {
|
35
42
|
return;
|
36
43
|
}
|
37
|
-
|
38
|
-
|
44
|
+
// TODO we should try to move the duplicate message handling on the webmesh layer
|
45
|
+
// So far I could only observe this problem with webmesh proxy channels (e.g. for Expo)
|
46
|
+
// Proof: https://share.cleanshot.com/V9G87B0B
|
47
|
+
// Also see `store/devtools.ts` for same problem
|
48
|
+
if (handledRequestIds.has(requestId)) {
|
49
|
+
// yield* Effect.logWarning(`Duplicate message`, decodedEvent)
|
50
|
+
return;
|
51
|
+
}
|
52
|
+
handledRequestIds.add(requestId);
|
39
53
|
switch (decodedEvent._tag) {
|
40
54
|
case 'LSD.Leader.Ping': {
|
41
55
|
yield* sendMessage(Devtools.Leader.Pong.make({ ...reqPayload }));
|
@@ -46,7 +60,7 @@ const listenToDevtools = ({ incomingMessages, sendMessage, persistenceInfo, }) =
|
|
46
60
|
yield* sendMessage(Devtools.Leader.SnapshotRes.make({ snapshot, ...reqPayload }));
|
47
61
|
return;
|
48
62
|
}
|
49
|
-
case 'LSD.Leader.
|
63
|
+
case 'LSD.Leader.LoadDatabaseFile.Request': {
|
50
64
|
const { data } = decodedEvent;
|
51
65
|
let tableNames;
|
52
66
|
try {
|
@@ -56,28 +70,46 @@ const listenToDevtools = ({ incomingMessages, sendMessage, persistenceInfo, }) =
|
|
56
70
|
tableNames = new Set(tableNameResults.map((_) => _.name));
|
57
71
|
tmpDb.close();
|
58
72
|
}
|
59
|
-
catch (
|
60
|
-
yield* Effect.logError(`Error importing database file`,
|
61
|
-
yield* sendMessage(Devtools.Leader.
|
73
|
+
catch (cause) {
|
74
|
+
yield* Effect.logError(`Error importing database file`, cause);
|
75
|
+
yield* sendMessage(Devtools.Leader.LoadDatabaseFile.Error.make({
|
76
|
+
...reqPayload,
|
77
|
+
cause: { _tag: 'unexpected-error', cause },
|
78
|
+
}));
|
62
79
|
return;
|
63
80
|
}
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
81
|
+
try {
|
82
|
+
if (tableNames.has(MUTATION_LOG_META_TABLE)) {
|
83
|
+
// Is mutation log
|
84
|
+
yield* SubscriptionRef.set(shutdownStateSubRef, 'shutting-down');
|
85
|
+
dbMutationLog.import(data);
|
86
|
+
dbReadModel.destroy();
|
87
|
+
}
|
88
|
+
else if (tableNames.has(SCHEMA_META_TABLE) && tableNames.has(SCHEMA_MUTATIONS_META_TABLE)) {
|
89
|
+
// Is read model
|
90
|
+
yield* SubscriptionRef.set(shutdownStateSubRef, 'shutting-down');
|
91
|
+
dbReadModel.import(data);
|
92
|
+
dbMutationLog.destroy();
|
93
|
+
}
|
94
|
+
else {
|
95
|
+
yield* sendMessage(Devtools.Leader.LoadDatabaseFile.Error.make({
|
96
|
+
...reqPayload,
|
97
|
+
cause: { _tag: 'unsupported-database' },
|
98
|
+
}));
|
99
|
+
return;
|
100
|
+
}
|
101
|
+
yield* sendMessage(Devtools.Leader.LoadDatabaseFile.Success.make({ ...reqPayload }));
|
102
|
+
yield* shutdownChannel.send(IntentionalShutdownCause.make({ reason: 'devtools-import' })) ?? Effect.void;
|
103
|
+
return;
|
73
104
|
}
|
74
|
-
|
75
|
-
yield*
|
105
|
+
catch (cause) {
|
106
|
+
yield* Effect.logError(`Error importing database file`, cause);
|
107
|
+
yield* sendMessage(Devtools.Leader.LoadDatabaseFile.Error.make({
|
108
|
+
...reqPayload,
|
109
|
+
cause: { _tag: 'unexpected-error', cause },
|
110
|
+
}));
|
76
111
|
return;
|
77
112
|
}
|
78
|
-
yield* sendMessage(Devtools.Leader.LoadDatabaseFileRes.make({ ...reqPayload, status: 'ok' }));
|
79
|
-
yield* shutdownChannel.send(IntentionalShutdownCause.make({ reason: 'devtools-import' })) ?? Effect.void;
|
80
|
-
return;
|
81
113
|
}
|
82
114
|
case 'LSD.Leader.ResetAllData.Request': {
|
83
115
|
const { mode } = decodedEvent;
|
@@ -86,7 +118,7 @@ const listenToDevtools = ({ incomingMessages, sendMessage, persistenceInfo, }) =
|
|
86
118
|
if (mode === 'all-data') {
|
87
119
|
dbMutationLog.destroy();
|
88
120
|
}
|
89
|
-
yield* sendMessage(Devtools.Leader.ResetAllData.
|
121
|
+
yield* sendMessage(Devtools.Leader.ResetAllData.Success.make({ ...reqPayload }));
|
90
122
|
yield* shutdownChannel.send(IntentionalShutdownCause.make({ reason: 'devtools-reset' })) ?? Effect.void;
|
91
123
|
return;
|
92
124
|
}
|
@@ -120,10 +152,16 @@ const listenToDevtools = ({ incomingMessages, sendMessage, persistenceInfo, }) =
|
|
120
152
|
return;
|
121
153
|
}
|
122
154
|
case 'LSD.Leader.SyncHistorySubscribe': {
|
123
|
-
const {
|
155
|
+
const { subscriptionId } = decodedEvent;
|
124
156
|
if (syncBackend !== undefined) {
|
125
157
|
// TODO consider piggybacking on the existing leader-thread sync-pulling
|
126
|
-
yield* syncBackend.pull(Option.none()).pipe(Stream.map((_) => _.batch), Stream.flattenIterables, Stream.tap(({ mutationEventEncoded, metadata }) => sendMessage(Devtools.Leader.SyncHistoryRes.make({
|
158
|
+
yield* syncBackend.pull(Option.none()).pipe(Stream.map((_) => _.batch), Stream.flattenIterables, Stream.tap(({ mutationEventEncoded, metadata }) => sendMessage(Devtools.Leader.SyncHistoryRes.make({
|
159
|
+
mutationEventEncoded,
|
160
|
+
metadata,
|
161
|
+
subscriptionId,
|
162
|
+
...reqPayload,
|
163
|
+
requestId: nanoid(10),
|
164
|
+
}))), Stream.runDrain, Effect.interruptible, Effect.tapCauseLogPretty, FiberMap.run(subscriptionFiberMap, subscriptionId));
|
127
165
|
}
|
128
166
|
return;
|
129
167
|
}
|
@@ -143,15 +181,17 @@ const listenToDevtools = ({ incomingMessages, sendMessage, persistenceInfo, }) =
|
|
143
181
|
}
|
144
182
|
case 'LSD.Leader.NetworkStatusSubscribe': {
|
145
183
|
if (syncBackend !== undefined) {
|
146
|
-
const {
|
184
|
+
const { subscriptionId } = decodedEvent;
|
147
185
|
// TODO investigate and fix bug. seems that when sending messages right after
|
148
186
|
// the devtools have connected get sometimes lost
|
149
187
|
// This is probably the same "flaky databrowser loading" bug as we're seeing in the playwright tests
|
150
188
|
yield* Effect.sleep(1000);
|
151
189
|
yield* Stream.zipLatest(syncBackend.isConnected.changes, devtools.enabled ? devtools.syncBackendLatchState.changes : Stream.make({ latchClosed: false })).pipe(Stream.tap(([isConnected, { latchClosed }]) => sendMessage(Devtools.Leader.NetworkStatusRes.make({
|
152
190
|
networkStatus: { isConnected, timestampMs: Date.now(), latchClosed },
|
191
|
+
subscriptionId,
|
153
192
|
...reqPayload,
|
154
|
-
|
193
|
+
requestId: nanoid(10),
|
194
|
+
}))), Stream.runDrain, Effect.interruptible, Effect.tapCauseLogPretty, FiberMap.run(subscriptionFiberMap, subscriptionId));
|
155
195
|
}
|
156
196
|
return;
|
157
197
|
}
|
@@ -161,17 +201,19 @@ const listenToDevtools = ({ incomingMessages, sendMessage, persistenceInfo, }) =
|
|
161
201
|
return;
|
162
202
|
}
|
163
203
|
case 'LSD.Leader.SyncHeadSubscribe': {
|
164
|
-
const {
|
204
|
+
const { subscriptionId } = decodedEvent;
|
165
205
|
yield* syncProcessor.syncState.changes.pipe(Stream.tap((syncState) => sendMessage(Devtools.Leader.SyncHeadRes.make({
|
166
206
|
local: syncState.localHead,
|
167
207
|
upstream: syncState.upstreamHead,
|
208
|
+
subscriptionId,
|
168
209
|
...reqPayload,
|
169
|
-
|
210
|
+
requestId: nanoid(10),
|
211
|
+
}))), Stream.runDrain, Effect.interruptible, Effect.tapCauseLogPretty, FiberMap.run(subscriptionFiberMap, subscriptionId));
|
170
212
|
return;
|
171
213
|
}
|
172
214
|
case 'LSD.Leader.SyncHeadUnsubscribe': {
|
173
|
-
const {
|
174
|
-
yield* FiberMap.remove(subscriptionFiberMap,
|
215
|
+
const { subscriptionId } = decodedEvent;
|
216
|
+
yield* FiberMap.remove(subscriptionFiberMap, subscriptionId);
|
175
217
|
return;
|
176
218
|
}
|
177
219
|
case 'LSD.Leader.SetSyncLatch.Request': {
|
@@ -185,7 +227,7 @@ const listenToDevtools = ({ incomingMessages, sendMessage, persistenceInfo, }) =
|
|
185
227
|
yield* devtools.syncBackendLatch.open;
|
186
228
|
}
|
187
229
|
yield* SubscriptionRef.set(devtools.syncBackendLatchState, { latchClosed: closeLatch });
|
188
|
-
yield* sendMessage(Devtools.Leader.SetSyncLatch.
|
230
|
+
yield* sendMessage(Devtools.Leader.SetSyncLatch.Success.make({ ...reqPayload }));
|
189
231
|
return;
|
190
232
|
}
|
191
233
|
default: {
|