@livestore/livestore 0.3.0-dev.15 → 0.3.0-dev.17

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.
Files changed (72) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/QueryCache.d.ts.map +1 -1
  3. package/dist/SqliteDbWrapper.d.ts.map +1 -1
  4. package/dist/SqliteDbWrapper.js +32 -25
  5. package/dist/SqliteDbWrapper.js.map +1 -1
  6. package/dist/effect/LiveStore.d.ts.map +1 -1
  7. package/dist/live-queries/base-class.d.ts.map +1 -1
  8. package/dist/live-queries/computed.d.ts.map +1 -1
  9. package/dist/live-queries/db-query.d.ts.map +1 -1
  10. package/dist/live-queries/db-query.test.js +12 -4
  11. package/dist/live-queries/db-query.test.js.map +1 -1
  12. package/dist/live-queries/graphql.d.ts.map +1 -1
  13. package/dist/live-queries/make-ref.d.ts.map +1 -1
  14. package/dist/reactive.d.ts.map +1 -1
  15. package/dist/row-query-utils.d.ts.map +1 -1
  16. package/dist/store/create-store.d.ts +7 -1
  17. package/dist/store/create-store.d.ts.map +1 -1
  18. package/dist/store/create-store.js +22 -3
  19. package/dist/store/create-store.js.map +1 -1
  20. package/dist/store/devtools.d.ts.map +1 -1
  21. package/dist/store/store-types.d.ts +3 -0
  22. package/dist/store/store-types.d.ts.map +1 -1
  23. package/dist/store/store.d.ts +1 -1
  24. package/dist/store/store.d.ts.map +1 -1
  25. package/dist/store/store.js +5 -6
  26. package/dist/store/store.js.map +1 -1
  27. package/dist/utils/data-structures.d.ts.map +1 -1
  28. package/dist/utils/dev.d.ts.map +1 -1
  29. package/dist/utils/dev.js +6 -1
  30. package/dist/utils/dev.js.map +1 -1
  31. package/dist/utils/function-string.d.ts.map +1 -1
  32. package/dist/utils/otel.d.ts.map +1 -1
  33. package/dist/utils/stack-info.d.ts.map +1 -1
  34. package/dist/utils/tests/fixture.d.ts +3 -3
  35. package/dist/utils/tests/fixture.d.ts.map +1 -1
  36. package/dist/utils/tests/otel.d.ts.map +1 -1
  37. package/package.json +5 -5
  38. package/src/SqliteDbWrapper.ts +33 -27
  39. package/src/live-queries/__snapshots__/db-query.test.ts.snap +24 -0
  40. package/src/live-queries/db-query.test.ts +13 -4
  41. package/src/store/create-store.ts +38 -13
  42. package/src/store/store-types.ts +3 -0
  43. package/src/store/store.ts +6 -5
  44. package/src/utils/dev.ts +6 -1
  45. package/dist/SynchronousDatabaseWrapper.d.ts +0 -50
  46. package/dist/SynchronousDatabaseWrapper.d.ts.map +0 -1
  47. package/dist/SynchronousDatabaseWrapper.js +0 -208
  48. package/dist/SynchronousDatabaseWrapper.js.map +0 -1
  49. package/dist/__tests__/fixture.d.ts +0 -252
  50. package/dist/__tests__/fixture.d.ts.map +0 -1
  51. package/dist/__tests__/fixture.js +0 -18
  52. package/dist/__tests__/fixture.js.map +0 -1
  53. package/dist/global-state.d.ts +0 -14
  54. package/dist/global-state.d.ts.map +0 -1
  55. package/dist/global-state.js +0 -16
  56. package/dist/global-state.js.map +0 -1
  57. package/dist/live-queries/db.d.ts +0 -63
  58. package/dist/live-queries/db.d.ts.map +0 -1
  59. package/dist/live-queries/db.js +0 -223
  60. package/dist/live-queries/db.js.map +0 -1
  61. package/dist/live-queries/db.test.d.ts +0 -2
  62. package/dist/live-queries/db.test.d.ts.map +0 -1
  63. package/dist/live-queries/db.test.js +0 -120
  64. package/dist/live-queries/db.test.js.map +0 -1
  65. package/dist/store/store.test.d.ts +0 -2
  66. package/dist/store/store.test.d.ts.map +0 -1
  67. package/dist/store/store.test.js +0 -27
  68. package/dist/store/store.test.js.map +0 -1
  69. package/dist/utils/expo.d.ts +0 -2
  70. package/dist/utils/expo.d.ts.map +0 -1
  71. package/dist/utils/expo.js +0 -8
  72. package/dist/utils/expo.js.map +0 -1
