@livestore/livestore 0.0.9 → 0.0.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.
Files changed (152) hide show
  1. package/package.json +7 -7
  2. package/src/__tests__/react/fixture.tsx +1 -13
  3. package/src/__tests__/reactive.test.ts +39 -0
  4. package/src/inMemoryDatabase.ts +5 -5
  5. package/src/react/useGraphQL.ts +6 -7
  6. package/src/react/useLiveStoreComponent.ts +38 -48
  7. package/src/reactive.ts +12 -11
  8. package/src/reactiveQueries/graphql.ts +5 -3
  9. package/src/reactiveQueries/js.ts +1 -3
  10. package/src/reactiveQueries/sql.ts +6 -6
  11. package/src/store.ts +45 -31
  12. package/dist/.tsbuildinfo +0 -1
  13. package/dist/QueryCache.d.ts +0 -20
  14. package/dist/QueryCache.d.ts.map +0 -1
  15. package/dist/QueryCache.js +0 -71
  16. package/dist/QueryCache.js.map +0 -1
  17. package/dist/__tests__/react/fixture.d.ts +0 -141
  18. package/dist/__tests__/react/fixture.d.ts.map +0 -1
  19. package/dist/__tests__/react/fixture.js +0 -72
  20. package/dist/__tests__/react/fixture.js.map +0 -1
  21. package/dist/__tests__/react/useLiveStoreComponent.test.d.ts +0 -2
  22. package/dist/__tests__/react/useLiveStoreComponent.test.d.ts.map +0 -1
  23. package/dist/__tests__/react/useLiveStoreComponent.test.js +0 -78
  24. package/dist/__tests__/react/useLiveStoreComponent.test.js.map +0 -1
  25. package/dist/__tests__/reactive.test.d.ts +0 -2
  26. package/dist/__tests__/reactive.test.d.ts.map +0 -1
  27. package/dist/__tests__/reactive.test.js +0 -167
  28. package/dist/__tests__/reactive.test.js.map +0 -1
  29. package/dist/backends/base.d.ts +0 -13
  30. package/dist/backends/base.d.ts.map +0 -1
  31. package/dist/backends/base.js +0 -53
  32. package/dist/backends/base.js.map +0 -1
  33. package/dist/backends/index.d.ts +0 -45
  34. package/dist/backends/index.d.ts.map +0 -1
  35. package/dist/backends/index.js +0 -38
  36. package/dist/backends/index.js.map +0 -1
  37. package/dist/backends/noop.d.ts +0 -18
  38. package/dist/backends/noop.d.ts.map +0 -1
  39. package/dist/backends/noop.js +0 -21
  40. package/dist/backends/noop.js.map +0 -1
  41. package/dist/backends/tauri.d.ts +0 -22
  42. package/dist/backends/tauri.d.ts.map +0 -1
  43. package/dist/backends/tauri.js +0 -48
  44. package/dist/backends/tauri.js.map +0 -1
  45. package/dist/backends/utils/idb.d.ts +0 -10
  46. package/dist/backends/utils/idb.d.ts.map +0 -1
  47. package/dist/backends/utils/idb.js +0 -58
  48. package/dist/backends/utils/idb.js.map +0 -1
  49. package/dist/backends/web-in-memory.d.ts +0 -22
  50. package/dist/backends/web-in-memory.d.ts.map +0 -1
  51. package/dist/backends/web-in-memory.js +0 -45
  52. package/dist/backends/web-in-memory.js.map +0 -1
  53. package/dist/backends/web-worker.d.ts +0 -17
  54. package/dist/backends/web-worker.d.ts.map +0 -1
  55. package/dist/backends/web-worker.js +0 -139
  56. package/dist/backends/web-worker.js.map +0 -1
  57. package/dist/backends/web.d.ts +0 -27
  58. package/dist/backends/web.d.ts.map +0 -1
  59. package/dist/backends/web.js +0 -63
  60. package/dist/backends/web.js.map +0 -1
  61. package/dist/bounded-collections.d.ts +0 -34
  62. package/dist/bounded-collections.d.ts.map +0 -1
  63. package/dist/bounded-collections.js +0 -103
  64. package/dist/bounded-collections.js.map +0 -1
  65. package/dist/componentKey.d.ts +0 -20
  66. package/dist/componentKey.d.ts.map +0 -1
  67. package/dist/componentKey.js +0 -3
  68. package/dist/componentKey.js.map +0 -1
  69. package/dist/effect/LiveStore.d.ts +0 -42
  70. package/dist/effect/LiveStore.d.ts.map +0 -1
  71. package/dist/effect/LiveStore.js +0 -40
  72. package/dist/effect/LiveStore.js.map +0 -1
  73. package/dist/effect/index.d.ts +0 -2
  74. package/dist/effect/index.d.ts.map +0 -1
  75. package/dist/effect/index.js +0 -2
  76. package/dist/effect/index.js.map +0 -1
  77. package/dist/events.d.ts +0 -7
  78. package/dist/events.d.ts.map +0 -1
  79. package/dist/events.js +0 -2
  80. package/dist/events.js.map +0 -1
  81. package/dist/inMemoryDatabase.d.ts +0 -65
  82. package/dist/inMemoryDatabase.d.ts.map +0 -1
  83. package/dist/inMemoryDatabase.js +0 -241
  84. package/dist/inMemoryDatabase.js.map +0 -1
  85. package/dist/index.d.ts +0 -20
  86. package/dist/index.d.ts.map +0 -1
  87. package/dist/index.js +0 -10
  88. package/dist/index.js.map +0 -1
  89. package/dist/otel.d.ts +0 -5
  90. package/dist/otel.d.ts.map +0 -1
  91. package/dist/otel.js +0 -17
  92. package/dist/otel.js.map +0 -1
  93. package/dist/react/LiveStoreContext.d.ts +0 -11
  94. package/dist/react/LiveStoreContext.d.ts.map +0 -1
  95. package/dist/react/LiveStoreContext.js +0 -10
  96. package/dist/react/LiveStoreContext.js.map +0 -1
  97. package/dist/react/LiveStoreProvider.d.ts +0 -21
  98. package/dist/react/LiveStoreProvider.d.ts.map +0 -1
  99. package/dist/react/LiveStoreProvider.js +0 -48
  100. package/dist/react/LiveStoreProvider.js.map +0 -1
  101. package/dist/react/index.d.ts +0 -7
  102. package/dist/react/index.d.ts.map +0 -1
  103. package/dist/react/index.js +0 -6
  104. package/dist/react/index.js.map +0 -1
  105. package/dist/react/useGlobalQuery.d.ts +0 -3
  106. package/dist/react/useGlobalQuery.d.ts.map +0 -1
  107. package/dist/react/useGlobalQuery.js +0 -25
  108. package/dist/react/useGlobalQuery.js.map +0 -1
  109. package/dist/react/useGraphQL.d.ts +0 -11
  110. package/dist/react/useGraphQL.d.ts.map +0 -1
  111. package/dist/react/useGraphQL.js +0 -68
  112. package/dist/react/useGraphQL.js.map +0 -1
  113. package/dist/react/useLiveStoreComponent.d.ts +0 -70
  114. package/dist/react/useLiveStoreComponent.d.ts.map +0 -1
  115. package/dist/react/useLiveStoreComponent.js +0 -261
  116. package/dist/react/useLiveStoreComponent.js.map +0 -1
  117. package/dist/react/utils/useStateRefWithReactiveInput.d.ts +0 -13
  118. package/dist/react/utils/useStateRefWithReactiveInput.d.ts.map +0 -1
  119. package/dist/react/utils/useStateRefWithReactiveInput.js +0 -38
  120. package/dist/react/utils/useStateRefWithReactiveInput.js.map +0 -1
  121. package/dist/reactive.d.ts +0 -140
  122. package/dist/reactive.d.ts.map +0 -1
  123. package/dist/reactive.js +0 -301
  124. package/dist/reactive.js.map +0 -1
  125. package/dist/reactiveQueries/base-class.d.ts +0 -24
  126. package/dist/reactiveQueries/base-class.d.ts.map +0 -1
  127. package/dist/reactiveQueries/base-class.js +0 -22
  128. package/dist/reactiveQueries/base-class.js.map +0 -1
  129. package/dist/reactiveQueries/graphql.d.ts +0 -25
  130. package/dist/reactiveQueries/graphql.d.ts.map +0 -1
  131. package/dist/reactiveQueries/graphql.js +0 -14
  132. package/dist/reactiveQueries/graphql.js.map +0 -1
  133. package/dist/reactiveQueries/js.d.ts +0 -19
  134. package/dist/reactiveQueries/js.d.ts.map +0 -1
  135. package/dist/reactiveQueries/js.js +0 -13
  136. package/dist/reactiveQueries/js.js.map +0 -1
  137. package/dist/reactiveQueries/sql.d.ts +0 -31
  138. package/dist/reactiveQueries/sql.d.ts.map +0 -1
  139. package/dist/reactiveQueries/sql.js +0 -28
  140. package/dist/reactiveQueries/sql.js.map +0 -1
  141. package/dist/schema.d.ts +0 -163
  142. package/dist/schema.d.ts.map +0 -1
  143. package/dist/schema.js +0 -92
  144. package/dist/schema.js.map +0 -1
  145. package/dist/store.d.ts +0 -175
  146. package/dist/store.d.ts.map +0 -1
  147. package/dist/store.js +0 -549
  148. package/dist/store.js.map +0 -1
  149. package/dist/util.d.ts +0 -24
  150. package/dist/util.d.ts.map +0 -1
  151. package/dist/util.js +0 -51
  152. package/dist/util.js.map +0 -1
