@livestore/livestore 0.4.0-dev.9 → 0.5.0-dev.0
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 +15 -13
- package/dist/SqliteDbWrapper.js.map +1 -1
- package/dist/SqliteDbWrapper.test.js +24 -6
- package/dist/SqliteDbWrapper.test.js.map +1 -1
- package/dist/effect/LiveStore.d.ts +134 -6
- package/dist/effect/LiveStore.d.ts.map +1 -1
- package/dist/effect/LiveStore.js +190 -11
- 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 +41 -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 +129 -9
- package/dist/live-queries/base-class.d.ts.map +1 -1
- package/dist/live-queries/base-class.js +30 -4
- 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 +4 -3
- package/dist/live-queries/client-document-get-query.js.map +1 -1
- package/dist/live-queries/computed.d.ts +56 -0
- package/dist/live-queries/computed.d.ts.map +1 -1
- package/dist/live-queries/computed.js +62 -6
- package/dist/live-queries/computed.js.map +1 -1
- package/dist/live-queries/db-query.d.ts +2 -2
- package/dist/live-queries/db-query.d.ts.map +1 -1
- package/dist/live-queries/db-query.js +41 -30
- package/dist/live-queries/db-query.js.map +1 -1
- package/dist/live-queries/db-query.test.js +112 -29
- package/dist/live-queries/db-query.test.js.map +1 -1
- package/dist/live-queries/signal.d.ts +49 -0
- package/dist/live-queries/signal.d.ts.map +1 -1
- package/dist/live-queries/signal.js +51 -2
- package/dist/live-queries/signal.js.map +1 -1
- package/dist/live-queries/signal.test.js +4 -4
- package/dist/live-queries/signal.test.js.map +1 -1
- package/dist/mod.d.ts +3 -3
- package/dist/mod.d.ts.map +1 -1
- package/dist/mod.js +3 -2
- package/dist/mod.js.map +1 -1
- package/dist/reactive.d.ts +10 -10
- package/dist/reactive.d.ts.map +1 -1
- package/dist/reactive.js +29 -27
- 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 +384 -0
- package/dist/store/StoreRegistry.test.js.map +1 -0
- package/dist/store/create-store.d.ts +99 -22
- package/dist/store/create-store.d.ts.map +1 -1
- package/dist/store/create-store.js +85 -37
- package/dist/store/create-store.js.map +1 -1
- package/dist/store/devtools.d.ts +6 -18
- package/dist/store/devtools.d.ts.map +1 -1
- package/dist/store/devtools.js +61 -19
- package/dist/store/devtools.js.map +1 -1
- package/dist/store/store-eventstream.test.d.ts +2 -0
- package/dist/store/store-eventstream.test.d.ts.map +1 -0
- package/dist/store/store-eventstream.test.js +65 -0
- package/dist/store/store-eventstream.test.js.map +1 -0
- package/dist/store/store-types.d.ts +271 -31
- package/dist/store/store-types.d.ts.map +1 -1
- package/dist/store/store-types.js +41 -1
- package/dist/store/store-types.js.map +1 -1
- package/dist/store/store-types.test.d.ts +2 -0
- package/dist/store/store-types.test.d.ts.map +1 -0
- package/dist/store/store-types.test.js +39 -0
- package/dist/store/store-types.test.js.map +1 -0
- package/dist/store/store.d.ts +255 -68
- package/dist/store/store.d.ts.map +1 -1
- package/dist/store/store.js +533 -186
- package/dist/store/store.js.map +1 -1
- package/dist/utils/dev.d.ts.map +1 -1
- package/dist/utils/dev.js +1 -1
- package/dist/utils/dev.js.map +1 -1
- package/dist/utils/stack-info.d.ts.map +1 -1
- package/dist/utils/stack-info.js +3 -2
- package/dist/utils/stack-info.js.map +1 -1
- package/dist/utils/tests/fixture.d.ts +46 -39
- package/dist/utils/tests/fixture.d.ts.map +1 -1
- package/dist/utils/tests/fixture.js +7 -0
- 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 +50 -18
- package/src/QueryCache.ts +1 -1
- package/src/SqliteDbWrapper.test.ts +30 -6
- package/src/SqliteDbWrapper.ts +21 -17
- package/src/ambient.d.ts +0 -7
- package/src/effect/LiveStore.test.ts +61 -0
- package/src/effect/LiveStore.ts +426 -22
- package/src/effect/mod.ts +13 -1
- package/src/live-queries/__snapshots__/db-query.test.ts.snap +814 -178
- package/src/live-queries/base-class.ts +162 -32
- package/src/live-queries/client-document-get-query.ts +6 -4
- package/src/live-queries/computed.ts +65 -8
- package/src/live-queries/db-query.test.ts +168 -30
- package/src/live-queries/db-query.ts +58 -43
- package/src/live-queries/signal.test.ts +5 -4
- package/src/live-queries/signal.ts +52 -3
- package/src/mod.ts +19 -2
- package/src/reactive.test.ts +3 -2
- package/src/reactive.ts +58 -49
- package/src/store/StoreRegistry.test.ts +543 -0
- package/src/store/StoreRegistry.ts +429 -0
- package/src/store/create-store.ts +227 -74
- package/src/store/devtools.ts +305 -261
- package/src/store/store-eventstream.test.ts +123 -0
- package/src/store/store-types.test.ts +52 -0
- package/src/store/store-types.ts +318 -44
- package/src/store/store.ts +695 -283
- package/src/utils/dev.ts +3 -4
- package/src/utils/stack-info.ts +5 -2
- package/src/utils/tests/fixture.ts +9 -1
- package/src/utils/tests/otel.ts +8 -7
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,
|
|
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,EACd,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;IAcD,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;IA0DzB,OAAO;;yBAjMmB,CAAA;;;yBAGN,CAAA;;MA8LoF;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;IAiEnB,MAAM;CAQP"}
|
package/dist/SqliteDbWrapper.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { BoundArray, BoundMap,
|
|
1
|
+
import { BoundArray, BoundMap, SqliteDbHelper, SqliteError, sql, } from '@livestore/common';
|
|
2
2
|
import { isDevEnv, LS_DEV } from '@livestore/utils';
|
|
3
3
|
import QueryCache from "./QueryCache.js";
|
|
4
4
|
export const emptyDebugInfo = () => ({
|
|
@@ -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;
|
|
@@ -116,6 +116,7 @@ export class SqliteDbWrapper {
|
|
|
116
116
|
return this.otelTracer.startActiveSpan('livestore.in-memory-db:execute',
|
|
117
117
|
// TODO truncate query string
|
|
118
118
|
{ attributes: { 'sql.query': queryStr } }, options?.otelContext ?? this.otelRootSpanContext, (span) => {
|
|
119
|
+
const startTimePerfNow = performance.now();
|
|
119
120
|
try {
|
|
120
121
|
let stmt = this.cachedStmts.get(queryStr);
|
|
121
122
|
if (stmt === undefined) {
|
|
@@ -123,23 +124,23 @@ export class SqliteDbWrapper {
|
|
|
123
124
|
this.cachedStmts.set(queryStr, stmt);
|
|
124
125
|
}
|
|
125
126
|
stmt.execute(bindValues);
|
|
126
|
-
if (options?.hasNoEffects !== true &&
|
|
127
|
+
if (options?.hasNoEffects !== true && this.resultCache.ignoreQuery(queryStr) === false) {
|
|
127
128
|
// TODO use write tables instead
|
|
128
129
|
// check what queries actually end up here.
|
|
129
130
|
this.resultCache.invalidate(options?.writeTables ?? this.getTablesUsed(queryStr));
|
|
130
131
|
}
|
|
131
132
|
span.end();
|
|
132
|
-
const durationMs =
|
|
133
|
+
const durationMs = performance.now() - startTimePerfNow;
|
|
133
134
|
this.debugInfo.queryFrameDuration += durationMs;
|
|
134
135
|
this.debugInfo.queryFrameCount++;
|
|
135
|
-
if (durationMs > 5 && isDevEnv()) {
|
|
136
|
+
if (durationMs > 5 && isDevEnv() === true) {
|
|
136
137
|
this.debugInfo.slowQueries.push({
|
|
137
138
|
queryStr,
|
|
138
139
|
bindValues,
|
|
139
140
|
durationMs,
|
|
140
141
|
rowsCount: undefined,
|
|
141
142
|
queriedTables: new Set(),
|
|
142
|
-
startTimePerfNow
|
|
143
|
+
startTimePerfNow,
|
|
143
144
|
});
|
|
144
145
|
}
|
|
145
146
|
return { durationMs };
|
|
@@ -147,8 +148,8 @@ export class SqliteDbWrapper {
|
|
|
147
148
|
catch (cause) {
|
|
148
149
|
span.recordException(cause);
|
|
149
150
|
span.end();
|
|
150
|
-
if (LS_DEV) {
|
|
151
|
-
//
|
|
151
|
+
if (LS_DEV === true) {
|
|
152
|
+
// oxlint-disable-next-line eslint(no-debugger) -- intentional breakpoint for SQL errors during development
|
|
152
153
|
debugger;
|
|
153
154
|
}
|
|
154
155
|
throw new SqliteError({ cause, query: { bindValues: bindValues ?? {}, sql: queryStr } });
|
|
@@ -161,6 +162,7 @@ export class SqliteDbWrapper {
|
|
|
161
162
|
const { queriedTables, skipCache = false, otelContext } = options ?? {};
|
|
162
163
|
// console.debug('in-memory-db:select', query, bindValues)
|
|
163
164
|
return this.otelTracer.startActiveSpan('sql-in-memory-select', {}, otelContext ?? this.otelRootSpanContext, (span) => {
|
|
165
|
+
const startTimePerfNow = performance.now();
|
|
164
166
|
try {
|
|
165
167
|
span.setAttribute('sql.query', queryStr);
|
|
166
168
|
const key = this.resultCache.getKey(queryStr, bindValues);
|
|
@@ -182,18 +184,18 @@ export class SqliteDbWrapper {
|
|
|
182
184
|
const queriedTables_ = queriedTables ?? this.getTablesUsed(queryStr);
|
|
183
185
|
this.resultCache.set(queriedTables_, key, result);
|
|
184
186
|
span.end();
|
|
185
|
-
const durationMs =
|
|
187
|
+
const durationMs = performance.now() - startTimePerfNow;
|
|
186
188
|
this.debugInfo.queryFrameDuration += durationMs;
|
|
187
189
|
this.debugInfo.queryFrameCount++;
|
|
188
190
|
// TODO also enable in non-dev mode
|
|
189
|
-
if (durationMs > 5 && isDevEnv()) {
|
|
191
|
+
if (durationMs > 5 && isDevEnv() === true) {
|
|
190
192
|
this.debugInfo.slowQueries.push({
|
|
191
193
|
queryStr,
|
|
192
194
|
bindValues,
|
|
193
195
|
durationMs,
|
|
194
196
|
rowsCount: result.length,
|
|
195
197
|
queriedTables: queriedTables_,
|
|
196
|
-
startTimePerfNow
|
|
198
|
+
startTimePerfNow,
|
|
197
199
|
});
|
|
198
200
|
}
|
|
199
201
|
return result;
|
|
@@ -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,22 +1,40 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { Vitest } from '@livestore/utils-dev/node-vitest';
|
|
1
|
+
import * as otel from '@opentelemetry/api';
|
|
3
2
|
import { expect } from 'vitest';
|
|
3
|
+
import { Vitest } from '@livestore/utils-dev/node-vitest';
|
|
4
|
+
import { Effect } from '@livestore/utils/effect';
|
|
5
|
+
import { StoreInternalsSymbol } from "./store/store-types.js";
|
|
4
6
|
import { makeTodoMvc } from "./utils/tests/fixture.js";
|
|
5
7
|
Vitest.describe('SqliteDbWrapper', () => {
|
|
8
|
+
Vitest.live('works with the OpenTelemetry API no-op tracer', (_test) => Effect.gen(function* () {
|
|
9
|
+
const otelTracer = otel.trace.getTracer('sqlite-wrapper-noop-test');
|
|
10
|
+
const probeSpan = otelTracer.startSpan('verify-noop-tracer');
|
|
11
|
+
expect(probeSpan.isRecording()).toBe(false);
|
|
12
|
+
probeSpan.end();
|
|
13
|
+
// Store creation exercises the configureSQLite execute path.
|
|
14
|
+
const store = yield* makeTodoMvc({ otelTracer });
|
|
15
|
+
const sqliteDbWrapper = store[StoreInternalsSymbol].sqliteDbWrapper;
|
|
16
|
+
const { durationMs } = sqliteDbWrapper.cachedExecute('CREATE TABLE noop_timing_test (id INTEGER)', undefined, {
|
|
17
|
+
hasNoEffects: true,
|
|
18
|
+
});
|
|
19
|
+
expect(sqliteDbWrapper.select('SELECT 1 AS value')).toEqual([{ value: 1 }]);
|
|
20
|
+
expect(sqliteDbWrapper.debugInfo.queryFrameCount).toBeGreaterThan(0);
|
|
21
|
+
expect(sqliteDbWrapper.debugInfo.queryFrameDuration).toBeGreaterThanOrEqual(0);
|
|
22
|
+
expect(durationMs).toBeGreaterThanOrEqual(0);
|
|
23
|
+
}));
|
|
6
24
|
Vitest.describe('getTablesUsed', () => {
|
|
7
25
|
const getTablesUsed = (query) => Effect.gen(function* () {
|
|
8
26
|
const store = yield* makeTodoMvc({});
|
|
9
|
-
return store.sqliteDbWrapper.getTablesUsed(query);
|
|
27
|
+
return store[StoreInternalsSymbol].sqliteDbWrapper.getTablesUsed(query);
|
|
10
28
|
});
|
|
11
|
-
Vitest.
|
|
29
|
+
Vitest.live('should return the correct tables used', (_test) => Effect.gen(function* () {
|
|
12
30
|
const tablesUsed = yield* getTablesUsed('select * from todos');
|
|
13
31
|
expect(tablesUsed).toEqual(new Set(['todos']));
|
|
14
32
|
}));
|
|
15
|
-
Vitest.
|
|
33
|
+
Vitest.live('should handle DELETE FROM statement without WHERE clause', (_test) => Effect.gen(function* () {
|
|
16
34
|
const tablesUsed = yield* getTablesUsed('DELETE FROM todos');
|
|
17
35
|
expect(tablesUsed).toEqual(new Set(['todos']));
|
|
18
36
|
}));
|
|
19
|
-
Vitest.
|
|
37
|
+
Vitest.live('should handle INSERT with ON CONFLICT clause', (_test) => Effect.gen(function* () {
|
|
20
38
|
const tablesUsed = yield* getTablesUsed('INSERT INTO todos (id, text, completed) VALUES (?, ?, ?) ON CONFLICT(id) DO UPDATE SET text = ?');
|
|
21
39
|
expect(tablesUsed).toEqual(new Set(['todos']));
|
|
22
40
|
}));
|
|
@@ -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":"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"}
|
|
@@ -1,10 +1,138 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
import type { LiveStoreSchema } from '@livestore/common/schema';
|
|
3
|
-
import type {
|
|
4
|
-
import { Effect, Layer } from '@livestore/utils/effect';
|
|
1
|
+
import type { UnknownError } from '@livestore/common';
|
|
2
|
+
import type { LiveStoreEvent, LiveStoreSchema } from '@livestore/common/schema';
|
|
3
|
+
import type { Schema } from '@livestore/utils/effect';
|
|
4
|
+
import { type Cause, type OtelTracer, type Scope, 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
|
-
|
|
8
|
-
export declare const
|
|
7
|
+
import type { LiveStoreContextRunning as LiveStoreContextRunningType, Queryable } from '../store/store-types.ts';
|
|
8
|
+
export declare const makeLiveStoreContext: <TSchema extends LiveStoreSchema, TContext = {}, TSyncPayloadSchema extends Schema.Codec<Schema.Json, Schema.Json> = typeof Schema.Json>({ schema, storeId, context, boot, adapter, disableDevtools, onBootStatus, batchUpdates, syncPayload, syncPayloadSchema, }: LiveStoreContextProps<TSchema, TContext, TSyncPayloadSchema>) => Effect.Effect<LiveStoreContextRunning["Service"], UnknownError | Cause.TimeoutError, 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
|
+
*/
|
|
22
|
+
export declare const LiveStoreContextLayer: <TSchema extends LiveStoreSchema, TContext = {}, TSyncPayloadSchema extends Schema.Codec<Schema.Json, Schema.Json> = typeof Schema.Json>(props: LiveStoreContextProps<TSchema, TContext, TSyncPayloadSchema>) => Layer.Layer<LiveStoreContextRunning, UnknownError | Cause.TimeoutError, 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 = {}, TSyncPayloadSchema extends Schema.Codec<Schema.Json, Schema.Json> = typeof Schema.Json> = Omit<LiveStoreContextProps<TSchema, TContext, TSyncPayloadSchema>, '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.Key<StoreTagClass<TSchema, TStoreId>, LiveStoreContextRunningType<TSchema>> {
|
|
59
|
+
/** Constructor signature (makes the type extendable as a class) */
|
|
60
|
+
new (): Context.Key<StoreTagClass<TSchema, TStoreId>, LiveStoreContextRunningType<TSchema>>;
|
|
61
|
+
/** Key identity type (from Context.Key) */
|
|
62
|
+
readonly Id: StoreTagClass<TSchema, TStoreId>;
|
|
63
|
+
/** Service type (from Context.Key) */
|
|
64
|
+
readonly Service: 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, TSyncPayloadSchema extends Schema.Codec<Schema.Json, Schema.Json> = typeof Schema.Json>(props: StoreLayerProps<TSchema, TContext, TSyncPayloadSchema>): Layer.Layer<StoreTagClass<TSchema, TStoreId>, UnknownError | Cause.TimeoutError, OtelTracer.OtelTracer>;
|
|
71
|
+
/** Deferred store tag for async initialization patterns */
|
|
72
|
+
readonly Deferred: Context.Key<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.Key<StoreContextId<TSchema, TStoreId>, LiveStoreContextRunningType<TSchema>>;
|
|
119
|
+
readonly DeferredTag: Context.Key<DeferredContextId<TStoreId>, Deferred.Deferred<LiveStoreContextRunningType<TSchema>, UnknownError>>;
|
|
120
|
+
readonly Layer: <TContext = {}, TSyncPayloadSchema extends Schema.Codec<Schema.Json, Schema.Json> = typeof Schema.Json>(props: Omit<LiveStoreContextProps<TSchema, TContext, TSyncPayloadSchema>, 'storeId'>) => Layer.Layer<StoreContextId<TSchema, TStoreId>, UnknownError | Cause.TimeoutError, 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,
|
|
1
|
+
{"version":3,"file":"LiveStore.d.ts","sourceRoot":"","sources":["../../src/effect/LiveStore.ts"],"names":[],"mappings":"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"}
|