@livestore/livestore 0.0.12 → 0.0.13

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 (197) hide show
  1. package/README.md +7 -7
  2. package/dist/.tsbuildinfo +1 -0
  3. package/dist/QueryCache.d.ts +20 -0
  4. package/dist/QueryCache.d.ts.map +1 -0
  5. package/dist/QueryCache.js +71 -0
  6. package/dist/QueryCache.js.map +1 -0
  7. package/dist/__tests__/react/fixture.d.ts +25 -0
  8. package/dist/__tests__/react/fixture.d.ts.map +1 -0
  9. package/dist/__tests__/react/fixture.js +61 -0
  10. package/dist/__tests__/react/fixture.js.map +1 -0
  11. package/dist/__tests__/react/useLiveStoreComponent.test.d.ts +2 -0
  12. package/dist/__tests__/react/useLiveStoreComponent.test.d.ts.map +1 -0
  13. package/dist/__tests__/react/useLiveStoreComponent.test.js +78 -0
  14. package/dist/__tests__/react/useLiveStoreComponent.test.js.map +1 -0
  15. package/dist/__tests__/reactive.test.d.ts +2 -0
  16. package/dist/__tests__/reactive.test.d.ts.map +1 -0
  17. package/dist/__tests__/reactive.test.js +198 -0
  18. package/dist/__tests__/reactive.test.js.map +1 -0
  19. package/dist/backends/base.d.ts +13 -0
  20. package/dist/backends/base.d.ts.map +1 -0
  21. package/dist/backends/base.js +53 -0
  22. package/dist/backends/base.js.map +1 -0
  23. package/dist/backends/in-memory/index.d.ts +22 -0
  24. package/dist/backends/in-memory/index.d.ts.map +1 -0
  25. package/dist/backends/in-memory/index.js +45 -0
  26. package/dist/backends/in-memory/index.js.map +1 -0
  27. package/dist/backends/index.d.ts +41 -0
  28. package/dist/backends/index.d.ts.map +1 -0
  29. package/dist/backends/index.js +16 -0
  30. package/dist/backends/index.js.map +1 -0
  31. package/dist/backends/tauri/index.d.ts +21 -0
  32. package/dist/backends/tauri/index.d.ts.map +1 -0
  33. package/dist/backends/tauri/index.js +48 -0
  34. package/dist/backends/tauri/index.js.map +1 -0
  35. package/dist/backends/utils/idb.d.ts +10 -0
  36. package/dist/backends/utils/idb.d.ts.map +1 -0
  37. package/dist/backends/utils/idb.js +58 -0
  38. package/dist/backends/utils/idb.js.map +1 -0
  39. package/dist/backends/web-worker/index.d.ts +26 -0
  40. package/dist/backends/web-worker/index.d.ts.map +1 -0
  41. package/dist/backends/web-worker/index.js +63 -0
  42. package/dist/backends/web-worker/index.js.map +1 -0
  43. package/dist/backends/web-worker/worker.d.ts +17 -0
  44. package/dist/backends/web-worker/worker.d.ts.map +1 -0
  45. package/dist/backends/web-worker/worker.js +139 -0
  46. package/dist/backends/web-worker/worker.js.map +1 -0
  47. package/dist/bounded-collections.d.ts +34 -0
  48. package/dist/bounded-collections.d.ts.map +1 -0
  49. package/dist/bounded-collections.js +103 -0
  50. package/dist/bounded-collections.js.map +1 -0
  51. package/dist/componentKey.d.ts +20 -0
  52. package/dist/componentKey.d.ts.map +1 -0
  53. package/dist/componentKey.js +3 -0
  54. package/dist/componentKey.js.map +1 -0
  55. package/dist/effect/LiveStore.d.ts +42 -0
  56. package/dist/effect/LiveStore.d.ts.map +1 -0
  57. package/dist/effect/LiveStore.js +37 -0
  58. package/dist/effect/LiveStore.js.map +1 -0
  59. package/dist/effect/index.d.ts +2 -0
  60. package/dist/effect/index.d.ts.map +1 -0
  61. package/dist/effect/index.js +2 -0
  62. package/dist/effect/index.js.map +1 -0
  63. package/dist/events.d.ts +7 -0
  64. package/dist/events.d.ts.map +1 -0
  65. package/dist/events.js +2 -0
  66. package/dist/events.js.map +1 -0
  67. package/dist/inMemoryDatabase.d.ts +60 -0
  68. package/dist/inMemoryDatabase.d.ts.map +1 -0
  69. package/dist/inMemoryDatabase.js +230 -0
  70. package/dist/inMemoryDatabase.js.map +1 -0
  71. package/dist/index.d.ts +20 -0
  72. package/dist/index.d.ts.map +1 -0
  73. package/dist/index.js +9 -0
  74. package/dist/index.js.map +1 -0
  75. package/dist/migrations.d.ts +9 -0
  76. package/dist/migrations.d.ts.map +1 -0
  77. package/dist/migrations.js +62 -0
  78. package/dist/migrations.js.map +1 -0
  79. package/dist/otel.d.ts +4 -0
  80. package/dist/otel.d.ts.map +1 -0
  81. package/dist/otel.js +6 -0
  82. package/dist/otel.js.map +1 -0
  83. package/dist/react/LiveStoreContext.d.ts +11 -0
  84. package/dist/react/LiveStoreContext.d.ts.map +1 -0
  85. package/dist/react/LiveStoreContext.js +10 -0
  86. package/dist/react/LiveStoreContext.js.map +1 -0
  87. package/dist/react/LiveStoreProvider.d.ts +22 -0
  88. package/dist/react/LiveStoreProvider.d.ts.map +1 -0
  89. package/dist/react/LiveStoreProvider.js +49 -0
  90. package/dist/react/LiveStoreProvider.js.map +1 -0
  91. package/dist/react/index.d.ts +8 -0
  92. package/dist/react/index.d.ts.map +1 -0
  93. package/dist/react/index.js +6 -0
  94. package/dist/react/index.js.map +1 -0
  95. package/dist/react/useGlobalQuery.d.ts +3 -0
  96. package/dist/react/useGlobalQuery.d.ts.map +1 -0
  97. package/dist/react/useGlobalQuery.js +23 -0
  98. package/dist/react/useGlobalQuery.js.map +1 -0
  99. package/dist/react/useGraphQL.d.ts +11 -0
  100. package/dist/react/useGraphQL.d.ts.map +1 -0
  101. package/dist/react/useGraphQL.js +67 -0
  102. package/dist/react/useGraphQL.js.map +1 -0
  103. package/dist/react/useLiveStoreComponent.d.ts +75 -0
  104. package/dist/react/useLiveStoreComponent.d.ts.map +1 -0
  105. package/dist/react/useLiveStoreComponent.js +301 -0
  106. package/dist/react/useLiveStoreComponent.js.map +1 -0
  107. package/dist/react/utils/useStateRefWithReactiveInput.d.ts +13 -0
  108. package/dist/react/utils/useStateRefWithReactiveInput.d.ts.map +1 -0
  109. package/dist/react/utils/useStateRefWithReactiveInput.js +38 -0
  110. package/dist/react/utils/useStateRefWithReactiveInput.js.map +1 -0
  111. package/dist/reactive.d.ts +140 -0
  112. package/dist/reactive.d.ts.map +1 -0
  113. package/dist/reactive.js +302 -0
  114. package/dist/reactive.js.map +1 -0
  115. package/dist/reactiveQueries/base-class.d.ts +24 -0
  116. package/dist/reactiveQueries/base-class.d.ts.map +1 -0
  117. package/dist/reactiveQueries/base-class.js +22 -0
  118. package/dist/reactiveQueries/base-class.js.map +1 -0
  119. package/dist/reactiveQueries/graphql.d.ts +25 -0
  120. package/dist/reactiveQueries/graphql.d.ts.map +1 -0
  121. package/dist/reactiveQueries/graphql.js +18 -0
  122. package/dist/reactiveQueries/graphql.js.map +1 -0
  123. package/dist/reactiveQueries/js.d.ts +19 -0
  124. package/dist/reactiveQueries/js.d.ts.map +1 -0
  125. package/dist/reactiveQueries/js.js +13 -0
  126. package/dist/reactiveQueries/js.js.map +1 -0
  127. package/dist/reactiveQueries/sql.d.ts +31 -0
  128. package/dist/reactiveQueries/sql.d.ts.map +1 -0
  129. package/dist/reactiveQueries/sql.js +32 -0
  130. package/dist/reactiveQueries/sql.js.map +1 -0
  131. package/dist/schema.d.ts +83 -0
  132. package/dist/schema.d.ts.map +1 -0
  133. package/dist/schema.js +49 -0
  134. package/dist/schema.js.map +1 -0
  135. package/dist/storage/base.d.ts +10 -0
  136. package/dist/storage/base.d.ts.map +1 -0
  137. package/dist/storage/base.js +14 -0
  138. package/dist/storage/base.js.map +1 -0
  139. package/dist/storage/in-memory/index.d.ts +15 -0
  140. package/dist/storage/in-memory/index.d.ts.map +1 -0
  141. package/dist/storage/in-memory/index.js +14 -0
  142. package/dist/storage/in-memory/index.js.map +1 -0
  143. package/dist/storage/index.d.ts +14 -0
  144. package/dist/storage/index.d.ts.map +1 -0
  145. package/dist/storage/index.js +9 -0
  146. package/dist/storage/index.js.map +1 -0
  147. package/dist/storage/tauri/index.d.ts +19 -0
  148. package/dist/storage/tauri/index.d.ts.map +1 -0
  149. package/dist/storage/tauri/index.js +38 -0
  150. package/dist/storage/tauri/index.js.map +1 -0
  151. package/dist/storage/utils/idb.d.ts +10 -0
  152. package/dist/storage/utils/idb.d.ts.map +1 -0
  153. package/dist/storage/utils/idb.js +58 -0
  154. package/dist/storage/utils/idb.js.map +1 -0
  155. package/dist/storage/web-worker/index.d.ts +27 -0
  156. package/dist/storage/web-worker/index.d.ts.map +1 -0
  157. package/dist/storage/web-worker/index.js +76 -0
  158. package/dist/storage/web-worker/index.js.map +1 -0
  159. package/dist/storage/web-worker/worker.d.ts +13 -0
  160. package/dist/storage/web-worker/worker.d.ts.map +1 -0
  161. package/dist/storage/web-worker/worker.js +110 -0
  162. package/dist/storage/web-worker/worker.js.map +1 -0
  163. package/dist/store.d.ts +192 -0
  164. package/dist/store.d.ts.map +1 -0
  165. package/dist/store.js +569 -0
  166. package/dist/store.js.map +1 -0
  167. package/dist/util.d.ts +26 -0
  168. package/dist/util.d.ts.map +1 -0
  169. package/dist/util.js +53 -0
  170. package/dist/util.js.map +1 -0
  171. package/package.json +46 -19
  172. package/src/__tests__/react/fixture.tsx +19 -28
  173. package/src/effect/LiveStore.ts +8 -13
  174. package/src/events.ts +1 -1
  175. package/src/inMemoryDatabase.ts +100 -117
  176. package/src/index.ts +10 -16
  177. package/src/migrations.ts +101 -0
  178. package/src/otel.ts +0 -11
  179. package/src/react/LiveStoreProvider.tsx +12 -8
  180. package/src/react/index.ts +9 -0
  181. package/src/react/useGlobalQuery.ts +0 -3
  182. package/src/react/useLiveStoreComponent.ts +95 -37
  183. package/src/schema.ts +72 -145
  184. package/src/storage/in-memory/index.ts +21 -0
  185. package/src/storage/index.ts +27 -0
  186. package/src/{backends/tauri.ts → storage/tauri/index.ts} +13 -27
  187. package/src/storage/web-worker/index.ts +118 -0
  188. package/src/{backends/web-worker.ts → storage/web-worker/worker.ts} +17 -52
  189. package/src/store.ts +112 -79
  190. package/src/util.ts +5 -1
  191. package/tsconfig.json +1 -3
  192. package/src/backends/base.ts +0 -67
  193. package/src/backends/index.ts +0 -98
  194. package/src/backends/noop.ts +0 -32
  195. package/src/backends/web-in-memory.ts +0 -65
  196. package/src/backends/web.ts +0 -97
  197. /package/src/{backends → storage}/utils/idb.ts +0 -0