@@ -1,208 +0,0 @@
1
- /* eslint-disable prefer-arrow/prefer-arrow-functions */
2
- import { BoundArray, BoundMap, sql } from '@livestore/common';
3
- import { isDevEnv } from '@livestore/utils';
4
- import QueryCache from './QueryCache.js';
5
- import { getDurationMsFromSpan, getStartTimeHighResFromSpan } from './utils/otel.js';
6
- export const emptyDebugInfo = () => ({
7
- slowQueries: new BoundArray(200),
8
- queryFrameDuration: 0,
9
- queryFrameCount: 0,
10
- events: new BoundArray(1000),
11
- });
12
- export class SynchronousDatabaseWrapper {
13
- _tag = 'SynchronousDatabase';
14
- // TODO: how many unique active statements are expected?
15
- cachedStmts = new BoundMap(200);
16
- tablesUsedCache = new BoundMap(200);
17
- resultCache = new QueryCache();
18
- db;
19
- otelTracer;
20
- otelRootSpanContext;
21
- tablesUsedStmt;
22
- debugInfo = emptyDebugInfo();
23
- constructor({ db, otel, }) {
24
- this.db = db;
25
- this.otelTracer = otel.tracer;
26
- this.otelRootSpanContext = otel.rootSpanContext;
27
- this.tablesUsedStmt = db.prepare(`SELECT tbl_name FROM tables_used(?) AS u JOIN sqlite_master ON sqlite_master.name = u.name WHERE u.schema = 'main';`);
28
- this.cachedStmts.onEvict = (_queryStr, stmt) => stmt.finalize();
29
- configureSQLite(this);
30
- }
31
- metadata;
32
- prepare(queryStr) {
33
- return this.db.prepare(queryStr);
34
- }
35
- import(data) {
36
- return this.db.import(data);
37
- }
38
- close() {
39
- return this.db.close();
40
- }
41
- destroy() {
42
- return this.db.destroy();
43
- }
44
- session() {
45
- return this.db.session();
46
- }
47
- makeChangeset(data) {
48
- return this.db.makeChangeset(data);
49
- }
50
- txn(callback) {
51
- this.execute(sql `begin transaction;`);
52
- let errored = false;
53
- let result;
54
- try {
55
- result = callback();
56
- }
57
- catch (e) {
58
- errored = true;
59
- this.execute(sql `rollback;`);
60
- throw e;
61
- }
62
- if (!errored) {
63
- this.execute(sql `commit;`);
64
- }
65
- return result;
66
- }
67
- withChangeset(callback) {
68
- const session = this.db.session();
69
- const result = callback();
70
- const changeset = session.changeset();
71
- session.finish();
72
- return { result, changeset };
73
- }
74
- rollback(changeset) {
75
- const invertedChangeset = this.db.makeChangeset(changeset).invert();
76
- invertedChangeset.apply();
77
- }
78
- getTablesUsed(query) {
79
- // It seems that SQLite doesn't properly handle `DELETE FROM SOME_TABLE` queries without a WHERE clause
80
- // So we need to handle these queries separately
81
- const tableNameFromPlainDeleteQuery = tryGetTableNameFromPlainDeleteQuery(query);
82
- if (tableNameFromPlainDeleteQuery !== undefined) {
83
- return new Set([tableNameFromPlainDeleteQuery]);
84
- }
85
- const cached = this.tablesUsedCache.get(query);
86
- if (cached) {
87
- return cached;
88
- }
89
- const stmt = this.tablesUsedStmt;
90
- const tablesUsed = new Set();
91
- try {
92
- const results = stmt.select([query]);
93
- for (const row of results) {
94
- tablesUsed.add(row.tbl_name);
95
- }
96
- }
97
- catch (e) {
98
- console.error('Error getting tables used', e, 'for query', query);
99
- return new Set();
100
- }
101
- this.tablesUsedCache.set(query, tablesUsed);
102
- return tablesUsed;
103
- }
104
- execute(queryStr, bindValues, options) {
105
- // console.debug('in-memory-db:execute', query, bindValues)
106
- return this.otelTracer.startActiveSpan('livestore.in-memory-db:execute',
107
- // TODO truncate query string
108
- { attributes: { 'sql.query': queryStr } }, options?.otelContext ?? this.otelRootSpanContext, (span) => {
109
- let stmt = this.cachedStmts.get(queryStr);
110
- if (stmt === undefined) {
111
- stmt = this.db.prepare(queryStr);
112
- this.cachedStmts.set(queryStr, stmt);
113
- }
114
- stmt.execute(bindValues);
115
- if (options?.hasNoEffects !== true && !this.resultCache.ignoreQuery(queryStr)) {
116
- // TODO use write tables instead
117
- // check what queries actually end up here.
118
- this.resultCache.invalidate(options?.writeTables ?? this.getTablesUsed(queryStr));
119
- }
120
- span.end();
121
- const durationMs = getDurationMsFromSpan(span);
122
- this.debugInfo.queryFrameDuration += durationMs;
123
- this.debugInfo.queryFrameCount++;
124
- if (durationMs > 5 && isDevEnv()) {
125
- this.debugInfo.slowQueries.push({
126
- queryStr,
127
- bindValues,
128
- durationMs,
129
- rowsCount: undefined,
130
- queriedTables: new Set(),
131
- startTimePerfNow: getStartTimeHighResFromSpan(span),
132
- });
133
- }
134
- return { durationMs };
135
- });
136
- }
137
- select(queryStr, bindValues, options) {
138
- const { queriedTables, skipCache = false, otelContext } = options ?? {};
139
- // console.debug('in-memory-db:select', query, bindValues)
140
- return this.otelTracer.startActiveSpan('sql-in-memory-select', {}, otelContext ?? this.otelRootSpanContext, (span) => {
141
- try {
142
- span.setAttribute('sql.query', queryStr);
143
- const key = this.resultCache.getKey(queryStr, bindValues);
144
- const cachedResult = this.resultCache.get(key);
145
- if (skipCache === false && cachedResult !== undefined) {
146
- span.setAttribute('sql.rowsCount', cachedResult.length);
147
- span.setAttribute('sql.cached', true);
148
- span.end();
149
- return cachedResult;
150
- }
151
- let stmt = this.cachedStmts.get(queryStr);
152
- if (stmt === undefined) {
153
- stmt = this.db.prepare(queryStr);
154
- this.cachedStmts.set(queryStr, stmt);
155
- }
156
- const result = stmt.select(bindValues);
157
- span.setAttribute('sql.rowsCount', result.length);
158
- span.setAttribute('sql.cached', false);
159
- const queriedTables_ = queriedTables ?? this.getTablesUsed(queryStr);
160
- this.resultCache.set(queriedTables_, key, result);
161
- span.end();
162
- const durationMs = getDurationMsFromSpan(span);
163
- this.debugInfo.queryFrameDuration += durationMs;
164
- this.debugInfo.queryFrameCount++;
165
- // TODO also enable in non-dev mode
166
- if (durationMs > 5 && isDevEnv()) {
167
- this.debugInfo.slowQueries.push({
168
- queryStr,
169
- bindValues,
170
- durationMs,
171
- rowsCount: result.length,
172
- queriedTables: queriedTables_,
173
- startTimePerfNow: getStartTimeHighResFromSpan(span),
174
- });
175
- }
176
- return result;
177
- }
178
- finally {
179
- span.end();
180
- }
181
- });
182
- }
183
- export() {
184
- // Clear statement cache because exporting frees statements
185
- for (const key of this.cachedStmts.keys()) {
186
- this.cachedStmts.delete(key);
187
- }
188
- return this.db.export();
189
- }
190
- }
191
- /** Set up SQLite performance; hasn't been super carefully optimized yet. */
192
- const configureSQLite = (db) => {
193
- db.execute(
194
- // TODO: revisit these tuning parameters for max performance
195
- sql `
196
- PRAGMA page_size=32768;
197
- PRAGMA cache_size=10000;
198
- PRAGMA journal_mode='MEMORY'; -- we don't flush to disk before committing a write
199
- PRAGMA synchronous='OFF';
200
- PRAGMA temp_store='MEMORY';
201
- PRAGMA foreign_keys='ON'; -- we want foreign key constraints to be enforced
202
- `);
203
- };
204
- const tryGetTableNameFromPlainDeleteQuery = (query) => {
205
- const [_, tableName] = query.trim().match(/^delete\s+from\s+(\w+)$/i) ?? [];
206
- return tableName;
207
- };
208
- //# sourceMappingURL=SynchronousDatabaseWrapper.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"SynchronousDatabaseWrapper.js","sourceRoot":"","sources":["../src/SynchronousDatabaseWrapper.ts"],"names":[],"mappings":"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"}
@@ -1,252 +0,0 @@
1
- import { DbSchema } from '@livestore/common/schema';
2
- import { Schema } from '@livestore/utils/effect';
3
- export declare const todos: DbSchema.TableDef<{
4
- name: "todos";
5
- columns: {
6
- id: {
7
- columnType: "text";
8
- schema: Schema.Schema<string, string, never>;
9
- default: import("effect/Option").None<never>;
10
- nullable: false;
11
- primaryKey: true;
12
- };
13
- text: {
14
- columnType: "text";
15
- schema: Schema.Schema<string, string, never>;
16
- default: import("effect/Option").Some<"">;
17
- nullable: false;
18
- primaryKey: false;
19
- };
20
- completed: {
21
- columnType: "integer";
22
- schema: Schema.Schema<boolean, number, never>;
23
- default: import("effect/Option").Some<false>;
24
- nullable: false;
25
- primaryKey: false;
26
- };
27
- };
28
- indexes?: ReadonlyArray<DbSchema.SqliteDsl.Index>;
29
- ast: import("@livestore/db-schema/dist/ast/sqlite.js").Table;
30
- }, {
31
- isSingleton: false;
32
- disableAutomaticIdColumn: false;
33
- deriveMutations: {
34
- enabled: true;
35
- localOnly: boolean;
36
- };
37
- isSingleColumn: false;
38
- requiredInsertColumnNames: "id";
39
- }, Schema.Schema<{
40
- readonly id: string;
41
- readonly text: string;
42
- readonly completed: boolean;
43
- }, {
44
- readonly id: string;
45
- readonly text: string;
46
- readonly completed: number;
47
- }, never>>;
48
- export declare const appConfig: DbSchema.TableDef<{
49
- name: "app_config";
50
- columns: {
51
- value: {
52
- columnType: "text";
53
- schema: Schema.Schema<{
54
- readonly fontSize: number;
55
- readonly theme: "light" | "dark";
56
- } | null, string | null, never>;
57
- default: import("effect/Option").None<never>;
58
- nullable: true;
59
- primaryKey: false;
60
- };
61
- id: DbSchema.SqliteDsl.ColumnDefinition<"singleton", "singleton">;
62
- };
63
- indexes?: ReadonlyArray<DbSchema.SqliteDsl.Index>;
64
- ast: import("@livestore/db-schema/dist/ast/sqlite.js").Table;
65
- }, {
66
- isSingleton: true;
67
- disableAutomaticIdColumn: false;
68
- deriveMutations: {
69
- enabled: true;
70
- localOnly: boolean;
71
- };
72
- isSingleColumn: true;
73
- requiredInsertColumnNames: never;
74
- }, Schema.Schema<{
75
- readonly value: {
76
- readonly fontSize: number;
77
- readonly theme: "light" | "dark";
78
- } | null;
79
- readonly id: "singleton";
80
- }, {
81
- readonly value: string | null;
82
- readonly id: "singleton";
83
- }, never>>;
84
- export declare const tables: {
85
- todos: DbSchema.TableDef<{
86
- name: "todos";
87
- columns: {
88
- id: {
89
- columnType: "text";
90
- schema: Schema.Schema<string, string, never>;
91
- default: import("effect/Option").None<never>;
92
- nullable: false;
93
- primaryKey: true;
94
- };
95
- text: {
96
- columnType: "text";
97
- schema: Schema.Schema<string, string, never>;
98
- default: import("effect/Option").Some<"">;
99
- nullable: false;
100
- primaryKey: false;
101
- };
102
- completed: {
103
- columnType: "integer";
104
- schema: Schema.Schema<boolean, number, never>;
105
- default: import("effect/Option").Some<false>;
106
- nullable: false;
107
- primaryKey: false;
108
- };
109
- };
110
- indexes?: ReadonlyArray<DbSchema.SqliteDsl.Index>;
111
- ast: import("@livestore/db-schema/dist/ast/sqlite.js").Table;
112
- }, {
113
- isSingleton: false;
114
- disableAutomaticIdColumn: false;
115
- deriveMutations: {
116
- enabled: true;
117
- localOnly: boolean;
118
- };
119
- isSingleColumn: false;
120
- requiredInsertColumnNames: "id";
121
- }, Schema.Schema<{
122
- readonly id: string;
123
- readonly text: string;
124
- readonly completed: boolean;
125
- }, {
126
- readonly id: string;
127
- readonly text: string;
128
- readonly completed: number;
129
- }, never>>;
130
- appConfig: DbSchema.TableDef<{
131
- name: "app_config";
132
- columns: {
133
- value: {
134
- columnType: "text";
135
- schema: Schema.Schema<{
136
- readonly fontSize: number;
137
- readonly theme: "light" | "dark";
138
- } | null, string | null, never>;
139
- default: import("effect/Option").None<never>;
140
- nullable: true;
141
- primaryKey: false;
142
- };
143
- id: DbSchema.SqliteDsl.ColumnDefinition<"singleton", "singleton">;
144
- };
145
- indexes?: ReadonlyArray<DbSchema.SqliteDsl.Index>;
146
- ast: import("@livestore/db-schema/dist/ast/sqlite.js").Table;
147
- }, {
148
- isSingleton: true;
149
- disableAutomaticIdColumn: false;
150
- deriveMutations: {
151
- enabled: true;
152
- localOnly: boolean;
153
- };
154
- isSingleColumn: true;
155
- requiredInsertColumnNames: never;
156
- }, Schema.Schema<{
157
- readonly value: {
158
- readonly fontSize: number;
159
- readonly theme: "light" | "dark";
160
- } | null;
161
- readonly id: "singleton";
162
- }, {
163
- readonly value: string | null;
164
- readonly id: "singleton";
165
- }, never>>;
166
- };
167
- export declare const schema: import("@livestore/common/schema").FromInputSchema.DeriveSchema<{
168
- tables: {
169
- todos: DbSchema.TableDef<{
170
- name: "todos";
171
- columns: {
172
- id: {
173
- columnType: "text";
174
- schema: Schema.Schema<string, string, never>;
175
- default: import("effect/Option").None<never>;
176
- nullable: false;
177
- primaryKey: true;
178
- };
179
- text: {
180
- columnType: "text";
181
- schema: Schema.Schema<string, string, never>;
182
- default: import("effect/Option").Some<"">;
183
- nullable: false;
184
- primaryKey: false;
185
- };
186
- completed: {
187
- columnType: "integer";
188
- schema: Schema.Schema<boolean, number, never>;
189
- default: import("effect/Option").Some<false>;
190
- nullable: false;
191
- primaryKey: false;
192
- };
193
- };
194
- indexes?: ReadonlyArray<DbSchema.SqliteDsl.Index>;
195
- ast: import("@livestore/db-schema/dist/ast/sqlite.js").Table;
196
- }, {
197
- isSingleton: false;
198
- disableAutomaticIdColumn: false;
199
- deriveMutations: {
200
- enabled: true;
201
- localOnly: boolean;
202
- };
203
- isSingleColumn: false;
204
- requiredInsertColumnNames: "id";
205
- }, Schema.Schema<{
206
- readonly id: string;
207
- readonly text: string;
208
- readonly completed: boolean;
209
- }, {
210
- readonly id: string;
211
- readonly text: string;
212
- readonly completed: number;
213
- }, never>>;
214
- appConfig: DbSchema.TableDef<{
215
- name: "app_config";
216
- columns: {
217
- value: {
218
- columnType: "text";
219
- schema: Schema.Schema<{
220
- readonly fontSize: number;
221
- readonly theme: "light" | "dark";
222
- } | null, string | null, never>;
223
- default: import("effect/Option").None<never>;
224
- nullable: true;
225
- primaryKey: false;
226
- };
227
- id: DbSchema.SqliteDsl.ColumnDefinition<"singleton", "singleton">;
228
- };
229
- indexes?: ReadonlyArray<DbSchema.SqliteDsl.Index>;
230
- ast: import("@livestore/db-schema/dist/ast/sqlite.js").Table;
231
- }, {
232
- isSingleton: true;
233
- disableAutomaticIdColumn: false;
234
- deriveMutations: {
235
- enabled: true;
236
- localOnly: boolean;
237
- };
238
- isSingleColumn: true;
239
- requiredInsertColumnNames: never;
240
- }, Schema.Schema<{
241
- readonly value: {
242
- readonly fontSize: number;
243
- readonly theme: "light" | "dark";
244
- } | null;
245
- readonly id: "singleton";
246
- }, {
247
- readonly value: string | null;
248
- readonly id: "singleton";
249
- }, never>>;
250
- };
251
- }>;
252
- //# sourceMappingURL=fixture.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"fixture.d.ts","sourceRoot":"","sources":["../../src/__tests__/fixture.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAc,MAAM,0BAA0B,CAAA;AAC/D,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAEhD,eAAO,MAAM,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;UAQjB,CAAA;AAOD,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;UAGpB,CAAA;AAEF,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAAuB,CAAA;AAE1C,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAAyB,CAAA"}
@@ -1,18 +0,0 @@
1
- import { DbSchema, makeSchema } from '@livestore/common/schema';
2
- import { Schema } from '@livestore/utils/effect';
3
- export const todos = DbSchema.table('todos', {
4
- id: DbSchema.text({ primaryKey: true }),
5
- text: DbSchema.text({ default: '', nullable: false }),
6
- completed: DbSchema.boolean({ default: false, nullable: false }),
7
- }, { deriveMutations: true });
8
- const Config = Schema.Struct({
9
- fontSize: Schema.Number,
10
- theme: Schema.Literal('light', 'dark'),
11
- });
12
- export const appConfig = DbSchema.table('app_config', DbSchema.json({ schema: Config, nullable: true }), {
13
- isSingleton: true,
14
- deriveMutations: true,
15
- });
16
- export const tables = { todos, appConfig };
17
- export const schema = makeSchema({ tables });
18
- //# sourceMappingURL=fixture.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"fixture.js","sourceRoot":"","sources":["../../src/__tests__/fixture.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAA;AAC/D,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAEhD,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,CAC1B,CAAA;AAED,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;IAC3B,QAAQ,EAAE,MAAM,CAAC,MAAM;IACvB,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC;CACvC,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,SAAS,GAAG,QAAQ,CAAC,KAAK,CAAC,YAAY,EAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,EAAE;IACvG,WAAW,EAAE,IAAI;IACjB,eAAe,EAAE,IAAI;CACtB,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,MAAM,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,CAAA;AAE1C,MAAM,CAAC,MAAM,MAAM,GAAG,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC,CAAA"}
@@ -1,14 +0,0 @@
1
- /**
2
- *
3
- * LiveStore currently relies on some global state in order to simplify the end-user API.
4
- * This however also has the downside that LiveStore can't be used in multiple instances in the same app.
5
- * It could possibly also lead to some other problems.
6
- *
7
- * We should find some better way to do this and ideally remove this global state.
8
- *
9
- * Another approach could be to use the global state by default but provide an additional way to let the user
10
- * explicitly pass instances of state below into the LiveStore constructors.
11
- *
12
- */
13
- export declare const globalReactivityGraph: import("./live-queries/base-class.js").ReactivityGraph;
14
- //# sourceMappingURL=global-state.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"global-state.d.ts","sourceRoot":"","sources":["../src/global-state.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAMH,eAAO,MAAM,qBAAqB,wDAEjC,CAAA"}
@@ -1,16 +0,0 @@
1
- /**
2
- *
3
- * LiveStore currently relies on some global state in order to simplify the end-user API.
4
- * This however also has the downside that LiveStore can't be used in multiple instances in the same app.
5
- * It could possibly also lead to some other problems.
6
- *
7
- * We should find some better way to do this and ideally remove this global state.
8
- *
9
- * Another approach could be to use the global state by default but provide an additional way to let the user
10
- * explicitly pass instances of state below into the LiveStore constructors.
11
- *
12
- */
13
- import { GlobalValue } from '@livestore/utils/effect';
14
- import { makeReactivityGraph } from './live-queries/base-class.js';
15
- export const globalReactivityGraph = GlobalValue.globalValue('livestore-global-reactivityGraph', () => makeReactivityGraph());
16
- //# sourceMappingURL=global-state.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"global-state.js","sourceRoot":"","sources":["../src/global-state.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA;AAErD,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAA;AAElE,MAAM,CAAC,MAAM,qBAAqB,GAAG,WAAW,CAAC,WAAW,CAAC,kCAAkC,EAAE,GAAG,EAAE,CACpG,mBAAmB,EAAE,CACtB,CAAA"}
@@ -1,63 +0,0 @@
1
- import type { Bindable, QueryBuilder, QueryInfo } from '@livestore/common';
2
- import { Schema } from '@livestore/utils/effect';
3
- import * as otel from '@opentelemetry/api';
4
- import type { Thunk } from '../reactive.js';
5
- import type { RefreshReason } from '../store/store-types.js';
6
- import type { GetAtomResult, LiveQuery, QueryContext, ReactivityGraph } from './base-class.js';
7
- import { LiveStoreQueryBase } from './base-class.js';
8
- export type QueryInputRaw<TDecoded, TEncoded, TQueryInfo extends QueryInfo> = {
9
- query: string;
10
- schema: Schema.Schema<TDecoded, TEncoded>;
11
- bindValues?: Bindable;
12
- /**
13
- * Can be provided explicitly to slightly speed up initial query performance
14
- *
15
- * NOTE In the future we want to do this automatically at build time
16
- */
17
- queriedTables?: Set<string>;
18
- queryInfo?: TQueryInfo;
19
- execBeforeFirstRun?: (ctx: QueryContext) => void;
20
- };
21
- export type QueryInput<TDecoded, TEncoded, TQueryInfo extends QueryInfo> = QueryInputRaw<TDecoded, TEncoded, TQueryInfo> | QueryBuilder<TDecoded, any, any, TQueryInfo>;
22
- /**
23
- * NOTE `query` is only supposed to read data. Don't use it to insert/update/delete data but use mutations instead.
24
- */
25
- export declare const queryDb: {
26
- <TResultSchema, TResult = TResultSchema, TQueryInfo extends QueryInfo = QueryInfo.None>(queryInput: QueryInputRaw<TResultSchema, ReadonlyArray<any>, TQueryInfo> | QueryBuilder<TResultSchema, any, any, TQueryInfo>, options?: {
27
- map?: (rows: TResultSchema) => TResult;
28
- /**
29
- * Used for debugging / devtools
30
- */
31
- label?: string;
32
- }): LiveQuery<TResult, TQueryInfo>;
33
- <TResultSchema, TResult = TResultSchema, TQueryInfo extends QueryInfo = QueryInfo.None>(queryInput: ((get: GetAtomResult) => QueryInputRaw<TResultSchema, ReadonlyArray<any>, TQueryInfo>) | ((get: GetAtomResult) => QueryBuilder<TResultSchema, any, any, TQueryInfo>), options?: {
34
- map?: (rows: TResultSchema) => TResult;
35
- /**
36
- * Used for debugging / devtools
37
- */
38
- label?: string;
39
- queryInfo?: TQueryInfo;
40
- }): LiveQuery<TResult, TQueryInfo>;
41
- };
42
- export declare class LiveStoreDbQuery<TResultSchema, TResult = TResultSchema, TQueryInfo extends QueryInfo = QueryInfo.None> extends LiveStoreQueryBase<TResult, TQueryInfo> {
43
- readonly _tag: 'db';
44
- private thunkMap;
45
- label: string;
46
- queryInfo: TQueryInfo;
47
- private readonly inputLabel;
48
- private readonly inputQueryInfo;
49
- private readonly mapResult;
50
- private readonly queryInput;
51
- constructor({ queryInput, label: inputLabel, map, queryInfo: inputQueryInfo, }: {
52
- label?: string;
53
- queryInput: QueryInput<TResultSchema, ReadonlyArray<any>, TQueryInfo> | ((get: GetAtomResult, ctx: QueryContext) => QueryInput<TResultSchema, ReadonlyArray<any>, TQueryInfo>);
54
- map?: (rows: TResultSchema) => TResult;
55
- queryInfo?: TQueryInfo;
56
- });
57
- getResults$: ({ reactivityGraph, otelContext, }: {
58
- reactivityGraph: ReactivityGraph;
59
- otelContext?: otel.Context;
60
- }) => Thunk<TResult, QueryContext, RefreshReason>;
61
- destroy: (reactivityGraph: ReactivityGraph) => void;
62
- }
63
- //# sourceMappingURL=db.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"db.d.ts","sourceRoot":"","sources":["../../src/live-queries/db.ts"],"names":[],"mappings":"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"}