@livestore/livestore 0.4.0-dev.22 → 0.4.0-dev.23

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 (207) hide show
  1. package/README.md +0 -1
  2. package/dist/.tsbuildinfo +1 -1
  3. package/dist/QueryCache.js +1 -1
  4. package/dist/QueryCache.js.map +1 -1
  5. package/dist/SqliteDbWrapper.d.ts +5 -5
  6. package/dist/SqliteDbWrapper.d.ts.map +1 -1
  7. package/dist/SqliteDbWrapper.js +8 -8
  8. package/dist/SqliteDbWrapper.js.map +1 -1
  9. package/dist/SqliteDbWrapper.test.js +2 -2
  10. package/dist/SqliteDbWrapper.test.js.map +1 -1
  11. package/dist/effect/LiveStore.d.ts +14 -7
  12. package/dist/effect/LiveStore.d.ts.map +1 -1
  13. package/dist/effect/LiveStore.js +0 -15
  14. package/dist/effect/LiveStore.js.map +1 -1
  15. package/dist/effect/LiveStore.test.d.ts +2 -0
  16. package/dist/effect/LiveStore.test.d.ts.map +1 -0
  17. package/dist/effect/LiveStore.test.js +42 -0
  18. package/dist/effect/LiveStore.test.js.map +1 -0
  19. package/dist/live-queries/base-class.d.ts +3 -3
  20. package/dist/live-queries/base-class.d.ts.map +1 -1
  21. package/dist/live-queries/base-class.js +2 -2
  22. package/dist/live-queries/base-class.js.map +1 -1
  23. package/dist/live-queries/client-document-get-query.d.ts +1 -1
  24. package/dist/live-queries/client-document-get-query.d.ts.map +1 -1
  25. package/dist/live-queries/client-document-get-query.js +1 -1
  26. package/dist/live-queries/client-document-get-query.js.map +1 -1
  27. package/dist/live-queries/computed.d.ts.map +1 -1
  28. package/dist/live-queries/computed.js +2 -2
  29. package/dist/live-queries/computed.js.map +1 -1
  30. package/dist/live-queries/db-query.js +14 -14
  31. package/dist/live-queries/db-query.js.map +1 -1
  32. package/dist/live-queries/db-query.test.js +2 -2
  33. package/dist/live-queries/db-query.test.js.map +1 -1
  34. package/dist/live-queries/signal.test.js +2 -2
  35. package/dist/live-queries/signal.test.js.map +1 -1
  36. package/dist/mod.d.ts +1 -1
  37. package/dist/mod.d.ts.map +1 -1
  38. package/dist/mod.js.map +1 -1
  39. package/dist/reactive.d.ts +9 -9
  40. package/dist/reactive.d.ts.map +1 -1
  41. package/dist/reactive.js +9 -26
  42. package/dist/reactive.js.map +1 -1
  43. package/dist/reactive.test.js +2 -2
  44. package/dist/reactive.test.js.map +1 -1
  45. package/dist/store/StoreRegistry.d.ts +30 -5
  46. package/dist/store/StoreRegistry.d.ts.map +1 -1
  47. package/dist/store/StoreRegistry.js +54 -31
  48. package/dist/store/StoreRegistry.js.map +1 -1
  49. package/dist/store/StoreRegistry.test.js +251 -250
  50. package/dist/store/StoreRegistry.test.js.map +1 -1
  51. package/dist/store/create-store.d.ts +6 -2
  52. package/dist/store/create-store.d.ts.map +1 -1
  53. package/dist/store/create-store.js +13 -7
  54. package/dist/store/create-store.js.map +1 -1
  55. package/dist/store/devtools.d.ts +1 -1
  56. package/dist/store/devtools.d.ts.map +1 -1
  57. package/dist/store/devtools.js +3 -3
  58. package/dist/store/devtools.js.map +1 -1
  59. package/dist/store/store-eventstream.test.js +2 -2
  60. package/dist/store/store-eventstream.test.js.map +1 -1
  61. package/dist/store/store-types.d.ts +70 -5
  62. package/dist/store/store-types.d.ts.map +1 -1
  63. package/dist/store/store-types.js.map +1 -1
  64. package/dist/store/store-types.test.js +1 -1
  65. package/dist/store/store-types.test.js.map +1 -1
  66. package/dist/store/store.d.ts +81 -2
  67. package/dist/store/store.d.ts.map +1 -1
  68. package/dist/store/store.js +128 -45
  69. package/dist/store/store.js.map +1 -1
  70. package/dist/utils/dev.js.map +1 -1
  71. package/dist/utils/stack-info.js +2 -2
  72. package/dist/utils/stack-info.js.map +1 -1
  73. package/dist/utils/tests/fixture.d.ts +1 -1
  74. package/dist/utils/tests/fixture.d.ts.map +1 -1
  75. package/dist/utils/tests/fixture.js.map +1 -1
  76. package/dist/utils/tests/otel.d.ts.map +1 -1
  77. package/dist/utils/tests/otel.js +5 -5
  78. package/dist/utils/tests/otel.js.map +1 -1
  79. package/package.json +58 -17
  80. package/src/QueryCache.ts +1 -1
  81. package/src/SqliteDbWrapper.test.ts +4 -2
  82. package/src/SqliteDbWrapper.ts +12 -11
  83. package/src/ambient.d.ts +0 -7
  84. package/src/effect/LiveStore.test.ts +61 -0
  85. package/src/effect/LiveStore.ts +17 -26
  86. package/src/live-queries/__snapshots__/db-query.test.ts.snap +336 -231
  87. package/src/live-queries/base-class.ts +7 -6
  88. package/src/live-queries/client-document-get-query.ts +4 -2
  89. package/src/live-queries/computed.ts +3 -2
  90. package/src/live-queries/db-query.test.ts +3 -2
  91. package/src/live-queries/db-query.ts +15 -15
  92. package/src/live-queries/signal.test.ts +3 -2
  93. package/src/mod.ts +1 -0
  94. package/src/reactive.test.ts +3 -2
  95. package/src/reactive.ts +22 -23
  96. package/src/store/StoreRegistry.test.ts +317 -293
  97. package/src/store/StoreRegistry.ts +63 -38
  98. package/src/store/create-store.ts +26 -11
  99. package/src/store/devtools.ts +5 -6
  100. package/src/store/store-eventstream.test.ts +4 -2
  101. package/src/store/store-types.test.ts +3 -1
  102. package/src/store/store-types.ts +47 -8
  103. package/src/store/store.ts +172 -55
  104. package/src/utils/dev.ts +2 -2
  105. package/src/utils/stack-info.ts +2 -2
  106. package/src/utils/tests/fixture.ts +2 -1
  107. package/src/utils/tests/otel.ts +8 -7
  108. package/docs/api/index.md +0 -3
  109. package/docs/building-with-livestore/complex-ui-state/index.md +0 -3
  110. package/docs/building-with-livestore/crud/index.md +0 -3
  111. package/docs/building-with-livestore/data-modeling/index.md +0 -30
  112. package/docs/building-with-livestore/debugging/index.md +0 -17
  113. package/docs/building-with-livestore/devtools/index.md +0 -79
  114. package/docs/building-with-livestore/events/index.md +0 -355
  115. package/docs/building-with-livestore/examples/ai-agent/index.md +0 -5
  116. package/docs/building-with-livestore/examples/todo-workspaces/index.md +0 -885
  117. package/docs/building-with-livestore/examples/turnbased-game/index.md +0 -7
  118. package/docs/building-with-livestore/opentelemetry/index.md +0 -227
  119. package/docs/building-with-livestore/production-checklist/index.md +0 -5
  120. package/docs/building-with-livestore/reactivity-system/index.md +0 -202
  121. package/docs/building-with-livestore/rules-for-ai-agents/index.md +0 -9
  122. package/docs/building-with-livestore/state/materializers/index.md +0 -300
  123. package/docs/building-with-livestore/state/sql-queries/index.md +0 -94
  124. package/docs/building-with-livestore/state/sqlite/index.md +0 -45
  125. package/docs/building-with-livestore/state/sqlite-schema/index.md +0 -306
  126. package/docs/building-with-livestore/state/sqlite-schema-effect/index.md +0 -300
  127. package/docs/building-with-livestore/store/index.md +0 -625
  128. package/docs/building-with-livestore/syncing/index.md +0 -136
  129. package/docs/building-with-livestore/tools/cli/index.md +0 -177
  130. package/docs/building-with-livestore/tools/mcp/index.md +0 -187
  131. package/docs/examples/cloudflare-adapter/index.md +0 -44
  132. package/docs/examples/expo-adapter/index.md +0 -44
  133. package/docs/examples/index.md +0 -55
  134. package/docs/examples/node-adapter/index.md +0 -44
  135. package/docs/examples/web-adapter/index.md +0 -52
  136. package/docs/framework-integrations/custom-elements/index.md +0 -142
  137. package/docs/framework-integrations/react-integration/index.md +0 -937
  138. package/docs/framework-integrations/solid-integration/index.md +0 -293
  139. package/docs/framework-integrations/svelte-integration/index.md +0 -42
  140. package/docs/framework-integrations/vue-integration/index.md +0 -294
  141. package/docs/getting-started/expo/index.md +0 -882
  142. package/docs/getting-started/node/index.md +0 -115
  143. package/docs/getting-started/react-web/index.md +0 -626
  144. package/docs/getting-started/solid/index.md +0 -3
  145. package/docs/getting-started/vue/index.md +0 -471
  146. package/docs/index.md +0 -208
  147. package/docs/llms.txt +0 -146
  148. package/docs/misc/CODE_OF_CONDUCT/index.md +0 -133
  149. package/docs/misc/FAQ/index.md +0 -37
  150. package/docs/misc/community/index.md +0 -88
  151. package/docs/misc/credits/index.md +0 -14
  152. package/docs/misc/design-partners/index.md +0 -13
  153. package/docs/misc/package-management/index.md +0 -21
  154. package/docs/misc/performance/index.md +0 -25
  155. package/docs/misc/resources/index.md +0 -46
  156. package/docs/misc/state-of-the-project/index.md +0 -37
  157. package/docs/misc/troubleshooting/index.md +0 -82
  158. package/docs/overview/concepts/index.md +0 -78
  159. package/docs/overview/how-livestore-works/index.md +0 -56
  160. package/docs/overview/introduction/index.md +0 -413
  161. package/docs/overview/technology-comparison/index.md +0 -40
  162. package/docs/overview/when-livestore/index.md +0 -81
  163. package/docs/overview/why-livestore/index.md +0 -111
  164. package/docs/patterns/ai/index.md +0 -15
  165. package/docs/patterns/anonymous-user-transition/index.md +0 -10
  166. package/docs/patterns/app-evolution/index.md +0 -72
  167. package/docs/patterns/auth/index.md +0 -377
  168. package/docs/patterns/effect/index.md +0 -1505
  169. package/docs/patterns/encryption/index.md +0 -6
  170. package/docs/patterns/external-data/index.md +0 -5
  171. package/docs/patterns/file-management/index.md +0 -11
  172. package/docs/patterns/file-structure/index.md +0 -14
  173. package/docs/patterns/list-ordering/index.md +0 -369
  174. package/docs/patterns/offline/index.md +0 -32
  175. package/docs/patterns/orm/index.md +0 -18
  176. package/docs/patterns/presence/index.md +0 -11
  177. package/docs/patterns/rich-text-editing/index.md +0 -11
  178. package/docs/patterns/server-side-clients/index.md +0 -97
  179. package/docs/patterns/side-effects/index.md +0 -11
  180. package/docs/patterns/state-machines/index.md +0 -11
  181. package/docs/patterns/storybook/index.md +0 -209
  182. package/docs/patterns/undo-redo/index.md +0 -9
  183. package/docs/patterns/version-control/index.md +0 -8
  184. package/docs/platform-adapters/cloudflare-durable-object-adapter/index.md +0 -453
  185. package/docs/platform-adapters/electron-adapter/index.md +0 -15
  186. package/docs/platform-adapters/expo-adapter/index.md +0 -262
  187. package/docs/platform-adapters/node-adapter/index.md +0 -160
  188. package/docs/platform-adapters/tauri-adapter/index.md +0 -15
  189. package/docs/platform-adapters/web-adapter/index.md +0 -287
  190. package/docs/sustainable-open-source/contributing/docs/index.md +0 -94
  191. package/docs/sustainable-open-source/contributing/info/index.md +0 -63
  192. package/docs/sustainable-open-source/contributing/monorepo/index.md +0 -195
  193. package/docs/sustainable-open-source/sponsoring/index.md +0 -104
  194. package/docs/sync-providers/cloudflare/index.md +0 -773
  195. package/docs/sync-providers/custom/index.md +0 -65
  196. package/docs/sync-providers/electricsql/index.md +0 -159
  197. package/docs/sync-providers/s2/index.md +0 -230
  198. package/docs/tutorial/0-welcome/index.md +0 -48
  199. package/docs/tutorial/1-setup-starter-project/index.md +0 -105
  200. package/docs/tutorial/2-deploy-to-cloudflare/index.md +0 -195
  201. package/docs/tutorial/3-read-and-write-todos-via-livestore/index.md +0 -530
  202. package/docs/tutorial/4-sync-data-via-cloudflare/index.md +0 -210
  203. package/docs/tutorial/5-expand-business-logic/index.md +0 -174
  204. package/docs/tutorial/6-persist-ui-state/index.md +0 -453
  205. package/docs/tutorial/7-next-steps/index.md +0 -22
  206. package/docs/understanding-livestore/design-decisions/index.md +0 -33
  207. package/docs/understanding-livestore/event-sourcing/index.md +0 -40
