@livestore/livestore 0.0.39-dev.3 → 0.0.40

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 (215) hide show
  1. package/README.md +15 -24
  2. package/dist/.tsbuildinfo +1 -1
  3. package/dist/__tests__/react/fixture.d.ts +210 -35
  4. package/dist/__tests__/react/fixture.d.ts.map +1 -1
  5. package/dist/__tests__/react/fixture.js +10 -29
  6. package/dist/__tests__/react/fixture.js.map +1 -1
  7. package/dist/cud.d.ts +28 -0
  8. package/dist/cud.d.ts.map +1 -0
  9. package/dist/cud.js +50 -0
  10. package/dist/cud.js.map +1 -0
  11. package/dist/cud.test.d.ts +2 -0
  12. package/dist/cud.test.d.ts.map +1 -0
  13. package/dist/cud.test.js +47 -0
  14. package/dist/cud.test.js.map +1 -0
  15. package/dist/inMemoryDatabase.d.ts +1 -1
  16. package/dist/inMemoryDatabase.d.ts.map +1 -1
  17. package/dist/inMemoryDatabase.js +1 -4
  18. package/dist/inMemoryDatabase.js.map +1 -1
  19. package/dist/index.d.ts +4 -4
  20. package/dist/index.d.ts.map +1 -1
  21. package/dist/index.js +3 -3
  22. package/dist/index.js.map +1 -1
  23. package/dist/migrations.d.ts.map +1 -1
  24. package/dist/migrations.js +11 -7
  25. package/dist/migrations.js.map +1 -1
  26. package/dist/query-info.d.ts +49 -0
  27. package/dist/query-info.d.ts.map +1 -0
  28. package/dist/{update-path.js → query-info.js} +4 -3
  29. package/dist/query-info.js.map +1 -0
  30. package/dist/react/LiveStoreContext.d.ts +0 -6
  31. package/dist/react/LiveStoreContext.d.ts.map +1 -1
  32. package/dist/react/LiveStoreContext.js.map +1 -1
  33. package/dist/react/useAtom.d.ts +2 -2
  34. package/dist/react/useAtom.d.ts.map +1 -1
  35. package/dist/react/useAtom.js +3 -3
  36. package/dist/react/useAtom.js.map +1 -1
  37. package/dist/react/useQuery.d.ts.map +1 -1
  38. package/dist/react/useQuery.test.d.ts.map +1 -0
  39. package/dist/{__tests__/react → react}/useQuery.test.js +8 -11
  40. package/dist/react/useQuery.test.js.map +1 -0
  41. package/dist/react/useRow.d.ts +2 -2
  42. package/dist/react/useRow.d.ts.map +1 -1
  43. package/dist/react/useRow.js +5 -5
  44. package/dist/react/useRow.js.map +1 -1
  45. package/dist/react/useRow.test.d.ts.map +1 -0
  46. package/dist/{__tests__/react → react}/useRow.test.js +14 -38
  47. package/dist/react/useRow.test.js.map +1 -0
  48. package/dist/react/useTemporaryQuery.d.ts +2 -2
  49. package/dist/react/useTemporaryQuery.d.ts.map +1 -1
  50. package/dist/reactive.d.ts +2 -2
  51. package/dist/reactive.d.ts.map +1 -1
  52. package/dist/reactive.js +50 -15
  53. package/dist/reactive.js.map +1 -1
  54. package/dist/reactive.test.d.ts.map +1 -0
  55. package/dist/{__tests__/reactive.test.js → reactive.test.js} +1 -1
  56. package/dist/reactive.test.js.map +1 -0
  57. package/dist/reactiveQueries/base-class.d.ts +16 -8
  58. package/dist/reactiveQueries/base-class.d.ts.map +1 -1
  59. package/dist/reactiveQueries/base-class.js +2 -1
  60. package/dist/reactiveQueries/base-class.js.map +1 -1
  61. package/dist/reactiveQueries/graphql.d.ts +15 -9
  62. package/dist/reactiveQueries/graphql.d.ts.map +1 -1
  63. package/dist/reactiveQueries/graphql.js +29 -8
  64. package/dist/reactiveQueries/graphql.js.map +1 -1
  65. package/dist/reactiveQueries/js.d.ts +8 -8
  66. package/dist/reactiveQueries/js.d.ts.map +1 -1
  67. package/dist/reactiveQueries/js.js +5 -4
  68. package/dist/reactiveQueries/js.js.map +1 -1
  69. package/dist/reactiveQueries/sql.d.ts +11 -11
  70. package/dist/reactiveQueries/sql.d.ts.map +1 -1
  71. package/dist/reactiveQueries/sql.js +7 -6
  72. package/dist/reactiveQueries/sql.js.map +1 -1
  73. package/dist/reactiveQueries/sql.test.d.ts.map +1 -0
  74. package/dist/{__tests__/reactiveQueries → reactiveQueries}/sql.test.js +44 -34
  75. package/dist/reactiveQueries/sql.test.js.map +1 -0
  76. package/dist/row-query.d.ts +5 -5
  77. package/dist/row-query.d.ts.map +1 -1
  78. package/dist/row-query.js +11 -9
  79. package/dist/row-query.js.map +1 -1
  80. package/dist/schema/index.d.ts +20 -7
  81. package/dist/schema/index.d.ts.map +1 -1
  82. package/dist/schema/index.js +18 -3
  83. package/dist/schema/index.js.map +1 -1
  84. package/dist/schema/mutations.d.ts +81 -0
  85. package/dist/schema/mutations.d.ts.map +1 -0
  86. package/dist/schema/mutations.js +29 -0
  87. package/dist/schema/mutations.js.map +1 -0
  88. package/dist/schema/parse-utils.d.ts +3 -6
  89. package/dist/schema/parse-utils.d.ts.map +1 -1
  90. package/dist/schema/parse-utils.js +2 -27
  91. package/dist/schema/parse-utils.js.map +1 -1
  92. package/dist/schema/system-tables.d.ts +8 -8
  93. package/dist/schema/table-def.d.ts +6 -6
  94. package/dist/schema/table-def.d.ts.map +1 -1
  95. package/dist/schema/table-def.js +2 -2
  96. package/dist/schema/table-def.js.map +1 -1
  97. package/dist/storage/in-memory/index.d.ts +4 -0
  98. package/dist/storage/in-memory/index.d.ts.map +1 -1
  99. package/dist/storage/in-memory/index.js +3 -0
  100. package/dist/storage/in-memory/index.js.map +1 -1
  101. package/dist/storage/index.d.ts +4 -0
  102. package/dist/storage/index.d.ts.map +1 -1
  103. package/dist/storage/tauri/index.d.ts +4 -0
  104. package/dist/storage/tauri/index.d.ts.map +1 -1
  105. package/dist/storage/tauri/index.js +6 -0
  106. package/dist/storage/tauri/index.js.map +1 -1
  107. package/dist/storage/utils/idb.d.ts +1 -0
  108. package/dist/storage/utils/idb.d.ts.map +1 -1
  109. package/dist/storage/utils/idb.js +11 -0
  110. package/dist/storage/utils/idb.js.map +1 -1
  111. package/dist/storage/web-worker/common.d.ts +11 -0
  112. package/dist/storage/web-worker/common.d.ts.map +1 -0
  113. package/dist/storage/web-worker/common.js +2 -0
  114. package/dist/storage/web-worker/common.js.map +1 -0
  115. package/dist/storage/web-worker/index.d.ts +14 -7
  116. package/dist/storage/web-worker/index.d.ts.map +1 -1
  117. package/dist/storage/web-worker/index.js +70 -14
  118. package/dist/storage/web-worker/index.js.map +1 -1
  119. package/dist/storage/web-worker/make-worker.d.ts +20 -0
  120. package/dist/storage/web-worker/make-worker.d.ts.map +1 -0
  121. package/dist/storage/web-worker/make-worker.js +155 -0
  122. package/dist/storage/web-worker/make-worker.js.map +1 -0
  123. package/dist/storage/web-worker/vite-dev-polyfill.d.ts +2 -0
  124. package/dist/storage/web-worker/vite-dev-polyfill.d.ts.map +1 -0
  125. package/dist/storage/web-worker/vite-dev-polyfill.js +35 -0
  126. package/dist/storage/web-worker/vite-dev-polyfill.js.map +1 -0
  127. package/dist/store.d.ts +32 -42
  128. package/dist/store.d.ts.map +1 -1
  129. package/dist/store.js +82 -131
  130. package/dist/store.js.map +1 -1
  131. package/dist/utils/dev.d.ts +3 -0
  132. package/dist/utils/dev.d.ts.map +1 -0
  133. package/dist/utils/dev.js +16 -0
  134. package/dist/utils/dev.js.map +1 -0
  135. package/dist/utils/util.d.ts +2 -0
  136. package/dist/utils/util.d.ts.map +1 -1
  137. package/dist/utils/util.js +2 -0
  138. package/dist/utils/util.js.map +1 -1
  139. package/package.json +26 -14
  140. package/src/__tests__/react/fixture.tsx +12 -30
  141. package/src/cud.test.ts +52 -0
  142. package/src/cud.ts +92 -0
  143. package/src/inMemoryDatabase.ts +2 -7
  144. package/src/index.ts +14 -8
  145. package/src/migrations.ts +10 -7
  146. package/src/{update-path.ts → query-info.ts} +18 -21
  147. package/src/react/LiveStoreContext.ts +0 -9
  148. package/src/react/useAtom.ts +6 -6
  149. package/src/{__tests__/react → react}/useQuery.test.tsx +11 -11
  150. package/src/react/useQuery.ts +1 -1
  151. package/src/{__tests__/react → react}/useRow.test.tsx +21 -39
  152. package/src/react/useRow.ts +10 -10
  153. package/src/{__tests__/reactive.test.ts → reactive.test.ts} +1 -1
  154. package/src/reactive.ts +60 -19
  155. package/src/reactiveQueries/base-class.ts +23 -9
  156. package/src/reactiveQueries/graphql.ts +49 -13
  157. package/src/reactiveQueries/js.ts +15 -13
  158. package/src/{__tests__/reactiveQueries → reactiveQueries}/sql.test.ts +44 -34
  159. package/src/reactiveQueries/sql.ts +24 -22
  160. package/src/row-query.ts +24 -22
  161. package/src/schema/index.ts +47 -11
  162. package/src/schema/mutations.ts +129 -0
  163. package/src/schema/parse-utils.ts +3 -45
  164. package/src/schema/table-def.ts +9 -2
  165. package/src/storage/in-memory/index.ts +7 -0
  166. package/src/storage/index.ts +8 -0
  167. package/src/storage/tauri/index.ts +10 -0
  168. package/src/storage/utils/idb.ts +14 -0
  169. package/src/storage/web-worker/common.ts +6 -0
  170. package/src/storage/web-worker/index.ts +86 -17
  171. package/src/storage/web-worker/make-worker.ts +214 -0
  172. package/src/storage/web-worker/vite-dev-polyfill.ts +33 -0
  173. package/src/store.ts +142 -212
  174. package/src/utils/dev.ts +23 -0
  175. package/src/utils/util.ts +4 -0
  176. package/dist/__tests__/mutations.test.d.ts +0 -2
  177. package/dist/__tests__/mutations.test.d.ts.map +0 -1
  178. package/dist/__tests__/mutations.test.js +0 -40
  179. package/dist/__tests__/mutations.test.js.map +0 -1
  180. package/dist/__tests__/react/useQuery.test.d.ts.map +0 -1
  181. package/dist/__tests__/react/useQuery.test.js.map +0 -1
  182. package/dist/__tests__/react/useRow.test.d.ts.map +0 -1
  183. package/dist/__tests__/react/useRow.test.js.map +0 -1
  184. package/dist/__tests__/reactive.test.d.ts.map +0 -1
  185. package/dist/__tests__/reactive.test.js.map +0 -1
  186. package/dist/__tests__/reactiveQueries/sql.test.d.ts.map +0 -1
  187. package/dist/__tests__/reactiveQueries/sql.test.js.map +0 -1
  188. package/dist/events.d.ts +0 -7
  189. package/dist/events.d.ts.map +0 -1
  190. package/dist/events.js +0 -2
  191. package/dist/events.js.map +0 -1
  192. package/dist/mutations.d.ts +0 -33
  193. package/dist/mutations.d.ts.map +0 -1
  194. package/dist/mutations.js +0 -38
  195. package/dist/mutations.js.map +0 -1
  196. package/dist/schema/action.d.ts +0 -30
  197. package/dist/schema/action.d.ts.map +0 -1
  198. package/dist/schema/action.js +0 -3
  199. package/dist/schema/action.js.map +0 -1
  200. package/dist/storage/web-worker/worker.d.ts +0 -13
  201. package/dist/storage/web-worker/worker.d.ts.map +0 -1
  202. package/dist/storage/web-worker/worker.js +0 -110
  203. package/dist/storage/web-worker/worker.js.map +0 -1
  204. package/dist/update-path.d.ts +0 -52
  205. package/dist/update-path.d.ts.map +0 -1
  206. package/dist/update-path.js.map +0 -1
  207. package/src/__tests__/mutations.test.ts +0 -43
  208. package/src/events.ts +0 -8
  209. package/src/mutations.ts +0 -79
  210. package/src/schema/action.ts +0 -41
  211. package/src/storage/web-worker/worker.ts +0 -141
  212. /package/dist/{__tests__/react → react}/useQuery.test.d.ts +0 -0
  213. /package/dist/{__tests__/react → react}/useRow.test.d.ts +0 -0
  214. /package/dist/{__tests__/reactive.test.d.ts → reactive.test.d.ts} +0 -0
  215. /package/dist/{__tests__/reactiveQueries → reactiveQueries}/sql.test.d.ts +0 -0
