@livestore/adapter-web 0.4.0-dev.21 → 0.4.0-dev.22
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/in-memory/in-memory-adapter.d.ts.map +1 -1
- package/dist/in-memory/in-memory-adapter.js +5 -1
- package/dist/in-memory/in-memory-adapter.js.map +1 -1
- package/dist/index.d.ts +11 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +11 -1
- package/dist/index.js.map +1 -1
- package/dist/single-tab/mod.d.ts +15 -0
- package/dist/single-tab/mod.d.ts.map +1 -0
- package/dist/single-tab/mod.js +15 -0
- package/dist/single-tab/mod.js.map +1 -0
- package/dist/single-tab/single-tab-adapter.d.ts +108 -0
- package/dist/single-tab/single-tab-adapter.d.ts.map +1 -0
- package/dist/single-tab/single-tab-adapter.js +279 -0
- package/dist/single-tab/single-tab-adapter.js.map +1 -0
- package/dist/web-worker/client-session/persisted-adapter.d.ts +18 -0
- package/dist/web-worker/client-session/persisted-adapter.d.ts.map +1 -1
- package/dist/web-worker/client-session/persisted-adapter.js +72 -5
- package/dist/web-worker/client-session/persisted-adapter.js.map +1 -1
- package/dist/web-worker/common/persisted-sqlite.js +1 -1
- package/dist/web-worker/common/persisted-sqlite.js.map +1 -1
- package/dist/web-worker/common/worker-schema.d.ts +8 -4
- package/dist/web-worker/common/worker-schema.d.ts.map +1 -1
- package/dist/web-worker/leader-worker/make-leader-worker.d.ts +1 -1
- package/dist/web-worker/leader-worker/make-leader-worker.d.ts.map +1 -1
- package/dist/web-worker/leader-worker/make-leader-worker.js +43 -9
- package/dist/web-worker/leader-worker/make-leader-worker.js.map +1 -1
- package/package.json +6 -6
- package/src/in-memory/in-memory-adapter.ts +5 -1
- package/src/index.ts +15 -1
- package/src/single-tab/mod.ts +15 -0
- package/src/single-tab/single-tab-adapter.ts +517 -0
- package/src/web-worker/client-session/persisted-adapter.ts +87 -6
- package/src/web-worker/common/persisted-sqlite.ts +1 -1
- package/src/web-worker/leader-worker/make-leader-worker.ts +59 -10
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"in-memory-adapter.d.ts","sourceRoot":"","sources":["../../src/in-memory/in-memory-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,OAAO,EAMZ,KAAK,WAAW,EAChB,YAAY,EACb,MAAM,mBAAmB,CAAA;AAS1B,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAA;AAG/D,OAAO,KAAK,KAAK,aAAa,MAAM,uCAAuC,CAAA;AAC3E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAA;AAIrE,OAAO,EAA2B,KAAK,EAAS,KAAK,MAAM,EAAmB,MAAM,EAAE,MAAM,yBAAyB,CAAA;AASrH,MAAM,WAAW,sBAAsB;IACrC,cAAc,CAAC,EAAE,UAAU,CAAC,WAAW,CAAC,CAAA;IACxC,IAAI,CAAC,EAAE,WAAW,CAAA;IAClB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAA;IAElB,sGAAsG;IACtG,QAAQ,CAAC,EAAE;QACT,YAAY,EACR,CAAC,CAAC,OAAO,EAAE;YAAE,IAAI,EAAE,MAAM,CAAA;SAAE,KAAK,UAAU,CAAC,YAAY,CAAC,GACxD,CAAC,KAAK,OAAO,EAAE;YACb,IAAI,EAAE,MAAM,CAAA;SACb,KAAK,UAAU,CAAC,YAAY,CAAC,CAAA;KACnC,CAAA;CACF;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AACH,eAAO,MAAM,mBAAmB,GAC7B,UAAS,sBAA2B,KAAG,OA+EwC,CAAA;AAElF,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,eAAe,CAAA;IACvB,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,MAAM,CAAA;IAChB,YAAY,EAAE,eAAe,CAAA;IAC7B,WAAW,EAAE,WAAW,GAAG,SAAS,CAAA;IACpC,kBAAkB,EAAE,MAAM,CAAC,SAAS,GAAG,SAAS,CAAA;IAChD,iBAAiB,EAAE,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,SAAS,CAAA;IACjD,cAAc,EAAE,UAAU,CAAC,WAAW,CAAC,GAAG,SAAS,CAAA;IACnD,eAAe,EAAE,OAAO,CAAA;IACxB,iBAAiB,EAAE,iBAAiB,GAAG,SAAS,CAAA;CACjD;
|
|
1
|
+
{"version":3,"file":"in-memory-adapter.d.ts","sourceRoot":"","sources":["../../src/in-memory/in-memory-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,OAAO,EAMZ,KAAK,WAAW,EAChB,YAAY,EACb,MAAM,mBAAmB,CAAA;AAS1B,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAA;AAG/D,OAAO,KAAK,KAAK,aAAa,MAAM,uCAAuC,CAAA;AAC3E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAA;AAIrE,OAAO,EAA2B,KAAK,EAAS,KAAK,MAAM,EAAmB,MAAM,EAAE,MAAM,yBAAyB,CAAA;AASrH,MAAM,WAAW,sBAAsB;IACrC,cAAc,CAAC,EAAE,UAAU,CAAC,WAAW,CAAC,CAAA;IACxC,IAAI,CAAC,EAAE,WAAW,CAAA;IAClB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAA;IAElB,sGAAsG;IACtG,QAAQ,CAAC,EAAE;QACT,YAAY,EACR,CAAC,CAAC,OAAO,EAAE;YAAE,IAAI,EAAE,MAAM,CAAA;SAAE,KAAK,UAAU,CAAC,YAAY,CAAC,GACxD,CAAC,KAAK,OAAO,EAAE;YACb,IAAI,EAAE,MAAM,CAAA;SACb,KAAK,UAAU,CAAC,YAAY,CAAC,CAAA;KACnC,CAAA;CACF;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AACH,eAAO,MAAM,mBAAmB,GAC7B,UAAS,sBAA2B,KAAG,OA+EwC,CAAA;AAElF,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,eAAe,CAAA;IACvB,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,MAAM,CAAA;IAChB,YAAY,EAAE,eAAe,CAAA;IAC7B,WAAW,EAAE,WAAW,GAAG,SAAS,CAAA;IACpC,kBAAkB,EAAE,MAAM,CAAC,SAAS,GAAG,SAAS,CAAA;IAChD,iBAAiB,EAAE,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,SAAS,CAAA;IACjD,cAAc,EAAE,UAAU,CAAC,WAAW,CAAC,GAAG,SAAS,CAAA;IACnD,eAAe,EAAE,OAAO,CAAA;IACxB,iBAAiB,EAAE,iBAAiB,GAAG,SAAS,CAAA;CACjD;AAoGD,KAAK,iBAAiB,GAAG,KAAK,CAAC,KAAK,CAClC,MAAM,CAAC,oBAAoB,CAAC,OAAO,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EACrE,YAAY,CACb,CAAA"}
|
|
@@ -164,7 +164,11 @@ const makeLeaderThread = ({ schema, storeId, clientId, makeSqliteDb, syncOptions
|
|
|
164
164
|
options,
|
|
165
165
|
}),
|
|
166
166
|
},
|
|
167
|
-
initialState: {
|
|
167
|
+
initialState: {
|
|
168
|
+
leaderHead: initialLeaderHead,
|
|
169
|
+
migrationsReport: initialState.migrationsReport,
|
|
170
|
+
storageMode: 'in-memory',
|
|
171
|
+
},
|
|
168
172
|
export: Effect.sync(() => dbState.export()),
|
|
169
173
|
getEventlogData: Effect.sync(() => dbEventlog.export()),
|
|
170
174
|
syncState: syncProcessor.syncState,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"in-memory-adapter.js","sourceRoot":"","sources":["../../src/in-memory/in-memory-adapter.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"in-memory-adapter.js","sourceRoot":"","sources":["../../src/in-memory/in-memory-adapter.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,14 @@
|
|
|
1
1
|
export { makeInMemoryAdapter } from './in-memory/in-memory-adapter.ts';
|
|
2
|
-
|
|
2
|
+
/**
|
|
3
|
+
* Single-tab adapter for browsers without SharedWorker support (e.g. Android Chrome).
|
|
4
|
+
*
|
|
5
|
+
* In most cases, you should use `makePersistedAdapter` instead, which automatically
|
|
6
|
+
* falls back to single-tab mode when SharedWorker is unavailable.
|
|
7
|
+
*
|
|
8
|
+
* @see https://github.com/livestorejs/livestore/issues/321
|
|
9
|
+
* @see https://issues.chromium.org/issues/40290702
|
|
10
|
+
*/
|
|
11
|
+
export { makeSingleTabAdapter, type SingleTabAdapterOptions } from './single-tab/mod.ts';
|
|
12
|
+
export { canUseSharedWorker, makePersistedAdapter, type WebAdapterOptions, } from './web-worker/client-session/persisted-adapter.ts';
|
|
3
13
|
export * as WorkerSchema from './web-worker/common/worker-schema.ts';
|
|
4
14
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAA;AACtE,OAAO,EAAE,oBAAoB,EAAE,KAAK,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAA;AACtE;;;;;;;;GAQG;AACH,OAAO,EAAE,oBAAoB,EAAE,KAAK,uBAAuB,EAAE,MAAM,qBAAqB,CAAA;AACxF,OAAO,EACL,kBAAkB,EAClB,oBAAoB,EACpB,KAAK,iBAAiB,GACvB,MAAM,kDAAkD,CAAA;AACzD,OAAO,KAAK,YAAY,MAAM,sCAAsC,CAAA"}
|
package/dist/index.js
CHANGED
|
@@ -1,4 +1,14 @@
|
|
|
1
1
|
export { makeInMemoryAdapter } from "./in-memory/in-memory-adapter.js";
|
|
2
|
-
|
|
2
|
+
/**
|
|
3
|
+
* Single-tab adapter for browsers without SharedWorker support (e.g. Android Chrome).
|
|
4
|
+
*
|
|
5
|
+
* In most cases, you should use `makePersistedAdapter` instead, which automatically
|
|
6
|
+
* falls back to single-tab mode when SharedWorker is unavailable.
|
|
7
|
+
*
|
|
8
|
+
* @see https://github.com/livestorejs/livestore/issues/321
|
|
9
|
+
* @see https://issues.chromium.org/issues/40290702
|
|
10
|
+
*/
|
|
11
|
+
export { makeSingleTabAdapter } from "./single-tab/mod.js";
|
|
12
|
+
export { canUseSharedWorker, makePersistedAdapter, } from "./web-worker/client-session/persisted-adapter.js";
|
|
3
13
|
export * as WorkerSchema from "./web-worker/common/worker-schema.js";
|
|
4
14
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAA;AACtE,OAAO,EAAE,oBAAoB,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAA;AACtE;;;;;;;;GAQG;AACH,OAAO,EAAE,oBAAoB,EAAgC,MAAM,qBAAqB,CAAA;AACxF,OAAO,EACL,kBAAkB,EAClB,oBAAoB,GAErB,MAAM,kDAAkD,CAAA;AACzD,OAAO,KAAK,YAAY,MAAM,sCAAsC,CAAA"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Single-tab adapter module for browsers without SharedWorker support.
|
|
3
|
+
*
|
|
4
|
+
* **NOTE**: This module exists as a fallback for Android Chrome and similar browsers
|
|
5
|
+
* that don't support SharedWorker. It is intended to be deprecated and removed once
|
|
6
|
+
* SharedWorker support is available in these browsers.
|
|
7
|
+
*
|
|
8
|
+
* Track progress:
|
|
9
|
+
* - LiveStore issue: https://github.com/livestorejs/livestore/issues/321
|
|
10
|
+
* - Chromium bug: https://issues.chromium.org/issues/40290702
|
|
11
|
+
*
|
|
12
|
+
* @module
|
|
13
|
+
*/
|
|
14
|
+
export { makeSingleTabAdapter, type SingleTabAdapterOptions } from './single-tab-adapter.ts';
|
|
15
|
+
//# sourceMappingURL=mod.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mod.d.ts","sourceRoot":"","sources":["../../src/single-tab/mod.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,oBAAoB,EAAE,KAAK,uBAAuB,EAAE,MAAM,yBAAyB,CAAA"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Single-tab adapter module for browsers without SharedWorker support.
|
|
3
|
+
*
|
|
4
|
+
* **NOTE**: This module exists as a fallback for Android Chrome and similar browsers
|
|
5
|
+
* that don't support SharedWorker. It is intended to be deprecated and removed once
|
|
6
|
+
* SharedWorker support is available in these browsers.
|
|
7
|
+
*
|
|
8
|
+
* Track progress:
|
|
9
|
+
* - LiveStore issue: https://github.com/livestorejs/livestore/issues/321
|
|
10
|
+
* - Chromium bug: https://issues.chromium.org/issues/40290702
|
|
11
|
+
*
|
|
12
|
+
* @module
|
|
13
|
+
*/
|
|
14
|
+
export { makeSingleTabAdapter } from "./single-tab-adapter.js";
|
|
15
|
+
//# sourceMappingURL=mod.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mod.js","sourceRoot":"","sources":["../../src/single-tab/mod.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,oBAAoB,EAAgC,MAAM,yBAAyB,CAAA"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Single-tab adapter for browsers without SharedWorker support (e.g. Android Chrome).
|
|
3
|
+
*
|
|
4
|
+
* This adapter is a fallback for browsers that don't support the SharedWorker API.
|
|
5
|
+
* It provides the same OPFS persistence as the regular persisted adapter, but without
|
|
6
|
+
* multi-tab synchronization capabilities.
|
|
7
|
+
*
|
|
8
|
+
* **IMPORTANT**: This code is intended to be removed once SharedWorker support is
|
|
9
|
+
* available in Android Chrome. Track progress at:
|
|
10
|
+
* - LiveStore issue: https://github.com/livestorejs/livestore/issues/321
|
|
11
|
+
* - Chromium bug: https://issues.chromium.org/issues/40290702
|
|
12
|
+
*
|
|
13
|
+
* @module
|
|
14
|
+
*/
|
|
15
|
+
import type { Adapter } from '@livestore/common';
|
|
16
|
+
import * as WorkerSchema from '../web-worker/common/worker-schema.ts';
|
|
17
|
+
/**
|
|
18
|
+
* Options for the single-tab adapter.
|
|
19
|
+
*
|
|
20
|
+
* This adapter is designed for browsers without SharedWorker support (e.g. Android Chrome).
|
|
21
|
+
* It provides OPFS persistence but without multi-tab synchronization.
|
|
22
|
+
*
|
|
23
|
+
* @see https://github.com/livestorejs/livestore/issues/321
|
|
24
|
+
* @see https://issues.chromium.org/issues/40290702
|
|
25
|
+
*/
|
|
26
|
+
export type SingleTabAdapterOptions = {
|
|
27
|
+
/**
|
|
28
|
+
* The dedicated web worker that runs the LiveStore leader thread.
|
|
29
|
+
*
|
|
30
|
+
* @example
|
|
31
|
+
* ```ts
|
|
32
|
+
* import LiveStoreWorker from './livestore.worker.ts?worker'
|
|
33
|
+
*
|
|
34
|
+
* const adapter = makeSingleTabAdapter({
|
|
35
|
+
* worker: LiveStoreWorker,
|
|
36
|
+
* storage: { type: 'opfs' },
|
|
37
|
+
* })
|
|
38
|
+
* ```
|
|
39
|
+
*/
|
|
40
|
+
worker: ((options: {
|
|
41
|
+
name: string;
|
|
42
|
+
}) => globalThis.Worker) | (new (options: {
|
|
43
|
+
name: string;
|
|
44
|
+
}) => globalThis.Worker);
|
|
45
|
+
/**
|
|
46
|
+
* Storage configuration. Currently only OPFS is supported.
|
|
47
|
+
*/
|
|
48
|
+
storage: WorkerSchema.StorageTypeEncoded;
|
|
49
|
+
/**
|
|
50
|
+
* Warning: This will reset both the app and eventlog database.
|
|
51
|
+
* This should only be used during development.
|
|
52
|
+
*
|
|
53
|
+
* @default false
|
|
54
|
+
*/
|
|
55
|
+
resetPersistence?: boolean;
|
|
56
|
+
/**
|
|
57
|
+
* By default the adapter will initially generate a random clientId (via `nanoid(5)`),
|
|
58
|
+
* store it in `localStorage` and restore it for subsequent client sessions.
|
|
59
|
+
*/
|
|
60
|
+
clientId?: string;
|
|
61
|
+
/**
|
|
62
|
+
* By default the adapter will initially generate a random sessionId (via `nanoid(5)`),
|
|
63
|
+
* store it in `sessionStorage` and restore it for subsequent client sessions in the same tab.
|
|
64
|
+
*/
|
|
65
|
+
sessionId?: string;
|
|
66
|
+
experimental?: {
|
|
67
|
+
/**
|
|
68
|
+
* When set to `true`, the adapter will always start with a snapshot from the leader
|
|
69
|
+
* instead of trying to load a snapshot from storage.
|
|
70
|
+
*
|
|
71
|
+
* @default false
|
|
72
|
+
*/
|
|
73
|
+
disableFastPath?: boolean;
|
|
74
|
+
};
|
|
75
|
+
};
|
|
76
|
+
/**
|
|
77
|
+
* Creates a single-tab web adapter with OPFS persistence.
|
|
78
|
+
*
|
|
79
|
+
* **This adapter is a fallback for browsers without SharedWorker support** (notably Android Chrome).
|
|
80
|
+
* It provides the same persistence capabilities as `makePersistedAdapter`, but without multi-tab
|
|
81
|
+
* synchronization. Each browser tab runs its own independent leader worker.
|
|
82
|
+
*
|
|
83
|
+
* In most cases, you should use `makePersistedAdapter` instead, which automatically falls back
|
|
84
|
+
* to this adapter when SharedWorker is unavailable.
|
|
85
|
+
*
|
|
86
|
+
* **Limitations**:
|
|
87
|
+
* - No multi-tab synchronization (each tab operates independently)
|
|
88
|
+
* - No devtools support (requires SharedWorker)
|
|
89
|
+
* - Opening multiple tabs with the same storeId may cause data conflicts
|
|
90
|
+
*
|
|
91
|
+
* @see https://github.com/livestorejs/livestore/issues/321 - LiveStore tracking issue
|
|
92
|
+
* @see https://issues.chromium.org/issues/40290702 - Chromium SharedWorker bug
|
|
93
|
+
*
|
|
94
|
+
* @example
|
|
95
|
+
* ```ts
|
|
96
|
+
* import { makeSingleTabAdapter } from '@livestore/adapter-web'
|
|
97
|
+
* import LiveStoreWorker from './livestore.worker.ts?worker'
|
|
98
|
+
*
|
|
99
|
+
* // Only use this directly if you specifically need single-tab mode.
|
|
100
|
+
* // Prefer makePersistedAdapter which auto-detects SharedWorker support.
|
|
101
|
+
* const adapter = makeSingleTabAdapter({
|
|
102
|
+
* worker: LiveStoreWorker,
|
|
103
|
+
* storage: { type: 'opfs' },
|
|
104
|
+
* })
|
|
105
|
+
* ```
|
|
106
|
+
*/
|
|
107
|
+
export declare const makeSingleTabAdapter: (options: SingleTabAdapterOptions) => Adapter;
|
|
108
|
+
//# sourceMappingURL=single-tab-adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"single-tab-adapter.d.ts","sourceRoot":"","sources":["../../src/single-tab/single-tab-adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAgD,MAAM,mBAAmB,CAAA;AAkC9F,OAAO,KAAK,YAAY,MAAM,uCAAuC,CAAA;AAErE;;;;;;;;GAQG;AACH,MAAM,MAAM,uBAAuB,GAAG;IACpC;;;;;;;;;;;;OAYG;IACH,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,KAAK,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,KAAK,UAAU,CAAC,MAAM,CAAC,CAAA;IAEnH;;OAEG;IACH,OAAO,EAAE,YAAY,CAAC,kBAAkB,CAAA;IAExC;;;;;OAKG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAE1B;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAA;IAEjB;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAA;IAElB,YAAY,CAAC,EAAE;QACb;;;;;WAKG;QACH,eAAe,CAAC,EAAE,OAAO,CAAA;KAC1B,CAAA;CACF,CAAA;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,eAAO,MAAM,oBAAoB,GAC9B,SAAS,uBAAuB,KAAG,OA+SwC,CAAA"}
|
|
@@ -0,0 +1,279 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Single-tab adapter for browsers without SharedWorker support (e.g. Android Chrome).
|
|
3
|
+
*
|
|
4
|
+
* This adapter is a fallback for browsers that don't support the SharedWorker API.
|
|
5
|
+
* It provides the same OPFS persistence as the regular persisted adapter, but without
|
|
6
|
+
* multi-tab synchronization capabilities.
|
|
7
|
+
*
|
|
8
|
+
* **IMPORTANT**: This code is intended to be removed once SharedWorker support is
|
|
9
|
+
* available in Android Chrome. Track progress at:
|
|
10
|
+
* - LiveStore issue: https://github.com/livestorejs/livestore/issues/321
|
|
11
|
+
* - Chromium bug: https://issues.chromium.org/issues/40290702
|
|
12
|
+
*
|
|
13
|
+
* @module
|
|
14
|
+
*/
|
|
15
|
+
import { IntentionalShutdownCause, makeClientSession, StoreInterrupted, sessionChangesetMetaTable, UnknownError, } from '@livestore/common';
|
|
16
|
+
import { EventSequenceNumber } from '@livestore/common/schema';
|
|
17
|
+
import { sqliteDbFactory } from '@livestore/sqlite-wasm/browser';
|
|
18
|
+
import { shouldNeverHappen, tryAsFunctionAndNew } from '@livestore/utils';
|
|
19
|
+
import { Cause, Effect, Exit, Fiber, Layer, ParseResult, Queue, Schema, Stream, Subscribable, SubscriptionRef, Worker, WorkerError, } from '@livestore/utils/effect';
|
|
20
|
+
import { BrowserWorker, Opfs, WebError } from '@livestore/utils/effect/browser';
|
|
21
|
+
import { nanoid } from '@livestore/utils/nanoid';
|
|
22
|
+
import { loadSqlite3 } from "../web-worker/client-session/sqlite-loader.js";
|
|
23
|
+
import { readPersistedStateDbFromClientSession, resetPersistedDataFromClientSession, } from "../web-worker/common/persisted-sqlite.js";
|
|
24
|
+
import { makeShutdownChannel } from "../web-worker/common/shutdown-channel.js";
|
|
25
|
+
import * as WorkerSchema from "../web-worker/common/worker-schema.js";
|
|
26
|
+
/**
|
|
27
|
+
* Creates a single-tab web adapter with OPFS persistence.
|
|
28
|
+
*
|
|
29
|
+
* **This adapter is a fallback for browsers without SharedWorker support** (notably Android Chrome).
|
|
30
|
+
* It provides the same persistence capabilities as `makePersistedAdapter`, but without multi-tab
|
|
31
|
+
* synchronization. Each browser tab runs its own independent leader worker.
|
|
32
|
+
*
|
|
33
|
+
* In most cases, you should use `makePersistedAdapter` instead, which automatically falls back
|
|
34
|
+
* to this adapter when SharedWorker is unavailable.
|
|
35
|
+
*
|
|
36
|
+
* **Limitations**:
|
|
37
|
+
* - No multi-tab synchronization (each tab operates independently)
|
|
38
|
+
* - No devtools support (requires SharedWorker)
|
|
39
|
+
* - Opening multiple tabs with the same storeId may cause data conflicts
|
|
40
|
+
*
|
|
41
|
+
* @see https://github.com/livestorejs/livestore/issues/321 - LiveStore tracking issue
|
|
42
|
+
* @see https://issues.chromium.org/issues/40290702 - Chromium SharedWorker bug
|
|
43
|
+
*
|
|
44
|
+
* @example
|
|
45
|
+
* ```ts
|
|
46
|
+
* import { makeSingleTabAdapter } from '@livestore/adapter-web'
|
|
47
|
+
* import LiveStoreWorker from './livestore.worker.ts?worker'
|
|
48
|
+
*
|
|
49
|
+
* // Only use this directly if you specifically need single-tab mode.
|
|
50
|
+
* // Prefer makePersistedAdapter which auto-detects SharedWorker support.
|
|
51
|
+
* const adapter = makeSingleTabAdapter({
|
|
52
|
+
* worker: LiveStoreWorker,
|
|
53
|
+
* storage: { type: 'opfs' },
|
|
54
|
+
* })
|
|
55
|
+
* ```
|
|
56
|
+
*/
|
|
57
|
+
export const makeSingleTabAdapter = (options) => (adapterArgs) => Effect.gen(function* () {
|
|
58
|
+
const { schema, storeId, bootStatusQueue, shutdown, syncPayloadEncoded } = adapterArgs;
|
|
59
|
+
// Note: devtoolsEnabled is ignored in single-tab mode (devtools require SharedWorker)
|
|
60
|
+
yield* ensureBrowserRequirements;
|
|
61
|
+
yield* Queue.offer(bootStatusQueue, { stage: 'loading' });
|
|
62
|
+
const sqlite3 = yield* Effect.promise(() => loadSqlite3());
|
|
63
|
+
const storageOptions = yield* Schema.decode(WorkerSchema.StorageType)(options.storage);
|
|
64
|
+
const shutdownChannel = yield* makeShutdownChannel(storeId);
|
|
65
|
+
// Check OPFS availability early and notify user if storage is unavailable (e.g. private browsing)
|
|
66
|
+
const opfsWarning = yield* checkOpfsAvailability;
|
|
67
|
+
if (opfsWarning !== undefined) {
|
|
68
|
+
yield* Effect.logWarning('[@livestore/adapter-web:single-tab] OPFS unavailable', opfsWarning);
|
|
69
|
+
}
|
|
70
|
+
if (options.resetPersistence === true && opfsWarning === undefined) {
|
|
71
|
+
yield* shutdownChannel.send(IntentionalShutdownCause.make({ reason: 'adapter-reset' }));
|
|
72
|
+
yield* resetPersistedDataFromClientSession({ storageOptions, storeId });
|
|
73
|
+
}
|
|
74
|
+
else if (options.resetPersistence === true) {
|
|
75
|
+
yield* Effect.logWarning('[@livestore/adapter-web:single-tab] Skipping persistence reset because storage is unavailable', opfsWarning);
|
|
76
|
+
}
|
|
77
|
+
// Fast-path: try to load snapshot directly from storage
|
|
78
|
+
const dataFromFile = options.experimental?.disableFastPath === true || opfsWarning !== undefined
|
|
79
|
+
? undefined
|
|
80
|
+
: yield* readPersistedStateDbFromClientSession({ storageOptions, storeId, schema }).pipe(Effect.tapError((error) => Effect.logDebug('[@livestore/adapter-web:single-tab] Could not read persisted state db', error, {
|
|
81
|
+
storeId,
|
|
82
|
+
})), Effect.orElseSucceed(() => undefined));
|
|
83
|
+
const clientId = options.clientId ?? getPersistedId(`clientId:${storeId}`, 'local');
|
|
84
|
+
const sessionId = options.sessionId ?? getPersistedId(`sessionId:${storeId}`, 'session');
|
|
85
|
+
yield* shutdownChannel.listen.pipe(Stream.flatten(), Stream.tap((cause) => shutdown(cause._tag === 'LiveStore.IntentionalShutdownCause' ? Exit.succeed(cause) : Exit.fail(cause))), Stream.runDrain, Effect.interruptible, Effect.tapCauseLogPretty, Effect.forkScoped);
|
|
86
|
+
// In single-tab mode, we always have the lock (we're always the leader)
|
|
87
|
+
const lockStatus = yield* SubscriptionRef.make('has-lock');
|
|
88
|
+
// Create MessageChannel for direct communication with the dedicated worker
|
|
89
|
+
const mc = new MessageChannel();
|
|
90
|
+
// Create the dedicated worker directly (no SharedWorker proxy)
|
|
91
|
+
const worker = tryAsFunctionAndNew(options.worker, { name: `livestore-worker-${storeId}-${sessionId}` });
|
|
92
|
+
// Set up communication with the dedicated worker via the outer protocol
|
|
93
|
+
const _dedicatedWorkerFiber = yield* Worker.makeSerialized({
|
|
94
|
+
initialMessage: () => new WorkerSchema.LeaderWorkerOuterInitialMessage({ port: mc.port1, storeId, clientId }),
|
|
95
|
+
}).pipe(Effect.provide(BrowserWorker.layer(() => worker)), UnknownError.mapToUnknownError, Effect.tapErrorCause((cause) => shutdown(Exit.failCause(cause))), Effect.withSpan('@livestore/adapter-web:single-tab:setupDedicatedWorker'), Effect.tapCauseLogPretty, Effect.forkScoped);
|
|
96
|
+
// Set up the inner worker communication via port2 (like SharedWorker would do)
|
|
97
|
+
// BrowserWorker.layer accepts a MessagePort as well as a Worker
|
|
98
|
+
const innerWorkerContext = yield* Layer.build(BrowserWorker.layer(() => mc.port2));
|
|
99
|
+
const innerWorkerFiber = yield* Worker.makePoolSerialized({
|
|
100
|
+
size: 1,
|
|
101
|
+
concurrency: 100,
|
|
102
|
+
initialMessage: () => new WorkerSchema.LeaderWorkerInnerInitialMessage({
|
|
103
|
+
storageOptions,
|
|
104
|
+
storeId,
|
|
105
|
+
clientId,
|
|
106
|
+
// Devtools disabled in single-tab mode (requires SharedWorker)
|
|
107
|
+
devtoolsEnabled: false,
|
|
108
|
+
debugInstanceId: adapterArgs.debugInstanceId,
|
|
109
|
+
syncPayloadEncoded,
|
|
110
|
+
}),
|
|
111
|
+
}).pipe(Effect.provide(innerWorkerContext), Effect.tapCauseLogPretty, UnknownError.mapToUnknownError, Effect.tapErrorCause((cause) => shutdown(Exit.failCause(cause))), Effect.withSpan('@livestore/adapter-web:single-tab:setupInnerWorker'), Effect.forkScoped);
|
|
112
|
+
// Helper to run requests against the worker
|
|
113
|
+
const runInWorker = (req) => Fiber.join(innerWorkerFiber).pipe(Effect.flatMap((worker) => worker.executeEffect(req)), Effect.logWarnIfTakesLongerThan({
|
|
114
|
+
label: `@livestore/adapter-web:single-tab:runInWorker:${req._tag}`,
|
|
115
|
+
duration: 2000,
|
|
116
|
+
}), Effect.withSpan(`@livestore/adapter-web:single-tab:runInWorker:${req._tag}`), Effect.mapError((cause) => Schema.is(UnknownError)(cause)
|
|
117
|
+
? cause
|
|
118
|
+
: ParseResult.isParseError(cause) || Schema.is(WorkerError.WorkerError)(cause)
|
|
119
|
+
? new UnknownError({ cause })
|
|
120
|
+
: cause), Effect.catchAllDefect((cause) => new UnknownError({ cause })));
|
|
121
|
+
const runInWorkerStream = (req) => Effect.gen(function* () {
|
|
122
|
+
const innerWorker = yield* Fiber.join(innerWorkerFiber);
|
|
123
|
+
return innerWorker.execute(req).pipe(Stream.mapError((cause) => Schema.is(UnknownError)(cause)
|
|
124
|
+
? cause
|
|
125
|
+
: ParseResult.isParseError(cause) || Schema.is(WorkerError.WorkerError)(cause)
|
|
126
|
+
? new UnknownError({ cause })
|
|
127
|
+
: cause), Stream.withSpan(`@livestore/adapter-web:single-tab:runInWorkerStream:${req._tag}`));
|
|
128
|
+
}).pipe(Stream.unwrap);
|
|
129
|
+
// Forward boot status from worker
|
|
130
|
+
const bootStatusFiber = yield* runInWorkerStream(new WorkerSchema.LeaderWorkerInnerBootStatusStream()).pipe(Stream.tap((_) => Queue.offer(bootStatusQueue, _)), Stream.runDrain, Effect.tapErrorCause((cause) => Cause.isInterruptedOnly(cause) ? Effect.void : shutdown(Exit.failCause(cause))), Effect.interruptible, Effect.tapCauseLogPretty, Effect.forkScoped);
|
|
131
|
+
yield* Queue.awaitShutdown(bootStatusQueue).pipe(Effect.andThen(Fiber.interrupt(bootStatusFiber)), Effect.tapCauseLogPretty, Effect.forkScoped);
|
|
132
|
+
// Get initial snapshot (either from fast-path or from worker)
|
|
133
|
+
const initialResult = dataFromFile === undefined
|
|
134
|
+
? yield* runInWorker(new WorkerSchema.LeaderWorkerInnerGetRecreateSnapshot()).pipe(Effect.map(({ snapshot, migrationsReport }) => ({
|
|
135
|
+
_tag: 'from-leader-worker',
|
|
136
|
+
snapshot,
|
|
137
|
+
migrationsReport,
|
|
138
|
+
})))
|
|
139
|
+
: { _tag: 'fast-path', snapshot: dataFromFile };
|
|
140
|
+
const migrationsReport = initialResult._tag === 'from-leader-worker' ? initialResult.migrationsReport : { migrations: [] };
|
|
141
|
+
const makeSqliteDb = sqliteDbFactory({ sqlite3 });
|
|
142
|
+
const sqliteDb = yield* makeSqliteDb({ _tag: 'in-memory' });
|
|
143
|
+
sqliteDb.import(initialResult.snapshot);
|
|
144
|
+
const numberOfTables = sqliteDb.select(`select count(*) as count from sqlite_master`)[0]?.count ?? 0;
|
|
145
|
+
if (numberOfTables === 0) {
|
|
146
|
+
return yield* UnknownError.make({
|
|
147
|
+
cause: `Encountered empty or corrupted database`,
|
|
148
|
+
payload: { snapshotByteLength: initialResult.snapshot.byteLength, storageOptions: options.storage },
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
// Restore leader head from SESSION_CHANGESET_META_TABLE
|
|
152
|
+
const initialLeaderHeadRes = sqliteDb.select(sessionChangesetMetaTable
|
|
153
|
+
.select('seqNumClient', 'seqNumGlobal', 'seqNumRebaseGeneration')
|
|
154
|
+
.orderBy([
|
|
155
|
+
{ col: 'seqNumGlobal', direction: 'desc' },
|
|
156
|
+
{ col: 'seqNumClient', direction: 'desc' },
|
|
157
|
+
])
|
|
158
|
+
.first());
|
|
159
|
+
const initialLeaderHead = initialLeaderHeadRes
|
|
160
|
+
? EventSequenceNumber.Client.Composite.make({
|
|
161
|
+
global: initialLeaderHeadRes.seqNumGlobal,
|
|
162
|
+
client: initialLeaderHeadRes.seqNumClient,
|
|
163
|
+
rebaseGeneration: initialLeaderHeadRes.seqNumRebaseGeneration,
|
|
164
|
+
})
|
|
165
|
+
: EventSequenceNumber.Client.ROOT;
|
|
166
|
+
yield* Effect.addFinalizer((ex) => Effect.gen(function* () {
|
|
167
|
+
if (Exit.isFailure(ex) &&
|
|
168
|
+
Exit.isInterrupted(ex) === false &&
|
|
169
|
+
Schema.is(IntentionalShutdownCause)(Cause.squash(ex.cause)) === false &&
|
|
170
|
+
Schema.is(StoreInterrupted)(Cause.squash(ex.cause)) === false) {
|
|
171
|
+
yield* Effect.logError('[@livestore/adapter-web:single-tab] client-session shutdown', ex.cause);
|
|
172
|
+
}
|
|
173
|
+
else {
|
|
174
|
+
yield* Effect.logDebug('[@livestore/adapter-web:single-tab] client-session shutdown', ex);
|
|
175
|
+
}
|
|
176
|
+
}).pipe(Effect.tapCauseLogPretty, Effect.orDie));
|
|
177
|
+
const leaderThread = {
|
|
178
|
+
export: runInWorker(new WorkerSchema.LeaderWorkerInnerExport()).pipe(Effect.timeout(10_000), UnknownError.mapToUnknownError, Effect.withSpan('@livestore/adapter-web:single-tab:export')),
|
|
179
|
+
events: {
|
|
180
|
+
pull: ({ cursor }) => runInWorkerStream(new WorkerSchema.LeaderWorkerInnerPullStream({ cursor })).pipe(Stream.orDie),
|
|
181
|
+
push: (batch) => runInWorker(new WorkerSchema.LeaderWorkerInnerPushToLeader({ batch })).pipe(Effect.withSpan('@livestore/adapter-web:single-tab:pushToLeader', {
|
|
182
|
+
attributes: { batchSize: batch.length },
|
|
183
|
+
})),
|
|
184
|
+
stream: (options) => runInWorkerStream(new WorkerSchema.LeaderWorkerInnerStreamEvents(options)).pipe(Stream.withSpan('@livestore/adapter-web:single-tab:streamEvents'), Stream.orDie),
|
|
185
|
+
},
|
|
186
|
+
initialState: {
|
|
187
|
+
leaderHead: initialLeaderHead,
|
|
188
|
+
migrationsReport,
|
|
189
|
+
storageMode: opfsWarning === undefined ? 'persisted' : 'in-memory',
|
|
190
|
+
},
|
|
191
|
+
getEventlogData: runInWorker(new WorkerSchema.LeaderWorkerInnerExportEventlog()).pipe(Effect.timeout(10_000), UnknownError.mapToUnknownError, Effect.withSpan('@livestore/adapter-web:single-tab:getEventlogData')),
|
|
192
|
+
syncState: Subscribable.make({
|
|
193
|
+
get: runInWorker(new WorkerSchema.LeaderWorkerInnerGetLeaderSyncState()).pipe(UnknownError.mapToUnknownError, Effect.withSpan('@livestore/adapter-web:single-tab:getLeaderSyncState')),
|
|
194
|
+
changes: runInWorkerStream(new WorkerSchema.LeaderWorkerInnerSyncStateStream()).pipe(Stream.orDie),
|
|
195
|
+
}),
|
|
196
|
+
sendDevtoolsMessage: (_message) =>
|
|
197
|
+
// Devtools not supported in single-tab mode
|
|
198
|
+
Effect.void,
|
|
199
|
+
networkStatus: Subscribable.make({
|
|
200
|
+
get: runInWorker(new WorkerSchema.LeaderWorkerInnerGetNetworkStatus()).pipe(Effect.orDie),
|
|
201
|
+
changes: runInWorkerStream(new WorkerSchema.LeaderWorkerInnerNetworkStatusStream()).pipe(Stream.orDie),
|
|
202
|
+
}),
|
|
203
|
+
};
|
|
204
|
+
const clientSession = yield* makeClientSession({
|
|
205
|
+
...adapterArgs,
|
|
206
|
+
sqliteDb,
|
|
207
|
+
lockStatus,
|
|
208
|
+
clientId,
|
|
209
|
+
sessionId,
|
|
210
|
+
isLeader: true, // Always leader in single-tab mode
|
|
211
|
+
leaderThread,
|
|
212
|
+
webmeshMode: 'direct',
|
|
213
|
+
origin: globalThis.location?.origin,
|
|
214
|
+
// No webmesh connection in single-tab mode (devtools disabled)
|
|
215
|
+
connectWebmeshNode: () => Effect.void,
|
|
216
|
+
registerBeforeUnload: (onBeforeUnload) => {
|
|
217
|
+
if (typeof window !== 'undefined' && typeof window.addEventListener === 'function') {
|
|
218
|
+
window.addEventListener('beforeunload', onBeforeUnload);
|
|
219
|
+
return () => window.removeEventListener('beforeunload', onBeforeUnload);
|
|
220
|
+
}
|
|
221
|
+
return () => { };
|
|
222
|
+
},
|
|
223
|
+
});
|
|
224
|
+
return clientSession;
|
|
225
|
+
}).pipe(Effect.provide(Opfs.Opfs.Default), UnknownError.mapToUnknownError);
|
|
226
|
+
/** Persists clientId/sessionId to storage */
|
|
227
|
+
const getPersistedId = (key, storageType) => {
|
|
228
|
+
const makeId = () => nanoid(5);
|
|
229
|
+
const storage = typeof window === 'undefined'
|
|
230
|
+
? undefined
|
|
231
|
+
: storageType === 'session'
|
|
232
|
+
? sessionStorage
|
|
233
|
+
: storageType === 'local'
|
|
234
|
+
? localStorage
|
|
235
|
+
: shouldNeverHappen(`[@livestore/adapter-web] Invalid storage type: ${storageType}`);
|
|
236
|
+
if (storage === undefined) {
|
|
237
|
+
return makeId();
|
|
238
|
+
}
|
|
239
|
+
const fullKey = `livestore:${key}`;
|
|
240
|
+
const storedKey = storage.getItem(fullKey);
|
|
241
|
+
if (storedKey)
|
|
242
|
+
return storedKey;
|
|
243
|
+
const newKey = makeId();
|
|
244
|
+
storage.setItem(fullKey, newKey);
|
|
245
|
+
return newKey;
|
|
246
|
+
};
|
|
247
|
+
const ensureBrowserRequirements = Effect.gen(function* () {
|
|
248
|
+
const validate = (condition, label) => Effect.gen(function* () {
|
|
249
|
+
if (condition) {
|
|
250
|
+
return yield* UnknownError.make({
|
|
251
|
+
cause: `[@livestore/adapter-web] Browser not supported. The LiveStore web adapter needs '${label}' to work properly`,
|
|
252
|
+
});
|
|
253
|
+
}
|
|
254
|
+
});
|
|
255
|
+
yield* Effect.all([
|
|
256
|
+
validate(typeof navigator === 'undefined', 'navigator'),
|
|
257
|
+
validate(navigator.locks === undefined, 'navigator.locks'),
|
|
258
|
+
validate(navigator.storage === undefined, 'navigator.storage'),
|
|
259
|
+
validate(crypto.randomUUID === undefined, 'crypto.randomUUID'),
|
|
260
|
+
validate(typeof window === 'undefined', 'window'),
|
|
261
|
+
validate(typeof sessionStorage === 'undefined', 'sessionStorage'),
|
|
262
|
+
]);
|
|
263
|
+
});
|
|
264
|
+
/**
|
|
265
|
+
* Attempts to access OPFS and returns a warning if unavailable.
|
|
266
|
+
*/
|
|
267
|
+
const checkOpfsAvailability = Effect.gen(function* () {
|
|
268
|
+
const opfs = yield* Opfs.Opfs;
|
|
269
|
+
return yield* opfs.getRootDirectoryHandle.pipe(Effect.as(undefined), Effect.catchAll((error) => {
|
|
270
|
+
const reason = Schema.is(WebError.SecurityError)(error) || Schema.is(WebError.NotAllowedError)(error)
|
|
271
|
+
? 'private-browsing'
|
|
272
|
+
: 'storage-unavailable';
|
|
273
|
+
const message = reason === 'private-browsing'
|
|
274
|
+
? 'Storage unavailable in private browsing mode. LiveStore will continue without persistence.'
|
|
275
|
+
: 'Storage access denied. LiveStore will continue without persistence.';
|
|
276
|
+
return Effect.succeed({ reason, message });
|
|
277
|
+
}));
|
|
278
|
+
});
|
|
279
|
+
//# sourceMappingURL=single-tab-adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"single-tab-adapter.js","sourceRoot":"","sources":["../../src/single-tab/single-tab-adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAGH,OAAO,EACL,wBAAwB,EACxB,iBAAiB,EACjB,gBAAgB,EAChB,yBAAyB,EACzB,YAAY,GACb,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAA;AAChE,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAA;AACzE,OAAO,EACL,KAAK,EACL,MAAM,EACN,IAAI,EACJ,KAAK,EACL,KAAK,EACL,WAAW,EACX,KAAK,EACL,MAAM,EACN,MAAM,EACN,YAAY,EACZ,eAAe,EACf,MAAM,EACN,WAAW,GACZ,MAAM,yBAAyB,CAAA;AAChC,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAA;AAC/E,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,+CAA+C,CAAA;AAC3E,OAAO,EACL,qCAAqC,EACrC,mCAAmC,GACpC,MAAM,0CAA0C,CAAA;AACjD,OAAO,EAAE,mBAAmB,EAAE,MAAM,0CAA0C,CAAA;AAC9E,OAAO,KAAK,YAAY,MAAM,uCAAuC,CAAA;AA+DrE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAC/B,CAAC,OAAgC,EAAW,EAAE,CAC9C,CAAC,WAAW,EAAE,EAAE,CACd,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,kBAAkB,EAAE,GAAG,WAAW,CAAA;IACtF,sFAAsF;IAEtF,KAAK,CAAC,CAAC,yBAAyB,CAAA;IAEhC,KAAK,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,eAAe,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAA;IAEzD,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC,CAAA;IAE1D,MAAM,cAAc,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;IAEtF,MAAM,eAAe,GAAG,KAAK,CAAC,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAA;IAE3D,kGAAkG;IAClG,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,qBAAqB,CAAA;IAChD,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;QAC9B,KAAK,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,sDAAsD,EAAE,WAAW,CAAC,CAAA;IAC/F,CAAC;IAED,IAAI,OAAO,CAAC,gBAAgB,KAAK,IAAI,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;QACnE,KAAK,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,eAAe,EAAE,CAAC,CAAC,CAAA;QACvF,KAAK,CAAC,CAAC,mCAAmC,CAAC,EAAE,cAAc,EAAE,OAAO,EAAE,CAAC,CAAA;IACzE,CAAC;SAAM,IAAI,OAAO,CAAC,gBAAgB,KAAK,IAAI,EAAE,CAAC;QAC7C,KAAK,CAAC,CAAC,MAAM,CAAC,UAAU,CACtB,+FAA+F,EAC/F,WAAW,CACZ,CAAA;IACH,CAAC;IAED,wDAAwD;IACxD,MAAM,YAAY,GAChB,OAAO,CAAC,YAAY,EAAE,eAAe,KAAK,IAAI,IAAI,WAAW,KAAK,SAAS;QACzE,CAAC,CAAC,SAAS;QACX,CAAC,CAAC,KAAK,CAAC,CAAC,qCAAqC,CAAC,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC,IAAI,CACpF,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,EAAE,CACxB,MAAM,CAAC,QAAQ,CAAC,uEAAuE,EAAE,KAAK,EAAE;YAC9F,OAAO;SACR,CAAC,CACH,EACD,MAAM,CAAC,aAAa,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CACtC,CAAA;IAEP,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,cAAc,CAAC,YAAY,OAAO,EAAE,EAAE,OAAO,CAAC,CAAA;IACnF,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,cAAc,CAAC,aAAa,OAAO,EAAE,EAAE,SAAS,CAAC,CAAA;IAExF,KAAK,CAAC,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,CAChC,MAAM,CAAC,OAAO,EAAE,EAChB,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CACnB,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,oCAAoC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CACvG,EACD,MAAM,CAAC,QAAQ,EACf,MAAM,CAAC,aAAa,EACpB,MAAM,CAAC,iBAAiB,EACxB,MAAM,CAAC,UAAU,CAClB,CAAA;IAED,wEAAwE;IACxE,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,eAAe,CAAC,IAAI,CAAa,UAAU,CAAC,CAAA;IAEtE,2EAA2E;IAC3E,MAAM,EAAE,GAAG,IAAI,cAAc,EAAE,CAAA;IAE/B,+DAA+D;IAC/D,MAAM,MAAM,GAAG,mBAAmB,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,oBAAoB,OAAO,IAAI,SAAS,EAAE,EAAE,CAAC,CAAA;IAExG,wEAAwE;IACxE,MAAM,qBAAqB,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,cAAc,CAAwC;QAChG,cAAc,EAAE,GAAG,EAAE,CAAC,IAAI,YAAY,CAAC,+BAA+B,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;KAC9G,CAAC,CAAC,IAAI,CACL,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC,EACjD,YAAY,CAAC,iBAAiB,EAC9B,MAAM,CAAC,aAAa,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,EAChE,MAAM,CAAC,QAAQ,CAAC,wDAAwD,CAAC,EACzE,MAAM,CAAC,iBAAiB,EACxB,MAAM,CAAC,UAAU,CAClB,CAAA;IAED,+EAA+E;IAC/E,gEAAgE;IAChE,MAAM,kBAAkB,GAAG,KAAK,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,KAAqC,CAAC,CAAC,CAAA;IAClH,MAAM,gBAAgB,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,kBAAkB,CAAwC;QAC/F,IAAI,EAAE,CAAC;QACP,WAAW,EAAE,GAAG;QAChB,cAAc,EAAE,GAAG,EAAE,CACnB,IAAI,YAAY,CAAC,+BAA+B,CAAC;YAC/C,cAAc;YACd,OAAO;YACP,QAAQ;YACR,+DAA+D;YAC/D,eAAe,EAAE,KAAK;YACtB,eAAe,EAAE,WAAW,CAAC,eAAe;YAC5C,kBAAkB;SACnB,CAAC;KACL,CAAC,CAAC,IAAI,CACL,MAAM,CAAC,OAAO,CAAC,kBAAkB,CAAC,EAClC,MAAM,CAAC,iBAAiB,EACxB,YAAY,CAAC,iBAAiB,EAC9B,MAAM,CAAC,aAAa,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,EAChE,MAAM,CAAC,QAAQ,CAAC,oDAAoD,CAAC,EACrE,MAAM,CAAC,UAAU,CAClB,CAAA;IAED,4CAA4C;IAC5C,MAAM,WAAW,GAAG,CAClB,GAAS,EAGD,EAAE,CACV,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAC/B,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,aAAa,CAAC,GAAG,CAAQ,CAAC,EAC5D,MAAM,CAAC,wBAAwB,CAAC;QAC9B,KAAK,EAAE,iDAAiD,GAAG,CAAC,IAAI,EAAE;QAClE,QAAQ,EAAE,IAAI;KACf,CAAC,EACF,MAAM,CAAC,QAAQ,CAAC,iDAAiD,GAAG,CAAC,IAAI,EAAE,CAAC,EAC5E,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,EAAE,CACxB,MAAM,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC;QAC5B,CAAC,CAAC,KAAK;QACP,CAAC,CAAC,WAAW,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,EAAE,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC;YAC5E,CAAC,CAAC,IAAI,YAAY,CAAC,EAAE,KAAK,EAAE,CAAC;YAC7B,CAAC,CAAC,KAAK,CACZ,EACD,MAAM,CAAC,cAAc,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,YAAY,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CACvD,CAAA;IAEV,MAAM,iBAAiB,GAAG,CACxB,GAAS,EAGD,EAAE,CACV,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QAClB,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAA;QACvD,OAAO,WAAW,CAAC,OAAO,CAAC,GAAU,CAAC,CAAC,IAAI,CACzC,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,EAAE,CACxB,MAAM,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC;YAC5B,CAAC,CAAC,KAAK;YACP,CAAC,CAAC,WAAW,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,EAAE,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC;gBAC5E,CAAC,CAAC,IAAI,YAAY,CAAC,EAAE,KAAK,EAAE,CAAC;gBAC7B,CAAC,CAAC,KAAK,CACZ,EACD,MAAM,CAAC,QAAQ,CAAC,uDAAuD,GAAG,CAAC,IAAI,EAAE,CAAC,CACnF,CAAA;IACH,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAQ,CAAA;IAE/B,kCAAkC;IAClC,MAAM,eAAe,GAAG,KAAK,CAAC,CAAC,iBAAiB,CAAC,IAAI,YAAY,CAAC,iCAAiC,EAAE,CAAC,CAAC,IAAI,CACzG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,EAClD,MAAM,CAAC,QAAQ,EACf,MAAM,CAAC,aAAa,CAAC,CAAC,KAAK,EAAE,EAAE,CAC7B,KAAK,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAC/E,EACD,MAAM,CAAC,aAAa,EACpB,MAAM,CAAC,iBAAiB,EACxB,MAAM,CAAC,UAAU,CAClB,CAAA;IAED,KAAK,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,eAAe,CAAC,CAAC,IAAI,CAC9C,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC,EAChD,MAAM,CAAC,iBAAiB,EACxB,MAAM,CAAC,UAAU,CAClB,CAAA;IAED,8DAA8D;IAC9D,MAAM,aAAa,GACjB,YAAY,KAAK,SAAS;QACxB,CAAC,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,IAAI,YAAY,CAAC,oCAAoC,EAAE,CAAC,CAAC,IAAI,CAC9E,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,EAAE,gBAAgB,EAAE,EAAE,EAAE,CAAC,CAAC;YAC9C,IAAI,EAAE,oBAA6B;YACnC,QAAQ;YACR,gBAAgB;SACjB,CAAC,CAAC,CACJ;QACH,CAAC,CAAC,EAAE,IAAI,EAAE,WAAoB,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAA;IAE5D,MAAM,gBAAgB,GACpB,aAAa,CAAC,IAAI,KAAK,oBAAoB,CAAC,CAAC,CAAC,aAAa,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,EAAE,EAAE,CAAA;IAEnG,MAAM,YAAY,GAAG,eAAe,CAAC,EAAE,OAAO,EAAE,CAAC,CAAA;IACjD,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAA;IAE3D,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAA;IAEvC,MAAM,cAAc,GAClB,QAAQ,CAAC,MAAM,CAAoB,6CAA6C,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,CAAA;IAClG,IAAI,cAAc,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,KAAK,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC;YAC9B,KAAK,EAAE,yCAAyC;YAChD,OAAO,EAAE,EAAE,kBAAkB,EAAE,aAAa,CAAC,QAAQ,CAAC,UAAU,EAAE,cAAc,EAAE,OAAO,CAAC,OAAO,EAAE;SACpG,CAAC,CAAA;IACJ,CAAC;IAED,wDAAwD;IACxD,MAAM,oBAAoB,GAAG,QAAQ,CAAC,MAAM,CAC1C,yBAAyB;SACtB,MAAM,CAAC,cAAc,EAAE,cAAc,EAAE,wBAAwB,CAAC;SAChE,OAAO,CAAC;QACP,EAAE,GAAG,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,EAAE;QAC1C,EAAE,GAAG,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,EAAE;KAC3C,CAAC;SACD,KAAK,EAAE,CACX,CAAA;IAED,MAAM,iBAAiB,GAAG,oBAAoB;QAC5C,CAAC,CAAC,mBAAmB,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC;YACxC,MAAM,EAAE,oBAAoB,CAAC,YAAY;YACzC,MAAM,EAAE,oBAAoB,CAAC,YAAY;YACzC,gBAAgB,EAAE,oBAAoB,CAAC,sBAAsB;SAC9D,CAAC;QACJ,CAAC,CAAC,mBAAmB,CAAC,MAAM,CAAC,IAAI,CAAA;IAEnC,KAAK,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,EAAE,EAAE,EAAE,CAChC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QAClB,IACE,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;YAClB,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,KAAK,KAAK;YAChC,MAAM,CAAC,EAAE,CAAC,wBAAwB,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,KAAK;YACrE,MAAM,CAAC,EAAE,CAAC,gBAAgB,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,KAAK,EAC7D,CAAC;YACD,KAAK,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,6DAA6D,EAAE,EAAE,CAAC,KAAK,CAAC,CAAA;QACjG,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,6DAA6D,EAAE,EAAE,CAAC,CAAA;QAC3F,CAAC;IACH,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,iBAAiB,EAAE,MAAM,CAAC,KAAK,CAAC,CAChD,CAAA;IAED,MAAM,YAAY,GAAkC;QAClD,MAAM,EAAE,WAAW,CAAC,IAAI,YAAY,CAAC,uBAAuB,EAAE,CAAC,CAAC,IAAI,CAClE,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EACtB,YAAY,CAAC,iBAAiB,EAC9B,MAAM,CAAC,QAAQ,CAAC,0CAA0C,CAAC,CAC5D;QAED,MAAM,EAAE;YACN,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CACnB,iBAAiB,CAAC,IAAI,YAAY,CAAC,2BAA2B,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;YAChG,IAAI,EAAE,CAAC,KAAK,EAAE,EAAE,CACd,WAAW,CAAC,IAAI,YAAY,CAAC,6BAA6B,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CACzE,MAAM,CAAC,QAAQ,CAAC,gDAAgD,EAAE;gBAChE,UAAU,EAAE,EAAE,SAAS,EAAE,KAAK,CAAC,MAAM,EAAE;aACxC,CAAC,CACH;YACH,MAAM,EAAE,CAAC,OAAO,EAAE,EAAE,CAClB,iBAAiB,CAAC,IAAI,YAAY,CAAC,6BAA6B,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAC7E,MAAM,CAAC,QAAQ,CAAC,gDAAgD,CAAC,EACjE,MAAM,CAAC,KAAK,CACb;SACJ;QAED,YAAY,EAAE;YACZ,UAAU,EAAE,iBAAiB;YAC7B,gBAAgB;YAChB,WAAW,EAAE,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,WAAW;SACnE;QAED,eAAe,EAAE,WAAW,CAAC,IAAI,YAAY,CAAC,+BAA+B,EAAE,CAAC,CAAC,IAAI,CACnF,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EACtB,YAAY,CAAC,iBAAiB,EAC9B,MAAM,CAAC,QAAQ,CAAC,mDAAmD,CAAC,CACrE;QAED,SAAS,EAAE,YAAY,CAAC,IAAI,CAAC;YAC3B,GAAG,EAAE,WAAW,CAAC,IAAI,YAAY,CAAC,mCAAmC,EAAE,CAAC,CAAC,IAAI,CAC3E,YAAY,CAAC,iBAAiB,EAC9B,MAAM,CAAC,QAAQ,CAAC,sDAAsD,CAAC,CACxE;YACD,OAAO,EAAE,iBAAiB,CAAC,IAAI,YAAY,CAAC,gCAAgC,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;SACnG,CAAC;QAEF,mBAAmB,EAAE,CAAC,QAAQ,EAAE,EAAE;QAChC,4CAA4C;QAC5C,MAAM,CAAC,IAAI;QAEb,aAAa,EAAE,YAAY,CAAC,IAAI,CAAC;YAC/B,GAAG,EAAE,WAAW,CAAC,IAAI,YAAY,CAAC,iCAAiC,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;YACzF,OAAO,EAAE,iBAAiB,CAAC,IAAI,YAAY,CAAC,oCAAoC,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;SACvG,CAAC;KACH,CAAA;IAED,MAAM,aAAa,GAAG,KAAK,CAAC,CAAC,iBAAiB,CAAC;QAC7C,GAAG,WAAW;QACd,QAAQ;QACR,UAAU;QACV,QAAQ;QACR,SAAS;QACT,QAAQ,EAAE,IAAI,EAAE,mCAAmC;QACnD,YAAY;QACZ,WAAW,EAAE,QAAQ;QACrB,MAAM,EAAE,UAAU,CAAC,QAAQ,EAAE,MAAM;QACnC,+DAA+D;QAC/D,kBAAkB,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI;QACrC,oBAAoB,EAAE,CAAC,cAAc,EAAE,EAAE;YACvC,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,OAAO,MAAM,CAAC,gBAAgB,KAAK,UAAU,EAAE,CAAC;gBACnF,MAAM,CAAC,gBAAgB,CAAC,cAAc,EAAE,cAAc,CAAC,CAAA;gBACvD,OAAO,GAAG,EAAE,CAAC,MAAM,CAAC,mBAAmB,CAAC,cAAc,EAAE,cAAc,CAAC,CAAA;YACzE,CAAC;YACD,OAAO,GAAG,EAAE,GAAE,CAAC,CAAA;QACjB,CAAC;KACF,CAAC,CAAA;IAEF,OAAO,aAAa,CAAA;AACtB,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,YAAY,CAAC,iBAAiB,CAAC,CAAA;AAE9E,6CAA6C;AAC7C,MAAM,cAAc,GAAG,CAAC,GAAW,EAAE,WAAgC,EAAE,EAAE;IACvE,MAAM,MAAM,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;IAE9B,MAAM,OAAO,GACX,OAAO,MAAM,KAAK,WAAW;QAC3B,CAAC,CAAC,SAAS;QACX,CAAC,CAAC,WAAW,KAAK,SAAS;YACzB,CAAC,CAAC,cAAc;YAChB,CAAC,CAAC,WAAW,KAAK,OAAO;gBACvB,CAAC,CAAC,YAAY;gBACd,CAAC,CAAC,iBAAiB,CAAC,kDAAkD,WAAW,EAAE,CAAC,CAAA;IAE5F,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,OAAO,MAAM,EAAE,CAAA;IACjB,CAAC;IAED,MAAM,OAAO,GAAG,aAAa,GAAG,EAAE,CAAA;IAClC,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;IAE1C,IAAI,SAAS;QAAE,OAAO,SAAS,CAAA;IAE/B,MAAM,MAAM,GAAG,MAAM,EAAE,CAAA;IACvB,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;IAEhC,OAAO,MAAM,CAAA;AACf,CAAC,CAAA;AAED,MAAM,yBAAyB,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IACpD,MAAM,QAAQ,GAAG,CAAC,SAAkB,EAAE,KAAa,EAAE,EAAE,CACrD,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QAClB,IAAI,SAAS,EAAE,CAAC;YACd,OAAO,KAAK,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC;gBAC9B,KAAK,EAAE,oFAAoF,KAAK,oBAAoB;aACrH,CAAC,CAAA;QACJ,CAAC;IACH,CAAC,CAAC,CAAA;IAEJ,KAAK,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;QAChB,QAAQ,CAAC,OAAO,SAAS,KAAK,WAAW,EAAE,WAAW,CAAC;QACvD,QAAQ,CAAC,SAAS,CAAC,KAAK,KAAK,SAAS,EAAE,iBAAiB,CAAC;QAC1D,QAAQ,CAAC,SAAS,CAAC,OAAO,KAAK,SAAS,EAAE,mBAAmB,CAAC;QAC9D,QAAQ,CAAC,MAAM,CAAC,UAAU,KAAK,SAAS,EAAE,mBAAmB,CAAC;QAC9D,QAAQ,CAAC,OAAO,MAAM,KAAK,WAAW,EAAE,QAAQ,CAAC;QACjD,QAAQ,CAAC,OAAO,cAAc,KAAK,WAAW,EAAE,gBAAgB,CAAC;KAClE,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA;AAEF;;GAEG;AACH,MAAM,qBAAqB,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAChD,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAA;IAC7B,OAAO,KAAK,CAAC,CAAC,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAC5C,MAAM,CAAC,EAAE,CAAC,SAAS,CAAC,EACpB,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,EAAE;QACxB,MAAM,MAAM,GACV,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,KAAK,CAAC;YACpF,CAAC,CAAC,kBAAkB;YACpB,CAAC,CAAC,qBAAqB,CAAA;QAC3B,MAAM,OAAO,GACX,MAAM,KAAK,kBAAkB;YAC3B,CAAC,CAAC,4FAA4F;YAC9F,CAAC,CAAC,qEAAqE,CAAA;QAC3E,OAAO,MAAM,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,OAAO,EAAW,CAAC,CAAA;IACrD,CAAC,CAAC,CACH,CAAA;AACH,CAAC,CAAC,CAAA"}
|
|
@@ -1,5 +1,14 @@
|
|
|
1
1
|
import type { Adapter } from '@livestore/common';
|
|
2
2
|
import * as WorkerSchema from '../common/worker-schema.ts';
|
|
3
|
+
/**
|
|
4
|
+
* Checks if SharedWorker API is available in the current browser context.
|
|
5
|
+
*
|
|
6
|
+
* Returns false on Android Chrome and other browsers without SharedWorker support.
|
|
7
|
+
*
|
|
8
|
+
* @see https://github.com/livestorejs/livestore/issues/321
|
|
9
|
+
* @see https://issues.chromium.org/issues/40290702
|
|
10
|
+
*/
|
|
11
|
+
export declare const canUseSharedWorker: () => boolean;
|
|
3
12
|
export type WebAdapterOptions = {
|
|
4
13
|
worker: ((options: {
|
|
5
14
|
name: string;
|
|
@@ -75,6 +84,15 @@ export type WebAdapterOptions = {
|
|
|
75
84
|
* Creates a web adapter with persistent storage (currently only supports OPFS).
|
|
76
85
|
* Requires both a web worker and a shared worker.
|
|
77
86
|
*
|
|
87
|
+
* On browsers without SharedWorker support (e.g. Android Chrome), this adapter
|
|
88
|
+
* automatically falls back to single-tab mode. In single-tab mode:
|
|
89
|
+
* - Each tab runs independently with its own leader worker
|
|
90
|
+
* - Multi-tab synchronization is not available
|
|
91
|
+
* - Devtools are not supported
|
|
92
|
+
*
|
|
93
|
+
* @see https://github.com/livestorejs/livestore/issues/321 - SharedWorker tracking issue
|
|
94
|
+
* @see https://issues.chromium.org/issues/40290702 - Chromium SharedWorker bug
|
|
95
|
+
*
|
|
78
96
|
* @example
|
|
79
97
|
* ```ts
|
|
80
98
|
* import { makePersistedAdapter } from '@livestore/adapter-web'
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"persisted-adapter.d.ts","sourceRoot":"","sources":["../../../src/web-worker/client-session/persisted-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,
|
|
1
|
+
{"version":3,"file":"persisted-adapter.d.ts","sourceRoot":"","sources":["../../../src/web-worker/client-session/persisted-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAgD,MAAM,mBAAmB,CAAA;AAwC9F,OAAO,KAAK,YAAY,MAAM,4BAA4B,CAAA;AAI1D;;;;;;;GAOG;AACH,eAAO,MAAM,kBAAkB,QAAO,OAA8C,CAAA;AASpF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,KAAK,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,KAAK,UAAU,CAAC,MAAM,CAAC,CAAA;IACnH;;;;;;;;;;;;;OAaG;IACH,YAAY,EACR,CAAC,CAAC,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,KAAK,UAAU,CAAC,YAAY,CAAC,GACxD,CAAC,KAAK,OAAO,EAAE;QACb,IAAI,EAAE,MAAM,CAAA;KACb,KAAK,UAAU,CAAC,YAAY,CAAC,CAAA;IAClC;;OAEG;IACH,OAAO,EAAE,YAAY,CAAC,kBAAkB,CAAA;IACxC;;;;;OAKG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,YAAY,CAAC,EAAE;QACb;;;;;WAKG;QACH,eAAe,CAAC,EAAE,OAAO,CAAA;QACzB;;;;;;;;;;;;;WAaG;QACH,4BAA4B,CAAC,EAAE,OAAO,CAAA;KACvC,CAAA;CACF,CAAA;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,eAAO,MAAM,oBAAoB,GAC9B,SAAS,iBAAiB,KAAG,OAkb8C,CAAA"}
|