@livestore/adapter-web 0.0.0-snapshot-a953343ad2d7468c6573bcb5e26f0eab4302078f
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/.eslintrc.cjs +6 -0
- package/README.md +12 -0
- package/dist/.tsbuildinfo +1 -0
- package/dist/common/connection.d.ts +7 -0
- package/dist/common/connection.d.ts.map +1 -0
- package/dist/common/connection.js +25 -0
- package/dist/common/connection.js.map +1 -0
- package/dist/devtools-bridge/background-browser-channel.d.ts +9 -0
- package/dist/devtools-bridge/background-browser-channel.d.ts.map +1 -0
- package/dist/devtools-bridge/background-browser-channel.js +31 -0
- package/dist/devtools-bridge/background-browser-channel.js.map +1 -0
- package/dist/devtools-bridge/background-message.d.ts +75 -0
- package/dist/devtools-bridge/background-message.d.ts.map +1 -0
- package/dist/devtools-bridge/background-message.js +53 -0
- package/dist/devtools-bridge/background-message.js.map +1 -0
- package/dist/devtools-bridge/bridge-shared.d.ts +14 -0
- package/dist/devtools-bridge/bridge-shared.d.ts.map +1 -0
- package/dist/devtools-bridge/bridge-shared.js +67 -0
- package/dist/devtools-bridge/bridge-shared.js.map +1 -0
- package/dist/devtools-bridge/browser-extension-bridge.d.ts +3 -0
- package/dist/devtools-bridge/browser-extension-bridge.d.ts.map +1 -0
- package/dist/devtools-bridge/browser-extension-bridge.js +59 -0
- package/dist/devtools-bridge/browser-extension-bridge.js.map +1 -0
- package/dist/devtools-bridge/iframe-message.d.ts +16 -0
- package/dist/devtools-bridge/iframe-message.d.ts.map +1 -0
- package/dist/devtools-bridge/iframe-message.js +11 -0
- package/dist/devtools-bridge/iframe-message.js.map +1 -0
- package/dist/devtools-bridge/index.d.ts +6 -0
- package/dist/devtools-bridge/index.d.ts.map +1 -0
- package/dist/devtools-bridge/index.js +5 -0
- package/dist/devtools-bridge/index.js.map +1 -0
- package/dist/devtools-bridge/web-bridge.d.ts +31 -0
- package/dist/devtools-bridge/web-bridge.d.ts.map +1 -0
- package/dist/devtools-bridge/web-bridge.js +131 -0
- package/dist/devtools-bridge/web-bridge.js.map +1 -0
- package/dist/in-memory/index.d.ts +4 -0
- package/dist/in-memory/index.d.ts.map +1 -0
- package/dist/in-memory/index.js +50 -0
- package/dist/in-memory/index.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -0
- package/dist/opfs-utils.d.ts +5 -0
- package/dist/opfs-utils.d.ts.map +1 -0
- package/dist/opfs-utils.js +43 -0
- package/dist/opfs-utils.js.map +1 -0
- package/dist/web-worker/client-session/client-session-devtools.d.ts +7 -0
- package/dist/web-worker/client-session/client-session-devtools.d.ts.map +1 -0
- package/dist/web-worker/client-session/client-session-devtools.js +107 -0
- package/dist/web-worker/client-session/client-session-devtools.js.map +1 -0
- package/dist/web-worker/client-session/index.d.ts +41 -0
- package/dist/web-worker/client-session/index.d.ts.map +1 -0
- package/dist/web-worker/client-session/index.js +299 -0
- package/dist/web-worker/client-session/index.js.map +1 -0
- package/dist/web-worker/client-session/trim-batch.d.ts +4 -0
- package/dist/web-worker/client-session/trim-batch.d.ts.map +1 -0
- package/dist/web-worker/client-session/trim-batch.js +13 -0
- package/dist/web-worker/client-session/trim-batch.js.map +1 -0
- package/dist/web-worker/client-session/trim-batch.test.d.ts +2 -0
- package/dist/web-worker/client-session/trim-batch.test.d.ts.map +1 -0
- package/dist/web-worker/client-session/trim-batch.test.js +38 -0
- package/dist/web-worker/client-session/trim-batch.test.js.map +1 -0
- package/dist/web-worker/common/persisted-sqlite.d.ts +23 -0
- package/dist/web-worker/common/persisted-sqlite.d.ts.map +1 -0
- package/dist/web-worker/common/persisted-sqlite.js +92 -0
- package/dist/web-worker/common/persisted-sqlite.js.map +1 -0
- package/dist/web-worker/common/shutdown-channel.d.ts +7 -0
- package/dist/web-worker/common/shutdown-channel.d.ts.map +1 -0
- package/dist/web-worker/common/shutdown-channel.js +7 -0
- package/dist/web-worker/common/shutdown-channel.js.map +1 -0
- package/dist/web-worker/common/worker-schema.d.ts +226 -0
- package/dist/web-worker/common/worker-schema.d.ts.map +1 -0
- package/dist/web-worker/common/worker-schema.js +176 -0
- package/dist/web-worker/common/worker-schema.js.map +1 -0
- package/dist/web-worker/leader-worker/make-leader-worker.d.ts +15 -0
- package/dist/web-worker/leader-worker/make-leader-worker.d.ts.map +1 -0
- package/dist/web-worker/leader-worker/make-leader-worker.js +144 -0
- package/dist/web-worker/leader-worker/make-leader-worker.js.map +1 -0
- package/dist/web-worker/shared-worker/make-shared-worker.d.ts +2 -0
- package/dist/web-worker/shared-worker/make-shared-worker.d.ts.map +1 -0
- package/dist/web-worker/shared-worker/make-shared-worker.js +160 -0
- package/dist/web-worker/shared-worker/make-shared-worker.js.map +1 -0
- package/dist/web-worker/vite-dev-polyfill.d.ts +2 -0
- package/dist/web-worker/vite-dev-polyfill.d.ts.map +1 -0
- package/dist/web-worker/vite-dev-polyfill.js +37 -0
- package/dist/web-worker/vite-dev-polyfill.js.map +1 -0
- package/package.json +78 -0
- package/src/common/connection.ts +32 -0
- package/src/devtools-bridge/background-browser-channel.ts +57 -0
- package/src/devtools-bridge/background-message.ts +42 -0
- package/src/devtools-bridge/bridge-shared.ts +97 -0
- package/src/devtools-bridge/browser-extension-bridge.ts +64 -0
- package/src/devtools-bridge/iframe-message.ts +9 -0
- package/src/devtools-bridge/index.ts +9 -0
- package/src/devtools-bridge/web-bridge.ts +169 -0
- package/src/in-memory/index.ts +66 -0
- package/src/index.ts +3 -0
- package/src/opfs-utils.ts +61 -0
- package/src/web-worker/ambient.d.ts +37 -0
- package/src/web-worker/client-session/client-session-devtools.ts +167 -0
- package/src/web-worker/client-session/index.ts +537 -0
- package/src/web-worker/client-session/trim-batch.test.ts +48 -0
- package/src/web-worker/client-session/trim-batch.ts +15 -0
- package/src/web-worker/common/persisted-sqlite.ts +136 -0
- package/src/web-worker/common/shutdown-channel.ts +8 -0
- package/src/web-worker/common/worker-schema.ts +206 -0
- package/src/web-worker/leader-worker/make-leader-worker.ts +276 -0
- package/src/web-worker/shared-worker/make-shared-worker.ts +300 -0
- package/src/web-worker/vite-dev-polyfill.ts +36 -0
- package/tsconfig.json +17 -0
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { PreparedBindValues, SqliteDb } from '@livestore/common';
|
|
2
|
+
import { SqliteError } from '@livestore/common';
|
|
3
|
+
import type { BindValues } from '@livestore/common/sql-queries';
|
|
4
|
+
import { Effect } from '@livestore/utils/effect';
|
|
5
|
+
export declare const execSql: (sqliteDb: SqliteDb, sql: string, bind: BindValues) => Effect.Effect<void, SqliteError, never>;
|
|
6
|
+
export declare const execSqlPrepared: (sqliteDb: SqliteDb, sql: string, bindValues: PreparedBindValues) => Effect.Effect<void, SqliteError, never>;
|
|
7
|
+
//# sourceMappingURL=connection.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connection.d.ts","sourceRoot":"","sources":["../../src/common/connection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AACrE,OAAO,EAAqB,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAClE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAA;AAE/D,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAEhD,eAAO,MAAM,OAAO,aAAc,QAAQ,OAAO,MAAM,QAAQ,UAAU,4CAOxE,CAAA;AAYD,eAAO,MAAM,eAAe,aAAc,QAAQ,OAAO,MAAM,cAAc,kBAAkB,4CAM9F,CAAA"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { prepareBindValues, SqliteError } from '@livestore/common';
|
|
2
|
+
import { Effect } from '@livestore/utils/effect';
|
|
3
|
+
export const execSql = (sqliteDb, sql, bind) => {
|
|
4
|
+
const bindValues = prepareBindValues(bind, sql);
|
|
5
|
+
return Effect.try({
|
|
6
|
+
try: () => sqliteDb.execute(sql, bindValues),
|
|
7
|
+
catch: (cause) => new SqliteError({ cause, query: { bindValues, sql }, code: cause.code }),
|
|
8
|
+
}).pipe(Effect.asVoid);
|
|
9
|
+
};
|
|
10
|
+
// const selectSqlPrepared = <T>(stmt: PreparedStatement, bind: BindValues) => {
|
|
11
|
+
// const bindValues = prepareBindValues(bind, stmt.sql)
|
|
12
|
+
// return Effect.try({
|
|
13
|
+
// try: () => stmt.select<T>(bindValues),
|
|
14
|
+
// catch: (cause) =>
|
|
15
|
+
// new SqliteError({ cause, query: { bindValues, sql: stmt.sql }, code: (cause as WaSqlite.SQLiteError).code }),
|
|
16
|
+
// })
|
|
17
|
+
// }
|
|
18
|
+
// TODO actually use prepared statements
|
|
19
|
+
export const execSqlPrepared = (sqliteDb, sql, bindValues) => {
|
|
20
|
+
return Effect.try({
|
|
21
|
+
try: () => sqliteDb.execute(sql, bindValues),
|
|
22
|
+
catch: (cause) => new SqliteError({ cause, query: { bindValues, sql }, code: cause.code }),
|
|
23
|
+
}).pipe(Effect.asVoid);
|
|
24
|
+
};
|
|
25
|
+
//# sourceMappingURL=connection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connection.js","sourceRoot":"","sources":["../../src/common/connection.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAGlE,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAEhD,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,QAAkB,EAAE,GAAW,EAAE,IAAgB,EAAE,EAAE;IAC3E,MAAM,UAAU,GAAG,iBAAiB,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;IAC/C,OAAO,MAAM,CAAC,GAAG,CAAC;QAChB,GAAG,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,UAAU,CAAC;QAC5C,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE,CACf,IAAI,WAAW,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,EAAE,IAAI,EAAG,KAA8B,CAAC,IAAI,EAAE,CAAC;KACrG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;AACxB,CAAC,CAAA;AAED,gFAAgF;AAChF,yDAAyD;AACzD,wBAAwB;AACxB,6CAA6C;AAC7C,wBAAwB;AACxB,sHAAsH;AACtH,OAAO;AACP,IAAI;AAEJ,wCAAwC;AACxC,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,QAAkB,EAAE,GAAW,EAAE,UAA8B,EAAE,EAAE;IACjG,OAAO,MAAM,CAAC,GAAG,CAAC;QAChB,GAAG,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,UAAU,CAAC;QAC5C,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE,CACf,IAAI,WAAW,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,EAAE,IAAI,EAAG,KAA8B,CAAC,IAAI,EAAE,CAAC;KACrG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;AACxB,CAAC,CAAA"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { Effect, Schema, Scope, WebChannel } from '@livestore/utils/effect';
|
|
2
|
+
export declare const backgroundChannel: <MsgIn, MsgOut, MsgInEncoded, MsgOutEncoded>({ schema: inputSchema, port, }: {
|
|
3
|
+
schema: Schema.Schema<MsgIn | MsgOut, MsgInEncoded | MsgOutEncoded> | {
|
|
4
|
+
listen: Schema.Schema<MsgIn, MsgInEncoded>;
|
|
5
|
+
send: Schema.Schema<MsgOut, MsgOutEncoded>;
|
|
6
|
+
};
|
|
7
|
+
port: chrome.runtime.Port;
|
|
8
|
+
}) => Effect.Effect<WebChannel.WebChannel<MsgIn, MsgOut>, never, Scope.Scope>;
|
|
9
|
+
//# sourceMappingURL=background-browser-channel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"background-browser-channel.d.ts","sourceRoot":"","sources":["../../src/devtools-bridge/background-browser-channel.ts"],"names":[],"mappings":"AACA,OAAO,EAAmB,MAAM,EAAiB,MAAM,EAAE,KAAK,EAAU,UAAU,EAAE,MAAM,yBAAyB,CAAA;AAEnH,eAAO,MAAM,iBAAiB,GAAI,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,aAAa,kCAGzE;IACD,MAAM,EACF,MAAM,CAAC,MAAM,CAAC,KAAK,GAAG,MAAM,EAAE,YAAY,GAAG,aAAa,CAAC,GAC3D;QAAE,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAA;KAAE,CAAA;IAC9F,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,IAAI,CAAA;CAC1B,KAAG,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,CA6CvE,CAAA"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { Chunk, Deferred, Effect, Exit, Runtime, Schema, Scope, Stream, WebChannel } from '@livestore/utils/effect';
|
|
2
|
+
export const backgroundChannel = ({ schema: inputSchema, port, }) => Effect.scopeWithCloseable((scope) => Effect.gen(function* () {
|
|
3
|
+
const schema = WebChannel.mapSchema(inputSchema);
|
|
4
|
+
const send = (msg) => Effect.gen(function* () {
|
|
5
|
+
const encoded = yield* Schema.encode(schema.send)(msg);
|
|
6
|
+
port.postMessage(encoded);
|
|
7
|
+
});
|
|
8
|
+
const runtime = yield* Effect.runtime();
|
|
9
|
+
const listen = Stream.async((emit) => {
|
|
10
|
+
const onMessage = (message) => Effect.gen(function* () {
|
|
11
|
+
const result = yield* Schema.decode(schema.listen)(message).pipe(Effect.either);
|
|
12
|
+
emit(Effect.succeed(Chunk.make(result)));
|
|
13
|
+
}).pipe(Effect.withSpan(`WebChannel:backgroundChannel:listen`), Effect.tapCauseLogPretty, Runtime.runFork(runtime));
|
|
14
|
+
port.onMessage.addListener(onMessage);
|
|
15
|
+
return Effect.sync(() => {
|
|
16
|
+
port.onMessage.removeListener(onMessage);
|
|
17
|
+
});
|
|
18
|
+
});
|
|
19
|
+
const closedDeferred = yield* Deferred.make().pipe(Effect.acquireRelease(Deferred.done(Exit.void)));
|
|
20
|
+
const supportsTransferables = false;
|
|
21
|
+
return {
|
|
22
|
+
[WebChannel.WebChannelSymbol]: WebChannel.WebChannelSymbol,
|
|
23
|
+
listen,
|
|
24
|
+
send,
|
|
25
|
+
closedDeferred,
|
|
26
|
+
schema,
|
|
27
|
+
supportsTransferables,
|
|
28
|
+
shutdown: Scope.close(scope, Exit.void),
|
|
29
|
+
};
|
|
30
|
+
}).pipe(Effect.withSpan(`WebChannel:backgroundChannel`)));
|
|
31
|
+
//# sourceMappingURL=background-browser-channel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"background-browser-channel.js","sourceRoot":"","sources":["../../src/devtools-bridge/background-browser-channel.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAA;AAEnH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAA6C,EAC5E,MAAM,EAAE,WAAW,EACnB,IAAI,GAML,EAA2E,EAAE,CAC5E,MAAM,CAAC,kBAAkB,CAAC,CAAC,KAAK,EAAE,EAAE,CAClC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,MAAM,MAAM,GAAG,UAAU,CAAC,SAAS,CAAC,WAAW,CAAC,CAAA;IAEhD,MAAM,IAAI,GAAG,CAAC,GAAW,EAAE,EAAE,CAC3B,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QAClB,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAA;QACtD,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAA;IAC3B,CAAC,CAAC,CAAA;IAEJ,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,CAAA;IAEvC,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAA+C,CAAC,IAAI,EAAE,EAAE;QACjF,MAAM,SAAS,GAAG,CAAC,OAAY,EAAE,EAAE,CACjC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;YAClB,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;YAE/E,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;QAC1C,CAAC,CAAC,CAAC,IAAI,CACL,MAAM,CAAC,QAAQ,CAAC,qCAAqC,CAAC,EACtD,MAAM,CAAC,iBAAiB,EACxB,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CACzB,CAAA;QAEH,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,SAAS,CAAC,CAAA;QAErC,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE;YACtB,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,SAAS,CAAC,CAAA;QAC1C,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,MAAM,cAAc,GAAG,KAAK,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACzG,MAAM,qBAAqB,GAAG,KAAK,CAAA;IAEnC,OAAO;QACL,CAAC,UAAU,CAAC,gBAAgB,CAAC,EAAE,UAAU,CAAC,gBAAgB;QAC1D,MAAM;QACN,IAAI;QACJ,cAAc;QACd,MAAM;QACN,qBAAqB;QACrB,QAAQ,EAAE,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC;KACxC,CAAA;AACH,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,8BAA8B,CAAC,CAAC,CACzD,CAAA"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { Devtools } from '@livestore/common';
|
|
2
|
+
import { Schema } from '@livestore/utils/effect';
|
|
3
|
+
export declare namespace BackgroundMessage {
|
|
4
|
+
const CopyToClipboard_base: Schema.TaggedStruct<"Background.CopyToClipboard", {
|
|
5
|
+
text: typeof Schema.String;
|
|
6
|
+
}>;
|
|
7
|
+
export class CopyToClipboard extends CopyToClipboard_base {
|
|
8
|
+
}
|
|
9
|
+
const MessageFromAppHost_base: Schema.TaggedStruct<"Background.MessageFromAppHost", {
|
|
10
|
+
msg: Schema.Union<[typeof Devtools.Leader.SnapshotRes, typeof Devtools.Leader.LoadDatabaseFileRes, typeof Devtools.Leader.MutationLogRes, typeof Devtools.Leader.Disconnect, typeof Devtools.Leader.SyncPull, typeof Devtools.Leader.NetworkStatusRes, typeof Devtools.Leader.RunMutationRes, typeof Devtools.Leader.Pong, typeof Devtools.Leader.DatabaseFileInfoRes, typeof Devtools.Leader.SyncHistoryRes, typeof Devtools.Leader.SyncingInfoRes, typeof Devtools.Leader.SyncHeadRes, Schema.TaggedStruct<"LSD.Leader.ResetAllData.Response", {
|
|
11
|
+
readonly requestId: typeof Schema.String;
|
|
12
|
+
readonly liveStoreVersion: typeof Devtools.liveStoreVersion;
|
|
13
|
+
readonly clientId: typeof Schema.String;
|
|
14
|
+
}>, Schema.TaggedStruct<"LSD.Leader.SetSyncLatch.Response", {
|
|
15
|
+
readonly requestId: typeof Schema.String;
|
|
16
|
+
readonly liveStoreVersion: typeof Devtools.liveStoreVersion;
|
|
17
|
+
readonly clientId: typeof Schema.String;
|
|
18
|
+
}>]>;
|
|
19
|
+
}>;
|
|
20
|
+
export class MessageFromAppHost extends MessageFromAppHost_base {
|
|
21
|
+
}
|
|
22
|
+
const MessageToAppHost_base: Schema.TaggedStruct<"Background.MessageToAppHost", {
|
|
23
|
+
msg: Schema.Union<[typeof Devtools.Leader.SnapshotReq, typeof Devtools.Leader.LoadDatabaseFileReq, typeof Devtools.Leader.MutationLogReq, Schema.TaggedStruct<"LSD.Leader.ResetAllData.Request", {
|
|
24
|
+
mode: Schema.Literal<["all-data", "only-app-db"]>;
|
|
25
|
+
} & {
|
|
26
|
+
readonly requestId: typeof Schema.String;
|
|
27
|
+
readonly liveStoreVersion: typeof Devtools.liveStoreVersion;
|
|
28
|
+
readonly clientId: typeof Schema.String;
|
|
29
|
+
}>, typeof Devtools.Leader.NetworkStatusSubscribe, typeof Devtools.Leader.NetworkStatusUnsubscribe, typeof Devtools.Leader.Disconnect, typeof Devtools.Leader.RunMutationReq, typeof Devtools.Leader.Ping, typeof Devtools.Leader.DatabaseFileInfoReq, typeof Devtools.Leader.SyncHistorySubscribe, typeof Devtools.Leader.SyncHistoryUnsubscribe, typeof Devtools.Leader.SyncingInfoReq, typeof Devtools.Leader.SyncHeadSubscribe, typeof Devtools.Leader.SyncHeadUnsubscribe, Schema.TaggedStruct<"LSD.Leader.SetSyncLatch.Request", {
|
|
30
|
+
closeLatch: typeof Schema.Boolean;
|
|
31
|
+
} & {
|
|
32
|
+
readonly requestId: typeof Schema.String;
|
|
33
|
+
readonly liveStoreVersion: typeof Devtools.liveStoreVersion;
|
|
34
|
+
readonly clientId: typeof Schema.String;
|
|
35
|
+
}>]>;
|
|
36
|
+
}>;
|
|
37
|
+
export class MessageToAppHost extends MessageToAppHost_base {
|
|
38
|
+
}
|
|
39
|
+
const RequestPortForDevtools_base: Schema.TaggedStruct<"Background.RequestPortForDevtools", {
|
|
40
|
+
tabId: typeof Schema.Number;
|
|
41
|
+
}>;
|
|
42
|
+
export class RequestPortForDevtools extends RequestPortForDevtools_base {
|
|
43
|
+
}
|
|
44
|
+
const RequestOneTimePortFromDevtools_base: Schema.TaggedStruct<"Background.RequestOneTimePortFromDevtools", {
|
|
45
|
+
tabId: typeof Schema.Number;
|
|
46
|
+
}>;
|
|
47
|
+
export class RequestOneTimePortFromDevtools extends RequestOneTimePortFromDevtools_base {
|
|
48
|
+
}
|
|
49
|
+
const Disconnect_base: Schema.TaggedStruct<"Background.Disconnect", {
|
|
50
|
+
appHostId: typeof Schema.String;
|
|
51
|
+
}>;
|
|
52
|
+
export class Disconnect extends Disconnect_base {
|
|
53
|
+
}
|
|
54
|
+
export {};
|
|
55
|
+
}
|
|
56
|
+
export declare namespace MessagePortInit {
|
|
57
|
+
const PortForDevtools_base: Schema.TaggedStruct<"MessagePortInit.PortForDevtools", {
|
|
58
|
+
port: Schema.Schema<MessagePort, MessagePort, never>;
|
|
59
|
+
tabId: typeof Schema.Number;
|
|
60
|
+
appHostId: typeof Schema.String;
|
|
61
|
+
}>;
|
|
62
|
+
/**
|
|
63
|
+
* Message is first sent from contentscript-iframe to background and then posted to the devtools.
|
|
64
|
+
*/
|
|
65
|
+
export class PortForDevtools extends PortForDevtools_base {
|
|
66
|
+
}
|
|
67
|
+
const OneTimePortFromDevtools_base: Schema.TaggedStruct<"MessagePortInit.OneTimePortFromDevtools", {
|
|
68
|
+
port: Schema.Schema<MessagePort, MessagePort, never>;
|
|
69
|
+
tabId: typeof Schema.Number;
|
|
70
|
+
}>;
|
|
71
|
+
export class OneTimePortFromDevtools extends OneTimePortFromDevtools_base {
|
|
72
|
+
}
|
|
73
|
+
export {};
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=background-message.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"background-message.d.ts","sourceRoot":"","sources":["../../src/devtools-bridge/background-message.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAC5C,OAAO,EAAE,MAAM,EAAgB,MAAM,yBAAyB,CAAA;AAE9D,yBAAiB,iBAAiB,CAAC;;;;IACjC,MAAM,OAAO,eAAgB,SAAQ,oBAEnC;KAAG;;;uCAoC86Z,OAAQ,MAAM;;sCAAuF,OAAQ,MAAM;;uCAA8F,OAAQ,MAAM;;sCAAuF,OAAQ,MAAM;;;IAlCvva,MAAM,OAAO,kBAAmB,SAAQ,uBAEtC;KAAG;;;kBAgCkwX,OAAQ,OAAO;;uCAAmE,OAAQ,MAAM;;sCAAuF,OAAQ,MAAM;;+BAAiX,OAAQ,OAAO;;uCAAsC,OAAQ,MAAM;;sCAAuF,OAAQ,MAAM;;;IA9Br+Y,MAAM,OAAO,gBAAiB,SAAQ,qBAEpC;KAAG;;;;IAEL,MAAM,OAAO,sBAAuB,SAAQ,2BAE1C;KAAG;;;;IAEL,MAAM,OAAO,8BAA+B,SAAQ,mCAElD;KAAG;;;;IAEL,MAAM,OAAO,UAAW,SAAQ,eAA0E;KAAG;;CAC9G;AAED,yBAAiB,eAAe,CAAC;;;;;;IAC/B;;OAEG;IACH,MAAM,OAAO,eAAgB,SAAQ,oBAInC;KAAG;;;;;IAEL,MAAM,OAAO,uBAAwB,SAAQ,4BAG3C;KAAG;;CACN"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { Devtools } from '@livestore/common';
|
|
2
|
+
import { Schema, Transferable } from '@livestore/utils/effect';
|
|
3
|
+
export var BackgroundMessage;
|
|
4
|
+
(function (BackgroundMessage) {
|
|
5
|
+
class CopyToClipboard extends Schema.TaggedStruct('Background.CopyToClipboard', {
|
|
6
|
+
text: Schema.String,
|
|
7
|
+
}) {
|
|
8
|
+
}
|
|
9
|
+
BackgroundMessage.CopyToClipboard = CopyToClipboard;
|
|
10
|
+
class MessageFromAppHost extends Schema.TaggedStruct('Background.MessageFromAppHost', {
|
|
11
|
+
msg: Devtools.Leader.MessageFromApp,
|
|
12
|
+
}) {
|
|
13
|
+
}
|
|
14
|
+
BackgroundMessage.MessageFromAppHost = MessageFromAppHost;
|
|
15
|
+
class MessageToAppHost extends Schema.TaggedStruct('Background.MessageToAppHost', {
|
|
16
|
+
msg: Devtools.Leader.MessageToApp,
|
|
17
|
+
}) {
|
|
18
|
+
}
|
|
19
|
+
BackgroundMessage.MessageToAppHost = MessageToAppHost;
|
|
20
|
+
class RequestPortForDevtools extends Schema.TaggedStruct('Background.RequestPortForDevtools', {
|
|
21
|
+
tabId: Schema.Number,
|
|
22
|
+
}) {
|
|
23
|
+
}
|
|
24
|
+
BackgroundMessage.RequestPortForDevtools = RequestPortForDevtools;
|
|
25
|
+
class RequestOneTimePortFromDevtools extends Schema.TaggedStruct('Background.RequestOneTimePortFromDevtools', {
|
|
26
|
+
tabId: Schema.Number,
|
|
27
|
+
}) {
|
|
28
|
+
}
|
|
29
|
+
BackgroundMessage.RequestOneTimePortFromDevtools = RequestOneTimePortFromDevtools;
|
|
30
|
+
class Disconnect extends Schema.TaggedStruct('Background.Disconnect', { appHostId: Schema.String }) {
|
|
31
|
+
}
|
|
32
|
+
BackgroundMessage.Disconnect = Disconnect;
|
|
33
|
+
})(BackgroundMessage || (BackgroundMessage = {}));
|
|
34
|
+
export var MessagePortInit;
|
|
35
|
+
(function (MessagePortInit) {
|
|
36
|
+
/**
|
|
37
|
+
* Message is first sent from contentscript-iframe to background and then posted to the devtools.
|
|
38
|
+
*/
|
|
39
|
+
class PortForDevtools extends Schema.TaggedStruct('MessagePortInit.PortForDevtools', {
|
|
40
|
+
port: Transferable.MessagePort,
|
|
41
|
+
tabId: Schema.Number,
|
|
42
|
+
appHostId: Schema.String,
|
|
43
|
+
}) {
|
|
44
|
+
}
|
|
45
|
+
MessagePortInit.PortForDevtools = PortForDevtools;
|
|
46
|
+
class OneTimePortFromDevtools extends Schema.TaggedStruct('MessagePortInit.OneTimePortFromDevtools', {
|
|
47
|
+
port: Transferable.MessagePort,
|
|
48
|
+
tabId: Schema.Number,
|
|
49
|
+
}) {
|
|
50
|
+
}
|
|
51
|
+
MessagePortInit.OneTimePortFromDevtools = OneTimePortFromDevtools;
|
|
52
|
+
})(MessagePortInit || (MessagePortInit = {}));
|
|
53
|
+
//# sourceMappingURL=background-message.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"background-message.js","sourceRoot":"","sources":["../../src/devtools-bridge/background-message.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAC5C,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;AAE9D,MAAM,KAAW,iBAAiB,CAsBjC;AAtBD,WAAiB,iBAAiB;IAChC,MAAa,eAAgB,SAAQ,MAAM,CAAC,YAAY,CAAC,4BAA4B,EAAE;QACrF,IAAI,EAAE,MAAM,CAAC,MAAM;KACpB,CAAC;KAAG;IAFQ,iCAAe,kBAEvB,CAAA;IAEL,MAAa,kBAAmB,SAAQ,MAAM,CAAC,YAAY,CAAC,+BAA+B,EAAE;QAC3F,GAAG,EAAE,QAAQ,CAAC,MAAM,CAAC,cAAc;KACpC,CAAC;KAAG;IAFQ,oCAAkB,qBAE1B,CAAA;IAEL,MAAa,gBAAiB,SAAQ,MAAM,CAAC,YAAY,CAAC,6BAA6B,EAAE;QACvF,GAAG,EAAE,QAAQ,CAAC,MAAM,CAAC,YAAY;KAClC,CAAC;KAAG;IAFQ,kCAAgB,mBAExB,CAAA;IAEL,MAAa,sBAAuB,SAAQ,MAAM,CAAC,YAAY,CAAC,mCAAmC,EAAE;QACnG,KAAK,EAAE,MAAM,CAAC,MAAM;KACrB,CAAC;KAAG;IAFQ,wCAAsB,yBAE9B,CAAA;IAEL,MAAa,8BAA+B,SAAQ,MAAM,CAAC,YAAY,CAAC,2CAA2C,EAAE;QACnH,KAAK,EAAE,MAAM,CAAC,MAAM;KACrB,CAAC;KAAG;IAFQ,gDAA8B,iCAEtC,CAAA;IAEL,MAAa,UAAW,SAAQ,MAAM,CAAC,YAAY,CAAC,uBAAuB,EAAE,EAAE,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC;KAAG;IAAhG,4BAAU,aAAsF,CAAA;AAC/G,CAAC,EAtBgB,iBAAiB,KAAjB,iBAAiB,QAsBjC;AAED,MAAM,KAAW,eAAe,CAc/B;AAdD,WAAiB,eAAe;IAC9B;;OAEG;IACH,MAAa,eAAgB,SAAQ,MAAM,CAAC,YAAY,CAAC,iCAAiC,EAAE;QAC1F,IAAI,EAAE,YAAY,CAAC,WAAW;QAC9B,KAAK,EAAE,MAAM,CAAC,MAAM;QACpB,SAAS,EAAE,MAAM,CAAC,MAAM;KACzB,CAAC;KAAG;IAJQ,+BAAe,kBAIvB,CAAA;IAEL,MAAa,uBAAwB,SAAQ,MAAM,CAAC,YAAY,CAAC,yCAAyC,EAAE;QAC1G,IAAI,EAAE,YAAY,CAAC,WAAW;QAC9B,KAAK,EAAE,MAAM,CAAC,MAAM;KACrB,CAAC;KAAG;IAHQ,uCAAuB,0BAG/B,CAAA;AACP,CAAC,EAdgB,eAAe,KAAf,eAAe,QAc/B"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { Devtools } from '@livestore/common';
|
|
2
|
+
import { Deferred, Effect, PubSub } from '@livestore/utils/effect';
|
|
3
|
+
/**
|
|
4
|
+
* This code is running in the devtools window where it's assumed that message ports
|
|
5
|
+
* can be transferred over the bridge.
|
|
6
|
+
*/
|
|
7
|
+
export declare const makeShared: ({ portForDevtoolsDeferred, responsePubSub, }: {
|
|
8
|
+
portForDevtoolsDeferred: Deferred.Deferred<MessagePort>;
|
|
9
|
+
responsePubSub: PubSub.PubSub<Devtools.MessageFromApp | Devtools.MessageFromApp>;
|
|
10
|
+
}) => Effect.Effect<{
|
|
11
|
+
appHostId: string;
|
|
12
|
+
isLeader: boolean;
|
|
13
|
+
}, never, import("effect/Scope").Scope>;
|
|
14
|
+
//# sourceMappingURL=bridge-shared.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bridge-shared.d.ts","sourceRoot":"","sources":["../../src/devtools-bridge/bridge-shared.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAoB,MAAM,mBAAmB,CAAA;AAC9D,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAA8B,MAAM,yBAAyB,CAAA;AAE9F;;;GAGG;AACH,eAAO,MAAM,UAAU,iDAGpB;IACD,uBAAuB,EAAE,QAAQ,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAA;IACvD,cAAc,EAAE,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,GAAG,QAAQ,CAAC,cAAc,CAAC,CAAA;CACjF;;;uCAkFG,CAAA"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
// @ts-nocheck
|
|
2
|
+
import { Devtools } from '@livestore/common';
|
|
3
|
+
import { Deferred, Effect, PubSub, Stream, WebChannel } from '@livestore/utils/effect';
|
|
4
|
+
/**
|
|
5
|
+
* This code is running in the devtools window where it's assumed that message ports
|
|
6
|
+
* can be transferred over the bridge.
|
|
7
|
+
*/
|
|
8
|
+
export const makeShared = ({ portForDevtoolsDeferred, responsePubSub, }) => Effect.gen(function* () {
|
|
9
|
+
const appHostInfoDeferred = yield* Deferred.make();
|
|
10
|
+
const appHostStoreChannelDeferred = yield* Deferred.make();
|
|
11
|
+
const portForDevtools = yield* Deferred.await(portForDevtoolsDeferred);
|
|
12
|
+
const appHostCoordinatorChannel = yield* WebChannel.messagePortChannel({
|
|
13
|
+
port: portForDevtools,
|
|
14
|
+
schema: { listen: Devtools.MessageFromApp, send: Devtools.MessageToApp },
|
|
15
|
+
});
|
|
16
|
+
yield* appHostCoordinatorChannel.listen.pipe(Stream.flatten(),
|
|
17
|
+
// Stream.tapLogWithLabel('appHostCoordinatorChannel.listen'),
|
|
18
|
+
Stream.tap((msg) => Effect.gen(function* () {
|
|
19
|
+
// if (msg._tag === 'LSD.AppHostReady') {
|
|
20
|
+
// const { appHostId, isLeader } = msg
|
|
21
|
+
// yield* Deferred.succeed(appHostInfoDeferred, { appHostId, isLeader })
|
|
22
|
+
// } else if (msg._tag === 'LSD.MessagePortForStoreReq') {
|
|
23
|
+
// Here we're "duplicating" the message port since we need one for the coordinator
|
|
24
|
+
// and one for the store
|
|
25
|
+
const storeMessageChannel = new MessageChannel();
|
|
26
|
+
// yield* sendToAppHost(
|
|
27
|
+
// Devtools.MessagePortForStoreRes.make({
|
|
28
|
+
// // appHostId: msg.appHostId,
|
|
29
|
+
// liveStoreVersion: msg.liveStoreVersion,
|
|
30
|
+
// port: storeMessageChannel.port1,
|
|
31
|
+
// requestId: msg.requestId,
|
|
32
|
+
// }),
|
|
33
|
+
// )
|
|
34
|
+
// const portForAppHostStoreChannel = yield* WebChannel.messagePortChannel({
|
|
35
|
+
// port: storeMessageChannel.port2,
|
|
36
|
+
// schema: { listen: Devtools.MessageFromApp, send: Devtools.MessageToApp },
|
|
37
|
+
// })
|
|
38
|
+
// yield* portForAppHostStoreChannel.listen.pipe(
|
|
39
|
+
// Stream.flatten(),
|
|
40
|
+
// Stream.tap((msg) => PubSub.publish(responsePubSub, msg)),
|
|
41
|
+
// Stream.runDrain,
|
|
42
|
+
// Effect.withSpan('portForStoreChannel.listen'),
|
|
43
|
+
// Effect.tapCauseLogPretty,
|
|
44
|
+
// Effect.forkScoped,
|
|
45
|
+
// )
|
|
46
|
+
// yield* Deferred.succeed(appHostStoreChannelDeferred, portForAppHostStoreChannel)
|
|
47
|
+
// } else {
|
|
48
|
+
yield* PubSub.publish(responsePubSub, msg);
|
|
49
|
+
// }
|
|
50
|
+
})), Stream.runDrain, Effect.withSpan('portForDevtoolsChannel.listen'), Effect.tapCauseLogPretty, Effect.forkScoped);
|
|
51
|
+
// Sends the message to the app host (i.e. contentscript) via the devtools panel window and the background script
|
|
52
|
+
// const sendToAppHost: Devtools.PrepareDevtoolsBridge['sendToAppHost'] = (msg) =>
|
|
53
|
+
// Effect.gen(function* () {
|
|
54
|
+
// // console.log('bridge-shared: sendToAppHost', msg)
|
|
55
|
+
// if (Schema.is(Devtools.MessageToApp)(msg)) {
|
|
56
|
+
// yield* appHostCoordinatorChannel.send(msg)
|
|
57
|
+
// } else {
|
|
58
|
+
// // console.log('bridge-shared: sendToAppHostStore', msg)
|
|
59
|
+
// const appHostStoreChannel = yield* Deferred.await(appHostStoreChannelDeferred)
|
|
60
|
+
// yield* appHostStoreChannel.send(msg)
|
|
61
|
+
// }
|
|
62
|
+
// }).pipe(Effect.withSpan('sendToAppHost'), Effect.orDie)
|
|
63
|
+
// yield* sendToAppHost(Devtools.DevtoolsReady.make({ liveStoreVersion }))
|
|
64
|
+
const { appHostId, isLeader } = yield* Deferred.await(appHostInfoDeferred);
|
|
65
|
+
return { appHostId, isLeader };
|
|
66
|
+
});
|
|
67
|
+
//# sourceMappingURL=bridge-shared.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bridge-shared.js","sourceRoot":"","sources":["../../src/devtools-bridge/bridge-shared.ts"],"names":[],"mappings":"AAAA,cAAc;AACd,OAAO,EAAE,QAAQ,EAAoB,MAAM,mBAAmB,CAAA;AAC9D,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAU,MAAM,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAA;AAE9F;;;GAGG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,EACzB,uBAAuB,EACvB,cAAc,GAIf,EAAE,EAAE,CACH,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,MAAM,mBAAmB,GAAG,KAAK,CAAC,CAAC,QAAQ,CAAC,IAAI,EAA4C,CAAA;IAE5F,MAAM,2BAA2B,GAC/B,KAAK,CAAC,CAAC,QAAQ,CAAC,IAAI,EAEjB,CAAA;IAEL,MAAM,eAAe,GAAG,KAAK,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAA;IAEtE,MAAM,yBAAyB,GAAG,KAAK,CAAC,CAAC,UAAU,CAAC,kBAAkB,CAAC;QACrE,IAAI,EAAE,eAAe;QACrB,MAAM,EAAE,EAAE,MAAM,EAAE,QAAQ,CAAC,cAAc,EAAE,IAAI,EAAE,QAAQ,CAAC,YAAY,EAAE;KACzE,CAAC,CAAA;IAEF,KAAK,CAAC,CAAC,yBAAyB,CAAC,MAAM,CAAC,IAAI,CAC1C,MAAM,CAAC,OAAO,EAAE;IAChB,8DAA8D;IAC9D,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CACjB,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QAClB,yCAAyC;QACzC,sCAAsC;QACtC,wEAAwE;QACxE,0DAA0D;QAC1D,kFAAkF;QAClF,wBAAwB;QACxB,MAAM,mBAAmB,GAAG,IAAI,cAAc,EAAE,CAAA;QAEhD,wBAAwB;QACxB,2CAA2C;QAC3C,mCAAmC;QACnC,8CAA8C;QAC9C,uCAAuC;QACvC,gCAAgC;QAChC,QAAQ;QACR,IAAI;QAEJ,8EAA8E;QAC9E,uCAAuC;QACvC,gFAAgF;QAChF,OAAO;QAEP,mDAAmD;QACnD,wBAAwB;QACxB,gEAAgE;QAChE,uBAAuB;QACvB,qDAAqD;QACrD,gCAAgC;QAChC,yBAAyB;QACzB,MAAM;QAEN,qFAAqF;QACrF,WAAW;QACX,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,cAAc,EAAE,GAAG,CAAC,CAAA;QAC1C,IAAI;IACN,CAAC,CAAC,CACH,EACD,MAAM,CAAC,QAAQ,EACf,MAAM,CAAC,QAAQ,CAAC,+BAA+B,CAAC,EAChD,MAAM,CAAC,iBAAiB,EACxB,MAAM,CAAC,UAAU,CAClB,CAAA;IAED,iHAAiH;IACjH,kFAAkF;IAClF,8BAA8B;IAC9B,0DAA0D;IAC1D,mDAAmD;IACnD,mDAAmD;IACnD,eAAe;IACf,iEAAiE;IACjE,uFAAuF;IACvF,6CAA6C;IAC7C,QAAQ;IACR,4DAA4D;IAE5D,0EAA0E;IAE1E,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,KAAK,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAA;IAE1E,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAA;AAChC,CAAC,CAAC,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"browser-extension-bridge.d.ts","sourceRoot":"","sources":["../../src/devtools-bridge/browser-extension-bridge.ts"],"names":[],"mappings":"AACA,OAAO,EAAY,MAAM,EAAsC,MAAM,yBAAyB,CAAA;AAQ9F,eAAO,MAAM,qCAAqC,mCAsDhD,CAAA"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { Effect } from '@livestore/utils/effect';
|
|
2
|
+
// NOTE this code is running inside the devtools iframe, so will be re-running from scratch if the iframe is reloaded
|
|
3
|
+
// TODO make sure this also works reliably for HMR
|
|
4
|
+
export const prepareBrowserExtensionDevtoolsBridge = Effect.gen(function* () {
|
|
5
|
+
// const iframeWindow = window
|
|
6
|
+
// const iframeChannel = yield* WebChannel.windowChannel({
|
|
7
|
+
// window: iframeWindow,
|
|
8
|
+
// schema: {
|
|
9
|
+
// listen: Schema.Union(MessagePortInit.PortForDevtools, BackgroundMessage.Disconnect),
|
|
10
|
+
// send: Schema.Never,
|
|
11
|
+
// },
|
|
12
|
+
// })
|
|
13
|
+
// const panelChannel = yield* WebChannel.windowChannel({
|
|
14
|
+
// window: iframeWindow.parent,
|
|
15
|
+
// schema: { listen: Schema.Never, send: MessageToPanel },
|
|
16
|
+
// })
|
|
17
|
+
// const responsePubSub = yield* PubSub.unbounded<
|
|
18
|
+
// Devtools.MessageFromApp | Devtools.MessageFromApp
|
|
19
|
+
// >().pipe(Effect.acquireRelease(PubSub.shutdown))
|
|
20
|
+
// const portForDevtoolsDeferred = yield* Deferred.make<MessagePort>()
|
|
21
|
+
// // Messages coming from the app host (i.e. contentscript) via the background script and the devtools panel window
|
|
22
|
+
// yield* iframeChannel.listen.pipe(
|
|
23
|
+
// Stream.flatten(),
|
|
24
|
+
// Stream.tap((msg) =>
|
|
25
|
+
// Effect.gen(function* () {
|
|
26
|
+
// if (msg._tag === 'MessagePortInit.PortForDevtools') {
|
|
27
|
+
// yield* Deferred.succeed(portForDevtoolsDeferred, msg.port)
|
|
28
|
+
// } else {
|
|
29
|
+
// // yield* PubSub.publish(
|
|
30
|
+
// // responsePubSub,
|
|
31
|
+
// // Devtools.Disconnect.make({ clientId: msg.clientId, sessionId: msg.sessionId, liveStoreVersion }),
|
|
32
|
+
// // )
|
|
33
|
+
// }
|
|
34
|
+
// }),
|
|
35
|
+
// ),
|
|
36
|
+
// Stream.runDrain,
|
|
37
|
+
// Effect.withSpan('iframeChannel.listen'),
|
|
38
|
+
// Effect.tapCauseLogPretty,
|
|
39
|
+
// Effect.forkScoped,
|
|
40
|
+
// )
|
|
41
|
+
// yield* panelChannel.send(IframeReady.make({})).pipe(Effect.ignoreLogged)
|
|
42
|
+
// // NOTE When using the web bridge and browser extension bridge at the same time, both will show `isLeader: true`
|
|
43
|
+
// // even though the page origin is the same, given the browser extension app is running in an iframe
|
|
44
|
+
// // this will cause the origin to be "sandboxed" and thus the locks be isolated
|
|
45
|
+
// const { sendToAppHost, appHostId, isLeader } = yield* makeShared({ portForDevtoolsDeferred, responsePubSub })
|
|
46
|
+
// const copyToClipboard = (text: string) =>
|
|
47
|
+
// panelChannel.send(BackgroundMessage.CopyToClipboard.make({ text })).pipe(Effect.ignoreLogged)
|
|
48
|
+
// const sendEscapeKey = panelChannel.send(EscapeKey.make({})).pipe(Effect.ignoreLogged)
|
|
49
|
+
// return {
|
|
50
|
+
// responsePubSub,
|
|
51
|
+
// sendToAppHost,
|
|
52
|
+
// clientId,
|
|
53
|
+
// sessionId,
|
|
54
|
+
// copyToClipboard,
|
|
55
|
+
// sendEscapeKey,
|
|
56
|
+
// isLeader,
|
|
57
|
+
// } satisfies Devtools.PrepareDevtoolsBridge
|
|
58
|
+
});
|
|
59
|
+
//# sourceMappingURL=browser-extension-bridge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"browser-extension-bridge.js","sourceRoot":"","sources":["../../src/devtools-bridge/browser-extension-bridge.ts"],"names":[],"mappings":"AACA,OAAO,EAAY,MAAM,EAAsC,MAAM,yBAAyB,CAAA;AAM9F,qHAAqH;AACrH,kDAAkD;AAClD,MAAM,CAAC,MAAM,qCAAqC,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IACvE,8BAA8B;IAC9B,0DAA0D;IAC1D,0BAA0B;IAC1B,cAAc;IACd,2FAA2F;IAC3F,0BAA0B;IAC1B,OAAO;IACP,KAAK;IACL,yDAAyD;IACzD,iCAAiC;IACjC,4DAA4D;IAC5D,KAAK;IACL,kDAAkD;IAClD,sDAAsD;IACtD,mDAAmD;IACnD,sEAAsE;IACtE,oHAAoH;IACpH,oCAAoC;IACpC,sBAAsB;IACtB,wBAAwB;IACxB,gCAAgC;IAChC,8DAA8D;IAC9D,qEAAqE;IACrE,iBAAiB;IACjB,oCAAoC;IACpC,+BAA+B;IAC/B,iHAAiH;IACjH,eAAe;IACf,UAAU;IACV,UAAU;IACV,OAAO;IACP,qBAAqB;IACrB,6CAA6C;IAC7C,8BAA8B;IAC9B,uBAAuB;IACvB,IAAI;IACJ,2EAA2E;IAC3E,mHAAmH;IACnH,sGAAsG;IACtG,iFAAiF;IACjF,gHAAgH;IAChH,4CAA4C;IAC5C,kGAAkG;IAClG,wFAAwF;IACxF,WAAW;IACX,oBAAoB;IACpB,mBAAmB;IACnB,cAAc;IACd,eAAe;IACf,qBAAqB;IACrB,mBAAmB;IACnB,cAAc;IACd,6CAA6C;AAC/C,CAAC,CAAC,CAAA"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { Schema } from '@livestore/utils/effect';
|
|
2
|
+
import { BackgroundMessage } from './background-message.js';
|
|
3
|
+
declare const IframeReady_base: Schema.TaggedStruct<"IframeReady", {}>;
|
|
4
|
+
export declare class IframeReady extends IframeReady_base {
|
|
5
|
+
}
|
|
6
|
+
declare const EscapeKey_base: Schema.TaggedStruct<"EscapeKey", {}>;
|
|
7
|
+
export declare class EscapeKey extends EscapeKey_base {
|
|
8
|
+
}
|
|
9
|
+
declare const MessageToIframeWindow_base: typeof Schema.Never;
|
|
10
|
+
export declare class MessageToIframeWindow extends MessageToIframeWindow_base {
|
|
11
|
+
}
|
|
12
|
+
declare const MessageToPanel_base: Schema.Union<[typeof IframeReady, typeof EscapeKey, typeof BackgroundMessage.CopyToClipboard]>;
|
|
13
|
+
export declare class MessageToPanel extends MessageToPanel_base {
|
|
14
|
+
}
|
|
15
|
+
export {};
|
|
16
|
+
//# sourceMappingURL=iframe-message.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"iframe-message.d.ts","sourceRoot":"","sources":["../../src/devtools-bridge/iframe-message.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAEhD,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAA;;AAE3D,qBAAa,WAAY,SAAQ,gBAAsC;CAAG;;AAC1E,qBAAa,SAAU,SAAQ,cAAoC;CAAG;;AAEtE,qBAAa,qBAAsB,SAAQ,0BAAc;CAAG;;AAC5D,qBAAa,cAAe,SAAQ,mBAAuE;CAAG"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { Schema } from '@livestore/utils/effect';
|
|
2
|
+
import { BackgroundMessage } from './background-message.js';
|
|
3
|
+
export class IframeReady extends Schema.TaggedStruct('IframeReady', {}) {
|
|
4
|
+
}
|
|
5
|
+
export class EscapeKey extends Schema.TaggedStruct('EscapeKey', {}) {
|
|
6
|
+
}
|
|
7
|
+
export class MessageToIframeWindow extends Schema.Union() {
|
|
8
|
+
}
|
|
9
|
+
export class MessageToPanel extends Schema.Union(IframeReady, EscapeKey, BackgroundMessage.CopyToClipboard) {
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=iframe-message.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"iframe-message.js","sourceRoot":"","sources":["../../src/devtools-bridge/iframe-message.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAEhD,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAA;AAE3D,MAAM,OAAO,WAAY,SAAQ,MAAM,CAAC,YAAY,CAAC,aAAa,EAAE,EAAE,CAAC;CAAG;AAC1E,MAAM,OAAO,SAAU,SAAQ,MAAM,CAAC,YAAY,CAAC,WAAW,EAAE,EAAE,CAAC;CAAG;AAEtE,MAAM,OAAO,qBAAsB,SAAQ,MAAM,CAAC,KAAK,EAAE;CAAG;AAC5D,MAAM,OAAO,cAAe,SAAQ,MAAM,CAAC,KAAK,CAAC,WAAW,EAAE,SAAS,EAAE,iBAAiB,CAAC,eAAe,CAAC;CAAG"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { prepareBrowserExtensionDevtoolsBridge } from './browser-extension-bridge.js';
|
|
2
|
+
export { type WebBridgeOptions, type WebBridgeInfo as WebBridgeChannelInfo, } from './web-bridge.js';
|
|
3
|
+
export { BackgroundMessage, MessagePortInit } from './background-message.js';
|
|
4
|
+
export { backgroundChannel } from './background-browser-channel.js';
|
|
5
|
+
export * as IframeMessage from './iframe-message.js';
|
|
6
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/devtools-bridge/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qCAAqC,EAAE,MAAM,+BAA+B,CAAA;AACrF,OAAO,EAEL,KAAK,gBAAgB,EACrB,KAAK,aAAa,IAAI,oBAAoB,GAC3C,MAAM,iBAAiB,CAAA;AACxB,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;AAC5E,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAA;AACnE,OAAO,KAAK,aAAa,MAAM,qBAAqB,CAAA"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { prepareBrowserExtensionDevtoolsBridge } from './browser-extension-bridge.js';
|
|
2
|
+
export { BackgroundMessage, MessagePortInit } from './background-message.js';
|
|
3
|
+
export { backgroundChannel } from './background-browser-channel.js';
|
|
4
|
+
export * as IframeMessage from './iframe-message.js';
|
|
5
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/devtools-bridge/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qCAAqC,EAAE,MAAM,+BAA+B,CAAA;AAMrF,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;AAC5E,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAA;AACnE,OAAO,KAAK,aAAa,MAAM,qBAAqB,CAAA"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { Deferred, HashSet, SubscriptionRef } from '@livestore/utils/effect';
|
|
2
|
+
import { Equal, Hash, Schema } from '@livestore/utils/effect';
|
|
3
|
+
declare const WebBridgeInfo_base: Schema.Class<WebBridgeInfo, {
|
|
4
|
+
appHostId: typeof Schema.String;
|
|
5
|
+
storeId: typeof Schema.String;
|
|
6
|
+
webBridgeId: typeof Schema.String;
|
|
7
|
+
isLeader: typeof Schema.Boolean;
|
|
8
|
+
}, Schema.Struct.Encoded<{
|
|
9
|
+
appHostId: typeof Schema.String;
|
|
10
|
+
storeId: typeof Schema.String;
|
|
11
|
+
webBridgeId: typeof Schema.String;
|
|
12
|
+
isLeader: typeof Schema.Boolean;
|
|
13
|
+
}>, never, {
|
|
14
|
+
readonly storeId: string;
|
|
15
|
+
} & {
|
|
16
|
+
readonly appHostId: string;
|
|
17
|
+
} & {
|
|
18
|
+
readonly isLeader: boolean;
|
|
19
|
+
} & {
|
|
20
|
+
readonly webBridgeId: string;
|
|
21
|
+
}, {}, {}>;
|
|
22
|
+
export declare class WebBridgeInfo extends WebBridgeInfo_base {
|
|
23
|
+
[Hash.symbol](): number;
|
|
24
|
+
[Equal.symbol](that: Equal.Equal): boolean;
|
|
25
|
+
}
|
|
26
|
+
export type WebBridgeOptions = {
|
|
27
|
+
selectedChannelInfoDeferred: Deferred.Deferred<WebBridgeInfo>;
|
|
28
|
+
bridgeInfos: SubscriptionRef.SubscriptionRef<HashSet.HashSet<WebBridgeInfo>>;
|
|
29
|
+
};
|
|
30
|
+
export {};
|
|
31
|
+
//# sourceMappingURL=web-bridge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"web-bridge.d.ts","sourceRoot":"","sources":["../../src/devtools-bridge/web-bridge.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAS,eAAe,EAAE,MAAM,yBAAyB,CAAA;AACxF,OAAO,EAAyB,KAAK,EAAY,IAAI,EAAU,MAAM,EAAkB,MAAM,yBAAyB,CAAA;;;;;;;;;;;;;;;;;;;;AAKtH,qBAAa,aAAc,SAAQ,kBAKjC;IAEA,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,MAAM;IAKvB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,GAAG,OAAO;CAG3C;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC7B,2BAA2B,EAAE,QAAQ,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAA;IAC7D,WAAW,EAAE,eAAe,CAAC,eAAe,CAAC,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAA;CAC7E,CAAA"}
|