@@ -1,44 +0,0 @@
1
- # Node adapter examples
2
-
3
- # Node Adapter Examples
4
-
5
- Examples using `@livestore/adapter-node` for Node.js server-side applications.
6
-
7
- <CardGrid>
8
- {nodeExamples.map((example) => {
9
- const { url, label } = getExampleDemoLinks(example);
10
-
11
- return (
12
- <Card title={example.title} key={example.title}>
13
- {example.image ? (
14
- <Image src={example.image.url} width={example.image.width} height={example.image.height} alt={`${example.title} application interface`} />
15
- ) : (
16
- <div style="background: linear-gradient(135deg, #1f2937 0%, #374151 100%); height: 200px; display: flex; align-items: center; justify-content: center; color: #9ca3af; font-size: 14px; border-radius: 8px;">
17
- Screenshot coming soon
18
- </div>
19
- )}
20
- <p>{example.description}</p>
21
- <p><strong>Technologies:</strong> {example.technologies.join(' • ')}</p>
22
- {example.syncProvider && (
23
- <p><strong>Sync Provider:</strong> {example.syncProvider}</p>
24
- )}
25
- <div style="margin-top: auto; padding-top: 1rem;">
26
- {url && (
27
- <p style="margin: 0 0 0.5rem 0;"><a href={url} target="_blank" rel="noopener noreferrer">{label}</a></p>
28
- )}
29
- <p style="margin: 0;"><a href={example.sourceUrl} target="_blank" rel="noopener noreferrer">View Source →</a></p>
30
- </div>
31
- </Card>
32
- );
33
- })}
34
- </CardGrid>
35
-
36
- ## Node Adapter
37
-
38
- - Uses native Node.js SQLite with file system storage
39
- - Stores SQLite files directly on disk (default: current directory)
40
- - Supports single-threaded or worker thread modes
41
- - WebSocket connections for sync and devtools integration
42
-
43
- ---
44
- <a href={`https://github.com/livestorejs/livestore/tree/${getBranchName()}/examples`}>View all examples on GitHub →</a>
@@ -1,52 +0,0 @@
1
- # Web adapter examples
2
-
3
- # Web Adapter Examples
4
-
5
- Examples using `@livestore/adapter-web` for browser environments.
6
-
7
- <CardGrid>
8
- {webExamples.map((example) => {
9
- const { url, label } = getExampleDemoLinks(example);
10
-
11
- return (
12
- <Card title={example.title} key={example.title}>
13
- {example.image ? (
14
- <Image src={example.image.url} width={example.image.width} height={example.image.height} alt={`${example.title} application interface`} />
15
- ) : (
16
- <div style="background: linear-gradient(135deg, #1f2937 0%, #374151 100%); height: 200px; display: flex; align-items: center; justify-content: center; color: #9ca3af; font-size: 14px; border-radius: 8px;">
17
- Screenshot coming soon
18
- </div>
19
- )}
20
- <p>{example.description}</p>
21
- <p><strong>Technologies:</strong> {example.technologies.join(' • ')}</p>
22
- {example.syncProvider && (
23
- <p><strong>Sync Provider:</strong> {example.syncProvider}</p>
24
- )}
25
- <div style="margin-top: auto; padding-top: 1rem;">
26
- {url && (
27
- <p style="margin: 0 0 0.5rem 0;"><a href={url} target="_blank" rel="noopener noreferrer">{label}</a></p>
28
- )}
29
- <p style="margin: 0;"><a href={example.sourceUrl} target="_blank" rel="noopener noreferrer">View Source →</a></p>
30
- </div>
31
- </Card>
32
- );
33
- })}
34
- </CardGrid>
35
-
36
- ## Web Adapter
37
-
38
- - Uses SQLite WASM with OPFS (Origin Private File System) for browser storage
39
- - Runs in Web Workers and SharedWorkers for multi-tab coordination
40
- - Persists data via OPFS Access Handle Pool VFS
41
- - Supports WebSocket connections for sync and devtools
42
-
43
- ## Frameworks
44
-
45
- - React (`@livestore/react`)
46
- - SolidJS (`@livestore/solid`)
47
- - Svelte (`@livestore/svelte`)
48
- - Web Components
49
- - Vanilla JavaScript
50
-
51
- ---
52
- <a href={`https://github.com/livestorejs/livestore/tree/${getBranchName()}/examples`}>View all examples on GitHub →</a>
@@ -1,142 +0,0 @@
1
- # Custom elements
2
-
3
- LiveStore can be used with custom elements/web components.
4
-
5
- ## Example
6
-
7
- See [examples](/examples) for a complete example.
8
-
9
- ## `reference/custom-elements/main.ts`
10
-
11
- ```ts filename="reference/custom-elements/main.ts"
12
-
13
- const adapter = makePersistedAdapter({
14
- storage: { type: 'opfs' },
15
- worker: LiveStoreWorker,
16
- sharedWorker: LiveStoreSharedWorker,
17
- })
18
-
19
- const store = await createStorePromise({ schema, adapter, storeId: 'custom-elements-demo' })
20
-
21
- const visibleTodos$ = queryDb(tables.todos.where({ deletedAt: null }))
22
-
23
- class TodoListElement extends HTMLElement {
24
- private list: HTMLUListElement
25
- private input: HTMLInputElement
26
-
27
- constructor() {
28
- super()
29
- const shadow = this.attachShadow({ mode: 'open' })
30
-
31
- this.input = document.createElement('input')
32
- this.input.placeholder = 'What needs to be done?'
33
-
34
- this.list = document.createElement('ul')
35
- this.list.style.listStyle = 'none'
36
- this.list.style.padding = '0'
37
- this.list.style.margin = '16px 0 0'
38
-
39
- this.input.addEventListener('keydown', (event) => {
40
- if (event.key === 'Enter' && this.input.value.trim()) {
41
- store.commit(events.todoCreated({ id: crypto.randomUUID(), text: this.input.value.trim() }))
42
- this.input.value = ''
43
- }
44
- })
45
-
46
- shadow.append(this.input, this.list)
47
- }
48
-
49
- connectedCallback(): void {
50
- this.renderTodos(Array.from(store.query(tables.todos.where({ deletedAt: null }))))
51
-
52
- store.subscribe(visibleTodos$, (todos) => this.renderTodos(todos))
53
- }
54
-
55
- private renderTodos(todos: ReadonlyArray<typeof tables.todos.Type>): void {
56
- const nodes = Array.from(todos, (todo) => {
57
- const item = document.createElement('li')
58
- item.textContent = todo.text
59
- item.style.cursor = 'pointer'
60
- item.addEventListener('click', () => {
61
- store.commit(todo.completed ? events.todoUncompleted({ id: todo.id }) : events.todoCompleted({ id: todo.id }))
62
- })
63
-
64
- const deleteButton = document.createElement('button')
65
- deleteButton.type = 'button'
66
- deleteButton.textContent = '✕'
67
- deleteButton.style.marginLeft = '8px'
68
- deleteButton.addEventListener('click', (event) => {
69
- event.stopPropagation()
70
- store.commit(events.todoDeleted({ id: todo.id, deletedAt: new Date() }))
71
- })
72
-
73
- const row = document.createElement('div')
74
- row.style.display = 'flex'
75
- row.style.alignItems = 'center'
76
- row.appendChild(item)
77
- row.appendChild(deleteButton)
78
-
79
- const wrapper = document.createElement('li')
80
- wrapper.appendChild(row)
81
- return wrapper
82
- })
83
-
84
- this.list.replaceChildren(...nodes)
85
- }
86
- }
87
-
88
- customElements.define('todo-list', TodoListElement)
89
- ```
90
-
91
- ### `reference/custom-elements/livestore/schema.ts`
92
-
93
- ```ts filename="reference/custom-elements/livestore/schema.ts"
94
-
95
- export const tables = {
96
- todos: State.SQLite.table({
97
- name: 'todos',
98
- columns: {
99
- id: State.SQLite.text({ primaryKey: true }),
100
- text: State.SQLite.text({ default: '' }),
101
- completed: State.SQLite.boolean({ default: false }),
102
- deletedAt: State.SQLite.integer({ nullable: true, schema: Schema.DateFromNumber }),
103
- },
104
- }),
105
- uiState: State.SQLite.clientDocument({
106
- name: 'uiState',
107
- schema: Schema.Struct({ newTodoText: Schema.String }),
108
- default: { id: SessionIdSymbol, value: { newTodoText: '' } },
109
- }),
110
- }
111
-
112
- export const events = {
113
- todoCreated: Events.synced({
114
- name: 'v1.TodoCreated',
115
- schema: Schema.Struct({ id: Schema.String, text: Schema.String }),
116
- }),
117
- todoCompleted: Events.synced({
118
- name: 'v1.TodoCompleted',
119
- schema: Schema.Struct({ id: Schema.String }),
120
- }),
121
- todoUncompleted: Events.synced({
122
- name: 'v1.TodoUncompleted',
123
- schema: Schema.Struct({ id: Schema.String }),
124
- }),
125
- todoDeleted: Events.synced({
126
- name: 'v1.TodoDeleted',
127
- schema: Schema.Struct({ id: Schema.String, deletedAt: Schema.Date }),
128
- }),
129
- uiStateSet: tables.uiState.set,
130
- }
131
-
132
- const materializers = State.SQLite.materializers(events, {
133
- 'v1.TodoCreated': ({ id, text }) => tables.todos.insert({ id, text, completed: false }),
134
- 'v1.TodoCompleted': ({ id }) => tables.todos.update({ completed: true }).where({ id }),
135
- 'v1.TodoUncompleted': ({ id }) => tables.todos.update({ completed: false }).where({ id }),
136
- 'v1.TodoDeleted': ({ id, deletedAt }) => tables.todos.update({ deletedAt }).where({ id }),
137
- })
138
-
139
- const state = State.SQLite.makeState({ tables, materializers })
140
-
141
- export const schema = makeSchema({ events, state })
142
- ```