@livestore/livestore 0.3.0-dev.11 → 0.3.0-dev.5

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 (122) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/SynchronousDatabaseWrapper.d.ts +5 -14
  3. package/dist/SynchronousDatabaseWrapper.d.ts.map +1 -1
  4. package/dist/SynchronousDatabaseWrapper.js +4 -24
  5. package/dist/SynchronousDatabaseWrapper.js.map +1 -1
  6. package/dist/effect/LiveStore.d.ts +8 -12
  7. package/dist/effect/LiveStore.d.ts.map +1 -1
  8. package/dist/effect/LiveStore.js +3 -13
  9. package/dist/effect/LiveStore.js.map +1 -1
  10. package/dist/index.d.ts +7 -6
  11. package/dist/index.d.ts.map +1 -1
  12. package/dist/index.js +4 -4
  13. package/dist/index.js.map +1 -1
  14. package/dist/live-queries/base-class.d.ts +21 -64
  15. package/dist/live-queries/base-class.d.ts.map +1 -1
  16. package/dist/live-queries/base-class.js +13 -56
  17. package/dist/live-queries/base-class.js.map +1 -1
  18. package/dist/live-queries/computed.d.ts +7 -7
  19. package/dist/live-queries/computed.d.ts.map +1 -1
  20. package/dist/live-queries/computed.js +11 -35
  21. package/dist/live-queries/computed.js.map +1 -1
  22. package/dist/live-queries/db.d.ts +15 -12
  23. package/dist/live-queries/db.d.ts.map +1 -1
  24. package/dist/live-queries/db.js +25 -44
  25. package/dist/live-queries/db.js.map +1 -1
  26. package/dist/live-queries/db.test.js +14 -16
  27. package/dist/live-queries/db.test.js.map +1 -1
  28. package/dist/live-queries/graphql.d.ts +8 -8
  29. package/dist/live-queries/graphql.d.ts.map +1 -1
  30. package/dist/live-queries/graphql.js +9 -35
  31. package/dist/live-queries/graphql.js.map +1 -1
  32. package/dist/reactive.d.ts +13 -15
  33. package/dist/reactive.d.ts.map +1 -1
  34. package/dist/reactive.js +9 -15
  35. package/dist/reactive.js.map +1 -1
  36. package/dist/row-query-utils.d.ts +4 -4
  37. package/dist/row-query-utils.d.ts.map +1 -1
  38. package/dist/row-query-utils.js +10 -14
  39. package/dist/row-query-utils.js.map +1 -1
  40. package/dist/store/create-store.d.ts +4 -3
  41. package/dist/store/create-store.d.ts.map +1 -1
  42. package/dist/store/create-store.js +7 -7
  43. package/dist/store/create-store.js.map +1 -1
  44. package/dist/store/devtools.d.ts +2 -2
  45. package/dist/store/devtools.d.ts.map +1 -1
  46. package/dist/store/devtools.js +15 -15
  47. package/dist/store/devtools.js.map +1 -1
  48. package/dist/store/store-types.d.ts +5 -10
  49. package/dist/store/store-types.d.ts.map +1 -1
  50. package/dist/store/store-types.js.map +1 -1
  51. package/dist/store/store.d.ts +16 -34
  52. package/dist/store/store.d.ts.map +1 -1
  53. package/dist/store/store.js +77 -129
  54. package/dist/store/store.js.map +1 -1
  55. package/dist/utils/stack-info.d.ts.map +1 -1
  56. package/dist/utils/stack-info.js +1 -6
  57. package/dist/utils/stack-info.js.map +1 -1
  58. package/dist/utils/stack-info.test.js +1 -54
  59. package/dist/utils/stack-info.test.js.map +1 -1
  60. package/dist/utils/tests/fixture.d.ts +6 -2
  61. package/dist/utils/tests/fixture.d.ts.map +1 -1
  62. package/dist/utils/tests/fixture.js +5 -3
  63. package/dist/utils/tests/fixture.js.map +1 -1
  64. package/dist/utils/tests/mod.d.ts +0 -1
  65. package/dist/utils/tests/mod.d.ts.map +1 -1
  66. package/dist/utils/tests/mod.js +0 -1
  67. package/dist/utils/tests/mod.js.map +1 -1
  68. package/package.json +12 -12
  69. package/src/{SqliteDbWrapper.ts → SynchronousDatabaseWrapper.ts} +11 -41
  70. package/src/effect/LiveStore.ts +15 -26
  71. package/src/global-state.ts +20 -0
  72. package/src/index.ts +7 -14
  73. package/src/live-queries/__snapshots__/{db-query.test.ts.snap → db.test.ts.snap} +42 -196
  74. package/src/live-queries/base-class.ts +40 -160
  75. package/src/live-queries/computed.ts +19 -45
  76. package/src/live-queries/{db-query.test.ts → db.test.ts} +11 -21
  77. package/src/live-queries/{db-query.ts → db.ts} +39 -97
  78. package/src/live-queries/graphql.ts +21 -47
  79. package/src/reactive.ts +27 -52
  80. package/src/row-query-utils.ts +18 -29
  81. package/src/store/create-store.ts +23 -20
  82. package/src/store/devtools.ts +17 -17
  83. package/src/store/store-types.ts +5 -7
  84. package/src/store/store.ts +122 -231
  85. package/src/utils/stack-info.test.ts +1 -58
  86. package/src/utils/stack-info.ts +1 -6
  87. package/src/utils/tests/fixture.ts +7 -2
  88. package/src/utils/tests/mod.ts +0 -1
  89. package/dist/SqliteDbWrapper.d.ts +0 -54
  90. package/dist/SqliteDbWrapper.d.ts.map +0 -1
  91. package/dist/SqliteDbWrapper.js +0 -212
  92. package/dist/SqliteDbWrapper.js.map +0 -1
  93. package/dist/__tests__/fixture.d.ts +0 -252
  94. package/dist/__tests__/fixture.d.ts.map +0 -1
  95. package/dist/__tests__/fixture.js +0 -18
  96. package/dist/__tests__/fixture.js.map +0 -1
  97. package/dist/live-queries/db-query.d.ts +0 -67
  98. package/dist/live-queries/db-query.d.ts.map +0 -1
  99. package/dist/live-queries/db-query.js +0 -244
  100. package/dist/live-queries/db-query.js.map +0 -1
  101. package/dist/live-queries/db-query.test.d.ts +0 -2
  102. package/dist/live-queries/db-query.test.d.ts.map +0 -1
  103. package/dist/live-queries/db-query.test.js +0 -123
  104. package/dist/live-queries/db-query.test.js.map +0 -1
  105. package/dist/live-queries/make-ref.d.ts +0 -20
  106. package/dist/live-queries/make-ref.d.ts.map +0 -1
  107. package/dist/live-queries/make-ref.js +0 -33
  108. package/dist/live-queries/make-ref.js.map +0 -1
  109. package/dist/store/store.test.d.ts +0 -2
  110. package/dist/store/store.test.d.ts.map +0 -1
  111. package/dist/store/store.test.js +0 -27
  112. package/dist/store/store.test.js.map +0 -1
  113. package/dist/utils/expo.d.ts +0 -2
  114. package/dist/utils/expo.d.ts.map +0 -1
  115. package/dist/utils/expo.js +0 -8
  116. package/dist/utils/expo.js.map +0 -1
  117. package/dist/utils/function-string.d.ts +0 -7
  118. package/dist/utils/function-string.d.ts.map +0 -1
  119. package/dist/utils/function-string.js +0 -9
  120. package/dist/utils/function-string.js.map +0 -1
  121. package/src/live-queries/make-ref.ts +0 -47
  122. package/src/utils/function-string.ts +0 -12