package/dist/store.js DELETED
@@ -1,549 +0,0 @@
1
- import { assertNever, makeNoopSpan, makeNoopTracer, shouldNeverHappen } from '@livestore/utils';
2
- import * as otel from '@opentelemetry/api';
3
- import * as graphql from 'graphql';
4
- import { uniqueId } from 'lodash-es';
5
- import * as ReactDOM from 'react-dom';
6
- import { v4 as uuid } from 'uuid';
7
- import { createBackend } from './backends/index.js';
8
- import { tableNameForComponentKey } from './componentKey.js';
9
- import { InMemoryDatabase } from './inMemoryDatabase.js';
10
- import { getDurationMsFromSpan } from './otel.js';
11
- import { ReactiveGraph } from './reactive.js';
12
- import { LiveStoreGraphQLQuery } from './reactiveQueries/graphql.js';
13
- import { LiveStoreJSQuery } from './reactiveQueries/js.js';
14
- import { LiveStoreSQLQuery } from './reactiveQueries/sql.js';
15
- import { componentStateTables, loadSchema } from './schema.js';
16
- import { sql } from './util.js';
17
- export const RESET_DB_LOCAL_STORAGE_KEY = 'livestore-reset';
18
- const globalComponentKey = { _tag: 'singleton', componentName: '__global', id: 'singleton' };
19
- export class Store {
20
- constructor({ db, schema, backend, graphQLOptions, otelTracer, otelRootSpanContext, }) {
21
- /**
22
- * Creates a reactive LiveStore SQL query
23
- *
24
- * NOTE The query is actually running (even if no one has subscribed to it yet) and will be kept up to date.
25
- */
26
- this.querySQL = (genQueryString,
27
- /**
28
- * List of tables that are queried in this query;
29
- * used to determine reactive dependencies.
30
- * In the future we want to auto-generate this via parsing the query
31
- */
32
- queriedTables, bindValues, componentKey, label, parentSpanContext) => this.otel.tracer.startActiveSpan('querySQL', // NOTE span name will be overridden further down
33
- { attributes: { label } }, parentSpanContext, (span) => {
34
- const otelContext = otel.trace.setSpan(otel.context.active(), span);
35
- const queryString$ = this.graph.makeThunk((get, addDebugInfo) => {
36
- const queryString = genQueryString(get);
37
- addDebugInfo({ _tag: 'js', label: `${label}:queryString`, query: queryString });
38
- return queryString;
39
- }, { label: `${label}:queryString`, meta: { liveStoreThunkType: 'sqlQueryString' } }, otelContext);
40
- label = label ?? queryString$.result;
41
- span.updateName(`querySQL:${label}`);
42
- const queryLabel = `${label}:results` + (this.temporaryQueries ? ':temp' : '');
43
- const results$ = this.graph.makeThunk((get, addDebugInfo) => this.otel.tracer.startActiveSpan('sql', // NOTE span name will be overridden further down
44
- {}, otelContext, (span) => {
45
- try {
46
- const otelContext = otel.trace.setSpan(otel.context.active(), span);
47
- // Establish a reactive dependency on the tables used in the query
48
- for (const tableName of queriedTables) {
49
- const tableRef = this.tableRefs[tableName] ?? shouldNeverHappen(`No table ref found for ${tableName}`);
50
- get(tableRef);
51
- }
52
- const sqlString = get(queryString$);
53
- span.setAttribute('sql.query', sqlString);
54
- span.updateName(`sql:${sqlString.slice(0, 50)}`);
55
- const results = this.inMemoryDB.select(sqlString, {
56
- queriedTables,
57
- bindValues,
58
- parentSpanContext: otelContext,
59
- });
60
- span.setAttribute('sql.rowsCount', results.length);
61
- addDebugInfo({ _tag: 'sql', label: label ?? '', query: sqlString });
62
- return results;
63
- }
64
- finally {
65
- span.end();
66
- }
67
- }), { label: queryLabel }, otelContext);
68
- const query = new LiveStoreSQLQuery({
69
- label,
70
- queryString$,
71
- results$,
72
- componentKey: componentKey ?? globalComponentKey,
73
- store: this,
74
- otelContext,
75
- });
76
- this.activeQueries.add(query);
77
- // TODO get rid of temporary query workaround
78
- if (this.temporaryQueries !== undefined) {
79
- this.temporaryQueries.add(query);
80
- }
81
- // NOTE we are not ending the span here but in the query `destroy` method
82
- return query;
83
- });
84
- this.queryJS = (genResults, componentKey, label = `js${uniqueId()}`, parentSpanContext) => this.otel.tracer.startActiveSpan(`queryJS:${label}`, { attributes: { label } }, parentSpanContext, (span) => {
85
- const otelContext = otel.trace.setSpan(otel.context.active(), span);
86
- const queryLabel = `${label}:results` + (this.temporaryQueries ? ':temp' : '');
87
- const results$ = this.graph.makeThunk((get, addDebugInfo) => {
88
- addDebugInfo({ _tag: 'js', label, query: genResults.toString() });
89
- return genResults(get);
90
- }, { label: queryLabel, meta: { liveStoreThunkType: 'jsResults' } }, otelContext);
91
- const query = new LiveStoreJSQuery({
92
- label,
93
- results$,
94
- componentKey,
95
- store: this,
96
- otelContext,
97
- });
98
- this.activeQueries.add(query);
99
- // TODO get rid of temporary query workaround
100
- if (this.temporaryQueries !== undefined) {
101
- this.temporaryQueries.add(query);
102
- }
103
- // NOTE we are not ending the span here but in the query `destroy` method
104
- return query;
105
- });
106
- this.queryGraphQL = (document, genVariableValues, { componentKey, label }, parentSpanContext) => this.otel.tracer.startActiveSpan(`queryGraphQL`, // NOTE span name will be overridden further down
107
- {}, parentSpanContext, (span) => {
108
- const otelContext = otel.trace.setSpan(otel.context.active(), span);
109
- if (this.graphQLContext === undefined) {
110
- return shouldNeverHappen("Can't run a GraphQL query on a store without GraphQL context");
111
- }
112
- const labelWithDefault = label ?? graphql.getOperationAST(document)?.name?.value ?? 'graphql';
113
- span.updateName(`queryGraphQL:${labelWithDefault}`);
114
- const variableValues$ = this.graph.makeThunk(genVariableValues, { label: `${labelWithDefault}:variableValues`, meta: { liveStoreThunkType: 'graphqlVariableValues' } }, otelContext);
115
- const resultsLabel = `${labelWithDefault}:results` + (this.temporaryQueries ? ':temp' : '');
116
- const results$ = this.graph.makeThunk((get, addDebugInfo) => {
117
- const variableValues = get(variableValues$);
118
- const { result, queriedTables } = this.queryGraphQLOnce(document, variableValues, otelContext);
119
- // Add dependencies on any tables that were used
120
- for (const tableName of queriedTables) {
121
- const tableRef = this.tableRefs[tableName];
122
- assertNever(tableRef !== undefined, `No table ref found for ${tableName}`);
123
- get(tableRef);
124
- }
125
- addDebugInfo({ _tag: 'graphql', label: resultsLabel, query: graphql.print(document) });
126
- return result;
127
- }, { label: resultsLabel, meta: { liveStoreThunkType: 'graphqlResults' } }, otelContext);
128
- const query = new LiveStoreGraphQLQuery({
129
- document,
130
- context: this.graphQLContext,
131
- results$,
132
- componentKey,
133
- label: labelWithDefault,
134
- store: this,
135
- otelContext,
136
- });
137
- this.activeQueries.add(query);
138
- // TODO get rid of temporary query workaround
139
- if (this.temporaryQueries !== undefined) {
140
- this.temporaryQueries.add(query);
141
- }
142
- // NOTE we are not ending the span here but in the query `destroy` method
143
- return query;
144
- });
145
- this.queryGraphQLOnce = (document, variableValues, parentSpanContext) => {
146
- const schema = this.graphQLSchema ?? shouldNeverHappen("Can't run a GraphQL query on a store without GraphQL schema");
147
- const context = this.graphQLContext ?? shouldNeverHappen("Can't run a GraphQL query on a store without GraphQL context");
148
- const tracer = this.otel.tracer;
149
- const spanContext = parentSpanContext ?? this.otel.queriesSpanContext;
150
- const operationName = graphql.getOperationAST(document)?.name?.value;
151
- return tracer.startActiveSpan(`executeGraphQLQuery: ${operationName}`, {}, spanContext, (span) => {
152
- try {
153
- span.setAttribute('graphql.variables', JSON.stringify(variableValues));
154
- span.setAttribute('graphql.query', graphql.print(document));
155
- context.queriedTables.clear();
156
- context.parentSpanContext = otel.trace.setSpan(otel.context.active(), span);
157
- const res = graphql.executeSync({
158
- document,
159
- contextValue: context,
160
- schema: schema,
161
- variableValues,
162
- });
163
- // TODO track number of nested SQL queries via Otel + debug info
164
- if (res.errors) {
165
- span.setStatus({ code: otel.SpanStatusCode.ERROR, message: 'GraphQL error' });
166
- span.setAttribute('graphql.error', res.errors.join('\n'));
167
- span.setAttribute('graphql.error-detail', JSON.stringify(res.errors));
168
- console.error(`graphql error (${operationName})`, res.errors);
169
- }
170
- return { result: res.data, queriedTables: Array.from(context.queriedTables.values()) };
171
- }
172
- finally {
173
- span.end();
174
- }
175
- });
176
- };
177
- /**
178
- * Subscribe to the results of a query
179
- * Returns a function to cancel the subscription.
180
- */
181
- this.subscribe = (query, onNewValue, onSubsubscribe, options) => this.otel.tracer.startActiveSpan(`LiveStore.subscribe`, { attributes: { label: options?.label } }, query.otelContext, (span) => {
182
- const otelContext = otel.trace.setSpan(otel.context.active(), span);
183
- const effect = this.graph.makeEffect((get) => {
184
- const result = get(query.results$);
185
- onNewValue(result);
186
- }, { label: `subscribe:${options?.label}` }, otelContext);
187
- const subscriptionKey = uuid();
188
- const unsubscribe = () => {
189
- try {
190
- this.graph.destroy(effect);
191
- query.activeSubscriptions.delete(subscriptionKey);
192
- onSubsubscribe?.();
193
- }
194
- finally {
195
- span.end();
196
- }
197
- };
198
- query.activeSubscriptions.set(subscriptionKey, unsubscribe);
199
- return unsubscribe;
200
- });
201
- /**
202
- * Any queries created in the callback will be destroyed when the callback is complete.
203
- * Useful for temporarily creating reactive queries, which is an idempotent operation
204
- * that can be safely called inside a React useMemo hook.
205
- */
206
- this.inTempQueryContext = (callback) => {
207
- this.temporaryQueries = new Set();
208
- // TODO: consider errors / try/finally here?
209
- const result = callback();
210
- for (const query of this.temporaryQueries) {
211
- this.destroyQuery(query);
212
- }
213
- this.temporaryQueries = undefined;
214
- return result;
215
- };
216
- /**
217
- * Destroys the entire store, including all queries and subscriptions.
218
- *
219
- * Currently only used when shutting down the app for debugging purposes (e.g. to close Otel spans).
220
- */
221
- this.destroy = () => {
222
- for (const query of this.activeQueries) {
223
- this.destroyQuery(query);
224
- }
225
- Object.values(this.tableRefs).forEach((tableRef) => this.graph.destroy(tableRef));
226
- const applyEventsSpan = otel.trace.getSpan(this.otel.applyEventsSpanContext);
227
- applyEventsSpan.end();
228
- const queriesSpan = otel.trace.getSpan(this.otel.queriesSpanContext);
229
- queriesSpan.end();
230
- // TODO destroy active subscriptions
231
- };
232
- this.destroyQuery = (query) => {
233
- if (query._tag === 'sql') {
234
- // results are downstream of query string, so will automatically be destroyed together
235
- this.graph.destroy(query.queryString$);
236
- }
237
- else {
238
- this.graph.destroy(query.results$);
239
- }
240
- this.activeQueries.delete(query);
241
- query.destroy();
242
- };
243
- /**
244
- * Clean up queries and downstream subscriptions associated with a component.
245
- * This is critical to avoid memory leaks.
246
- */
247
- this.unmountComponent = (componentKey) => {
248
- for (const query of this.activeQueries) {
249
- if (query.componentKey === componentKey) {
250
- this.destroyQuery(query);
251
- }
252
- }
253
- };
254
- /* Apply a single write event to the store, and refresh all queries in response */
255
- this.applyEvent = (eventType, args = {}, options) => {
256
- const skipRefresh = options?.skipRefresh ?? false;
257
- // console.log('applyEvent', { eventType, args, skipRefresh })
258
- const applyEventsSpan = otel.trace.getSpan(this.otel.applyEventsSpanContext);
259
- applyEventsSpan.addEvent('applyEvent');
260
- return this.otel.tracer.startActiveSpan('LiveStore:applyEvent', { attributes: {} }, this.otel.applyEventsSpanContext, (span) => {
261
- try {
262
- const otelContext = otel.trace.setSpan(otel.context.active(), span);
263
- const writeTables = this.applyEventWithoutRefresh(eventType, args, otelContext).writeTables;
264
- const tablesToUpdate = [];
265
- for (const tableName of writeTables) {
266
- const tableRef = this.tableRefs[tableName];
267
- assertNever(tableRef !== undefined, `No table ref found for ${tableName}`);
268
- tablesToUpdate.push([tableRef, null]);
269
- }
270
- // Update all table refs together in a batch, to only trigger one reactive update
271
- this.graph.setRefs(tablesToUpdate, {
272
- otelHint: 'applyEvents',
273
- skipRefresh,
274
- debugRefreshReason: {
275
- _tag: 'applyEvent',
276
- event: { type: eventType, args },
277
- writeTables: [...writeTables],
278
- },
279
- }, otelContext);
280
- }
281
- catch (e) {
282
- span.setStatus({ code: otel.SpanStatusCode.ERROR, message: e.toString() });
283
- console.error(e);
284
- shouldNeverHappen(`Error applying event (${eventType}): ${e.toString()}`);
285
- }
286
- finally {
287
- span.end();
288
- return { durationMs: getDurationMsFromSpan(span) };
289
- }
290
- });
291
- };
292
- /**
293
- * Apply multiple write events to the store, and refresh all queries in response.
294
- * This is faster than calling applyEvent many times in quick succession because
295
- * we can do a single refresh after all the events.
296
- */
297
- this.applyEvents = (
298
- // TODO make args type-safe in polymorphic array case
299
- events, options) => {
300
- const label = options?.label ?? 'applyEvents';
301
- const skipRefresh = options?.skipRefresh ?? false;
302
- const applyEventsSpan = otel.trace.getSpan(this.otel.applyEventsSpanContext);
303
- applyEventsSpan.addEvent('applyEvents');
304
- // console.log('applyEvents', { skipRefresh, events: [...events] })
305
- return this.otel.tracer.startActiveSpan('LiveStore:applyEvents', { attributes: { 'livestore.applyEventsLabel': label } }, this.otel.applyEventsSpanContext, (span) => {
306
- const otelContext = otel.trace.setSpan(otel.context.active(), span);
307
- try {
308
- const writeTables = new Set();
309
- this.otel.tracer.startActiveSpan('LiveStore:processWrites', { attributes: { 'livestore.applyEventsLabel': label } }, otel.trace.setSpan(otel.context.active(), span), (span) => {
310
- try {
311
- const otelContext = otel.trace.setSpan(otel.context.active(), span);
312
- // TODO: what to do about backend transaction here?
313
- this.inMemoryDB.txn(() => {
314
- for (const event of events) {
315
- try {
316
- const { writeTables: writeTablesForEvent } = this.applyEventWithoutRefresh(event.eventType, event.args, otelContext);
317
- for (const tableName of writeTablesForEvent) {
318
- writeTables.add(tableName);
319
- }
320
- }
321
- catch (e) {
322
- console.error(e, event);
323
- }
324
- }
325
- });
326
- }
327
- catch (e) {
328
- console.error(e);
329
- span.setStatus({ code: otel.SpanStatusCode.ERROR, message: e.toString() });
330
- }
331
- finally {
332
- span.end();
333
- }
334
- });
335
- const tablesToUpdate = [];
336
- for (const tableName of writeTables) {
337
- const tableRef = this.tableRefs[tableName];
338
- assertNever(tableRef !== undefined, `No table ref found for ${tableName}`);
339
- tablesToUpdate.push([tableRef, null]);
340
- }
341
- // Update all table refs together in a batch, to only trigger one reactive update
342
- this.graph.setRefs(tablesToUpdate, {
343
- otelHint: 'applyEvents',
344
- skipRefresh,
345
- debugRefreshReason: {
346
- _tag: 'applyEvents',
347
- events: [...events].map((e) => ({ type: e.eventType, args: e.args })),
348
- writeTables: [...writeTables],
349
- },
350
- }, otelContext);
351
- }
352
- catch (e) {
353
- span.setStatus({ code: otel.SpanStatusCode.ERROR, message: e.toString() });
354
- }
355
- finally {
356
- span.end();
357
- return { durationMs: getDurationMsFromSpan(span) };
358
- }
359
- });
360
- };
361
- /**
362
- * This can be used in combination with `skipRefresh` when applying events.
363
- * We might need a better solution for this. Let's see.
364
- */
365
- this.manualRefresh = (options) => {
366
- const { label } = options ?? {};
367
- this.otel.tracer.startActiveSpan('LiveStore:manualRefresh', { attributes: { 'livestore.manualRefreshLabel': label } }, this.otel.applyEventsSpanContext, (span) => {
368
- const otelContext = otel.trace.setSpan(otel.context.active(), span);
369
- this.graph.refresh({ otelHint: 'manualRefresh', debugRefreshReason: { _tag: 'manualRefresh' } }, otelContext);
370
- span.end();
371
- });
372
- };
373
- /**
374
- * Apply an event to the store.
375
- * Returns the tables that were affected by the event.
376
- * This is an internal method that doesn't trigger a refresh;
377
- * the caller must refresh queries after calling this method.
378
- */
379
- this.applyEventWithoutRefresh = (eventType, args = {}, parentSpanContext) => {
380
- return this.otel.tracer.startActiveSpan('LiveStore:applyEventWithoutRefresh', {
381
- attributes: {
382
- 'livestore.actionType': eventType,
383
- 'livestore.args': JSON.stringify(args, null, 2),
384
- },
385
- }, parentSpanContext, (span) => {
386
- const otelContext = otel.trace.setSpan(otel.context.active(), span);
387
- const actionDefinitions = {
388
- ...this.schema.actions,
389
- // Special LiveStore:defined actions
390
- updateComponentState: {
391
- statement: ({ componentKey, columnNames }) => {
392
- const whereClause = componentKey._tag === 'singleton' ? '' : `where id = '${componentKey.id}'`;
393
- const updateClause = columnNames.map((columnName) => `${columnName} = $${columnName}`).join(', ');
394
- const stmt = sql `update ${tableNameForComponentKey(componentKey)} set ${updateClause} ${whereClause}`;
395
- return {
396
- sql: stmt,
397
- writeTables: [tableNameForComponentKey(componentKey)],
398
- };
399
- },
400
- },
401
- };
402
- const actionDefinition = actionDefinitions[eventType] ?? shouldNeverHappen(`Unknown event type: ${eventType}`);
403
- // Generate a fresh ID for the event
404
- const eventWithId = { id: uuid(), type: eventType, args };
405
- // Synchronously apply the event to the in-memory database
406
- const { durationMs } = this.inMemoryDB.applyEvent(eventWithId, actionDefinition, otelContext);
407
- // Asynchronously apply the event to a persistent backend (we're not awaiting this promise here)
408
- if (this.backend !== undefined) {
409
- this.backend.applyEvent(eventWithId, actionDefinition, span);
410
- }
411
- // Uncomment to print a list of queries currently registered on the store
412
- // console.log(JSON.parse(JSON.stringify([...this.queries].map((q) => `${labelForKey(q.componentKey)}/${q.label}`))))
413
- const statement = typeof actionDefinition.statement === 'function'
414
- ? actionDefinition.statement(args)
415
- : actionDefinition.statement;
416
- span.end();
417
- return { writeTables: statement.writeTables, durationMs };
418
- });
419
- };
420
- /**
421
- * Directly execute a SQL query on the Store.
422
- * This should only be used for framework-internal purposes;
423
- * all app writes should go through applyEvent.
424
- */
425
- this.execute = async (query, params = {}, writeTables) => {
426
- this.inMemoryDB.execute(query, params, writeTables);
427
- if (this.backend !== undefined) {
428
- const parentSpan = otel.trace.getSpan(otel.context.active());
429
- this.backend.execute(query, params, parentSpan);
430
- }
431
- };
432
- this.inMemoryDB = db;
433
- this.graph = new ReactiveGraph({
434
- // Do all our updates inside a single React setState batch to avoid multiple UI re-renders
435
- effectsWrapper: (run) => ReactDOM.unstable_batchedUpdates(() => run()),
436
- otelTracer,
437
- });
438
- this.schema = schema;
439
- // TODO generalize the `tableRefs` concept to allow finer-grained refs
440
- this.tableRefs = {};
441
- this.activeQueries = new Set();
442
- this.backend = backend;
443
- const applyEventsSpan = otelTracer.startSpan('LiveStore:applyEvents', {}, otelRootSpanContext);
444
- const otelApplyEventsSpanContext = otel.trace.setSpan(otel.context.active(), applyEventsSpan);
445
- const queriesSpan = otelTracer.startSpan('LiveStore:queries', {}, otelRootSpanContext);
446
- const otelQueriesSpanContext = otel.trace.setSpan(otel.context.active(), queriesSpan);
447
- this.otel = {
448
- tracer: otelTracer,
449
- applyEventsSpanContext: otelApplyEventsSpanContext,
450
- queriesSpanContext: otelQueriesSpanContext,
451
- };
452
- const allTableNames = [
453
- ...Object.keys(this.schema.tables),
454
- ...Object.keys(this.schema.materializedViews),
455
- ...Object.keys(componentStateTables),
456
- ];
457
- for (const tableName of allTableNames) {
458
- this.tableRefs[tableName] = this.graph.makeRef(null, {
459
- equal: () => false,
460
- label: tableName,
461
- meta: { liveStoreRefType: 'table' },
462
- });
463
- }
464
- if (graphQLOptions) {
465
- this.graphQLSchema = graphQLOptions.schema;
466
- this.graphQLContext = graphQLOptions.makeContext(db, this.otel.tracer);
467
- }
468
- }
469
- }
470
- Store.createStore = (storeOptions, parentSpan) => {
471
- const ctx = otel.trace.setSpan(otel.context.active(), parentSpan);
472
- return storeOptions.otelTracer.startActiveSpan('LiveStore:store-constructor', {}, ctx, (span) => {
473
- try {
474
- return new Store(storeOptions);
475
- }
476
- finally {
477
- span.end();
478
- }
479
- });
480
- };
481
- /** Create a new LiveStore Store */
482
- export const createStore = async ({ schema, backendOptions, graphQLOptions, otelTracer = makeNoopTracer(), otelRootSpanContext = otel.context.active(), boot, }) => {
483
- return otelTracer.startActiveSpan('createStore', {}, otelRootSpanContext, async (span) => {
484
- try {
485
- let persistedData;
486
- const backend = await createBackend(backendOptions, {
487
- otelTracer: otelTracer ?? makeNoopTracer(),
488
- parentSpan: otel.trace.getSpan(otelRootSpanContext ?? otel.context.active()) ?? makeNoopSpan(),
489
- });
490
- // if we're resetting the database, run boot here.
491
- let shouldResetDB = false;
492
- // Uncomment this line if you want to reset the database contents.
493
- // let shouldResetDB = true
494
- const existingTablesRaw = await backend.select(sql `SELECT * FROM sqlite_master WHERE type='table';`, undefined, span);
495
- const existingTables = existingTablesRaw.results.map((t) => t.name);
496
- const missingTables = Object.keys(schema.tables).filter((tableName) => !existingTables.includes(tableName));
497
- if (existingTables.length === 0) {
498
- console.log('No existing tables found, loading from schema');
499
- shouldResetDB = true;
500
- }
501
- else if (missingTables.length > 0 &&
502
- window.confirm(`Existing DB is missing ${missingTables.length} tables: ${missingTables.join(', ')}\n\nReset DB? This will reset all of the following tables to empty: ${Object.keys(schema).join(', ')}`)) {
503
- shouldResetDB = true;
504
- }
505
- if (localStorage.getItem(RESET_DB_LOCAL_STORAGE_KEY) !== null) {
506
- shouldResetDB = true;
507
- }
508
- if (shouldResetDB) {
509
- await loadSchema(backend, schema);
510
- localStorage.removeItem(RESET_DB_LOCAL_STORAGE_KEY);
511
- }
512
- if (boot) {
513
- await boot(backend, span);
514
- }
515
- const otelContext = otel.trace.setSpan(otel.context.active(), span);
516
- await otelTracer.startActiveSpan('backend-getPersistedData', {}, otelContext, async (span) => {
517
- try {
518
- persistedData = await backend.getPersistedData(span);
519
- }
520
- finally {
521
- span.end();
522
- }
523
- });
524
- const db = await InMemoryDatabase.load(persistedData, otelTracer, otelRootSpanContext);
525
- configureSQLite(db);
526
- // TODO: we can't apply the schema at this point, we've already loaded persisted data!
527
- // Think about what to do about this case.
528
- // await applySchema(db, schema)
529
- return Store.createStore({ db, schema, backend, graphQLOptions, otelTracer, otelRootSpanContext }, span);
530
- }
531
- finally {
532
- span.end();
533
- }
534
- });
535
- };
536
- /** Set up SQLite performance; hasn't been super carefully optimized yet. */
537
- const configureSQLite = (db) => {
538
- db.execute(
539
- // TODO: revisit these tuning parameters for max performance
540
- sql `
541
- PRAGMA page_size=32768;
542
- PRAGMA cache_size=10000;
543
- PRAGMA journal_mode='MEMORY'; -- we don't flush to disk before committing a write
544
- PRAGMA synchronous='OFF';
545
- PRAGMA temp_store='MEMORY';
546
- PRAGMA foreign_keys='ON'; -- we want foreign key constraints to be enforced
547
- `);
548
- };
549
- //# sourceMappingURL=store.js.map
package/dist/store.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"store.js","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"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"}
package/dist/util.d.ts DELETED
@@ -1,24 +0,0 @@
1
- export type ParamsObject = Record<string, SqlValue>;
2
- export type SqlValue = string | number | Uint8Array;
3
- export type Bindable = SqlValue[] | ParamsObject;
4
- /**
5
- * This is a tag function for tagged literals.
6
- * it lets us get syntax highlighting on SQL queries in VSCode, but
7
- * doesn't do anything at runtime.
8
- * Code copied from: https://esdiscuss.org/topic/string-identity-template-tag
9
- */
10
- export declare const sql: (template: TemplateStringsArray, ...args: unknown[]) => string;
11
- /** Prepare bind values to send to SQLite
12
- /* Add $ to the beginning of keys; which we use as our interpolation syntax
13
- /* We also strip out any params that aren't used in the statement,
14
- /* because rusqlite doesn't allow unused named params
15
- /* TODO: Search for unused params via proper parsing, not string search
16
- **/
17
- export declare const prepareBindValues: (values: ParamsObject, statement: string) => ParamsObject;
18
- /**
19
- * Use this to make assertion at end of if-else chain that all members of a
20
- * union have been accounted for.
21
- */
22
- export declare function casesHandled(x: never): never;
23
- export declare const objectToString: (error: any) => string;
24
- //# sourceMappingURL=util.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;AACnD,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,MAAM,GAAG,UAAU,CAAA;AAEnD,MAAM,MAAM,QAAQ,GAAG,QAAQ,EAAE,GAAG,YAAY,CAAA;AAEhD;;;;;GAKG;AACH,eAAO,MAAM,GAAG,aAAc,oBAAoB,WAAW,OAAO,EAAE,KAAG,MAMxE,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,WAAY,YAAY,aAAa,MAAM,KAAG,YAS3E,CAAA;AAED;;;GAGG;AAEH,wBAAgB,YAAY,CAAC,CAAC,EAAE,KAAK,GAAG,KAAK,CAE5C;AAED,eAAO,MAAM,cAAc,UAAW,GAAG,KAAG,MAa3C,CAAA"}