@livestore/livestore 0.0.24 → 0.0.27

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 (243) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/QueryCache.d.ts +3 -3
  3. package/dist/QueryCache.d.ts.map +1 -1
  4. package/dist/QueryCache.js +50 -60
  5. package/dist/QueryCache.js.map +1 -1
  6. package/dist/__tests__/react/fixture.d.ts +22 -7
  7. package/dist/__tests__/react/fixture.d.ts.map +1 -1
  8. package/dist/__tests__/react/fixture.js +14 -15
  9. package/dist/__tests__/react/fixture.js.map +1 -1
  10. package/dist/__tests__/react/useQuery.test.js +37 -12
  11. package/dist/__tests__/react/useQuery.test.js.map +1 -1
  12. package/dist/__tests__/react/useRow.test.d.ts +2 -0
  13. package/dist/__tests__/react/useRow.test.d.ts.map +1 -0
  14. package/dist/__tests__/react/useRow.test.js +131 -0
  15. package/dist/__tests__/react/useRow.test.js.map +1 -0
  16. package/dist/__tests__/react/utils/stack-info.test.js +32 -0
  17. package/dist/__tests__/react/utils/stack-info.test.js.map +1 -1
  18. package/dist/__tests__/reactive.test.js +51 -0
  19. package/dist/__tests__/reactive.test.js.map +1 -1
  20. package/dist/__tests__/reactiveQueries/sql.test.js +6 -13
  21. package/dist/__tests__/reactiveQueries/sql.test.js.map +1 -1
  22. package/dist/effect/LiveStore.d.ts +3 -3
  23. package/dist/effect/LiveStore.d.ts.map +1 -1
  24. package/dist/effect/LiveStore.js +2 -2
  25. package/dist/effect/LiveStore.js.map +1 -1
  26. package/dist/global-state.d.ts +19 -0
  27. package/dist/global-state.d.ts.map +1 -0
  28. package/dist/global-state.js +20 -0
  29. package/dist/global-state.js.map +1 -0
  30. package/dist/inMemoryDatabase.d.ts +6 -6
  31. package/dist/inMemoryDatabase.d.ts.map +1 -1
  32. package/dist/inMemoryDatabase.js +16 -10
  33. package/dist/inMemoryDatabase.js.map +1 -1
  34. package/dist/index.d.ts +9 -13
  35. package/dist/index.d.ts.map +1 -1
  36. package/dist/index.js +7 -8
  37. package/dist/index.js.map +1 -1
  38. package/dist/migrations.d.ts +4 -4
  39. package/dist/migrations.d.ts.map +1 -1
  40. package/dist/migrations.js +34 -28
  41. package/dist/migrations.js.map +1 -1
  42. package/dist/react/LiveStoreContext.js.map +1 -1
  43. package/dist/react/LiveStoreProvider.d.ts +2 -2
  44. package/dist/react/LiveStoreProvider.d.ts.map +1 -1
  45. package/dist/react/LiveStoreProvider.js.map +1 -1
  46. package/dist/react/index.d.ts +1 -2
  47. package/dist/react/index.d.ts.map +1 -1
  48. package/dist/react/index.js +1 -1
  49. package/dist/react/index.js.map +1 -1
  50. package/dist/react/useQuery.d.ts +3 -0
  51. package/dist/react/useQuery.d.ts.map +1 -1
  52. package/dist/react/useQuery.js +7 -6
  53. package/dist/react/useQuery.js.map +1 -1
  54. package/dist/react/useRow.d.ts +33 -0
  55. package/dist/react/useRow.d.ts.map +1 -0
  56. package/dist/react/useRow.js +136 -0
  57. package/dist/react/useRow.js.map +1 -0
  58. package/dist/react/useTemporaryQuery.d.ts +2 -0
  59. package/dist/react/useTemporaryQuery.d.ts.map +1 -1
  60. package/dist/react/useTemporaryQuery.js +28 -11
  61. package/dist/react/useTemporaryQuery.js.map +1 -1
  62. package/dist/react/utils/stack-info.d.ts.map +1 -1
  63. package/dist/react/utils/stack-info.js +3 -3
  64. package/dist/react/utils/stack-info.js.map +1 -1
  65. package/dist/react/utils/useStateRefWithReactiveInput.js.map +1 -1
  66. package/dist/reactive.d.ts +38 -29
  67. package/dist/reactive.d.ts.map +1 -1
  68. package/dist/reactive.js +73 -45
  69. package/dist/reactive.js.map +1 -1
  70. package/dist/reactiveQueries/base-class.d.ts +10 -6
  71. package/dist/reactiveQueries/base-class.d.ts.map +1 -1
  72. package/dist/reactiveQueries/base-class.js +11 -12
  73. package/dist/reactiveQueries/base-class.js.map +1 -1
  74. package/dist/reactiveQueries/graphql.d.ts +2 -2
  75. package/dist/reactiveQueries/graphql.d.ts.map +1 -1
  76. package/dist/reactiveQueries/graphql.js +56 -50
  77. package/dist/reactiveQueries/graphql.js.map +1 -1
  78. package/dist/reactiveQueries/js.d.ts +7 -3
  79. package/dist/reactiveQueries/js.d.ts.map +1 -1
  80. package/dist/reactiveQueries/js.js +25 -15
  81. package/dist/reactiveQueries/js.js.map +1 -1
  82. package/dist/reactiveQueries/sql.d.ts +5 -5
  83. package/dist/reactiveQueries/sql.d.ts.map +1 -1
  84. package/dist/reactiveQueries/sql.js +39 -34
  85. package/dist/reactiveQueries/sql.js.map +1 -1
  86. package/dist/row-query.d.ts +21 -0
  87. package/dist/row-query.d.ts.map +1 -0
  88. package/dist/row-query.js +77 -0
  89. package/dist/row-query.js.map +1 -0
  90. package/dist/schema/action.d.ts +30 -0
  91. package/dist/schema/action.d.ts.map +1 -0
  92. package/dist/schema/action.js +3 -0
  93. package/dist/schema/action.js.map +1 -0
  94. package/dist/schema/index.d.ts +28 -0
  95. package/dist/schema/index.d.ts.map +1 -0
  96. package/dist/schema/index.js +26 -0
  97. package/dist/schema/index.js.map +1 -0
  98. package/dist/schema/system-tables.d.ts +24 -0
  99. package/dist/schema/system-tables.d.ts.map +1 -0
  100. package/dist/schema/system-tables.js +11 -0
  101. package/dist/schema/system-tables.js.map +1 -0
  102. package/dist/schema/table-def.d.ts +161 -0
  103. package/dist/schema/table-def.d.ts.map +1 -0
  104. package/dist/schema/table-def.js +53 -0
  105. package/dist/schema/table-def.js.map +1 -0
  106. package/dist/storage/in-memory/index.d.ts +1 -1
  107. package/dist/storage/in-memory/index.d.ts.map +1 -1
  108. package/dist/storage/in-memory/index.js +6 -7
  109. package/dist/storage/in-memory/index.js.map +1 -1
  110. package/dist/storage/index.d.ts +1 -1
  111. package/dist/storage/index.d.ts.map +1 -1
  112. package/dist/storage/tauri/index.d.ts +1 -1
  113. package/dist/storage/tauri/index.d.ts.map +1 -1
  114. package/dist/storage/tauri/index.js +25 -23
  115. package/dist/storage/tauri/index.js.map +1 -1
  116. package/dist/storage/utils/idb.js +3 -1
  117. package/dist/storage/utils/idb.js.map +1 -1
  118. package/dist/storage/web-worker/index.d.ts +1 -1
  119. package/dist/storage/web-worker/index.d.ts.map +1 -1
  120. package/dist/storage/web-worker/index.js +38 -34
  121. package/dist/storage/web-worker/index.js.map +1 -1
  122. package/dist/storage/web-worker/worker.d.ts +1 -1
  123. package/dist/storage/web-worker/worker.d.ts.map +1 -1
  124. package/dist/storage/web-worker/worker.js +1 -1
  125. package/dist/storage/web-worker/worker.js.map +1 -1
  126. package/dist/store.d.ts +11 -21
  127. package/dist/store.d.ts.map +1 -1
  128. package/dist/store.js +284 -272
  129. package/dist/store.js.map +1 -1
  130. package/dist/utils/bounded-collections.d.ts.map +1 -0
  131. package/dist/utils/bounded-collections.js +90 -0
  132. package/dist/utils/bounded-collections.js.map +1 -0
  133. package/dist/utils/otel.d.ts.map +1 -0
  134. package/dist/{otel.js → utils/otel.js} +1 -1
  135. package/dist/utils/otel.js.map +1 -0
  136. package/dist/utils/util.d.ts.map +1 -0
  137. package/dist/utils/util.js.map +1 -0
  138. package/package.json +21 -18
  139. package/src/QueryCache.ts +4 -4
  140. package/src/__tests__/react/fixture.tsx +17 -17
  141. package/src/__tests__/react/useQuery.test.tsx +56 -14
  142. package/src/__tests__/react/useRow.test.tsx +205 -0
  143. package/src/__tests__/react/utils/stack-info.test.ts +34 -0
  144. package/src/__tests__/reactive.test.ts +71 -0
  145. package/src/__tests__/reactiveQueries/sql.test.ts +6 -13
  146. package/src/effect/LiveStore.ts +7 -7
  147. package/src/global-state.ts +26 -0
  148. package/src/inMemoryDatabase.ts +14 -12
  149. package/src/index.ts +22 -29
  150. package/src/migrations.ts +41 -35
  151. package/src/react/LiveStoreProvider.tsx +2 -2
  152. package/src/react/index.ts +7 -9
  153. package/src/react/useQuery.ts +12 -6
  154. package/src/react/useRow.ts +221 -0
  155. package/src/react/useTemporaryQuery.ts +43 -11
  156. package/src/react/utils/stack-info.ts +4 -3
  157. package/src/reactive.ts +81 -65
  158. package/src/reactiveQueries/base-class.ts +14 -10
  159. package/src/reactiveQueries/graphql.ts +4 -3
  160. package/src/reactiveQueries/js.ts +9 -5
  161. package/src/reactiveQueries/sql.ts +9 -9
  162. package/src/row-query.ts +142 -0
  163. package/src/schema/action.ts +41 -0
  164. package/src/schema/index.ts +63 -0
  165. package/src/schema/system-tables.ts +21 -0
  166. package/src/schema/table-def.ts +199 -0
  167. package/src/storage/in-memory/index.ts +1 -1
  168. package/src/storage/index.ts +2 -1
  169. package/src/storage/tauri/index.ts +2 -2
  170. package/src/storage/web-worker/index.ts +1 -1
  171. package/src/storage/web-worker/worker.ts +2 -2
  172. package/src/store.ts +51 -51
  173. package/dist/__tests__/react/useComponentState.test.d.ts +0 -2
  174. package/dist/__tests__/react/useComponentState.test.d.ts.map +0 -1
  175. package/dist/__tests__/react/useComponentState.test.js +0 -68
  176. package/dist/__tests__/react/useComponentState.test.js.map +0 -1
  177. package/dist/__tests__/react/useLQuery.test.d.ts +0 -2
  178. package/dist/__tests__/react/useLQuery.test.d.ts.map +0 -1
  179. package/dist/__tests__/react/useLQuery.test.js +0 -38
  180. package/dist/__tests__/react/useLQuery.test.js.map +0 -1
  181. package/dist/__tests__/react/useLiveStoreComponent.test.d.ts +0 -2
  182. package/dist/__tests__/react/useLiveStoreComponent.test.d.ts.map +0 -1
  183. package/dist/__tests__/react/useLiveStoreComponent.test.js +0 -73
  184. package/dist/__tests__/react/useLiveStoreComponent.test.js.map +0 -1
  185. package/dist/__tests__/react/utils/extractStackInfoFromStackTrace.test.d.ts +0 -2
  186. package/dist/__tests__/react/utils/extractStackInfoFromStackTrace.test.d.ts.map +0 -1
  187. package/dist/__tests__/react/utils/extractStackInfoFromStackTrace.test.js +0 -38
  188. package/dist/__tests__/react/utils/extractStackInfoFromStackTrace.test.js.map +0 -1
  189. package/dist/bounded-collections.d.ts.map +0 -1
  190. package/dist/bounded-collections.js +0 -103
  191. package/dist/bounded-collections.js.map +0 -1
  192. package/dist/componentKey.d.ts +0 -20
  193. package/dist/componentKey.d.ts.map +0 -1
  194. package/dist/componentKey.js +0 -3
  195. package/dist/componentKey.js.map +0 -1
  196. package/dist/otel.d.ts.map +0 -1
  197. package/dist/otel.js.map +0 -1
  198. package/dist/react/useComponentState.d.ts +0 -50
  199. package/dist/react/useComponentState.d.ts.map +0 -1
  200. package/dist/react/useComponentState.js +0 -240
  201. package/dist/react/useComponentState.js.map +0 -1
  202. package/dist/react/useGlobalQuery.d.ts +0 -3
  203. package/dist/react/useGlobalQuery.d.ts.map +0 -1
  204. package/dist/react/useGlobalQuery.js +0 -26
  205. package/dist/react/useGlobalQuery.js.map +0 -1
  206. package/dist/react/useGraphQL.d.ts +0 -13
  207. package/dist/react/useGraphQL.d.ts.map +0 -1
  208. package/dist/react/useGraphQL.js +0 -87
  209. package/dist/react/useGraphQL.js.map +0 -1
  210. package/dist/react/useLiveStoreComponent.d.ts +0 -75
  211. package/dist/react/useLiveStoreComponent.d.ts.map +0 -1
  212. package/dist/react/useLiveStoreComponent.js +0 -361
  213. package/dist/react/useLiveStoreComponent.js.map +0 -1
  214. package/dist/react/utils/extractNamesFromStackTrace.d.ts +0 -3
  215. package/dist/react/utils/extractNamesFromStackTrace.d.ts.map +0 -1
  216. package/dist/react/utils/extractNamesFromStackTrace.js +0 -40
  217. package/dist/react/utils/extractNamesFromStackTrace.js.map +0 -1
  218. package/dist/react/utils/extractStackInfoFromStackTrace.d.ts +0 -7
  219. package/dist/react/utils/extractStackInfoFromStackTrace.d.ts.map +0 -1
  220. package/dist/react/utils/extractStackInfoFromStackTrace.js +0 -40
  221. package/dist/react/utils/extractStackInfoFromStackTrace.js.map +0 -1
  222. package/dist/reactiveQueries/graph.d.ts +0 -10
  223. package/dist/reactiveQueries/graph.d.ts.map +0 -1
  224. package/dist/reactiveQueries/graph.js +0 -6
  225. package/dist/reactiveQueries/graph.js.map +0 -1
  226. package/dist/schema.d.ts +0 -81
  227. package/dist/schema.d.ts.map +0 -1
  228. package/dist/schema.js +0 -46
  229. package/dist/schema.js.map +0 -1
  230. package/dist/util.d.ts.map +0 -1
  231. package/dist/util.js.map +0 -1
  232. package/src/__tests__/react/useComponentState.test.tsx +0 -100
  233. package/src/componentKey.ts +0 -9
  234. package/src/react/useComponentState.ts +0 -404
  235. package/src/reactiveQueries/graph.ts +0 -15
  236. package/src/schema.ts +0 -143
  237. /package/dist/{bounded-collections.d.ts → utils/bounded-collections.d.ts} +0 -0
  238. /package/dist/{otel.d.ts → utils/otel.d.ts} +0 -0
  239. /package/dist/{util.d.ts → utils/util.d.ts} +0 -0
  240. /package/dist/{util.js → utils/util.js} +0 -0
  241. /package/src/{bounded-collections.ts → utils/bounded-collections.ts} +0 -0
  242. /package/src/{otel.ts → utils/otel.ts} +0 -0
  243. /package/src/{util.ts → utils/util.ts} +0 -0
