@livestore/livestore 0.4.0-dev.21 → 0.4.0-dev.23
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/README.md +0 -1
- package/dist/.tsbuildinfo +1 -1
- package/dist/QueryCache.js +1 -1
- package/dist/QueryCache.js.map +1 -1
- package/dist/SqliteDbWrapper.d.ts +5 -5
- package/dist/SqliteDbWrapper.d.ts.map +1 -1
- package/dist/SqliteDbWrapper.js +8 -8
- package/dist/SqliteDbWrapper.js.map +1 -1
- package/dist/SqliteDbWrapper.test.js +2 -2
- package/dist/SqliteDbWrapper.test.js.map +1 -1
- package/dist/effect/LiveStore.d.ts +130 -2
- package/dist/effect/LiveStore.d.ts.map +1 -1
- package/dist/effect/LiveStore.js +185 -6
- package/dist/effect/LiveStore.js.map +1 -1
- package/dist/effect/LiveStore.test.d.ts +2 -0
- package/dist/effect/LiveStore.test.d.ts.map +1 -0
- package/dist/effect/LiveStore.test.js +42 -0
- package/dist/effect/LiveStore.test.js.map +1 -0
- package/dist/effect/mod.d.ts +1 -1
- package/dist/effect/mod.d.ts.map +1 -1
- package/dist/effect/mod.js +3 -1
- package/dist/effect/mod.js.map +1 -1
- package/dist/live-queries/base-class.d.ts +3 -3
- package/dist/live-queries/base-class.d.ts.map +1 -1
- package/dist/live-queries/base-class.js +2 -2
- package/dist/live-queries/base-class.js.map +1 -1
- package/dist/live-queries/client-document-get-query.d.ts +1 -1
- package/dist/live-queries/client-document-get-query.d.ts.map +1 -1
- package/dist/live-queries/client-document-get-query.js +1 -1
- package/dist/live-queries/client-document-get-query.js.map +1 -1
- package/dist/live-queries/computed.d.ts.map +1 -1
- package/dist/live-queries/computed.js +2 -2
- package/dist/live-queries/computed.js.map +1 -1
- package/dist/live-queries/db-query.js +14 -14
- package/dist/live-queries/db-query.js.map +1 -1
- package/dist/live-queries/db-query.test.js +2 -2
- package/dist/live-queries/db-query.test.js.map +1 -1
- package/dist/live-queries/signal.test.js +2 -2
- package/dist/live-queries/signal.test.js.map +1 -1
- package/dist/mod.d.ts +2 -1
- package/dist/mod.d.ts.map +1 -1
- package/dist/mod.js +1 -0
- package/dist/mod.js.map +1 -1
- package/dist/reactive.d.ts +9 -9
- package/dist/reactive.d.ts.map +1 -1
- package/dist/reactive.js +9 -26
- package/dist/reactive.js.map +1 -1
- package/dist/reactive.test.js +2 -2
- package/dist/reactive.test.js.map +1 -1
- package/dist/store/StoreRegistry.d.ts +215 -0
- package/dist/store/StoreRegistry.d.ts.map +1 -0
- package/dist/store/StoreRegistry.js +267 -0
- package/dist/store/StoreRegistry.js.map +1 -0
- package/dist/store/StoreRegistry.test.d.ts +2 -0
- package/dist/store/StoreRegistry.test.d.ts.map +1 -0
- package/dist/store/StoreRegistry.test.js +381 -0
- package/dist/store/StoreRegistry.test.js.map +1 -0
- package/dist/store/create-store.d.ts +56 -6
- package/dist/store/create-store.d.ts.map +1 -1
- package/dist/store/create-store.js +32 -7
- package/dist/store/create-store.js.map +1 -1
- package/dist/store/devtools.d.ts +1 -1
- package/dist/store/devtools.d.ts.map +1 -1
- package/dist/store/devtools.js +16 -3
- package/dist/store/devtools.js.map +1 -1
- package/dist/store/store-eventstream.test.js +2 -2
- package/dist/store/store-eventstream.test.js.map +1 -1
- package/dist/store/store-types.d.ts +59 -9
- package/dist/store/store-types.d.ts.map +1 -1
- package/dist/store/store-types.js.map +1 -1
- package/dist/store/store-types.test.js +1 -1
- package/dist/store/store-types.test.js.map +1 -1
- package/dist/store/store.d.ts +102 -6
- package/dist/store/store.d.ts.map +1 -1
- package/dist/store/store.js +148 -47
- package/dist/store/store.js.map +1 -1
- package/dist/utils/dev.js.map +1 -1
- package/dist/utils/stack-info.js +2 -2
- package/dist/utils/stack-info.js.map +1 -1
- package/dist/utils/tests/fixture.d.ts +1 -1
- package/dist/utils/tests/fixture.d.ts.map +1 -1
- package/dist/utils/tests/fixture.js.map +1 -1
- package/dist/utils/tests/otel.d.ts.map +1 -1
- package/dist/utils/tests/otel.js +5 -5
- package/dist/utils/tests/otel.js.map +1 -1
- package/package.json +59 -18
- package/src/QueryCache.ts +1 -1
- package/src/SqliteDbWrapper.test.ts +4 -2
- package/src/SqliteDbWrapper.ts +12 -11
- package/src/ambient.d.ts +0 -7
- package/src/effect/LiveStore.test.ts +61 -0
- package/src/effect/LiveStore.ts +381 -8
- package/src/effect/mod.ts +13 -1
- package/src/live-queries/__snapshots__/db-query.test.ts.snap +336 -231
- package/src/live-queries/base-class.ts +7 -6
- package/src/live-queries/client-document-get-query.ts +4 -2
- package/src/live-queries/computed.ts +3 -2
- package/src/live-queries/db-query.test.ts +3 -2
- package/src/live-queries/db-query.ts +15 -15
- package/src/live-queries/signal.test.ts +3 -2
- package/src/mod.ts +2 -0
- package/src/reactive.test.ts +3 -2
- package/src/reactive.ts +22 -23
- package/src/store/StoreRegistry.test.ts +540 -0
- package/src/store/StoreRegistry.ts +418 -0
- package/src/store/create-store.ts +76 -15
- package/src/store/devtools.ts +20 -6
- package/src/store/store-eventstream.test.ts +4 -2
- package/src/store/store-types.test.ts +3 -1
- package/src/store/store-types.ts +64 -13
- package/src/store/store.ts +197 -60
- package/src/utils/dev.ts +2 -2
- package/src/utils/stack-info.ts +2 -2
- package/src/utils/tests/fixture.ts +2 -1
- package/src/utils/tests/otel.ts +8 -7
- package/docs/api/index.md +0 -3
- package/docs/building-with-livestore/complex-ui-state/index.md +0 -5
- package/docs/building-with-livestore/crud/index.md +0 -5
- package/docs/building-with-livestore/data-modeling/index.md +0 -1
- package/docs/building-with-livestore/debugging/index.md +0 -17
- package/docs/building-with-livestore/devtools/index.md +0 -79
- package/docs/building-with-livestore/events/index.md +0 -355
- package/docs/building-with-livestore/examples/ai-agent/index.md +0 -5
- package/docs/building-with-livestore/examples/index.md +0 -30
- package/docs/building-with-livestore/examples/todo-workspaces/index.md +0 -891
- package/docs/building-with-livestore/examples/turnbased-game/index.md +0 -7
- package/docs/building-with-livestore/opentelemetry/index.md +0 -208
- package/docs/building-with-livestore/production-checklist/index.md +0 -5
- package/docs/building-with-livestore/reactivity-system/index.md +0 -202
- package/docs/building-with-livestore/rules-for-ai-agents/index.md +0 -9
- package/docs/building-with-livestore/state/materializers/index.md +0 -300
- package/docs/building-with-livestore/state/sql-queries/index.md +0 -72
- package/docs/building-with-livestore/state/sqlite/index.md +0 -45
- package/docs/building-with-livestore/state/sqlite-schema/index.md +0 -306
- package/docs/building-with-livestore/state/sqlite-schema-effect/index.md +0 -300
- package/docs/building-with-livestore/store/index.md +0 -281
- package/docs/building-with-livestore/syncing/index.md +0 -136
- package/docs/building-with-livestore/tools/cli/index.md +0 -177
- package/docs/building-with-livestore/tools/mcp/index.md +0 -187
- package/docs/examples/cloudflare-adapter/index.md +0 -44
- package/docs/examples/expo-adapter/index.md +0 -44
- package/docs/examples/index.md +0 -55
- package/docs/examples/node-adapter/index.md +0 -44
- package/docs/examples/web-adapter/index.md +0 -52
- package/docs/framework-integrations/custom-elements/index.md +0 -142
- package/docs/framework-integrations/react-integration/index.md +0 -918
- package/docs/framework-integrations/solid-integration/index.md +0 -293
- package/docs/framework-integrations/svelte-integration/index.md +0 -42
- package/docs/framework-integrations/vue-integration/index.md +0 -294
- package/docs/getting-started/expo/index.md +0 -736
- package/docs/getting-started/node/index.md +0 -115
- package/docs/getting-started/react-web/index.md +0 -573
- package/docs/getting-started/solid/index.md +0 -3
- package/docs/getting-started/vue/index.md +0 -471
- package/docs/index.md +0 -209
- package/docs/llms.txt +0 -147
- package/docs/misc/CODE_OF_CONDUCT/index.md +0 -133
- package/docs/misc/FAQ/index.md +0 -37
- package/docs/misc/community/index.md +0 -88
- package/docs/misc/credits/index.md +0 -14
- package/docs/misc/design-partners/index.md +0 -13
- package/docs/misc/package-management/index.md +0 -21
- package/docs/misc/performance/index.md +0 -25
- package/docs/misc/resources/index.md +0 -46
- package/docs/misc/state-of-the-project/index.md +0 -37
- package/docs/misc/troubleshooting/index.md +0 -82
- package/docs/overview/concepts/index.md +0 -78
- package/docs/overview/how-livestore-works/index.md +0 -56
- package/docs/overview/introduction/index.md +0 -5
- package/docs/overview/technology-comparison/index.md +0 -40
- package/docs/overview/when-livestore/index.md +0 -81
- package/docs/overview/why-livestore/index.md +0 -5
- package/docs/patterns/ai/index.md +0 -15
- package/docs/patterns/anonymous-user-transition/index.md +0 -10
- package/docs/patterns/app-evolution/index.md +0 -72
- package/docs/patterns/auth/index.md +0 -226
- package/docs/patterns/effect/index.md +0 -1495
- package/docs/patterns/encryption/index.md +0 -6
- package/docs/patterns/external-data/index.md +0 -5
- package/docs/patterns/file-management/index.md +0 -11
- package/docs/patterns/file-structure/index.md +0 -14
- package/docs/patterns/list-ordering/index.md +0 -369
- package/docs/patterns/offline/index.md +0 -32
- package/docs/patterns/orm/index.md +0 -18
- package/docs/patterns/presence/index.md +0 -11
- package/docs/patterns/rich-text-editing/index.md +0 -11
- package/docs/patterns/server-side-clients/index.md +0 -97
- package/docs/patterns/side-effects/index.md +0 -11
- package/docs/patterns/state-machines/index.md +0 -11
- package/docs/patterns/storybook/index.md +0 -192
- package/docs/patterns/undo-redo/index.md +0 -9
- package/docs/patterns/version-control/index.md +0 -8
- package/docs/platform-adapters/cloudflare-durable-object-adapter/index.md +0 -453
- package/docs/platform-adapters/electron-adapter/index.md +0 -15
- package/docs/platform-adapters/expo-adapter/index.md +0 -245
- package/docs/platform-adapters/node-adapter/index.md +0 -160
- package/docs/platform-adapters/tauri-adapter/index.md +0 -15
- package/docs/platform-adapters/web-adapter/index.md +0 -218
- package/docs/sustainable-open-source/contributing/docs/index.md +0 -94
- package/docs/sustainable-open-source/contributing/info/index.md +0 -63
- package/docs/sustainable-open-source/contributing/monorepo/index.md +0 -195
- package/docs/sustainable-open-source/sponsoring/index.md +0 -104
- package/docs/sync-providers/cloudflare/index.md +0 -773
- package/docs/sync-providers/custom/index.md +0 -65
- package/docs/sync-providers/electricsql/index.md +0 -159
- package/docs/sync-providers/s2/index.md +0 -230
- package/docs/tutorial/0-welcome/index.md +0 -48
- package/docs/tutorial/1-setup-starter-project/index.md +0 -105
- package/docs/tutorial/2-deploy-to-cloudflare/index.md +0 -195
- package/docs/tutorial/3-read-and-write-todos-via-livestore/index.md +0 -511
- package/docs/tutorial/4-sync-data-via-cloudflare/index.md +0 -210
- package/docs/tutorial/5-expand-business-logic/index.md +0 -174
- package/docs/tutorial/6-persist-ui-state/index.md +0 -453
- package/docs/tutorial/7-next-steps/index.md +0 -22
- package/docs/understanding-livestore/design-decisions/index.md +0 -33
- package/docs/understanding-livestore/event-sourcing/index.md +0 -40
package/dist/QueryCache.js
CHANGED
|
@@ -12,7 +12,7 @@ export default class QueryCache {
|
|
|
12
12
|
return sql;
|
|
13
13
|
}
|
|
14
14
|
const formatValue = (value) => (value === SessionIdSymbol ? 'SessionIdSymbol' : String(value));
|
|
15
|
-
if (Array.isArray(bindValues)) {
|
|
15
|
+
if (Array.isArray(bindValues) === true) {
|
|
16
16
|
return `${sql}\n${bindValues.map(formatValue).join('\n')}`;
|
|
17
17
|
}
|
|
18
18
|
return (sql +
|
package/dist/QueryCache.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"QueryCache.js","sourceRoot":"","sources":["../src/QueryCache.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AAEvE,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,CAAA;AAClC,MAAM,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC,CAAA;AAUpC,MAAM,MAAM,GAAG,CAAC,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,WAAW,EAAE,SAAS,CAAC,CAAA;AAEtE,yDAAyD;AACzD,MAAM,SAAS,GAAG,GAAG,CAAA;AACrB,MAAM,CAAC,OAAO,OAAO,UAAU;IAC7B,QAAQ,GAAG,IAAI,QAAQ,CAAgB,SAAS,CAAC,CAAA;IACjD,aAAa,GAAG,IAAI,GAAG,EAAiC,CAAA;IAExD,MAAM,GAAG,CAAC,GAAW,EAAE,UAAqB,EAAY,EAAE;QACxD,IAAI,UAAU,IAAI,IAAI,EAAE,CAAC;YACvB,OAAO,GAAe,CAAA;QACxB,CAAC;QAED,MAAM,WAAW,GAAG,CAAC,KAAU,EAAE,EAAE,CAAC,CAAC,KAAK,KAAK,eAAe,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAA;QAEnG,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"QueryCache.js","sourceRoot":"","sources":["../src/QueryCache.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { type DebugInfo, type MutableDebugInfo, type PreparedBindValues, type PreparedStatement, type SqliteDb, type SqliteDbChangeset, type SqliteDbSession } from '@livestore/common';
|
|
2
1
|
import type * as otel from '@opentelemetry/api';
|
|
2
|
+
import { type DebugInfo, type MutableDebugInfo, type PreparedBindValues, type PreparedStatement, type SqliteDb, type SqliteDbChangeset, type SqliteDbSession } from '@livestore/common';
|
|
3
3
|
export declare const emptyDebugInfo: () => DebugInfo;
|
|
4
4
|
/**
|
|
5
5
|
* This class is mostly adding result caching around a SqliteDb which is used to speed up
|
|
@@ -43,7 +43,7 @@ export declare class SqliteDbWrapper implements SqliteDb {
|
|
|
43
43
|
};
|
|
44
44
|
rollback(changeset: Uint8Array<ArrayBuffer>): void;
|
|
45
45
|
getTablesUsed(query: string): Set<string>;
|
|
46
|
-
cachedExecute(queryStr: string, bindValues?: PreparedBindValues
|
|
46
|
+
cachedExecute(queryStr: string, bindValues?: PreparedBindValues, options?: {
|
|
47
47
|
hasNoEffects?: boolean;
|
|
48
48
|
otelContext?: otel.Context;
|
|
49
49
|
writeTables?: ReadonlySet<string>;
|
|
@@ -52,7 +52,7 @@ export declare class SqliteDbWrapper implements SqliteDb {
|
|
|
52
52
|
durationMs: number;
|
|
53
53
|
};
|
|
54
54
|
execute: {
|
|
55
|
-
(queryStr: string, bindValues?: PreparedBindValues
|
|
55
|
+
(queryStr: string, bindValues?: PreparedBindValues, options?: {
|
|
56
56
|
onRowsChanged?: (rowsChanged: number) => void;
|
|
57
57
|
}): void;
|
|
58
58
|
(queryBuilder: import("@livestore/common").QueryBuilder.Any, options?: {
|
|
@@ -60,10 +60,10 @@ export declare class SqliteDbWrapper implements SqliteDb {
|
|
|
60
60
|
}): void;
|
|
61
61
|
};
|
|
62
62
|
select: {
|
|
63
|
-
<T>(queryStr: string, bindValues?: PreparedBindValues
|
|
63
|
+
<T>(queryStr: string, bindValues?: PreparedBindValues): ReadonlyArray<T>;
|
|
64
64
|
<T>(queryBuilder: import("@livestore/common").QueryBuilder<T, any, any>): T;
|
|
65
65
|
};
|
|
66
|
-
cachedSelect<T = any>(queryStr: string, bindValues?: PreparedBindValues
|
|
66
|
+
cachedSelect<T = any>(queryStr: string, bindValues?: PreparedBindValues, options?: {
|
|
67
67
|
queriedTables?: ReadonlySet<string>;
|
|
68
68
|
skipCache?: boolean;
|
|
69
69
|
otelContext?: otel.Context;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SqliteDbWrapper.d.ts","sourceRoot":"","sources":["../src/SqliteDbWrapper.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,SAAS,EAGd,KAAK,gBAAgB,EACrB,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACtB,KAAK,QAAQ,EACb,KAAK,iBAAiB,EAEtB,KAAK,eAAe,EAGrB,MAAM,mBAAmB,CAAA;
|
|
1
|
+
{"version":3,"file":"SqliteDbWrapper.d.ts","sourceRoot":"","sources":["../src/SqliteDbWrapper.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,IAAI,MAAM,oBAAoB,CAAA;AAE/C,OAAO,EAGL,KAAK,SAAS,EAGd,KAAK,gBAAgB,EACrB,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACtB,KAAK,QAAQ,EACb,KAAK,iBAAiB,EAEtB,KAAK,eAAe,EAGrB,MAAM,mBAAmB,CAAA;AAK1B,eAAO,MAAM,cAAc,QAAO,SAKhC,CAAA;AAEF;;;GAGG;AACH,qBAAa,eAAgB,YAAW,QAAQ;IAC9C,IAAI,EAAG,UAAU,CAAS;IAE1B,OAAO,CAAC,WAAW,CAA+C;IAClE,OAAO,CAAC,eAAe,CAAyC;IAChE,OAAO,CAAC,WAAW,CAAmB;IACtC,OAAO,CAAC,EAAE,CAAU;IACpB,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,mBAAmB,CAAc;IACzC,OAAO,CAAC,cAAc,CAAA;IACf,SAAS,EAAE,gBAAgB,CAAmB;gBAEzC,EACV,EAAE,EACF,IAAI,GACL,EAAE;QACD,EAAE,EAAE,QAAQ,CAAA;QACZ,IAAI,EAAE;YACJ,MAAM,EAAE,IAAI,CAAC,MAAM,CAAA;YACnB,eAAe,EAAE,IAAI,CAAC,OAAO,CAAA;SAC9B,CAAA;KACF;IAaD,IAAI,KAAK,gDAER;IACD,IAAI,QAAQ,QAEX;IACD,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,iBAAiB;IAG5C,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,WAAW,CAAC,GAAG,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC;IAGzD,KAAK,IAAI,IAAI;IAGb,OAAO,IAAI,IAAI;IAGf,OAAO,IAAI,eAAe;IAG1B,aAAa,CAAC,IAAI,EAAE,UAAU,CAAC,WAAW,CAAC,GAAG,iBAAiB;IAI/D,GAAG,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI;IAqBrC,aAAa,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,IAAI,GAAG;QACzC,MAAM,EAAE,IAAI,CAAA;QACZ,SAAS,EAAE;YAAE,IAAI,EAAE,kBAAkB,CAAC;YAAC,IAAI,EAAE,UAAU,CAAC,WAAW,CAAC,CAAC;YAAC,KAAK,EAAE,GAAG,CAAA;SAAE,GAAG;YAAE,IAAI,EAAE,OAAO,CAAA;SAAE,CAAA;KACvG;IAaD,QAAQ,CAAC,SAAS,EAAE,UAAU,CAAC,WAAW,CAAC;IAK3C,aAAa,CAAC,KAAK,EAAE,MAAM;IA4B3B,aAAa,CACX,QAAQ,EAAE,MAAM,EAChB,UAAU,CAAC,EAAE,kBAAkB,EAC/B,OAAO,CAAC,EAAE;QACR,YAAY,CAAC,EAAE,OAAO,CAAA;QACtB,WAAW,CAAC,EAAE,IAAI,CAAC,OAAO,CAAA;QAC1B,WAAW,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;QACjC,aAAa,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,IAAI,CAAA;KAC9C,GACA;QAAE,UAAU,EAAE,MAAM,CAAA;KAAE;IAwDzB,OAAO;;yBA/L+B,CAAC;;;yBAEZ,CAAC;;MA6L4E;IAExG,MAAM;;;MAA+F;IAErG,YAAY,CAAC,CAAC,GAAG,GAAG,EAClB,QAAQ,EAAE,MAAM,EAChB,UAAU,CAAC,EAAE,kBAAkB,EAC/B,OAAO,CAAC,EAAE;QACR,aAAa,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;QACnC,SAAS,CAAC,EAAE,OAAO,CAAA;QACnB,WAAW,CAAC,EAAE,IAAI,CAAC,OAAO,CAAA;KAC3B,GACA,aAAa,CAAC,CAAC,CAAC;IA+DnB,MAAM;CAQP"}
|
package/dist/SqliteDbWrapper.js
CHANGED
|
@@ -66,7 +66,7 @@ export class SqliteDbWrapper {
|
|
|
66
66
|
this.execute(sql `rollback;`);
|
|
67
67
|
throw e;
|
|
68
68
|
}
|
|
69
|
-
if (
|
|
69
|
+
if (errored === false) {
|
|
70
70
|
this.execute(sql `commit;`);
|
|
71
71
|
}
|
|
72
72
|
return result;
|
|
@@ -78,7 +78,7 @@ export class SqliteDbWrapper {
|
|
|
78
78
|
session.finish();
|
|
79
79
|
return {
|
|
80
80
|
result,
|
|
81
|
-
changeset: changeset ? { _tag: 'sessionChangeset', data: changeset, debug: null } : { _tag: 'no-op' },
|
|
81
|
+
changeset: changeset !== undefined ? { _tag: 'sessionChangeset', data: changeset, debug: null } : { _tag: 'no-op' },
|
|
82
82
|
};
|
|
83
83
|
}
|
|
84
84
|
rollback(changeset) {
|
|
@@ -93,7 +93,7 @@ export class SqliteDbWrapper {
|
|
|
93
93
|
return new Set([tableNameFromPlainDeleteQuery]);
|
|
94
94
|
}
|
|
95
95
|
const cached = this.tablesUsedCache.get(query);
|
|
96
|
-
if (cached) {
|
|
96
|
+
if (cached !== undefined) {
|
|
97
97
|
return cached;
|
|
98
98
|
}
|
|
99
99
|
const stmt = this.tablesUsedStmt;
|
|
@@ -123,7 +123,7 @@ export class SqliteDbWrapper {
|
|
|
123
123
|
this.cachedStmts.set(queryStr, stmt);
|
|
124
124
|
}
|
|
125
125
|
stmt.execute(bindValues);
|
|
126
|
-
if (options?.hasNoEffects !== true &&
|
|
126
|
+
if (options?.hasNoEffects !== true && this.resultCache.ignoreQuery(queryStr) === false) {
|
|
127
127
|
// TODO use write tables instead
|
|
128
128
|
// check what queries actually end up here.
|
|
129
129
|
this.resultCache.invalidate(options?.writeTables ?? this.getTablesUsed(queryStr));
|
|
@@ -132,7 +132,7 @@ export class SqliteDbWrapper {
|
|
|
132
132
|
const durationMs = getDurationMsFromSpan(span);
|
|
133
133
|
this.debugInfo.queryFrameDuration += durationMs;
|
|
134
134
|
this.debugInfo.queryFrameCount++;
|
|
135
|
-
if (durationMs > 5 && isDevEnv()) {
|
|
135
|
+
if (durationMs > 5 && isDevEnv() === true) {
|
|
136
136
|
this.debugInfo.slowQueries.push({
|
|
137
137
|
queryStr,
|
|
138
138
|
bindValues,
|
|
@@ -147,8 +147,8 @@ export class SqliteDbWrapper {
|
|
|
147
147
|
catch (cause) {
|
|
148
148
|
span.recordException(cause);
|
|
149
149
|
span.end();
|
|
150
|
-
if (LS_DEV) {
|
|
151
|
-
//
|
|
150
|
+
if (LS_DEV === true) {
|
|
151
|
+
// oxlint-disable-next-line eslint(no-debugger) -- intentional breakpoint for SQL errors during development
|
|
152
152
|
debugger;
|
|
153
153
|
}
|
|
154
154
|
throw new SqliteError({ cause, query: { bindValues: bindValues ?? {}, sql: queryStr } });
|
|
@@ -186,7 +186,7 @@ export class SqliteDbWrapper {
|
|
|
186
186
|
this.debugInfo.queryFrameDuration += durationMs;
|
|
187
187
|
this.debugInfo.queryFrameCount++;
|
|
188
188
|
// TODO also enable in non-dev mode
|
|
189
|
-
if (durationMs > 5 && isDevEnv()) {
|
|
189
|
+
if (durationMs > 5 && isDevEnv() === true) {
|
|
190
190
|
this.debugInfo.slowQueries.push({
|
|
191
191
|
queryStr,
|
|
192
192
|
bindValues,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SqliteDbWrapper.js","sourceRoot":"","sources":["../src/SqliteDbWrapper.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"SqliteDbWrapper.js","sourceRoot":"","sources":["../src/SqliteDbWrapper.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { Effect } from '@livestore/utils/effect';
|
|
2
|
-
import { Vitest } from '@livestore/utils-dev/node-vitest';
|
|
3
1
|
import { expect } from 'vitest';
|
|
2
|
+
import { Vitest } from '@livestore/utils-dev/node-vitest';
|
|
3
|
+
import { Effect } from '@livestore/utils/effect';
|
|
4
4
|
import { StoreInternalsSymbol } from "./store/store-types.js";
|
|
5
5
|
import { makeTodoMvc } from "./utils/tests/fixture.js";
|
|
6
6
|
Vitest.describe('SqliteDbWrapper', () => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SqliteDbWrapper.test.js","sourceRoot":"","sources":["../src/SqliteDbWrapper.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"SqliteDbWrapper.test.js","sourceRoot":"","sources":["../src/SqliteDbWrapper.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAE/B,OAAO,EAAE,MAAM,EAAE,MAAM,kCAAkC,CAAA;AACzD,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAEhD,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAA;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAA;AAEtD,MAAM,CAAC,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;IACtC,MAAM,CAAC,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;QACpC,MAAM,aAAa,GAAG,CAAC,KAAa,EAAE,EAAE,CACtC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;YAClB,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,WAAW,CAAC,EAAE,CAAC,CAAA;YACpC,OAAO,KAAK,CAAC,oBAAoB,CAAC,CAAC,eAAe,CAAC,aAAa,CAAC,KAAK,CAAC,CAAA;QACzE,CAAC,CAAC,CAAA;QAEJ,MAAM,CAAC,UAAU,CAAC,uCAAuC,EAAE,CAAC,KAAK,EAAE,EAAE,CACnE,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;YAClB,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,aAAa,CAAC,qBAAqB,CAAC,CAAA;YAC9D,MAAM,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;QAChD,CAAC,CAAC,CACH,CAAA;QAED,MAAM,CAAC,UAAU,CAAC,0DAA0D,EAAE,CAAC,KAAK,EAAE,EAAE,CACtF,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;YAClB,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,aAAa,CAAC,mBAAmB,CAAC,CAAA;YAC5D,MAAM,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;QAChD,CAAC,CAAC,CACH,CAAA;QAED,MAAM,CAAC,UAAU,CAAC,8CAA8C,EAAE,CAAC,KAAK,EAAE,EAAE,CAC1E,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;YAClB,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,aAAa,CACrC,iGAAiG,CAClG,CAAA;YACD,MAAM,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;QAChD,CAAC,CAAC,CACH,CAAA;IACH,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
|
|
@@ -1,10 +1,138 @@
|
|
|
1
1
|
import type { UnknownError } from '@livestore/common';
|
|
2
|
-
import type { LiveStoreSchema } from '@livestore/common/schema';
|
|
2
|
+
import type { LiveStoreEvent, LiveStoreSchema } from '@livestore/common/schema';
|
|
3
3
|
import type { Cause, OtelTracer, Scope } from '@livestore/utils/effect';
|
|
4
|
-
import { Effect, Layer } from '@livestore/utils/effect';
|
|
4
|
+
import { Context, Deferred, Effect, Layer } from '@livestore/utils/effect';
|
|
5
5
|
import type { LiveStoreContextProps } from '../store/create-store.ts';
|
|
6
6
|
import { DeferredStoreContext, LiveStoreContextRunning } from '../store/create-store.ts';
|
|
7
|
+
import type { LiveStoreContextRunning as LiveStoreContextRunningType, Queryable } from '../store/store-types.ts';
|
|
7
8
|
export declare const makeLiveStoreContext: <TSchema extends LiveStoreSchema, TContext = {}>({ schema, storeId, context, boot, adapter, disableDevtools, onBootStatus, batchUpdates, syncPayload, syncPayloadSchema, }: LiveStoreContextProps<TSchema, TContext>) => Effect.Effect<LiveStoreContextRunning["Type"], UnknownError | Cause.TimeoutException, DeferredStoreContext | Scope.Scope | OtelTracer.OtelTracer>;
|
|
9
|
+
/**
|
|
10
|
+
* @deprecated Use `Store.Tag(schema, storeId)` instead for type-safe store contexts.
|
|
11
|
+
*
|
|
12
|
+
* @example Migration
|
|
13
|
+
* ```ts
|
|
14
|
+
* // Before
|
|
15
|
+
* const layer = LiveStoreContextLayer({ schema, adapter, ... })
|
|
16
|
+
*
|
|
17
|
+
* // After
|
|
18
|
+
* class MainStore extends Store.Tag(schema, 'main') {}
|
|
19
|
+
* const layer = MainStore.layer({ adapter, ... })
|
|
20
|
+
* ```
|
|
21
|
+
*/
|
|
8
22
|
export declare const LiveStoreContextLayer: <TSchema extends LiveStoreSchema, TContext = {}>(props: LiveStoreContextProps<TSchema, TContext>) => Layer.Layer<LiveStoreContextRunning, UnknownError | Cause.TimeoutException, OtelTracer.OtelTracer>;
|
|
23
|
+
/**
|
|
24
|
+
* @deprecated Use `Store.Tag(schema, storeId)` and `MainStore.DeferredLayer` instead.
|
|
25
|
+
*/
|
|
9
26
|
export declare const LiveStoreContextDeferred: Layer.Layer<DeferredStoreContext, never, never>;
|
|
27
|
+
/** Branded type for unique store context identity */
|
|
28
|
+
declare const StoreContextTypeId: unique symbol;
|
|
29
|
+
/** Phantom type carrying schema and storeId information */
|
|
30
|
+
export interface StoreContextId<TSchema extends LiveStoreSchema, TStoreId extends string> {
|
|
31
|
+
readonly [StoreContextTypeId]: {
|
|
32
|
+
readonly schema: TSchema;
|
|
33
|
+
readonly storeId: TStoreId;
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
/** Phantom type for deferred store context */
|
|
37
|
+
declare const DeferredContextTypeId: unique symbol;
|
|
38
|
+
export interface DeferredContextId<TStoreId extends string> {
|
|
39
|
+
readonly [DeferredContextTypeId]: {
|
|
40
|
+
readonly storeId: TStoreId;
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
/** Props for creating a store layer (schema and storeId are already provided) */
|
|
44
|
+
export type StoreLayerProps<TSchema extends LiveStoreSchema, TContext = {}> = Omit<LiveStoreContextProps<TSchema, TContext>, 'storeId' | 'schema'>;
|
|
45
|
+
/**
|
|
46
|
+
* Type for a Store.Tag class. This is the return type of `Store.Tag(schema, storeId)`.
|
|
47
|
+
* Can be extended as a class and is yieldable in Effect.gen.
|
|
48
|
+
*
|
|
49
|
+
* Note: This uses a type alias with a new() signature to make it extendable.
|
|
50
|
+
*/
|
|
51
|
+
/**
|
|
52
|
+
* Type for a Store.Tag class. Uses self-referential identifier so that `yield*`
|
|
53
|
+
* and method R channels resolve to the same type, enabling proper layer composition.
|
|
54
|
+
*
|
|
55
|
+
* Uses `interface` (not `type`) to allow the self-referential identifier without
|
|
56
|
+
* triggering TS2456 (circular type alias).
|
|
57
|
+
*/
|
|
58
|
+
export interface StoreTagClass<TSchema extends LiveStoreSchema, TStoreId extends string> extends Context.Tag<StoreTagClass<TSchema, TStoreId>, LiveStoreContextRunningType<TSchema>> {
|
|
59
|
+
/** Constructor signature (makes the type extendable as a class) */
|
|
60
|
+
new (): Context.Tag<StoreTagClass<TSchema, TStoreId>, LiveStoreContextRunningType<TSchema>>;
|
|
61
|
+
/** Tag identity type (from Context.Tag) */
|
|
62
|
+
readonly Id: StoreTagClass<TSchema, TStoreId>;
|
|
63
|
+
/** Service type (from Context.Tag) */
|
|
64
|
+
readonly Type: LiveStoreContextRunningType<TSchema>;
|
|
65
|
+
/** The LiveStore schema for this store */
|
|
66
|
+
readonly schema: TSchema;
|
|
67
|
+
/** Unique identifier for this store */
|
|
68
|
+
readonly storeId: TStoreId;
|
|
69
|
+
/** Creates a layer that initializes the store */
|
|
70
|
+
layer<TContext>(props: StoreLayerProps<TSchema, TContext>): Layer.Layer<StoreTagClass<TSchema, TStoreId>, UnknownError | Cause.TimeoutException, OtelTracer.OtelTracer>;
|
|
71
|
+
/** Deferred store tag for async initialization patterns */
|
|
72
|
+
readonly Deferred: Context.Tag<DeferredContextId<TStoreId>, Deferred.Deferred<LiveStoreContextRunningType<TSchema>, UnknownError>>;
|
|
73
|
+
/** Layer that provides the Deferred tag */
|
|
74
|
+
readonly DeferredLayer: Layer.Layer<DeferredContextId<TStoreId>>;
|
|
75
|
+
/** Layer that waits for Deferred and provides the running store */
|
|
76
|
+
readonly fromDeferred: Layer.Layer<StoreTagClass<TSchema, TStoreId>, UnknownError, DeferredContextId<TStoreId>>;
|
|
77
|
+
/** Query the store. Returns an Effect that yields the query result. */
|
|
78
|
+
query<TResult>(query: Queryable<TResult>): Effect.Effect<TResult, never, StoreTagClass<TSchema, TStoreId>>;
|
|
79
|
+
/** Commit events to the store. */
|
|
80
|
+
commit(...eventInputs: LiveStoreEvent.Input.ForSchema<TSchema>[]): Effect.Effect<void, never, StoreTagClass<TSchema, TStoreId>>;
|
|
81
|
+
/** Use the store with a callback function. */
|
|
82
|
+
use<A, E, R>(f: (ctx: LiveStoreContextRunningType<TSchema>) => Effect.Effect<A, E, R>): Effect.Effect<A, E, R | StoreTagClass<TSchema, TStoreId>>;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Store utilities for Effect integration.
|
|
86
|
+
*
|
|
87
|
+
* @example
|
|
88
|
+
* ```ts
|
|
89
|
+
* import { Store } from '@livestore/livestore/effect'
|
|
90
|
+
*
|
|
91
|
+
* export class MainStore extends Store.Tag(schema, 'main') {}
|
|
92
|
+
* ```
|
|
93
|
+
*/
|
|
94
|
+
export declare const Store: {
|
|
95
|
+
/**
|
|
96
|
+
* Create a typed store context class for use with Effect.
|
|
97
|
+
* @see {@link makeStoreTag} for full documentation
|
|
98
|
+
*/
|
|
99
|
+
Tag: <TSchema extends LiveStoreSchema, TStoreId extends string>(schema: TSchema, storeId: TStoreId) => StoreTagClass<TSchema, TStoreId>;
|
|
100
|
+
};
|
|
101
|
+
/**
|
|
102
|
+
* @deprecated Use `Store.Tag(schema, storeId)` instead.
|
|
103
|
+
*
|
|
104
|
+
* @example Migration
|
|
105
|
+
* ```ts
|
|
106
|
+
* // Before
|
|
107
|
+
* const MainStoreContext = makeStoreContext<typeof schema>()('main')
|
|
108
|
+
* export const MainStore = MainStoreContext.Tag
|
|
109
|
+
* export const MainStoreLayer = MainStoreContext.Layer
|
|
110
|
+
*
|
|
111
|
+
* // After
|
|
112
|
+
* export class MainStore extends Store.Tag(schema, 'main') {}
|
|
113
|
+
* // MainStore.layer({ ... }) for the layer
|
|
114
|
+
* ```
|
|
115
|
+
*/
|
|
116
|
+
export interface StoreContext<TSchema extends LiveStoreSchema, TStoreId extends string> {
|
|
117
|
+
readonly storeId: TStoreId;
|
|
118
|
+
readonly Tag: Context.Tag<StoreContextId<TSchema, TStoreId>, LiveStoreContextRunningType<TSchema>>;
|
|
119
|
+
readonly DeferredTag: Context.Tag<DeferredContextId<TStoreId>, Deferred.Deferred<LiveStoreContextRunningType<TSchema>, UnknownError>>;
|
|
120
|
+
readonly Layer: <TContext = {}>(props: Omit<LiveStoreContextProps<TSchema, TContext>, 'storeId'>) => Layer.Layer<StoreContextId<TSchema, TStoreId>, UnknownError | Cause.TimeoutException, OtelTracer.OtelTracer>;
|
|
121
|
+
readonly DeferredLayer: Layer.Layer<DeferredContextId<TStoreId>>;
|
|
122
|
+
readonly fromDeferred: Layer.Layer<StoreContextId<TSchema, TStoreId>, UnknownError, DeferredContextId<TStoreId>>;
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* @deprecated Use `Store.Tag(schema, storeId)` instead.
|
|
126
|
+
*
|
|
127
|
+
* @example Migration
|
|
128
|
+
* ```ts
|
|
129
|
+
* // Before
|
|
130
|
+
* const MainStoreContext = makeStoreContext<typeof schema>()('main')
|
|
131
|
+
*
|
|
132
|
+
* // After
|
|
133
|
+
* class MainStore extends Store.Tag(schema, 'main') {}
|
|
134
|
+
* ```
|
|
135
|
+
*/
|
|
136
|
+
export declare const makeStoreContext: <TSchema extends LiveStoreSchema>() => <TStoreId extends string>(storeId: TStoreId) => StoreContext<TSchema, TStoreId>;
|
|
137
|
+
export {};
|
|
10
138
|
//# sourceMappingURL=LiveStore.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LiveStore.d.ts","sourceRoot":"","sources":["../../src/effect/LiveStore.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AACrD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAA;AAE/
|
|
1
|
+
{"version":3,"file":"LiveStore.d.ts","sourceRoot":"","sources":["../../src/effect/LiveStore.ts"],"names":[],"mappings":"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"}
|
package/dist/effect/LiveStore.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { omitUndefineds } from '@livestore/utils';
|
|
2
|
-
import { Deferred, Duration, Effect, Layer, pipe } from '@livestore/utils/effect';
|
|
2
|
+
import { Context, Deferred, Duration, Effect, Layer, pipe } from '@livestore/utils/effect';
|
|
3
3
|
import { createStore, DeferredStoreContext, LiveStoreContextRunning } from "../store/create-store.js";
|
|
4
4
|
export const makeLiveStoreContext = ({ schema, storeId = 'default', context, boot, adapter, disableDevtools, onBootStatus, batchUpdates, syncPayload, syncPayloadSchema, }) => pipe(Effect.gen(function* () {
|
|
5
5
|
const store = yield* createStore({
|
|
@@ -9,16 +9,195 @@ export const makeLiveStoreContext = ({ schema, storeId = 'default', context, boo
|
|
|
9
9
|
batchUpdates,
|
|
10
10
|
...omitUndefineds({ context, boot, disableDevtools, onBootStatus, syncPayload, syncPayloadSchema }),
|
|
11
11
|
});
|
|
12
|
-
globalThis.__debugLiveStore ??= {};
|
|
13
|
-
if (Object.keys(globalThis.__debugLiveStore).length === 0) {
|
|
14
|
-
globalThis.__debugLiveStore._ = store;
|
|
15
|
-
}
|
|
16
|
-
globalThis.__debugLiveStore[storeId] = store;
|
|
17
12
|
return { stage: 'running', store };
|
|
18
13
|
}), Effect.tapErrorCause((cause) => Effect.flatMap(DeferredStoreContext, (def) => Deferred.failCause(def, cause))), Effect.tap((storeCtx) => Effect.flatMap(DeferredStoreContext, (def) => Deferred.succeed(def, storeCtx))),
|
|
19
14
|
// This can take quite a while.
|
|
20
15
|
// TODO make this configurable
|
|
21
16
|
Effect.timeout(Duration.minutes(5)), Effect.withSpan('@livestore/livestore/effect:makeLiveStoreContext'));
|
|
17
|
+
/**
|
|
18
|
+
* @deprecated Use `Store.Tag(schema, storeId)` instead for type-safe store contexts.
|
|
19
|
+
*
|
|
20
|
+
* @example Migration
|
|
21
|
+
* ```ts
|
|
22
|
+
* // Before
|
|
23
|
+
* const layer = LiveStoreContextLayer({ schema, adapter, ... })
|
|
24
|
+
*
|
|
25
|
+
* // After
|
|
26
|
+
* class MainStore extends Store.Tag(schema, 'main') {}
|
|
27
|
+
* const layer = MainStore.layer({ adapter, ... })
|
|
28
|
+
* ```
|
|
29
|
+
*/
|
|
22
30
|
export const LiveStoreContextLayer = (props) => Layer.scoped(LiveStoreContextRunning, makeLiveStoreContext(props)).pipe(Layer.withSpan('LiveStore'), Layer.provide(LiveStoreContextDeferred));
|
|
31
|
+
/**
|
|
32
|
+
* @deprecated Use `Store.Tag(schema, storeId)` and `MainStore.DeferredLayer` instead.
|
|
33
|
+
*/
|
|
23
34
|
export const LiveStoreContextDeferred = Layer.effect(DeferredStoreContext, Deferred.make());
|
|
35
|
+
/**
|
|
36
|
+
* Create a typed store context class for use with Effect.
|
|
37
|
+
*
|
|
38
|
+
* Returns a class that extends `Context.Tag`, making it directly yieldable in Effect code.
|
|
39
|
+
* The class includes static methods for creating layers and accessors for common operations.
|
|
40
|
+
*
|
|
41
|
+
* @param schema - The LiveStore schema (used for type inference and runtime)
|
|
42
|
+
* @param storeId - Unique identifier for this store
|
|
43
|
+
*
|
|
44
|
+
* @example Basic usage
|
|
45
|
+
* ```ts
|
|
46
|
+
* import { Store } from '@livestore/livestore/effect'
|
|
47
|
+
* import { schema } from './schema.ts'
|
|
48
|
+
*
|
|
49
|
+
* // Define your store (once per store)
|
|
50
|
+
* export class MainStore extends Store.Tag(schema, 'main') {}
|
|
51
|
+
*
|
|
52
|
+
* // Create the layer
|
|
53
|
+
* const storeLayer = MainStore.layer({
|
|
54
|
+
* adapter: myAdapter,
|
|
55
|
+
* batchUpdates: ReactDOM.unstable_batchedUpdates,
|
|
56
|
+
* })
|
|
57
|
+
*
|
|
58
|
+
* // Use in Effect code
|
|
59
|
+
* Effect.gen(function* () {
|
|
60
|
+
* const { store } = yield* MainStore
|
|
61
|
+
* // ^? Store<typeof schema> - fully typed!
|
|
62
|
+
*
|
|
63
|
+
* // Or use accessors
|
|
64
|
+
* const users = yield* MainStore.query(tables.users.all())
|
|
65
|
+
* yield* MainStore.commit(events.createUser({ id: '1', name: 'Alice' }))
|
|
66
|
+
* })
|
|
67
|
+
* ```
|
|
68
|
+
*
|
|
69
|
+
* @example Multiple stores
|
|
70
|
+
* ```ts
|
|
71
|
+
* class MainStore extends Store.Tag(mainSchema, 'main') {}
|
|
72
|
+
* class SettingsStore extends Store.Tag(settingsSchema, 'settings') {}
|
|
73
|
+
*
|
|
74
|
+
* // Both available in same Effect context
|
|
75
|
+
* Effect.gen(function* () {
|
|
76
|
+
* const main = yield* MainStore
|
|
77
|
+
* const settings = yield* SettingsStore
|
|
78
|
+
* })
|
|
79
|
+
*
|
|
80
|
+
* const layer = Layer.mergeAll(
|
|
81
|
+
* MainStore.layer({ adapter: mainAdapter }),
|
|
82
|
+
* SettingsStore.layer({ adapter: settingsAdapter }),
|
|
83
|
+
* )
|
|
84
|
+
* ```
|
|
85
|
+
*/
|
|
86
|
+
const makeStoreTag = (schema, storeId) => {
|
|
87
|
+
// Create the deferred tag and layers upfront
|
|
88
|
+
const _DeferredTag = Context.GenericTag(`@livestore/store-deferred/${storeId}`);
|
|
89
|
+
const _DeferredLayer = Layer.effect(_DeferredTag, Deferred.make());
|
|
90
|
+
class Tag extends Context.Tag(`@livestore/store/${storeId}`)() {
|
|
91
|
+
static schema = schema;
|
|
92
|
+
static storeId = storeId;
|
|
93
|
+
static layer(props) {
|
|
94
|
+
return pipe(Effect.gen(function* () {
|
|
95
|
+
const store = yield* createStore({
|
|
96
|
+
schema,
|
|
97
|
+
storeId,
|
|
98
|
+
adapter: props.adapter,
|
|
99
|
+
batchUpdates: props.batchUpdates,
|
|
100
|
+
...omitUndefineds({
|
|
101
|
+
context: props.context,
|
|
102
|
+
boot: props.boot,
|
|
103
|
+
disableDevtools: props.disableDevtools,
|
|
104
|
+
onBootStatus: props.onBootStatus,
|
|
105
|
+
syncPayload: props.syncPayload,
|
|
106
|
+
syncPayloadSchema: props.syncPayloadSchema,
|
|
107
|
+
}),
|
|
108
|
+
});
|
|
109
|
+
const ctx = { stage: 'running', store: store };
|
|
110
|
+
// Also fulfill the deferred if it exists in context
|
|
111
|
+
yield* Effect.flatMap(Effect.serviceOption(_DeferredTag), (optDeferred) => optDeferred._tag === 'Some' ? Deferred.succeed(optDeferred.value, ctx) : Effect.void);
|
|
112
|
+
return ctx;
|
|
113
|
+
}), Effect.timeout(Duration.minutes(5)), Effect.withSpan(`@livestore/effect:Store.Tag:${storeId}`), Layer.scoped(Tag), Layer.withSpan(`LiveStore:${storeId}`), Layer.provide(_DeferredLayer));
|
|
114
|
+
}
|
|
115
|
+
static Deferred = _DeferredTag;
|
|
116
|
+
static DeferredLayer = _DeferredLayer;
|
|
117
|
+
static fromDeferred = pipe(Effect.gen(function* () {
|
|
118
|
+
const deferred = yield* _DeferredTag;
|
|
119
|
+
const ctx = yield* deferred;
|
|
120
|
+
return Layer.succeed(Tag, ctx);
|
|
121
|
+
}), Layer.unwrapScoped);
|
|
122
|
+
static query(query) {
|
|
123
|
+
return Effect.map(Tag, ({ store }) => store.query(query));
|
|
124
|
+
}
|
|
125
|
+
static commit(...eventInputs) {
|
|
126
|
+
return Effect.map(Tag, ({ store }) => {
|
|
127
|
+
store.commit(...eventInputs);
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
static use(f) {
|
|
131
|
+
return Effect.flatMap(Tag, f);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
return Tag;
|
|
135
|
+
};
|
|
136
|
+
/**
|
|
137
|
+
* Store utilities for Effect integration.
|
|
138
|
+
*
|
|
139
|
+
* @example
|
|
140
|
+
* ```ts
|
|
141
|
+
* import { Store } from '@livestore/livestore/effect'
|
|
142
|
+
*
|
|
143
|
+
* export class MainStore extends Store.Tag(schema, 'main') {}
|
|
144
|
+
* ```
|
|
145
|
+
*/
|
|
146
|
+
export const Store = {
|
|
147
|
+
/**
|
|
148
|
+
* Create a typed store context class for use with Effect.
|
|
149
|
+
* @see {@link makeStoreTag} for full documentation
|
|
150
|
+
*/
|
|
151
|
+
Tag: makeStoreTag,
|
|
152
|
+
};
|
|
153
|
+
/**
|
|
154
|
+
* @deprecated Use `Store.Tag(schema, storeId)` instead.
|
|
155
|
+
*
|
|
156
|
+
* @example Migration
|
|
157
|
+
* ```ts
|
|
158
|
+
* // Before
|
|
159
|
+
* const MainStoreContext = makeStoreContext<typeof schema>()('main')
|
|
160
|
+
*
|
|
161
|
+
* // After
|
|
162
|
+
* class MainStore extends Store.Tag(schema, 'main') {}
|
|
163
|
+
* ```
|
|
164
|
+
*/
|
|
165
|
+
export const makeStoreContext = () => (storeId) => {
|
|
166
|
+
const Tag = Context.GenericTag(`@livestore/store/${storeId}`);
|
|
167
|
+
const DeferredTag = Context.GenericTag(`@livestore/store-deferred/${storeId}`);
|
|
168
|
+
const DeferredLayer = Layer.effect(DeferredTag, Deferred.make());
|
|
169
|
+
const makeLayer = (props) => pipe(Effect.gen(function* () {
|
|
170
|
+
const store = yield* createStore({
|
|
171
|
+
schema: props.schema,
|
|
172
|
+
storeId,
|
|
173
|
+
adapter: props.adapter,
|
|
174
|
+
batchUpdates: props.batchUpdates,
|
|
175
|
+
...omitUndefineds({
|
|
176
|
+
context: props.context,
|
|
177
|
+
boot: props.boot,
|
|
178
|
+
disableDevtools: props.disableDevtools,
|
|
179
|
+
onBootStatus: props.onBootStatus,
|
|
180
|
+
syncPayload: props.syncPayload,
|
|
181
|
+
syncPayloadSchema: props.syncPayloadSchema,
|
|
182
|
+
}),
|
|
183
|
+
});
|
|
184
|
+
const ctx = { stage: 'running', store: store };
|
|
185
|
+
// Also fulfill the deferred if it exists in context
|
|
186
|
+
yield* Effect.flatMap(Effect.serviceOption(DeferredTag), (optDeferred) => optDeferred._tag === 'Some' ? Deferred.succeed(optDeferred.value, ctx) : Effect.void);
|
|
187
|
+
return ctx;
|
|
188
|
+
}), Effect.timeout(Duration.minutes(5)), Effect.withSpan(`@livestore/effect:makeStoreContext:${storeId}`), Layer.scoped(Tag), Layer.withSpan(`LiveStore:${storeId}`), Layer.provide(DeferredLayer));
|
|
189
|
+
const fromDeferred = pipe(Effect.gen(function* () {
|
|
190
|
+
const deferred = yield* DeferredTag;
|
|
191
|
+
const ctx = yield* deferred;
|
|
192
|
+
return Layer.succeed(Tag, ctx);
|
|
193
|
+
}), Layer.unwrapScoped);
|
|
194
|
+
return {
|
|
195
|
+
storeId,
|
|
196
|
+
Tag,
|
|
197
|
+
DeferredTag,
|
|
198
|
+
Layer: makeLayer,
|
|
199
|
+
DeferredLayer,
|
|
200
|
+
fromDeferred,
|
|
201
|
+
};
|
|
202
|
+
};
|
|
24
203
|
//# sourceMappingURL=LiveStore.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LiveStore.js","sourceRoot":"","sources":["../../src/effect/LiveStore.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAEjD,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,yBAAyB,CAAA;
|
|
1
|
+
{"version":3,"file":"LiveStore.js","sourceRoot":"","sources":["../../src/effect/LiveStore.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LiveStore.test.d.ts","sourceRoot":"","sources":["../../src/effect/LiveStore.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { describe, it } from 'vitest';
|
|
2
|
+
import { Effect, Layer } from '@livestore/utils/effect';
|
|
3
|
+
import { schema } from "../utils/tests/fixture.js";
|
|
4
|
+
import { Store } from "./LiveStore.js";
|
|
5
|
+
/**
|
|
6
|
+
* Regression test for https://github.com/livestorejs/livestore/issues/1103
|
|
7
|
+
*
|
|
8
|
+
* `yield* MyStore` and `MyStore.query(...)` must produce the same R channel type
|
|
9
|
+
* so that a single layer provision satisfies both.
|
|
10
|
+
*/
|
|
11
|
+
describe('Store.Tag R channel consistency', () => {
|
|
12
|
+
class MainStore extends Store.Tag(schema, 'main') {
|
|
13
|
+
}
|
|
14
|
+
const storeLayer = MainStore.layer({ adapter: {}, batchUpdates: (_) => { } });
|
|
15
|
+
it('yield* and method R channels unify so layer provision eliminates all requirements', () => {
|
|
16
|
+
const prog = Effect.gen(function* () {
|
|
17
|
+
const { store } = yield* MainStore;
|
|
18
|
+
void store;
|
|
19
|
+
const _queryResult = yield* MainStore.query({ get: () => 42 });
|
|
20
|
+
void _queryResult;
|
|
21
|
+
yield* MainStore.commit();
|
|
22
|
+
});
|
|
23
|
+
/** Providing the store layer must fully eliminate MainStore from R */
|
|
24
|
+
const _provided = prog.pipe(Effect.provide(storeLayer));
|
|
25
|
+
void _provided;
|
|
26
|
+
});
|
|
27
|
+
it('use() helper R channel is satisfied by the same layer', () => {
|
|
28
|
+
const prog = MainStore.use(({ store }) => Effect.succeed(store));
|
|
29
|
+
const _provided = prog.pipe(Effect.provide(storeLayer));
|
|
30
|
+
void _provided;
|
|
31
|
+
});
|
|
32
|
+
it('fromDeferred layer output satisfies the same R channel', () => {
|
|
33
|
+
const prog = Effect.gen(function* () {
|
|
34
|
+
yield* MainStore;
|
|
35
|
+
});
|
|
36
|
+
/** fromDeferred + DeferredLayer should satisfy MainStore in R */
|
|
37
|
+
const _provided = prog.pipe(Effect.provide(Layer.merge(MainStore.fromDeferred, MainStore.DeferredLayer)));
|
|
38
|
+
const _check = true;
|
|
39
|
+
void _check;
|
|
40
|
+
});
|
|
41
|
+
});
|
|
42
|
+
//# sourceMappingURL=LiveStore.test.js.map
|