@livestore/livestore 0.3.0-dev.10 → 0.3.0-dev.12
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/SqliteDbWrapper.d.ts +54 -0
- package/dist/SqliteDbWrapper.d.ts.map +1 -0
- package/dist/SqliteDbWrapper.js +211 -0
- package/dist/SqliteDbWrapper.js.map +1 -0
- package/dist/SynchronousDatabaseWrapper.d.ts +14 -5
- package/dist/SynchronousDatabaseWrapper.d.ts.map +1 -1
- package/dist/SynchronousDatabaseWrapper.js +24 -4
- package/dist/SynchronousDatabaseWrapper.js.map +1 -1
- package/dist/effect/LiveStore.d.ts +12 -8
- package/dist/effect/LiveStore.d.ts.map +1 -1
- package/dist/effect/LiveStore.js +9 -2
- package/dist/effect/LiveStore.js.map +1 -1
- package/dist/index.d.ts +6 -7
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -4
- package/dist/index.js.map +1 -1
- package/dist/live-queries/base-class.d.ts +57 -21
- package/dist/live-queries/base-class.d.ts.map +1 -1
- package/dist/live-queries/base-class.js +54 -13
- package/dist/live-queries/base-class.js.map +1 -1
- package/dist/live-queries/computed.d.ts +7 -7
- package/dist/live-queries/computed.d.ts.map +1 -1
- package/dist/live-queries/computed.js +34 -11
- package/dist/live-queries/computed.js.map +1 -1
- package/dist/live-queries/db-query.d.ts +67 -0
- package/dist/live-queries/db-query.d.ts.map +1 -0
- package/dist/live-queries/db-query.js +243 -0
- package/dist/live-queries/db-query.js.map +1 -0
- package/dist/live-queries/db-query.test.d.ts +2 -0
- package/dist/live-queries/db-query.test.d.ts.map +1 -0
- package/dist/live-queries/db-query.test.js +113 -0
- package/dist/live-queries/db-query.test.js.map +1 -0
- package/dist/live-queries/db.d.ts +12 -15
- package/dist/live-queries/db.d.ts.map +1 -1
- package/dist/live-queries/db.js +44 -25
- package/dist/live-queries/db.js.map +1 -1
- package/dist/live-queries/db.test.js +16 -14
- package/dist/live-queries/db.test.js.map +1 -1
- package/dist/live-queries/graphql.d.ts +8 -8
- package/dist/live-queries/graphql.d.ts.map +1 -1
- package/dist/live-queries/graphql.js +34 -9
- package/dist/live-queries/graphql.js.map +1 -1
- package/dist/live-queries/make-ref.d.ts +20 -0
- package/dist/live-queries/make-ref.d.ts.map +1 -0
- package/dist/live-queries/make-ref.js +33 -0
- package/dist/live-queries/make-ref.js.map +1 -0
- package/dist/reactive.d.ts +19 -13
- package/dist/reactive.d.ts.map +1 -1
- package/dist/reactive.js +22 -18
- package/dist/reactive.js.map +1 -1
- package/dist/reactive.test.js +1 -1
- package/dist/reactive.test.js.map +1 -1
- package/dist/row-query-utils.d.ts +6 -6
- package/dist/row-query-utils.d.ts.map +1 -1
- package/dist/row-query-utils.js +15 -11
- package/dist/row-query-utils.js.map +1 -1
- package/dist/store/create-store.d.ts +7 -5
- package/dist/store/create-store.d.ts.map +1 -1
- package/dist/store/create-store.js +21 -7
- package/dist/store/create-store.js.map +1 -1
- package/dist/store/devtools.d.ts +5 -4
- package/dist/store/devtools.d.ts.map +1 -1
- package/dist/store/devtools.js +45 -23
- package/dist/store/devtools.js.map +1 -1
- package/dist/store/store-types.d.ts +9 -4
- package/dist/store/store-types.d.ts.map +1 -1
- package/dist/store/store-types.js.map +1 -1
- package/dist/store/store.d.ts +36 -18
- package/dist/store/store.d.ts.map +1 -1
- package/dist/store/store.js +127 -75
- package/dist/store/store.js.map +1 -1
- package/dist/utils/expo.d.ts +2 -0
- package/dist/utils/expo.d.ts.map +1 -0
- package/dist/utils/expo.js +8 -0
- package/dist/utils/expo.js.map +1 -0
- package/dist/utils/function-string.d.ts +7 -0
- package/dist/utils/function-string.d.ts.map +1 -0
- package/dist/utils/function-string.js +9 -0
- package/dist/utils/function-string.js.map +1 -0
- package/dist/utils/stack-info.d.ts.map +1 -1
- package/dist/utils/stack-info.js +6 -1
- package/dist/utils/stack-info.js.map +1 -1
- package/dist/utils/stack-info.test.js +54 -1
- package/dist/utils/stack-info.test.js.map +1 -1
- package/dist/utils/tests/fixture.d.ts +2 -6
- package/dist/utils/tests/fixture.d.ts.map +1 -1
- package/dist/utils/tests/fixture.js +3 -5
- package/dist/utils/tests/fixture.js.map +1 -1
- package/dist/utils/tests/mod.d.ts +1 -0
- package/dist/utils/tests/mod.d.ts.map +1 -1
- package/dist/utils/tests/mod.js +1 -0
- package/dist/utils/tests/mod.js.map +1 -1
- package/package.json +5 -5
- package/src/{SynchronousDatabaseWrapper.ts → SqliteDbWrapper.ts} +41 -12
- package/src/effect/LiveStore.ts +22 -14
- package/src/index.ts +14 -7
- package/src/live-queries/__snapshots__/{db.test.ts.snap → db-query.test.ts.snap} +196 -45
- package/src/live-queries/base-class.ts +151 -40
- package/src/live-queries/computed.ts +44 -19
- package/src/live-queries/{db.test.ts → db-query.test.ts} +44 -32
- package/src/live-queries/{db.ts → db-query.ts} +96 -39
- package/src/live-queries/graphql.ts +46 -21
- package/src/live-queries/make-ref.ts +47 -0
- package/src/reactive.test.ts +1 -1
- package/src/reactive.ts +60 -37
- package/src/row-query-utils.ts +32 -21
- package/src/store/create-store.ts +55 -27
- package/src/store/devtools.ts +74 -29
- package/src/store/store-types.ts +6 -4
- package/src/store/store.ts +231 -121
- package/src/utils/function-string.ts +12 -0
- package/src/utils/stack-info.test.ts +58 -1
- package/src/utils/stack-info.ts +6 -1
- package/src/utils/tests/fixture.ts +2 -7
- package/src/utils/tests/mod.ts +1 -0
- package/src/global-state.ts +0 -20
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fixture.d.ts","sourceRoot":"","sources":["../../../src/utils/tests/fixture.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAA;AAC/D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAA;AACjD,OAAO,EAAe,QAAQ,
|
|
1
|
+
{"version":3,"file":"fixture.d.ts","sourceRoot":"","sources":["../../../src/utils/tests/fixture.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAA;AAC/D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAA;AACjD,OAAO,EAAe,QAAQ,EAAc,MAAM,sBAAsB,CAAA;AACxE,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAEhD,OAAO,KAAK,KAAK,IAAI,MAAM,oBAAoB,CAAA;AAE/C,MAAM,MAAM,IAAI,GAAG;IACjB,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,EAAE,OAAO,CAAA;CACnB,CAAA;AAED,MAAM,MAAM,MAAM,GAAG,KAAK,GAAG,QAAQ,GAAG,WAAW,CAAA;AAEnD,MAAM,MAAM,QAAQ,GAAG;IACrB,WAAW,EAAE,MAAM,CAAA;IACnB,MAAM,EAAE,MAAM,CAAA;CACf,CAAA;AAED,eAAO,MAAM,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;UAQjB,CAAA;AAED,eAAO,MAAM,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;UAQf,CAAA;AAED,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAAiB,CAAA;AACpC,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAAyB,CAAA;AAE5C,MAAM,WAAW,aAAc,SAAQ,eAAe,CAAC,YAAY,CAAC;IAAE,MAAM,EAAE,OAAO,MAAM,CAAA;CAAE,CAAC;CAAG;AAEjG,eAAO,MAAM,WAAW,kCAGrB;IACD,UAAU,CAAC,EAAE,IAAI,CAAC,MAAM,CAAA;IACxB,WAAW,CAAC,EAAE,IAAI,CAAC,OAAO,CAAA;CAC3B,wHAUiF,CAAA"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { provideOtel } from '@livestore/common';
|
|
2
|
-
import { createStore, DbSchema,
|
|
2
|
+
import { createStore, DbSchema, makeSchema } from '@livestore/livestore';
|
|
3
3
|
import { Effect } from '@livestore/utils/effect';
|
|
4
4
|
import { makeInMemoryAdapter } from '@livestore/web';
|
|
5
5
|
export const todos = DbSchema.table('todos', {
|
|
@@ -14,15 +14,13 @@ export const app = DbSchema.table('app', {
|
|
|
14
14
|
}, { isSingleton: true });
|
|
15
15
|
export const tables = { todos, app };
|
|
16
16
|
export const schema = makeSchema({ tables });
|
|
17
|
-
export const makeTodoMvc = ({ otelTracer, otelContext,
|
|
18
|
-
const reactivityGraph = useGlobalReactivityGraph ? globalReactivityGraph : makeReactivityGraph();
|
|
17
|
+
export const makeTodoMvc = ({ otelTracer, otelContext, } = {}) => Effect.gen(function* () {
|
|
19
18
|
const store = yield* createStore({
|
|
20
19
|
schema,
|
|
21
20
|
storeId: 'default',
|
|
22
21
|
adapter: makeInMemoryAdapter(),
|
|
23
|
-
reactivityGraph,
|
|
24
22
|
debug: { instanceId: 'test' },
|
|
25
23
|
});
|
|
26
|
-
return
|
|
24
|
+
return store;
|
|
27
25
|
}).pipe(provideOtel({ parentSpanContext: otelContext, otelTracer: otelTracer }));
|
|
28
26
|
//# sourceMappingURL=fixture.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fixture.js","sourceRoot":"","sources":["../../../src/utils/tests/fixture.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAG/C,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,
|
|
1
|
+
{"version":3,"file":"fixture.js","sourceRoot":"","sources":["../../../src/utils/tests/fixture.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAG/C,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AACxE,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAChD,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAA;AAgBpD,MAAM,CAAC,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CACjC,OAAO,EACP;IACE,EAAE,EAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;IACvC,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;IACrD,SAAS,EAAE,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;CACjE,EACD,EAAE,eAAe,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,CAC9C,CAAA;AAED,MAAM,CAAC,MAAM,GAAG,GAAG,QAAQ,CAAC,KAAK,CAC/B,KAAK,EACL;IACE,EAAE,EAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;IAC1D,WAAW,EAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IAC3D,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;CAC3D,EACD,EAAE,WAAW,EAAE,IAAI,EAAE,CACtB,CAAA;AAED,MAAM,CAAC,MAAM,MAAM,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,CAAA;AACpC,MAAM,CAAC,MAAM,MAAM,GAAG,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC,CAAA;AAI5C,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,EAC1B,UAAU,EACV,WAAW,MAIT,EAAE,EAAE,EAAE,CACR,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,MAAM,KAAK,GAA8B,KAAK,CAAC,CAAC,WAAW,CAAC;QAC1D,MAAM;QACN,OAAO,EAAE,SAAS;QAClB,OAAO,EAAE,mBAAmB,EAAE;QAC9B,KAAK,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE;KAC9B,CAAC,CAAA;IAEF,OAAO,KAAK,CAAA;AACd,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,iBAAiB,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,EAAE,CAAC,CAAC,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mod.d.ts","sourceRoot":"","sources":["../../../src/utils/tests/mod.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAA;AAC5B,cAAc,WAAW,CAAA"}
|
|
1
|
+
{"version":3,"file":"mod.d.ts","sourceRoot":"","sources":["../../../src/utils/tests/mod.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAA;AAC5B,cAAc,WAAW,CAAA;AACzB,OAAO,KAAK,EAAE,MAAM,mBAAmB,CAAA"}
|
package/dist/utils/tests/mod.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mod.js","sourceRoot":"","sources":["../../../src/utils/tests/mod.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAA;AAC5B,cAAc,WAAW,CAAA"}
|
|
1
|
+
{"version":3,"file":"mod.js","sourceRoot":"","sources":["../../../src/utils/tests/mod.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAA;AAC5B,cAAc,WAAW,CAAA;AACzB,OAAO,KAAK,EAAE,MAAM,mBAAmB,CAAA"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@livestore/livestore",
|
|
3
|
-
"version": "0.3.0-dev.
|
|
3
|
+
"version": "0.3.0-dev.12",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"sideEffects": false,
|
|
6
6
|
"exports": {
|
|
@@ -31,9 +31,9 @@
|
|
|
31
31
|
"dependencies": {
|
|
32
32
|
"@graphql-typed-document-node/core": "3.2.0",
|
|
33
33
|
"@opentelemetry/api": "1.9.0",
|
|
34
|
-
"@livestore/common": "0.3.0-dev.
|
|
35
|
-
"@livestore/
|
|
36
|
-
"@livestore/
|
|
34
|
+
"@livestore/common": "0.3.0-dev.12",
|
|
35
|
+
"@livestore/db-schema": "0.3.0-dev.12",
|
|
36
|
+
"@livestore/utils": "0.3.0-dev.12"
|
|
37
37
|
},
|
|
38
38
|
"devDependencies": {
|
|
39
39
|
"@opentelemetry/sdk-trace-base": "^1.30.1",
|
|
@@ -41,7 +41,7 @@
|
|
|
41
41
|
"typescript": "^5.7.2",
|
|
42
42
|
"vite": "^6.0.11",
|
|
43
43
|
"vitest": "^2.1.4",
|
|
44
|
-
"@livestore/web": "0.3.0-dev.
|
|
44
|
+
"@livestore/web": "0.3.0-dev.12"
|
|
45
45
|
},
|
|
46
46
|
"peerDependencies": {
|
|
47
47
|
"graphql": "~16.0"
|
|
@@ -5,7 +5,9 @@ import type {
|
|
|
5
5
|
MutableDebugInfo,
|
|
6
6
|
PreparedBindValues,
|
|
7
7
|
PreparedStatement,
|
|
8
|
-
|
|
8
|
+
SqliteDb,
|
|
9
|
+
SqliteDbChangeset,
|
|
10
|
+
SqliteDbSession,
|
|
9
11
|
} from '@livestore/common'
|
|
10
12
|
import { BoundArray, BoundMap, sql } from '@livestore/common'
|
|
11
13
|
import { isDevEnv } from '@livestore/utils'
|
|
@@ -21,12 +23,17 @@ export const emptyDebugInfo = (): DebugInfo => ({
|
|
|
21
23
|
events: new BoundArray(1000),
|
|
22
24
|
})
|
|
23
25
|
|
|
24
|
-
|
|
26
|
+
/**
|
|
27
|
+
* This class is mostly adding result caching around a SqliteDb which is used to speed up
|
|
28
|
+
* SQLite queries when used through the reactivity graph.
|
|
29
|
+
*/
|
|
30
|
+
export class SqliteDbWrapper implements SqliteDb {
|
|
31
|
+
_tag = 'SqliteDb' as const
|
|
25
32
|
// TODO: how many unique active statements are expected?
|
|
26
33
|
private cachedStmts = new BoundMap<string, PreparedStatement>(200)
|
|
27
34
|
private tablesUsedCache = new BoundMap<string, Set<string>>(200)
|
|
28
35
|
private resultCache = new QueryCache()
|
|
29
|
-
private db:
|
|
36
|
+
private db: SqliteDb
|
|
30
37
|
private otelTracer: otel.Tracer
|
|
31
38
|
private otelRootSpanContext: otel.Context
|
|
32
39
|
private tablesUsedStmt
|
|
@@ -36,7 +43,7 @@ export class SynchronousDatabaseWrapper {
|
|
|
36
43
|
db,
|
|
37
44
|
otel,
|
|
38
45
|
}: {
|
|
39
|
-
db:
|
|
46
|
+
db: SqliteDb
|
|
40
47
|
otel: {
|
|
41
48
|
tracer: otel.Tracer
|
|
42
49
|
rootSpanContext: otel.Context
|
|
@@ -54,6 +61,25 @@ export class SynchronousDatabaseWrapper {
|
|
|
54
61
|
|
|
55
62
|
configureSQLite(this)
|
|
56
63
|
}
|
|
64
|
+
metadata: any
|
|
65
|
+
prepare(queryStr: string): PreparedStatement {
|
|
66
|
+
return this.db.prepare(queryStr)
|
|
67
|
+
}
|
|
68
|
+
import(data: Uint8Array<ArrayBufferLike> | SqliteDb<any, any>) {
|
|
69
|
+
return this.db.import(data)
|
|
70
|
+
}
|
|
71
|
+
close(): void {
|
|
72
|
+
return this.db.close()
|
|
73
|
+
}
|
|
74
|
+
destroy(): void {
|
|
75
|
+
return this.db.destroy()
|
|
76
|
+
}
|
|
77
|
+
session(): SqliteDbSession {
|
|
78
|
+
return this.db.session()
|
|
79
|
+
}
|
|
80
|
+
makeChangeset(data: Uint8Array): SqliteDbChangeset {
|
|
81
|
+
return this.db.makeChangeset(data)
|
|
82
|
+
}
|
|
57
83
|
|
|
58
84
|
txn<TRes>(callback: () => TRes): TRes {
|
|
59
85
|
this.execute(sql`begin transaction;`)
|
|
@@ -121,9 +147,13 @@ export class SynchronousDatabaseWrapper {
|
|
|
121
147
|
|
|
122
148
|
execute(
|
|
123
149
|
queryStr: string,
|
|
124
|
-
bindValues?: PreparedBindValues,
|
|
125
|
-
|
|
126
|
-
|
|
150
|
+
bindValues?: PreparedBindValues | undefined,
|
|
151
|
+
options?: {
|
|
152
|
+
hasNoEffects?: boolean
|
|
153
|
+
otelContext?: otel.Context
|
|
154
|
+
writeTables?: ReadonlySet<string>
|
|
155
|
+
onRowsChanged?: (rowsChanged: number) => void
|
|
156
|
+
},
|
|
127
157
|
): { durationMs: number } {
|
|
128
158
|
// console.debug('in-memory-db:execute', query, bindValues)
|
|
129
159
|
|
|
@@ -144,7 +174,7 @@ export class SynchronousDatabaseWrapper {
|
|
|
144
174
|
if (options?.hasNoEffects !== true && !this.resultCache.ignoreQuery(queryStr)) {
|
|
145
175
|
// TODO use write tables instead
|
|
146
176
|
// check what queries actually end up here.
|
|
147
|
-
this.resultCache.invalidate(writeTables ?? this.getTablesUsed(queryStr))
|
|
177
|
+
this.resultCache.invalidate(options?.writeTables ?? this.getTablesUsed(queryStr))
|
|
148
178
|
}
|
|
149
179
|
|
|
150
180
|
span.end()
|
|
@@ -172,14 +202,14 @@ export class SynchronousDatabaseWrapper {
|
|
|
172
202
|
|
|
173
203
|
select<T = any>(
|
|
174
204
|
queryStr: string,
|
|
205
|
+
bindValues?: PreparedBindValues | undefined,
|
|
175
206
|
options?: {
|
|
176
207
|
queriedTables?: ReadonlySet<string>
|
|
177
|
-
bindValues?: PreparedBindValues
|
|
178
208
|
skipCache?: boolean
|
|
179
209
|
otelContext?: otel.Context
|
|
180
210
|
},
|
|
181
211
|
): ReadonlyArray<T> {
|
|
182
|
-
const { queriedTables,
|
|
212
|
+
const { queriedTables, skipCache = false, otelContext } = options ?? {}
|
|
183
213
|
|
|
184
214
|
// console.debug('in-memory-db:select', query, bindValues)
|
|
185
215
|
|
|
@@ -252,13 +282,12 @@ export class SynchronousDatabaseWrapper {
|
|
|
252
282
|
}
|
|
253
283
|
|
|
254
284
|
/** Set up SQLite performance; hasn't been super carefully optimized yet. */
|
|
255
|
-
const configureSQLite = (db:
|
|
285
|
+
const configureSQLite = (db: SqliteDbWrapper) => {
|
|
256
286
|
db.execute(
|
|
257
287
|
// TODO: revisit these tuning parameters for max performance
|
|
258
288
|
sql`
|
|
259
289
|
PRAGMA page_size=32768;
|
|
260
290
|
PRAGMA cache_size=10000;
|
|
261
|
-
PRAGMA journal_mode='MEMORY'; -- we don't flush to disk before committing a write
|
|
262
291
|
PRAGMA synchronous='OFF';
|
|
263
292
|
PRAGMA temp_store='MEMORY';
|
|
264
293
|
PRAGMA foreign_keys='ON'; -- we want foreign key constraints to be enforced
|
package/src/effect/LiveStore.ts
CHANGED
|
@@ -5,20 +5,26 @@ import { Context, Deferred, Duration, Effect, Layer, pipe } from '@livestore/uti
|
|
|
5
5
|
import type * as otel from '@opentelemetry/api'
|
|
6
6
|
import type { GraphQLSchema } from 'graphql'
|
|
7
7
|
|
|
8
|
+
import type { SqliteDbWrapper } from '../SqliteDbWrapper.js'
|
|
8
9
|
import { createStore } from '../store/create-store.js'
|
|
9
10
|
import type { Store } from '../store/store.js'
|
|
10
11
|
import type { BaseGraphQLContext, LiveStoreContextRunning as LiveStoreContextRunning_ } from '../store/store-types.js'
|
|
11
|
-
import type { SynchronousDatabaseWrapper } from '../SynchronousDatabaseWrapper.js'
|
|
12
12
|
|
|
13
|
-
export
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
)
|
|
13
|
+
export class LiveStoreContextRunning extends Context.Tag('@livestore/livestore/effect/LiveStoreContextRunning')<
|
|
14
|
+
LiveStoreContextRunning,
|
|
15
|
+
LiveStoreContextRunning_
|
|
16
|
+
>() {
|
|
17
|
+
static fromDeferred = Effect.gen(function* () {
|
|
18
|
+
const deferred = yield* DeferredStoreContext
|
|
19
|
+
const ctx = yield* deferred
|
|
20
|
+
return Layer.succeed(LiveStoreContextRunning, ctx)
|
|
21
|
+
}).pipe(Layer.unwrapScoped)
|
|
22
|
+
}
|
|
17
23
|
|
|
18
|
-
export
|
|
19
|
-
|
|
20
|
-
'
|
|
21
|
-
)
|
|
24
|
+
export class DeferredStoreContext extends Context.Tag('@livestore/livestore/effect/DeferredStoreContext')<
|
|
25
|
+
DeferredStoreContext,
|
|
26
|
+
Deferred.Deferred<LiveStoreContextRunning['Type'], UnexpectedError>
|
|
27
|
+
>() {}
|
|
22
28
|
|
|
23
29
|
export type LiveStoreContextProps<GraphQLContext extends BaseGraphQLContext> = {
|
|
24
30
|
schema: LiveStoreSchema
|
|
@@ -33,9 +39,11 @@ export type LiveStoreContextProps<GraphQLContext extends BaseGraphQLContext> = {
|
|
|
33
39
|
storeId?: string
|
|
34
40
|
graphQLOptions?: {
|
|
35
41
|
schema: Effect.Effect<GraphQLSchema, never, OtelTracer.OtelTracer>
|
|
36
|
-
makeContext: (db:
|
|
42
|
+
makeContext: (db: SqliteDbWrapper, tracer: otel.Tracer, sessionId: string) => GraphQLContext
|
|
37
43
|
}
|
|
38
|
-
boot?: (
|
|
44
|
+
boot?: (
|
|
45
|
+
store: Store<GraphQLContext, LiveStoreSchema>,
|
|
46
|
+
) => Effect.Effect<void, unknown, OtelTracer.OtelTracer | LiveStoreContextRunning>
|
|
39
47
|
adapter: Adapter
|
|
40
48
|
disableDevtools?: boolean
|
|
41
49
|
onBootStatus?: (status: BootStatus) => void
|
|
@@ -52,7 +60,7 @@ export const LiveStoreContextLayer = <GraphQLContext extends BaseGraphQLContext>
|
|
|
52
60
|
|
|
53
61
|
export const LiveStoreContextDeferred = Layer.effect(
|
|
54
62
|
DeferredStoreContext,
|
|
55
|
-
Deferred.make<LiveStoreContextRunning, UnexpectedError>(),
|
|
63
|
+
Deferred.make<LiveStoreContextRunning['Type'], UnexpectedError>(),
|
|
56
64
|
)
|
|
57
65
|
|
|
58
66
|
export const makeLiveStoreContext = <GraphQLContext extends BaseGraphQLContext>({
|
|
@@ -65,7 +73,7 @@ export const makeLiveStoreContext = <GraphQLContext extends BaseGraphQLContext>(
|
|
|
65
73
|
onBootStatus,
|
|
66
74
|
batchUpdates,
|
|
67
75
|
}: LiveStoreContextProps<GraphQLContext>): Effect.Effect<
|
|
68
|
-
LiveStoreContextRunning,
|
|
76
|
+
LiveStoreContextRunning['Type'],
|
|
69
77
|
UnexpectedError | Cause.TimeoutException,
|
|
70
78
|
DeferredStoreContext | Scope.Scope | OtelTracer.OtelTracer
|
|
71
79
|
> =>
|
|
@@ -92,7 +100,7 @@ export const makeLiveStoreContext = <GraphQLContext extends BaseGraphQLContext>(
|
|
|
92
100
|
}
|
|
93
101
|
globalThis.__debugLiveStore[storeId] = store
|
|
94
102
|
|
|
95
|
-
return { stage: 'running', store } satisfies LiveStoreContextRunning
|
|
103
|
+
return { stage: 'running', store } satisfies LiveStoreContextRunning['Type']
|
|
96
104
|
}),
|
|
97
105
|
Effect.tapErrorCause((cause) => Effect.flatMap(DeferredStoreContext, (def) => Deferred.failCause(def, cause))),
|
|
98
106
|
Effect.tap((storeCtx) => Effect.flatMap(DeferredStoreContext, (def) => Deferred.succeed(def, storeCtx))),
|
package/src/index.ts
CHANGED
|
@@ -8,10 +8,15 @@ export type {
|
|
|
8
8
|
OtelOptions,
|
|
9
9
|
} from './store/store-types.js'
|
|
10
10
|
|
|
11
|
-
export
|
|
12
|
-
|
|
11
|
+
export {
|
|
12
|
+
StoreAbort,
|
|
13
|
+
StoreInterrupted,
|
|
14
|
+
type LiveStoreContext,
|
|
15
|
+
type ShutdownDeferred,
|
|
16
|
+
type LiveStoreContextRunning,
|
|
17
|
+
} from './store/store-types.js'
|
|
13
18
|
|
|
14
|
-
export {
|
|
19
|
+
export { SqliteDbWrapper, emptyDebugInfo } from './SqliteDbWrapper.js'
|
|
15
20
|
|
|
16
21
|
export type {
|
|
17
22
|
GetAtom,
|
|
@@ -26,8 +31,9 @@ export type {
|
|
|
26
31
|
Effect,
|
|
27
32
|
} from './reactive.js'
|
|
28
33
|
export { LiveStoreComputedQuery, computed } from './live-queries/computed.js'
|
|
29
|
-
export { LiveStoreDbQuery, queryDb } from './live-queries/db.js'
|
|
34
|
+
export { LiveStoreDbQuery, queryDb } from './live-queries/db-query.js'
|
|
30
35
|
export { LiveStoreGraphQLQuery, queryGraphQL } from './live-queries/graphql.js'
|
|
36
|
+
export { makeRef, type LiveQueryRef } from './live-queries/make-ref.js'
|
|
31
37
|
export {
|
|
32
38
|
type GetAtomResult,
|
|
33
39
|
type ReactivityGraph,
|
|
@@ -35,10 +41,11 @@ export {
|
|
|
35
41
|
type LiveQuery,
|
|
36
42
|
type GetResult,
|
|
37
43
|
type LiveQueryAny,
|
|
44
|
+
type LiveQueryDef,
|
|
45
|
+
type LiveQueryDefAny,
|
|
46
|
+
type RcRef,
|
|
38
47
|
} from './live-queries/base-class.js'
|
|
39
48
|
|
|
40
|
-
export { globalReactivityGraph } from './global-state.js'
|
|
41
|
-
|
|
42
49
|
export { deriveColQuery } from './row-query-utils.js'
|
|
43
50
|
|
|
44
51
|
export * from '@livestore/common/schema'
|
|
@@ -46,7 +53,7 @@ export {
|
|
|
46
53
|
sql,
|
|
47
54
|
SessionIdSymbol,
|
|
48
55
|
type BootStatus,
|
|
49
|
-
type
|
|
56
|
+
type SqliteDb,
|
|
50
57
|
type DebugInfo,
|
|
51
58
|
type MutableDebugInfo,
|
|
52
59
|
prepareBindValues,
|