package/dist/store.js CHANGED
@@ -2,252 +2,29 @@ import { assertNever, makeNoopSpan, makeNoopTracer, shouldNeverHappen } from '@l
2
2
  import { identity } from '@livestore/utils/effect';
3
3
  import * as otel from '@opentelemetry/api';
4
4
  import { v4 as uuid } from 'uuid';
5
- import { tableNameForComponentKey } from './componentKey.js';
5
+ import { dbGraph, dynamicallyRegisteredTables } from './global-state.js';
6
6
  import { InMemoryDatabase } from './inMemoryDatabase.js';
7
7
  import { migrateDb } from './migrations.js';
8
- import { getDurationMsFromSpan } from './otel.js';
9
- import { dbGraph } from './reactiveQueries/graph.js';
10
- import { componentStateTables } from './schema.js';
11
- import { isPromise, prepareBindValues, sql } from './util.js';
8
+ import { getDurationMsFromSpan } from './utils/otel.js';
9
+ import { isPromise, prepareBindValues, sql } from './utils/util.js';
12
10
  export class Store {
11
+ graph;
12
+ inMemoryDB;
13
+ // TODO refactor
14
+ _proxyDb;
15
+ schema;
16
+ graphQLSchema;
17
+ graphQLContext;
18
+ otel;
19
+ /**
20
+ * Note we're using `Ref<null>` here as we don't care about the value but only about *that* something has changed.
21
+ * This only works in combination with `equal: () => false` which will always trigger a refresh.
22
+ */
23
+ tableRefs;
24
+ /** RC-based set to see which queries are currently subscribed to */
25
+ activeQueries;
26
+ storage;
13
27
  constructor({ db, dbProxy, schema, storage, graphQLOptions, otelTracer, otelRootSpanContext, }) {
14
- /**
15
- * Subscribe to the results of a query
16
- * Returns a function to cancel the subscription.
17
- */
18
- this.subscribe = (query, onNewValue, onUnsubsubscribe, options) => this.otel.tracer.startActiveSpan(`LiveStore.subscribe`, { attributes: { label: options?.label } }, options?.otelContext ?? this.otel.queriesSpanContext, (span) => {
19
- const otelContext = otel.trace.setSpan(otel.context.active(), span);
20
- const label = `subscribe:${options?.label}`;
21
- const effect = this.graph.makeEffect((get) => onNewValue(get(query.results$)), { label });
22
- this.activeQueries.add(query);
23
- // Running effect right away to get initial value (unless `skipInitialRun` is set)
24
- if (options?.skipInitialRun !== true) {
25
- effect.doEffect(otelContext);
26
- }
27
- const unsubscribe = () => {
28
- try {
29
- this.graph.destroy(effect);
30
- this.activeQueries.remove(query);
31
- onUnsubsubscribe?.();
32
- }
33
- finally {
34
- span.end();
35
- }
36
- };
37
- return unsubscribe;
38
- });
39
- /**
40
- * Destroys the entire store, including all queries and subscriptions.
41
- *
42
- * Currently only used when shutting down the app for debugging purposes (e.g. to close Otel spans).
43
- */
44
- this.destroy = () => {
45
- Object.values(this.tableRefs).forEach((tableRef) => this.graph.destroy(tableRef));
46
- otel.trace.getSpan(this.otel.applyEventsSpanContext).end();
47
- otel.trace.getSpan(this.otel.queriesSpanContext).end();
48
- // TODO destroy active subscriptions
49
- };
50
- /* Apply a single write event to the store, and refresh all queries in response */
51
- this.applyEvent = (eventType, args = {}, options) => {
52
- const skipRefresh = options?.skipRefresh ?? false;
53
- // console.log('applyEvent', { eventType, args, skipRefresh })
54
- const applyEventsSpan = otel.trace.getSpan(this.otel.applyEventsSpanContext);
55
- applyEventsSpan.addEvent('applyEvent');
56
- return this.otel.tracer.startActiveSpan('LiveStore:applyEvent', { attributes: {} }, this.otel.applyEventsSpanContext, (span) => {
57
- try {
58
- const otelContext = otel.trace.setSpan(otel.context.active(), span);
59
- const writeTables = this.applyEventWithoutRefresh(eventType, args, otelContext).writeTables;
60
- const tablesToUpdate = [];
61
- for (const tableName of writeTables) {
62
- const tableRef = this.tableRefs[tableName];
63
- assertNever(tableRef !== undefined, `No table ref found for ${tableName}`);
64
- tablesToUpdate.push([tableRef, null]);
65
- }
66
- const debugRefreshReason = {
67
- _tag: 'applyEvent',
68
- event: { type: eventType, args },
69
- writeTables: [...writeTables],
70
- };
71
- // Update all table refs together in a batch, to only trigger one reactive update
72
- this.graph.setRefs(tablesToUpdate, { debugRefreshReason, otelContext });
73
- if (skipRefresh === false) {
74
- // TODO update the graph
75
- // this.graph.refresh(
76
- // {
77
- // otelHint: 'applyEvents',
78
- // debugRefreshReason,
79
- // },
80
- // otelContext,
81
- // )
82
- }
83
- }
84
- catch (e) {
85
- span.setStatus({ code: otel.SpanStatusCode.ERROR, message: e.toString() });
86
- console.error(e);
87
- shouldNeverHappen(`Error applying event (${eventType}): ${e.toString()}`);
88
- }
89
- finally {
90
- span.end();
91
- return { durationMs: getDurationMsFromSpan(span) };
92
- }
93
- });
94
- };
95
- /**
96
- * Apply multiple write events to the store, and refresh all queries in response.
97
- * This is faster than calling applyEvent many times in quick succession because
98
- * we can do a single refresh after all the events.
99
- */
100
- this.applyEvents = (
101
- // TODO make args type-safe in polymorphic array case
102
- events, options) => {
103
- const label = options?.label ?? 'applyEvents';
104
- const skipRefresh = options?.skipRefresh ?? false;
105
- const applyEventsSpan = otel.trace.getSpan(this.otel.applyEventsSpanContext);
106
- applyEventsSpan.addEvent('applyEvents');
107
- // console.log('applyEvents', { skipRefresh, events: [...events] })
108
- return this.otel.tracer.startActiveSpan('LiveStore:applyEvents', { attributes: { 'livestore.applyEventsLabel': label } }, this.otel.applyEventsSpanContext, (span) => {
109
- const otelContext = otel.trace.setSpan(otel.context.active(), span);
110
- try {
111
- const writeTables = new Set();
112
- this.otel.tracer.startActiveSpan('LiveStore:processWrites', { attributes: { 'livestore.applyEventsLabel': label } }, otel.trace.setSpan(otel.context.active(), span), (span) => {
113
- try {
114
- const otelContext = otel.trace.setSpan(otel.context.active(), span);
115
- // TODO: what to do about storage transaction here?
116
- this.inMemoryDB.txn(() => {
117
- for (const event of events) {
118
- try {
119
- const { writeTables: writeTablesForEvent } = this.applyEventWithoutRefresh(event.eventType, event.args, otelContext);
120
- for (const tableName of writeTablesForEvent) {
121
- writeTables.add(tableName);
122
- }
123
- }
124
- catch (e) {
125
- console.error(e, event);
126
- }
127
- }
128
- });
129
- }
130
- catch (e) {
131
- console.error(e);
132
- span.setStatus({ code: otel.SpanStatusCode.ERROR, message: e.toString() });
133
- }
134
- finally {
135
- span.end();
136
- }
137
- });
138
- const tablesToUpdate = [];
139
- for (const tableName of writeTables) {
140
- const tableRef = this.tableRefs[tableName];
141
- assertNever(tableRef !== undefined, `No table ref found for ${tableName}`);
142
- tablesToUpdate.push([tableRef, null]);
143
- }
144
- const debugRefreshReason = {
145
- _tag: 'applyEvents',
146
- events: [...events].map((e) => ({ type: e.eventType, args: e.args })),
147
- writeTables: [...writeTables],
148
- };
149
- // Update all table refs together in a batch, to only trigger one reactive update
150
- this.graph.setRefs(tablesToUpdate, { debugRefreshReason, otelContext });
151
- if (skipRefresh === false) {
152
- // TODO update the graph
153
- // this.graph.refresh({ debugRefreshReason, otelHint: 'applyEvents' }, otelContext)
154
- }
155
- }
156
- catch (e) {
157
- span.setStatus({ code: otel.SpanStatusCode.ERROR, message: e.toString() });
158
- }
159
- finally {
160
- span.end();
161
- return { durationMs: getDurationMsFromSpan(span) };
162
- }
163
- });
164
- };
165
- /**
166
- * This can be used in combination with `skipRefresh` when applying events.
167
- * We might need a better solution for this. Let's see.
168
- */
169
- this.manualRefresh = (options) => {
170
- const { label } = options ?? {};
171
- this.otel.tracer.startActiveSpan('LiveStore:manualRefresh', { attributes: { 'livestore.manualRefreshLabel': label } }, this.otel.applyEventsSpanContext, (span) => {
172
- // const otelContext = otel.trace.setSpan(otel.context.active(), span)
173
- // TODO update the graph
174
- // this.graph.refresh({ otelHint: 'manualRefresh', debugRefreshReason: { _tag: 'manualRefresh' } }, otelContext)
175
- span.end();
176
- });
177
- };
178
- /**
179
- * Apply an event to the store.
180
- * Returns the tables that were affected by the event.
181
- * This is an internal method that doesn't trigger a refresh;
182
- * the caller must refresh queries after calling this method.
183
- */
184
- this.applyEventWithoutRefresh = (eventType, args = {}, otelContext) => {
185
- return this.otel.tracer.startActiveSpan('LiveStore:applyEventWithoutRefresh', {
186
- attributes: {
187
- 'livestore.actionType': eventType,
188
- 'livestore.args': JSON.stringify(args, null, 2),
189
- },
190
- }, otelContext, (span) => {
191
- const otelContext = otel.trace.setSpan(otel.context.active(), span);
192
- const actionDefinitions = {
193
- ...this.schema.actions,
194
- // Special LiveStore:defined actions
195
- updateComponentState: {
196
- statement: ({ componentKey, columnNames }) => {
197
- const whereClause = componentKey._tag === 'singleton' ? '' : `where id = '${componentKey.id}'`;
198
- const updateClause = columnNames.map((columnName) => `${columnName} = $${columnName}`).join(', ');
199
- const stmt = sql `update ${tableNameForComponentKey(componentKey)} set ${updateClause} ${whereClause}`;
200
- return {
201
- sql: stmt,
202
- writeTables: [tableNameForComponentKey(componentKey)],
203
- };
204
- },
205
- },
206
- RawSql: {
207
- statement: ({ sql, writeTables }) => ({
208
- sql,
209
- writeTables,
210
- argsAlreadyBound: false,
211
- }),
212
- prepareBindValues: ({ bindValues }) => bindValues,
213
- },
214
- };
215
- const actionDefinition = actionDefinitions[eventType] ?? shouldNeverHappen(`Unknown event type: ${eventType}`);
216
- // Generate a fresh ID for the event
217
- const eventWithId = { id: uuid(), type: eventType, args };
218
- // Synchronously apply the event to the in-memory database
219
- // const { durationMs } = this.inMemoryDB.applyEvent(eventWithId, actionDefinition, otelContext)
220
- const { statement, bindValues } = eventToSql(eventWithId, actionDefinition);
221
- const { durationMs } = this.inMemoryDB.execute(statement.sql, prepareBindValues(bindValues, statement.sql), statement.writeTables, {
222
- otelContext,
223
- });
224
- // Asynchronously apply the event to a persistent storage (we're not awaiting this promise here)
225
- if (this.storage !== undefined) {
226
- // this.storage.applyEvent(eventWithId, actionDefinition, span)
227
- this.storage.execute(statement.sql, prepareBindValues(bindValues, statement.sql), span);
228
- }
229
- // Uncomment to print a list of queries currently registered on the store
230
- // console.log(JSON.parse(JSON.stringify([...this.queries].map((q) => `${labelForKey(q.componentKey)}/${q.label}`))))
231
- // const statement =
232
- // typeof actionDefinition.statement === 'function'
233
- // ? actionDefinition.statement(args)
234
- // : actionDefinition.statement
235
- span.end();
236
- return { writeTables: statement.writeTables, durationMs };
237
- });
238
- };
239
- /**
240
- * Directly execute a SQL query on the Store.
241
- * This should only be used for framework-internal purposes;
242
- * all app writes should go through applyEvent.
243
- */
244
- this.execute = (query, params = {}, writeTables, otelContext) => {
245
- this.inMemoryDB.execute(query, prepareBindValues(params, query), writeTables, { otelContext });
246
- if (this.storage !== undefined) {
247
- const parentSpan = otel.trace.getSpan(otel.context.active());
248
- this.storage.execute(query, prepareBindValues(params, query), parentSpan);
249
- }
250
- };
251
28
  this.inMemoryDB = db;
252
29
  this._proxyDb = dbProxy;
253
30
  this.schema = schema;
@@ -267,11 +44,12 @@ export class Store {
267
44
  applyEventsSpanContext: otelApplyEventsSpanContext,
268
45
  queriesSpanContext: otelQueriesSpanContext,
269
46
  };
270
- const allTableNames = [
271
- ...Object.keys(this.schema.tables),
272
- ...Object.keys(this.schema.materializedViews),
273
- ...Object.keys(componentStateTables),
274
- ];
47
+ // Need a set here since `schema.tables` might contain duplicates and some componentStateTables
48
+ const allTableNames = new Set([
49
+ ...this.schema.tables.keys(),
50
+ // TODO activate dynamic tables
51
+ ...Array.from(dynamicallyRegisteredTables.values()).map((_) => _.schema.name),
52
+ ]);
275
53
  for (const tableName of allTableNames) {
276
54
  this.tableRefs[tableName] = this.graph.makeRef(null, {
277
55
  equal: () => false,
@@ -284,18 +62,251 @@ export class Store {
284
62
  this.graphQLContext = graphQLOptions.makeContext(db, this.otel.tracer);
285
63
  }
286
64
  }
287
- }
288
- Store.createStore = (storeOptions, parentSpan) => {
289
- const ctx = otel.trace.setSpan(otel.context.active(), parentSpan);
290
- return storeOptions.otelTracer.startActiveSpan('LiveStore:store-constructor', {}, ctx, (span) => {
291
- try {
292
- return new Store(storeOptions);
65
+ static createStore = (storeOptions, parentSpan) => {
66
+ const ctx = otel.trace.setSpan(otel.context.active(), parentSpan);
67
+ return storeOptions.otelTracer.startActiveSpan('LiveStore:store-constructor', {}, ctx, (span) => {
68
+ try {
69
+ return new Store(storeOptions);
70
+ }
71
+ finally {
72
+ span.end();
73
+ }
74
+ });
75
+ };
76
+ /**
77
+ * Subscribe to the results of a query
78
+ * Returns a function to cancel the subscription.
79
+ */
80
+ subscribe = (query, onNewValue, onUnsubsubscribe, options) => this.otel.tracer.startActiveSpan(`LiveStore.subscribe`, { attributes: { label: options?.label, queryLabel: query.label } }, options?.otelContext ?? this.otel.queriesSpanContext, (span) => {
81
+ const otelContext = otel.trace.setSpan(otel.context.active(), span);
82
+ const label = `subscribe:${options?.label}`;
83
+ const effect = this.graph.makeEffect((get) => onNewValue(get(query.results$)), { label });
84
+ this.activeQueries.add(query);
85
+ // Running effect right away to get initial value (unless `skipInitialRun` is set)
86
+ if (options?.skipInitialRun !== true) {
87
+ effect.doEffect(otelContext);
293
88
  }
294
- finally {
89
+ const unsubscribe = () => {
90
+ try {
91
+ this.graph.destroy(effect);
92
+ this.activeQueries.remove(query);
93
+ onUnsubsubscribe?.();
94
+ }
95
+ finally {
96
+ span.end();
97
+ }
98
+ };
99
+ return unsubscribe;
100
+ });
101
+ /**
102
+ * Destroys the entire store, including all queries and subscriptions.
103
+ *
104
+ * Currently only used when shutting down the app for debugging purposes (e.g. to close Otel spans).
105
+ */
106
+ destroy = () => {
107
+ Object.values(this.tableRefs).forEach((tableRef) => this.graph.destroy(tableRef));
108
+ otel.trace.getSpan(this.otel.applyEventsSpanContext).end();
109
+ otel.trace.getSpan(this.otel.queriesSpanContext).end();
110
+ // TODO destroy active subscriptions
111
+ };
112
+ /* Apply a single write event to the store, and refresh all queries in response */
113
+ applyEvent = (eventType, args = {}, options) => {
114
+ const skipRefresh = options?.skipRefresh ?? false;
115
+ // console.log('applyEvent', { eventType, args, skipRefresh })
116
+ const applyEventsSpan = otel.trace.getSpan(this.otel.applyEventsSpanContext);
117
+ applyEventsSpan.addEvent('applyEvent');
118
+ return this.otel.tracer.startActiveSpan('LiveStore:applyEvent', { attributes: {} }, this.otel.applyEventsSpanContext, (span) => {
119
+ try {
120
+ const otelContext = otel.trace.setSpan(otel.context.active(), span);
121
+ const writeTables = this.applyEventWithoutRefresh(eventType, args, otelContext).writeTables;
122
+ const tablesToUpdate = [];
123
+ for (const tableName of writeTables) {
124
+ const tableRef = this.tableRefs[tableName];
125
+ assertNever(tableRef !== undefined, `No table ref found for ${tableName}`);
126
+ tablesToUpdate.push([tableRef, null]);
127
+ }
128
+ const debugRefreshReason = {
129
+ _tag: 'applyEvent',
130
+ event: { type: eventType, args },
131
+ writeTables: [...writeTables],
132
+ };
133
+ // Update all table refs together in a batch, to only trigger one reactive update
134
+ this.graph.setRefs(tablesToUpdate, { debugRefreshReason, otelContext });
135
+ if (skipRefresh === false) {
136
+ // TODO update the graph
137
+ // this.graph.refresh(
138
+ // {
139
+ // otelHint: 'applyEvents',
140
+ // debugRefreshReason,
141
+ // },
142
+ // otelContext,
143
+ // )
144
+ }
145
+ }
146
+ catch (e) {
147
+ span.setStatus({ code: otel.SpanStatusCode.ERROR, message: e.toString() });
148
+ console.error(e);
149
+ shouldNeverHappen(`Error applying event (${eventType}): ${e.toString()}`);
150
+ }
151
+ finally {
152
+ span.end();
153
+ return { durationMs: getDurationMsFromSpan(span) };
154
+ }
155
+ });
156
+ };
157
+ /**
158
+ * Apply multiple write events to the store, and refresh all queries in response.
159
+ * This is faster than calling applyEvent many times in quick succession because
160
+ * we can do a single refresh after all the events.
161
+ */
162
+ applyEvents = (
163
+ // TODO make args type-safe in polymorphic array case
164
+ events, options) => {
165
+ const label = options?.label ?? 'applyEvents';
166
+ const skipRefresh = options?.skipRefresh ?? false;
167
+ const applyEventsSpan = otel.trace.getSpan(this.otel.applyEventsSpanContext);
168
+ applyEventsSpan.addEvent('applyEvents');
169
+ // console.log('applyEvents', { skipRefresh, events: [...events] })
170
+ return this.otel.tracer.startActiveSpan('LiveStore:applyEvents', { attributes: { 'livestore.applyEventsLabel': label } }, this.otel.applyEventsSpanContext, (span) => {
171
+ const otelContext = otel.trace.setSpan(otel.context.active(), span);
172
+ try {
173
+ const writeTables = new Set();
174
+ this.otel.tracer.startActiveSpan('LiveStore:processWrites', { attributes: { 'livestore.applyEventsLabel': label } }, otel.trace.setSpan(otel.context.active(), span), (span) => {
175
+ try {
176
+ const otelContext = otel.trace.setSpan(otel.context.active(), span);
177
+ // TODO: what to do about storage transaction here?
178
+ this.inMemoryDB.txn(() => {
179
+ for (const event of events) {
180
+ try {
181
+ const { writeTables: writeTablesForEvent } = this.applyEventWithoutRefresh(event.eventType, event.args, otelContext);
182
+ for (const tableName of writeTablesForEvent) {
183
+ writeTables.add(tableName);
184
+ }
185
+ }
186
+ catch (e) {
187
+ console.error(e, event);
188
+ }
189
+ }
190
+ });
191
+ }
192
+ catch (e) {
193
+ console.error(e);
194
+ span.setStatus({ code: otel.SpanStatusCode.ERROR, message: e.toString() });
195
+ }
196
+ finally {
197
+ span.end();
198
+ }
199
+ });
200
+ const tablesToUpdate = [];
201
+ for (const tableName of writeTables) {
202
+ const tableRef = this.tableRefs[tableName];
203
+ assertNever(tableRef !== undefined, `No table ref found for ${tableName}`);
204
+ tablesToUpdate.push([tableRef, null]);
205
+ }
206
+ const debugRefreshReason = {
207
+ _tag: 'applyEvents',
208
+ events: [...events].map((e) => ({ type: e.eventType, args: e.args })),
209
+ writeTables: [...writeTables],
210
+ };
211
+ // Update all table refs together in a batch, to only trigger one reactive update
212
+ this.graph.setRefs(tablesToUpdate, { debugRefreshReason, otelContext, skipRefresh });
213
+ }
214
+ catch (e) {
215
+ span.setStatus({ code: otel.SpanStatusCode.ERROR, message: e.toString() });
216
+ }
217
+ finally {
218
+ span.end();
219
+ return { durationMs: getDurationMsFromSpan(span) };
220
+ }
221
+ });
222
+ };
223
+ /**
224
+ * This can be used in combination with `skipRefresh` when applying events.
225
+ * We might need a better solution for this. Let's see.
226
+ */
227
+ manualRefresh = (options) => {
228
+ const { label } = options ?? {};
229
+ this.otel.tracer.startActiveSpan('LiveStore:manualRefresh', { attributes: { 'livestore.manualRefreshLabel': label } }, this.otel.applyEventsSpanContext, (span) => {
230
+ const otelContext = otel.trace.setSpan(otel.context.active(), span);
231
+ this.graph.runDeferredEffects({ otelContext });
295
232
  span.end();
233
+ });
234
+ };
235
+ /**
236
+ * Apply an event to the store.
237
+ * Returns the tables that were affected by the event.
238
+ * This is an internal method that doesn't trigger a refresh;
239
+ * the caller must refresh queries after calling this method.
240
+ */
241
+ applyEventWithoutRefresh = (eventType, args = {}, otelContext) => {
242
+ return this.otel.tracer.startActiveSpan('LiveStore:applyEventWithoutRefresh', {
243
+ attributes: {
244
+ 'livestore.actionType': eventType,
245
+ 'livestore.args': JSON.stringify(args, null, 2),
246
+ },
247
+ }, otelContext, (span) => {
248
+ const otelContext = otel.trace.setSpan(otel.context.active(), span);
249
+ const actionDefinitions = {
250
+ ...this.schema.actions,
251
+ // Special LiveStore:defined actions
252
+ 'livestore.UpdateComponentState': {
253
+ statement: ({ id, columnNames, tableName, }) => {
254
+ const whereClause = id === undefined ? '' : `where id = '${id}'`;
255
+ const updateClause = columnNames.map((columnName) => `${columnName} = $${columnName}`).join(', ');
256
+ const stmt = sql `update ${tableName} set ${updateClause} ${whereClause}`;
257
+ return {
258
+ sql: stmt,
259
+ writeTables: [tableName],
260
+ };
261
+ },
262
+ prepareBindValues: ({ bindValues }) => bindValues ?? {},
263
+ },
264
+ 'livestore.RawSql': {
265
+ statement: ({ sql, writeTables }) => ({
266
+ sql,
267
+ writeTables,
268
+ argsAlreadyBound: false,
269
+ }),
270
+ prepareBindValues: ({ bindValues }) => bindValues ?? {},
271
+ },
272
+ };
273
+ const actionDefinition = actionDefinitions[eventType] ?? shouldNeverHappen(`Unknown event type: ${eventType}`);
274
+ // Generate a fresh ID for the event
275
+ const eventWithId = { id: uuid(), type: eventType, args };
276
+ // Synchronously apply the event to the in-memory database
277
+ // const { durationMs } = this.inMemoryDB.applyEvent(eventWithId, actionDefinition, otelContext)
278
+ const { statement, bindValues } = eventToSql(eventWithId, actionDefinition);
279
+ const { durationMs } = this.inMemoryDB.execute(statement.sql, prepareBindValues(bindValues, statement.sql), statement.writeTables, {
280
+ otelContext,
281
+ });
282
+ // Asynchronously apply the event to a persistent storage (we're not awaiting this promise here)
283
+ if (this.storage !== undefined) {
284
+ // this.storage.applyEvent(eventWithId, actionDefinition, span)
285
+ this.storage.execute(statement.sql, prepareBindValues(bindValues, statement.sql), span);
286
+ }
287
+ // Uncomment to print a list of queries currently registered on the store
288
+ // console.log(JSON.parse(JSON.stringify([...this.queries].map((q) => `${labelForKey(q.componentKey)}/${q.label}`))))
289
+ // const statement =
290
+ // typeof actionDefinition.statement === 'function'
291
+ // ? actionDefinition.statement(args)
292
+ // : actionDefinition.statement
293
+ span.end();
294
+ return { writeTables: statement.writeTables, durationMs };
295
+ });
296
+ };
297
+ /**
298
+ * Directly execute a SQL query on the Store.
299
+ * This should only be used for framework-internal purposes;
300
+ * all app writes should go through applyEvent.
301
+ */
302
+ execute = (query, params = {}, writeTables, otelContext) => {
303
+ this.inMemoryDB.execute(query, prepareBindValues(params, query), writeTables, { otelContext });
304
+ if (this.storage !== undefined) {
305
+ const parentSpan = otel.trace.getSpan(otel.context.active());
306
+ this.storage.execute(query, prepareBindValues(params, query), parentSpan);
296
307
  }
297
- });
298
- };
308
+ };
309
+ }
299
310
  /** Create a new LiveStore Store */
300
311
  export const createStore = async ({ schema, loadStorage, graphQLOptions, otelTracer = makeNoopTracer(), otelRootSpanContext = otel.context.active(), boot, sqlite3, }) => {
301
312
  return otelTracer.startActiveSpan('createStore', {}, otelRootSpanContext, async (span) => {
@@ -377,25 +388,26 @@ const eventToSql = (event, eventDefinition) => {
377
388
  return { statement, bindValues };
378
389
  };
379
390
  class ReferenceCountedSet {
391
+ map;
380
392
  constructor() {
381
- this.add = (key) => {
382
- const count = this.map.get(key) ?? 0;
383
- this.map.set(key, count + 1);
384
- };
385
- this.remove = (key) => {
386
- const count = this.map.get(key) ?? 0;
387
- if (count === 1) {
388
- this.map.delete(key);
389
- }
390
- else {
391
- this.map.set(key, count - 1);
392
- }
393
- };
394
- this.has = (key) => {
395
- return this.map.has(key);
396
- };
397
393
  this.map = new Map();
398
394
  }
395
+ add = (key) => {
396
+ const count = this.map.get(key) ?? 0;
397
+ this.map.set(key, count + 1);
398
+ };
399
+ remove = (key) => {
400
+ const count = this.map.get(key) ?? 0;
401
+ if (count === 1) {
402
+ this.map.delete(key);
403
+ }
404
+ else {
405
+ this.map.set(key, count - 1);
406
+ }
407
+ };
408
+ has = (key) => {
409
+ return this.map.has(key);
410
+ };
399
411
  get size() {
400
412
  return this.map.size;
401
413
  }
package/dist/store.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"store.js","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"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"}