@@ -1,97 +0,0 @@
1
- import type * as otel from '@opentelemetry/api'
2
- import * as Comlink from 'comlink'
3
-
4
- import type { ParamsObject } from '../util.js'
5
- import { prepareBindValues } from '../util.js'
6
- import { BaseBackend } from './base.js'
7
- import type { BackendOtelProps, SelectResponse, WritableDatabaseLocation } from './index.js'
8
- import type { WrappedWorker } from './web-worker.js'
9
-
10
- export type BackendOptionsWeb = {
11
- type: 'web'
12
- /** Specifies where to persist data for this backend */
13
- persistentDatabaseLocation: WritableDatabaseLocation
14
- }
15
-
16
- export class WebWorkerBackend extends BaseBackend {
17
- worker: Comlink.Remote<WrappedWorker>
18
- persistentDatabaseLocation: WritableDatabaseLocation
19
- otelTracer: otel.Tracer
20
-
21
- executionBacklog: { query: string; bindValues?: ParamsObject }[] = []
22
- executionPromise: Promise<void> | undefined = undefined
23
-
24
- private constructor({
25
- worker,
26
- persistentDatabaseLocation,
27
- otelTracer,
28
- }: {
29
- worker: Comlink.Remote<WrappedWorker>
30
- persistentDatabaseLocation: WritableDatabaseLocation
31
- otelTracer: otel.Tracer
32
- }) {
33
- super()
34
- this.worker = worker
35
- this.persistentDatabaseLocation = persistentDatabaseLocation
36
- this.otelTracer = otelTracer
37
- }
38
-
39
- static load = async (
40
- { persistentDatabaseLocation }: BackendOptionsWeb,
41
- { otelTracer }: BackendOtelProps,
42
- ): Promise<WebWorkerBackend> => {
43
- // TODO: Importing the worker like this only works with Vite;
44
- // should this really be inside the LiveStore library?
45
- // Doesn't work with Firefox right now during dev https://bugzilla.mozilla.org/show_bug.cgi?id=1247687
46
- const worker = new Worker(new URL('./web-worker.js', import.meta.url), {
47
- type: 'module',
48
- })
49
- const wrappedWorker = Comlink.wrap<WrappedWorker>(worker)
50
-
51
- await wrappedWorker.initialize({ persistentDatabaseLocation })
52
-
53
- return new WebWorkerBackend({
54
- worker: wrappedWorker,
55
- persistentDatabaseLocation,
56
- otelTracer,
57
- })
58
- }
59
-
60
- execute = (query: string, bindValues_?: ParamsObject) => {
61
- const bindValues = prepareBindValues(bindValues_ ?? {}, query)
62
- this.executionBacklog.push({ query, bindValues })
63
-
64
- // Instead of sending the queries to the worker immediately, we wait a bit and batch them up (which reduces the number of messages sent to the worker)
65
- if (this.executionPromise === undefined) {
66
- this.executionPromise = new Promise((resolve) => {
67
- setTimeout(() => {
68
- void this.worker.executeBulk(this.executionBacklog)
69
- this.executionBacklog = []
70
- this.executionPromise = undefined
71
-
72
- resolve()
73
- }, 10)
74
- })
75
- }
76
- }
77
-
78
- select = async <T>(query: string, bindValues?: ParamsObject): Promise<SelectResponse<T>> => {
79
- // NOTE we need to wait for the executionBacklog to be worked off, before we run the select query (as it might depend on the previous execution queries)
80
- await this.executionPromise
81
-
82
- try {
83
- const response = (await this.worker.select(query, bindValues)) as SelectResponse<T>
84
- return response
85
- } catch (e) {
86
- console.error(`Error while executing query via "select": ${query}`)
87
- throw e
88
- }
89
- }
90
-
91
- getPersistedData = async (_parentSpan?: otel.Span): Promise<Uint8Array> => {
92
- // NOTE we need to wait for the executionBacklog to be worked off
93
- await this.executionPromise
94
-
95
- return this.worker.getPersistedData()
96
- }
97
- }
File without changes