@@ -1 +0,0 @@
1
- {"version":3,"file":"db-query.d.ts","sourceRoot":"","sources":["../../src/live-queries/db-query.ts"],"names":[],"mappings":"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"}
@@ -1,244 +0,0 @@
1
- import { getResultSchema, isQueryBuilder, prepareBindValues, QueryBuilderAstSymbol, replaceSessionIdSymbol, UnexpectedError, } from '@livestore/common';
2
- import { deepEqual, shouldNeverHappen } from '@livestore/utils';
3
- import { Predicate, Schema, TreeFormatter } from '@livestore/utils/effect';
4
- import * as otel from '@opentelemetry/api';
5
- import { isThunk, NOT_REFRESHED_YET } from '../reactive.js';
6
- import { makeExecBeforeFirstRun, rowQueryLabel } from '../row-query-utils.js';
7
- import { isValidFunctionString } from '../utils/function-string.js';
8
- import { getDurationMsFromSpan } from '../utils/otel.js';
9
- import { defCounterRef, depsToString, LiveStoreQueryBase, makeGetAtomResult, withRCMap } from './base-class.js';
10
- export const isQueryInputRaw = (value) => Predicate.hasProperty(value, 'query') && Predicate.hasProperty(value, 'schema');
11
- /**
12
- * NOTE `query` is only supposed to read data. Don't use it to insert/update/delete data but use mutations instead.
13
- */
14
- export const queryDb = (queryInput, options) => {
15
- const queryString = isQueryBuilder(queryInput)
16
- ? queryInput.toString()
17
- : isQueryInputRaw(queryInput)
18
- ? queryInput.query
19
- : typeof queryInput === 'function'
20
- ? queryInput.toString()
21
- : shouldNeverHappen(`Invalid query input: ${queryInput}`);
22
- const hash = options?.deps ? queryString + '-' + depsToString(options.deps) : queryString;
23
- if (isValidFunctionString(hash)._tag === 'invalid') {
24
- throw new Error(`On Expo/React Native, db queries must provide a \`deps\` option`);
25
- }
26
- const label = options?.label ?? queryString;
27
- return {
28
- _tag: 'def',
29
- id: ++defCounterRef.current,
30
- make: withRCMap(hash, (ctx, otelContext) => {
31
- // TODO onDestroy
32
- return new LiveStoreDbQuery({
33
- reactivityGraph: ctx.reactivityGraph.deref(),
34
- queryInput,
35
- label,
36
- map: options?.map,
37
- // We're not falling back to `None` here as the queryInfo will be set dynamically
38
- queryInfo: options?.queryInfo,
39
- otelContext,
40
- });
41
- }),
42
- label,
43
- hash,
44
- queryInfo: options?.queryInfo ?? (isQueryBuilder(queryInput) ? queryInfoFromQueryBuilder(queryInput) : { _tag: 'None' }),
45
- };
46
- };
47
- /* An object encapsulating a reactive SQL query */
48
- export class LiveStoreDbQuery extends LiveStoreQueryBase {
49
- _tag = 'db';
50
- /** A reactive thunk representing the query text */
51
- queryInput$;
52
- /** A reactive thunk representing the query results */
53
- results$;
54
- label;
55
- queryInfo;
56
- reactivityGraph;
57
- mapResult;
58
- constructor({ queryInput, label: inputLabel, reactivityGraph, map, queryInfo: inputQueryInfo, otelContext, }) {
59
- super();
60
- let label = inputLabel ?? 'db(unknown)';
61
- let queryInfo = inputQueryInfo ?? { _tag: 'None' };
62
- this.reactivityGraph = reactivityGraph;
63
- this.mapResult = map === undefined ? (rows) => rows : map;
64
- const schemaRef = {
65
- current: typeof queryInput === 'function' ? undefined : isQueryBuilder(queryInput) ? undefined : queryInput.schema,
66
- };
67
- const execBeforeFirstRunRef = {
68
- current: undefined,
69
- };
70
- let queryInputRaw$OrQueryInputRaw;
71
- const fromQueryBuilder = (qb, otelContext) => {
72
- try {
73
- const qbRes = qb.asSql();
74
- const schema = getResultSchema(qb);
75
- const ast = qb[QueryBuilderAstSymbol];
76
- return {
77
- queryInputRaw: {
78
- query: qbRes.query,
79
- schema,
80
- bindValues: qbRes.bindValues,
81
- queriedTables: new Set([ast.tableDef.sqliteDef.name]),
82
- queryInfo: queryInfoFromQueryBuilder(qb),
83
- },
84
- label: ast._tag === 'RowQuery' ? rowQueryLabel(ast.tableDef, ast.id) : qb.toString(),
85
- execBeforeFirstRun: ast._tag === 'RowQuery'
86
- ? makeExecBeforeFirstRun({
87
- table: ast.tableDef,
88
- insertValues: ast.insertValues,
89
- id: ast.id,
90
- otelContext,
91
- })
92
- : undefined,
93
- };
94
- }
95
- catch (cause) {
96
- throw new UnexpectedError({ cause, note: `Error building query for ${qb.toString()}`, payload: { qb } });
97
- }
98
- };
99
- if (typeof queryInput === 'function') {
100
- queryInputRaw$OrQueryInputRaw = this.reactivityGraph.makeThunk((get, setDebugInfo, ctx, otelContext) => {
101
- const startMs = performance.now();
102
- const queryInputResult = queryInput(makeGetAtomResult(get, ctx, otelContext ?? ctx.rootOtelContext, this.dependencyQueriesRef), ctx);
103
- const durationMs = performance.now() - startMs;
104
- let queryInputRaw;
105
- if (isQueryBuilder(queryInputResult)) {
106
- const res = fromQueryBuilder(queryInputResult, otelContext);
107
- queryInputRaw = res.queryInputRaw;
108
- // setting label dynamically here
109
- this.label = res.label;
110
- execBeforeFirstRunRef.current = res.execBeforeFirstRun;
111
- }
112
- else {
113
- queryInputRaw = queryInputResult;
114
- }
115
- setDebugInfo({ _tag: 'computed', label: `${this.label}:queryInput`, query: queryInputRaw.query, durationMs });
116
- schemaRef.current = queryInputRaw.schema;
117
- if (inputQueryInfo === undefined && queryInputRaw.queryInfo !== undefined) {
118
- queryInfo = queryInputRaw.queryInfo;
119
- }
120
- return queryInputRaw;
121
- }, {
122
- label: `${label}:query`,
123
- meta: { liveStoreThunkType: 'db.query' },
124
- // NOTE we're not checking the schema here as we assume the query string to always change when the schema might change
125
- equal: (a, b) => a.query === b.query && deepEqual(a.bindValues, b.bindValues),
126
- });
127
- this.queryInput$ = queryInputRaw$OrQueryInputRaw;
128
- }
129
- else {
130
- let queryInputRaw;
131
- if (isQueryBuilder(queryInput)) {
132
- const res = fromQueryBuilder(queryInput, otelContext);
133
- queryInputRaw = res.queryInputRaw;
134
- label = res.label;
135
- execBeforeFirstRunRef.current = res.execBeforeFirstRun;
136
- }
137
- else {
138
- queryInputRaw = queryInput;
139
- }
140
- schemaRef.current = queryInputRaw.schema;
141
- queryInputRaw$OrQueryInputRaw = queryInputRaw;
142
- // this.label = inputLabel ? this.label : `db(${})`
143
- if (inputLabel === undefined && isQueryBuilder(queryInput)) {
144
- const ast = queryInput[QueryBuilderAstSymbol];
145
- if (ast._tag === 'RowQuery') {
146
- label = `db(${rowQueryLabel(ast.tableDef, ast.id)})`;
147
- }
148
- }
149
- if (inputQueryInfo === undefined && queryInputRaw.queryInfo !== undefined) {
150
- queryInfo = queryInputRaw.queryInfo;
151
- }
152
- }
153
- const queriedTablesRef = { current: undefined };
154
- const makeResultsEqual = (resultSchema) => (a, b) => a === NOT_REFRESHED_YET || b === NOT_REFRESHED_YET ? false : Schema.equivalence(resultSchema)(a, b);
155
- // NOTE we try to create the equality function eagerly as it might be expensive
156
- // TODO also support derived equality for `map` (probably will depend on having an easy way to transform a schema without an `encode` step)
157
- // This would mean dropping the `map` option
158
- const resultsEqual = map === undefined
159
- ? schemaRef.current === undefined
160
- ? (a, b) => makeResultsEqual(schemaRef.current)(a, b)
161
- : makeResultsEqual(schemaRef.current)
162
- : undefined;
163
- const results$ = this.reactivityGraph.makeThunk((get, setDebugInfo, queryContext, otelContext, debugRefreshReason) => queryContext.otelTracer.startActiveSpan('db:...', // NOTE span name will be overridden further down
164
- {
165
- attributes: {
166
- 'livestore.debugRefreshReason': Predicate.hasProperty(debugRefreshReason, 'label')
167
- ? debugRefreshReason.label
168
- : debugRefreshReason?._tag,
169
- },
170
- }, otelContext ?? queryContext.rootOtelContext, (span) => {
171
- const otelContext = otel.trace.setSpan(otel.context.active(), span);
172
- const { store } = queryContext;
173
- if (execBeforeFirstRunRef.current !== undefined) {
174
- execBeforeFirstRunRef.current(queryContext, otelContext);
175
- execBeforeFirstRunRef.current = undefined;
176
- }
177
- const queryInputResult = isThunk(queryInputRaw$OrQueryInputRaw)
178
- ? get(queryInputRaw$OrQueryInputRaw, otelContext, debugRefreshReason)
179
- : queryInputRaw$OrQueryInputRaw;
180
- const sqlString = queryInputResult.query;
181
- const bindValues = queryInputResult.bindValues;
182
- if (queriedTablesRef.current === undefined) {
183
- queriedTablesRef.current = store.sqliteDbWrapper.getTablesUsed(sqlString);
184
- }
185
- if (bindValues !== undefined) {
186
- replaceSessionIdSymbol(bindValues, store.clientSession.sessionId);
187
- }
188
- // Establish a reactive dependency on the tables used in the query
189
- for (const tableName of queriedTablesRef.current) {
190
- const tableRef = store.tableRefs[tableName] ?? shouldNeverHappen(`No table ref found for ${tableName}`);
191
- get(tableRef, otelContext, debugRefreshReason);
192
- }
193
- span.setAttribute('sql.query', sqlString);
194
- span.updateName(`db:${sqlString.slice(0, 50)}`);
195
- const rawDbResults = store.sqliteDbWrapper.select(sqlString, bindValues ? prepareBindValues(bindValues, sqlString) : undefined, {
196
- queriedTables: queriedTablesRef.current,
197
- otelContext,
198
- });
199
- span.setAttribute('sql.rowsCount', rawDbResults.length);
200
- const parsedResult = Schema.decodeEither(schemaRef.current)(rawDbResults);
201
- if (parsedResult._tag === 'Left') {
202
- const parseErrorStr = TreeFormatter.formatErrorSync(parsedResult.left);
203
- const expectedSchemaStr = String(schemaRef.current.ast);
204
- const bindValuesStr = bindValues === undefined ? '' : `\nBind values: ${JSON.stringify(bindValues)}`;
205
- console.error(`\
206
- Error parsing SQL query result.
207
-
208
- Query: ${sqlString}\
209
- ${bindValuesStr}
210
-
211
- Expected schema: ${expectedSchemaStr}
212
-
213
- Error: ${parseErrorStr}
214
-
215
- Result:`, rawDbResults);
216
- return shouldNeverHappen(`Error parsing SQL query result: ${parsedResult.left}`);
217
- }
218
- const result = this.mapResult(parsedResult.right);
219
- span.end();
220
- const durationMs = getDurationMsFromSpan(span);
221
- this.executionTimes.push(durationMs);
222
- setDebugInfo({ _tag: 'db', label: `${label}:results`, query: sqlString, durationMs });
223
- return result;
224
- }), { label: `${label}:results`, meta: { liveStoreThunkType: 'db.result' }, equal: resultsEqual });
225
- this.results$ = results$;
226
- this.label = label;
227
- this.queryInfo = queryInfo;
228
- }
229
- destroy = () => {
230
- this.isDestroyed = true;
231
- if (this.queryInput$ !== undefined) {
232
- this.reactivityGraph.destroyNode(this.queryInput$);
233
- }
234
- this.reactivityGraph.destroyNode(this.results$);
235
- for (const query of this.dependencyQueriesRef) {
236
- query.deref();
237
- }
238
- };
239
- }
240
- const queryInfoFromQueryBuilder = (qb) => {
241
- const ast = qb[QueryBuilderAstSymbol];
242
- return ast._tag === 'RowQuery' ? { _tag: 'Row', table: ast.tableDef, id: ast.id } : { _tag: 'None' };
243
- };
244
- //# sourceMappingURL=db-query.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"db-query.js","sourceRoot":"","sources":["../../src/live-queries/db-query.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=db-query.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"db-query.test.d.ts","sourceRoot":"","sources":["../../src/live-queries/db-query.test.ts"],"names":[],"mappings":""}
@@ -1,123 +0,0 @@
1
- import { Effect, Schema } from '@livestore/utils/effect';
2
- import * as otel from '@opentelemetry/api';
3
- import { BasicTracerProvider, InMemorySpanExporter, SimpleSpanProcessor } from '@opentelemetry/sdk-trace-base';
4
- import { beforeEach, describe, expect, it } from 'vitest';
5
- import { computed, queryDb, rawSqlMutation, sql } from '../index.js';
6
- import * as RG from '../reactive.js';
7
- import { makeTodoMvc, tables } from '../utils/tests/fixture.js';
8
- import { getSimplifiedRootSpan } from '../utils/tests/otel.js';
9
- /*
10
- TODO write tests for:
11
-
12
- - sql queries without and with `map` (incl. callback and schemas)
13
- - optional and explicit `queriedTables` argument
14
- */
15
- describe('otel', () => {
16
- let cachedProvider;
17
- beforeEach(() => {
18
- RG.__resetIds();
19
- });
20
- const makeQuery = Effect.gen(function* () {
21
- const exporter = new InMemorySpanExporter();
22
- // const provider = cachedProvider ?? new BasicTracerProvider({ spanProcessors: [new SimpleSpanProcessor(exporter)] })
23
- const provider = cachedProvider ?? new BasicTracerProvider();
24
- cachedProvider = provider;
25
- provider.addSpanProcessor(new SimpleSpanProcessor(exporter));
26
- provider.register();
27
- const otelTracer = otel.trace.getTracer('test');
28
- const span = otelTracer.startSpan('test-root');
29
- const otelContext = otel.trace.setSpan(otel.context.active(), span);
30
- const store = yield* makeTodoMvc({ otelTracer, otelContext });
31
- return {
32
- store,
33
- otelTracer,
34
- exporter,
35
- span,
36
- provider,
37
- };
38
- });
39
- it('otel', async () => {
40
- const { exporter } = await Effect.gen(function* () {
41
- const { store, exporter, span } = yield* makeQuery;
42
- const query$ = queryDb({
43
- query: `select * from todos`,
44
- schema: Schema.Array(tables.todos.schema),
45
- queriedTables: new Set(['todos']),
46
- });
47
- expect(store.query(query$)).toMatchInlineSnapshot('[]');
48
- store.mutate(rawSqlMutation({ sql: sql `INSERT INTO todos (id, text, completed) VALUES ('t1', 'buy milk', 0)` }));
49
- expect(store.query(query$)).toMatchInlineSnapshot(`
50
- [
51
- {
52
- "completed": false,
53
- "id": "t1",
54
- "text": "buy milk",
55
- },
56
- ]
57
- `);
58
- span.end();
59
- return { exporter };
60
- }).pipe(Effect.scoped, Effect.tapCauseLogPretty, Effect.runPromise);
61
- expect(getSimplifiedRootSpan(exporter)).toMatchSnapshot();
62
- });
63
- it('with thunks', async () => {
64
- const { exporter } = await Effect.gen(function* () {
65
- const { store, exporter, span } = yield* makeQuery;
66
- const defaultTodo = { id: '', text: '', completed: false };
67
- const filter = computed(() => `where completed = 0`, { label: 'where-filter' });
68
- const query$ = queryDb((get) => ({
69
- query: `select * from todos ${get(filter)}`,
70
- schema: Schema.Array(tables.todos.schema).pipe(Schema.headOrElse(() => defaultTodo)),
71
- }), { label: 'all todos' });
72
- expect(store.reactivityGraph.getSnapshot({ includeResults: true })).toMatchSnapshot();
73
- expect(store.query(query$)).toMatchInlineSnapshot(`
74
- {
75
- "completed": false,
76
- "id": "",
77
- "text": "",
78
- }
79
- `);
80
- expect(store.reactivityGraph.getSnapshot({ includeResults: true })).toMatchSnapshot();
81
- store.mutate(rawSqlMutation({ sql: sql `INSERT INTO todos (id, text, completed) VALUES ('t1', 'buy milk', 0)` }));
82
- expect(store.reactivityGraph.getSnapshot({ includeResults: true })).toMatchSnapshot();
83
- expect(store.query(query$)).toMatchInlineSnapshot(`
84
- {
85
- "completed": false,
86
- "id": "t1",
87
- "text": "buy milk",
88
- }
89
- `);
90
- expect(store.reactivityGraph.getSnapshot({ includeResults: true })).toMatchSnapshot();
91
- span.end();
92
- return { exporter };
93
- }).pipe(Effect.scoped, Effect.tapCauseLogPretty, Effect.runPromise);
94
- expect(getSimplifiedRootSpan(exporter)).toMatchSnapshot();
95
- });
96
- it('with thunks with query builder and without labels', async () => {
97
- const { exporter } = await Effect.gen(function* () {
98
- const { store, exporter, span } = yield* makeQuery;
99
- const defaultTodo = { id: '', text: '', completed: false };
100
- const filter = computed(() => ({ completed: false }));
101
- const query$ = queryDb((get) => tables.todos.query.where(get(filter)).first({ fallback: () => defaultTodo }));
102
- expect(store.query(query$)).toMatchInlineSnapshot(`
103
- {
104
- "completed": false,
105
- "id": "",
106
- "text": "",
107
- }
108
- `);
109
- store.mutate(rawSqlMutation({ sql: sql `INSERT INTO todos (id, text, completed) VALUES ('t1', 'buy milk', 0)` }));
110
- expect(store.query(query$)).toMatchInlineSnapshot(`
111
- {
112
- "completed": false,
113
- "id": "t1",
114
- "text": "buy milk",
115
- }
116
- `);
117
- span.end();
118
- return { exporter };
119
- }).pipe(Effect.scoped, Effect.tapCauseLogPretty, Effect.runPromise);
120
- expect(getSimplifiedRootSpan(exporter)).toMatchSnapshot();
121
- });
122
- });
123
- //# sourceMappingURL=db-query.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"db-query.test.js","sourceRoot":"","sources":["../../src/live-queries/db-query.test.ts"],"names":[],"mappings":"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"}
@@ -1,20 +0,0 @@
1
- import type * as RG from '../reactive.js';
2
- import type { RefreshReason } from '../store/store-types.js';
3
- import type { ILiveQueryRef, ILiveQueryRefDef, ReactivityGraph, ReactivityGraphContext } from './base-class.js';
4
- export declare const makeRef: <T>(defaultValue: T, options?: {
5
- label?: string;
6
- }) => ILiveQueryRefDef<T>;
7
- export declare class LiveQueryRef<T> implements ILiveQueryRef<T> {
8
- private defaultValue;
9
- readonly reactivityGraph: ReactivityGraph;
10
- private options?;
11
- _tag: "live-ref";
12
- readonly ref: RG.Ref<T, ReactivityGraphContext, RefreshReason>;
13
- constructor(defaultValue: T, reactivityGraph: ReactivityGraph, options?: {
14
- label?: string;
15
- } | undefined);
16
- set: (value: T) => void;
17
- get: () => T;
18
- destroy: () => void;
19
- }
20
- //# sourceMappingURL=make-ref.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"make-ref.d.ts","sourceRoot":"","sources":["../../src/live-queries/make-ref.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,EAAE,MAAM,gBAAgB,CAAA;AACzC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAA;AAC5D,OAAO,KAAK,EAAE,aAAa,EAAE,gBAAgB,EAAE,eAAe,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAA;AAG/G,eAAO,MAAM,OAAO,GAAI,CAAC,gBACT,CAAC,YACL;IACR,KAAK,CAAC,EAAE,MAAM,CAAA;CACf,KACA,gBAAgB,CAAC,CAAC,CAOpB,CAAA;AAED,qBAAa,YAAY,CAAC,CAAC,CAAE,YAAW,aAAa,CAAC,CAAC,CAAC;IAKpD,OAAO,CAAC,YAAY;IACpB,QAAQ,CAAC,eAAe,EAAE,eAAe;IACzC,OAAO,CAAC,OAAO,CAAC;IANlB,IAAI,EAAG,UAAU,CAAS;IAC1B,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,sBAAsB,EAAE,aAAa,CAAC,CAAA;gBAGpD,YAAY,EAAE,CAAC,EACd,eAAe,EAAE,eAAe,EACjC,OAAO,CAAC,EAAE;QAChB,KAAK,CAAC,EAAE,MAAM,CAAA;KACf,YAAA;IAKH,GAAG,UAAW,CAAC,UAEd;IAED,GAAG,UAEF;IAED,OAAO,aAEN;CACF"}
@@ -1,33 +0,0 @@
1
- import { nanoid } from '@livestore/utils/nanoid';
2
- import { withRCMap } from './base-class.js';
3
- export const makeRef = (defaultValue, options) => {
4
- const id = nanoid();
5
- return {
6
- _tag: 'live-ref-def',
7
- defaultValue,
8
- make: withRCMap(id, (ctx) => new LiveQueryRef(defaultValue, ctx.reactivityGraph.deref(), options)),
9
- };
10
- };
11
- export class LiveQueryRef {
12
- defaultValue;
13
- reactivityGraph;
14
- options;
15
- _tag = 'live-ref';
16
- ref;
17
- constructor(defaultValue, reactivityGraph, options) {
18
- this.defaultValue = defaultValue;
19
- this.reactivityGraph = reactivityGraph;
20
- this.options = options;
21
- this.ref = reactivityGraph.makeRef(defaultValue, { label: options?.label });
22
- }
23
- set = (value) => {
24
- this.reactivityGraph.setRef(this.ref, value);
25
- };
26
- get = () => {
27
- return this.ref.computeResult();
28
- };
29
- destroy = () => {
30
- this.reactivityGraph.destroyNode(this.ref);
31
- };
32
- }
33
- //# sourceMappingURL=make-ref.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"make-ref.js","sourceRoot":"","sources":["../../src/live-queries/make-ref.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAKhD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAE3C,MAAM,CAAC,MAAM,OAAO,GAAG,CACrB,YAAe,EACf,OAEC,EACoB,EAAE;IACvB,MAAM,EAAE,GAAG,MAAM,EAAE,CAAA;IACnB,OAAO;QACL,IAAI,EAAE,cAAc;QACpB,YAAY;QACZ,IAAI,EAAE,SAAS,CAAC,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,YAAY,CAAC,YAAY,EAAE,GAAG,CAAC,eAAe,CAAC,KAAK,EAAG,EAAE,OAAO,CAAC,CAAC;KACpG,CAAA;AACH,CAAC,CAAA;AAED,MAAM,OAAO,YAAY;IAKb;IACC;IACD;IANV,IAAI,GAAG,UAAmB,CAAA;IACjB,GAAG,CAAkD;IAE9D,YACU,YAAe,EACd,eAAgC,EACjC,OAEP;QAJO,iBAAY,GAAZ,YAAY,CAAG;QACd,oBAAe,GAAf,eAAe,CAAiB;QACjC,YAAO,GAAP,OAAO,CAEd;QAED,IAAI,CAAC,GAAG,GAAG,eAAe,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAA;IAC7E,CAAC;IAED,GAAG,GAAG,CAAC,KAAQ,EAAE,EAAE;QACjB,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;IAC9C,CAAC,CAAA;IAED,GAAG,GAAG,GAAG,EAAE;QACT,OAAO,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAA;IACjC,CAAC,CAAA;IAED,OAAO,GAAG,GAAG,EAAE;QACb,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAC5C,CAAC,CAAA;CACF"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=store.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"store.test.d.ts","sourceRoot":"","sources":["../../src/store/store.test.ts"],"names":[],"mappings":""}
@@ -1,27 +0,0 @@
1
- import { Config, Context, Effect, FetchHttpClient, identity, Layer, Logger } from '@livestore/utils/effect';
2
- import { Vitest } from '@livestore/utils/node-vitest';
3
- import { createStore } from './create-store.js';
4
- import { OtelLiveHttp, PlatformNode } from '@livestore/utils/node';
5
- import { schema } from '../__tests__/fixture.js';
6
- Vitest.describe('Store', () => {
7
- Vitest.describe('ClientSessionSyncProcessor', () => {
8
- Vitest.scopedLive('basic', () => Effect.gen(function* () {
9
- const { store } = yield* TestContext;
10
- }));
11
- });
12
- });
13
- class TestContext extends Context.Tag('TestContext')() {
14
- }
15
- const TestContextLive = Effect.gen(function* () {
16
- const adapter = yield* makeInMemoryAdapter();
17
- const store = yield* createStore({
18
- schema,
19
- adapter
20
- });
21
- return { store };
22
- });
23
- const isCi = Config.boolean('CI').pipe(Effect.catchAll(() => Effect.succeed(false)), Effect.runSync);
24
- const otelLayer = isCi ? Layer.empty : OtelLiveHttp({ serviceName: 'sync-test', skipLogUrl: false });
25
- const withCtx = (testContext, { suffix, skipOtel = false } = {}) => (self) => self.pipe(Effect.timeout(isCi ? 60_000 : 10_000), Effect.provide(TestContextLive), Effect.provide(FetchHttpClient.layer), Effect.provide(PlatformNode.NodeFileSystem.layer), Effect.provide(Logger.pretty), Effect.scoped, // We need to scope the effect manually here because otherwise the span is not closed
26
- Effect.withSpan(`${testContext.task.suite?.name}:${testContext.task.name}${suffix ? `:${suffix}` : ''}`), skipOtel ? identity : Effect.provide(otelLayer));
27
- //# sourceMappingURL=store.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"store.test.js","sourceRoot":"","sources":["../../src/store/store.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,eAAe,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAC3G,OAAO,EAAE,MAAM,EAAE,MAAM,8BAA8B,CAAA;AAGrD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAC/C,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AAClE,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAEhD,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,GAAG,EAAE;IAC5B,MAAM,CAAC,QAAQ,CAAC,4BAA4B,EAAE,GAAG,EAAE;QACjD,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;YAEnD,MAAM,EAAE,KAAK,EAAE,GAAG,KAAM,CAAC,CAAC,WAAW,CAAA;QACvC,CAAC,CAAC,CAAC,CAAA;IACL,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA;AAEF,MAAM,WAAY,SAAQ,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,EAKjD;CAAG;AAEN,MAAM,eAAe,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAC3C,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,mBAAmB,EAAE,CAAA;IAC3C,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,WAAW,CAAC;QACjC,MAAM;QACN,OAAO;KACP,CAAC,CAAA;IACD,OAAO,EAAE,KAAK,EAAE,CAAA;AAClB,CAAC,CAAC,CAAA;AAEF,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CACpC,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAC5C,MAAM,CAAC,OAAO,CACf,CAAA;AAED,MAAM,SAAS,GAAG,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,YAAY,CAAC,EAAE,WAAW,EAAE,WAAW,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,CAAA;AAEpG,MAAM,OAAO,GACX,CAAC,WAA+B,EAAE,EAAE,MAAM,EAAE,QAAQ,GAAG,KAAK,KAA8C,EAAE,EAAE,EAAE,CAChH,CAAU,IAA4B,EAAE,EAAE,CACxC,IAAI,CAAC,IAAI,CACP,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,EACtC,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,EAC/B,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,KAAK,CAAC,EACrC,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,cAAc,CAAC,KAAK,CAAC,EACjD,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAC7B,MAAM,CAAC,MAAM,EAAE,qFAAqF;AACpG,MAAM,CAAC,QAAQ,CAAC,GAAG,WAAW,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,IAAI,WAAW,CAAC,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EACxG,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAChD,CAAA"}
@@ -1,2 +0,0 @@
1
- export declare const isValidFunctionString: (fnStr: string) => boolean;
2
- //# sourceMappingURL=expo.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"expo.d.ts","sourceRoot":"","sources":["../../src/utils/expo.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,qBAAqB,UAAW,MAAM,YAMlD,CAAA"}
@@ -1,8 +0,0 @@
1
- const RN_BAD_FUNCTION_STRING = 'function() { [bytecode] }';
2
- export const isValidFunctionString = (fnStr) => {
3
- if (fnStr === RN_BAD_FUNCTION_STRING) {
4
- return false;
5
- }
6
- return true;
7
- };
8
- //# sourceMappingURL=expo.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"expo.js","sourceRoot":"","sources":["../../src/utils/expo.ts"],"names":[],"mappings":"AAAA,MAAM,sBAAsB,GAAG,2BAA2B,CAAA;AAE1D,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,KAAa,EAAE,EAAE;IACrD,IAAI,KAAK,KAAK,sBAAsB,EAAE,CAAC;QACrC,OAAO,KAAK,CAAA;IACd,CAAC;IAED,OAAO,IAAI,CAAA;AACb,CAAC,CAAA"}
@@ -1,7 +0,0 @@
1
- export declare const isValidFunctionString: (fnStr: string) => {
2
- _tag: "valid";
3
- } | {
4
- _tag: "invalid";
5
- reason: "react-native";
6
- };
7
- //# sourceMappingURL=function-string.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"function-string.d.ts","sourceRoot":"","sources":["../../src/utils/function-string.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,qBAAqB,UACzB,MAAM,KACZ;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,GAAG;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,MAAM,EAAE,cAAc,CAAA;CAM/D,CAAA"}
@@ -1,9 +0,0 @@
1
- // Related https://github.com/facebook/hermes/issues/612#issuecomment-2549404649
2
- const REACT_NATIVE_BAD_FUNCTION_STRING = 'function() { [bytecode] }';
3
- export const isValidFunctionString = (fnStr) => {
4
- if (fnStr === REACT_NATIVE_BAD_FUNCTION_STRING) {
5
- return { _tag: 'invalid', reason: 'react-native' };
6
- }
7
- return { _tag: 'valid' };
8
- };
9
- //# sourceMappingURL=function-string.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"function-string.js","sourceRoot":"","sources":["../../src/utils/function-string.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,MAAM,gCAAgC,GAAG,2BAA2B,CAAA;AAEpE,MAAM,CAAC,MAAM,qBAAqB,GAAG,CACnC,KAAa,EACoD,EAAE;IACnE,IAAI,KAAK,KAAK,gCAAgC,EAAE,CAAC;QAC/C,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,cAAc,EAAE,CAAA;IACpD,CAAC;IAED,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAA;AAC1B,CAAC,CAAA"}
@@ -1,47 +0,0 @@
1
- import { nanoid } from '@livestore/utils/nanoid'
2
-
3
- import type * as RG from '../reactive.js'
4
- import type { RefreshReason } from '../store/store-types.js'
5
- import type { ILiveQueryRef, ILiveQueryRefDef, ReactivityGraph, ReactivityGraphContext } from './base-class.js'
6
- import { withRCMap } from './base-class.js'
7
-
8
- export const makeRef = <T>(
9
- defaultValue: T,
10
- options?: {
11
- label?: string
12
- },
13
- ): ILiveQueryRefDef<T> => {
14
- const id = nanoid()
15
- return {
16
- _tag: 'live-ref-def',
17
- defaultValue,
18
- make: withRCMap(id, (ctx) => new LiveQueryRef(defaultValue, ctx.reactivityGraph.deref()!, options)),
19
- }
20
- }
21
-
22
- export class LiveQueryRef<T> implements ILiveQueryRef<T> {
23
- _tag = 'live-ref' as const
24
- readonly ref: RG.Ref<T, ReactivityGraphContext, RefreshReason>
25
-
26
- constructor(
27
- private defaultValue: T,
28
- readonly reactivityGraph: ReactivityGraph,
29
- private options?: {
30
- label?: string
31
- },
32
- ) {
33
- this.ref = reactivityGraph.makeRef(defaultValue, { label: options?.label })
34
- }
35
-
36
- set = (value: T) => {
37
- this.reactivityGraph.setRef(this.ref, value)
38
- }
39
-
40
- get = () => {
41
- return this.ref.computeResult()
42
- }
43
-
44
- destroy = () => {
45
- this.reactivityGraph.destroyNode(this.ref)
46
- }
47
- }
@@ -1,12 +0,0 @@
1
- // Related https://github.com/facebook/hermes/issues/612#issuecomment-2549404649
2
- const REACT_NATIVE_BAD_FUNCTION_STRING = 'function() { [bytecode] }'
3
-
4
- export const isValidFunctionString = (
5
- fnStr: string,
6
- ): { _tag: 'valid' } | { _tag: 'invalid'; reason: 'react-native' } => {
7
- if (fnStr === REACT_NATIVE_BAD_FUNCTION_STRING) {
8
- return { _tag: 'invalid', reason: 'react-native' }
9
- }
10
-
11
- return { _tag: 'valid' }
12
- }