@@ -1,141 +0,0 @@
1
- // Web Worker file for running SQLite in a web worker.
2
-
3
- // TODO: create types for these libraries? SQL.js already should have types;
4
- // we just need the types to apply to the fork.
5
- import { shouldNeverHappen } from '@livestore/utils'
6
- import * as Comlink from 'comlink'
7
- import type * as SqliteWasm from 'sqlite-esm'
8
- import sqlite3InitModule from 'sqlite-esm'
9
-
10
- // import { v4 as uuid } from 'uuid'
11
- import type { Bindable } from '../../utils/util.js'
12
- import { casesHandled, sql } from '../../utils/util.js'
13
- import { IDB } from '../utils/idb.js'
14
- import type { StorageOptionsWeb } from './index.js'
15
-
16
- // A global variable to hold the database connection.
17
- // let db: SqliteWasm.Database
18
- let db: SqliteWasm.DatabaseApi
19
-
20
- let sqlite3: SqliteWasm.Sqlite3Static
21
-
22
- // TODO get rid of this in favour of a "proper" IDB SQLite storage
23
- let idb: IDB | undefined
24
-
25
- /** The location where this database storage persists its data */
26
- let options_: StorageOptionsWeb
27
-
28
- const configureConnection = () =>
29
- db.exec(sql`
30
- PRAGMA page_size=8192;
31
- PRAGMA journal_mode=MEMORY;
32
- PRAGMA foreign_keys='ON'; -- we want foreign key constraints to be enforced
33
- `)
34
-
35
- /** A full virtual filename in the IDB FS */
36
- const fullyQualifiedFilename = (name: string) => `${name}.db`
37
-
38
- const initialize = async (options: StorageOptionsWeb) => {
39
- options_ = options
40
-
41
- sqlite3 = await sqlite3InitModule({
42
- print: (message) => console.log(`[sql-client] ${message}`),
43
- printErr: (message) => console.error(`[sql-client] ${message}`),
44
- })
45
-
46
- switch (options.type) {
47
- case 'opfs': {
48
- try {
49
- db = new sqlite3.oo1.OpfsDb(fullyQualifiedFilename(options.fileName)) // , 'c'
50
- } catch (e) {
51
- debugger
52
- }
53
- break
54
- }
55
- case 'indexeddb': {
56
- try {
57
- db = new sqlite3.oo1.DB({ filename: ':memory:', flags: 'c' })
58
- idb = new IDB(options.fileName)
59
-
60
- const bytes = await idb.get('db')
61
-
62
- if (bytes !== undefined) {
63
- // Based on https://sqlite.org/forum/forumpost/2119230da8ac5357a13b731f462dc76e08621a4a29724f7906d5f35bb8508465
64
- // TODO find cleaner way to do this once possible in sqlite3-wasm
65
- const p = sqlite3.wasm.allocFromTypedArray(bytes)
66
- const _rc = sqlite3.capi.sqlite3_deserialize(db.pointer, 'main', p, bytes.length, bytes.length, 0)
67
- }
68
- } catch (e) {
69
- debugger
70
- }
71
- break
72
- }
73
- default: {
74
- casesHandled(options.type)
75
- }
76
- }
77
-
78
- configureConnection()
79
- }
80
-
81
- // TODO get rid of this in favour of a "proper" IDB SQLite storage
82
- let idbPersistTimeout: NodeJS.Timeout | undefined
83
-
84
- type ExecutionQueueItem = { query: string; bindValues?: Bindable }
85
-
86
- const executeBulk = (executionItems: ExecutionQueueItem[]): void => {
87
- let batchItems: ExecutionQueueItem[] = []
88
-
89
- while (executionItems.length > 0) {
90
- try {
91
- db.exec('BEGIN TRANSACTION') // Start the transaction
92
-
93
- batchItems = executionItems.splice(0, 50)
94
-
95
- for (const { query, bindValues } of batchItems) {
96
- db.exec({
97
- sql: query,
98
- bind: bindValues as TODO,
99
- returnValue: 'resultRows',
100
- rowMode: 'object',
101
- })
102
- }
103
-
104
- db.exec('COMMIT') // Commit the transaction
105
- } catch (error) {
106
- try {
107
- db.exec('ROLLBACK') // Rollback in case of an error
108
- } catch (e) {
109
- console.error('Error rolling back transaction', e)
110
- }
111
-
112
- shouldNeverHappen(`Error executing query: ${error} \n ${JSON.stringify(batchItems)}`)
113
- }
114
- }
115
-
116
- // TODO get rid of this in favour of a "proper" IDB SQLite storage
117
- if (options_.type === 'indexeddb') {
118
- if (idbPersistTimeout !== undefined) {
119
- clearTimeout(idbPersistTimeout)
120
- }
121
-
122
- idbPersistTimeout = setTimeout(() => {
123
- const data = sqlite3.capi.sqlite3_js_db_export(db.pointer) as Uint8Array
124
-
125
- void idb!.put('db', data)
126
- }, 1000)
127
- }
128
- }
129
-
130
- const wrappedWorker = { initialize, executeBulk }
131
-
132
- export type WrappedWorker = typeof wrappedWorker
133
-
134
- Comlink.expose(wrappedWorker)
135
-
136
- // NOTE keep this around for debugging
137
- // db.exec({
138
- // sql: `select * from sqlite_master where name = 'library_tracks'`,
139
- // callback: (_: TODO) => console.log(_),
140
- // rowMode: 'object',
141
- // } as TODO)