@livestore/livestore 0.4.0-dev.9 → 0.5.0-dev.0

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 (132) 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 +15 -13
  8. package/dist/SqliteDbWrapper.js.map +1 -1
  9. package/dist/SqliteDbWrapper.test.js +24 -6
  10. package/dist/SqliteDbWrapper.test.js.map +1 -1
  11. package/dist/effect/LiveStore.d.ts +134 -6
  12. package/dist/effect/LiveStore.d.ts.map +1 -1
  13. package/dist/effect/LiveStore.js +190 -11
  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 +41 -0
  18. package/dist/effect/LiveStore.test.js.map +1 -0
  19. package/dist/effect/mod.d.ts +1 -1
  20. package/dist/effect/mod.d.ts.map +1 -1
  21. package/dist/effect/mod.js +3 -1
  22. package/dist/effect/mod.js.map +1 -1
  23. package/dist/live-queries/base-class.d.ts +129 -9
  24. package/dist/live-queries/base-class.d.ts.map +1 -1
  25. package/dist/live-queries/base-class.js +30 -4
  26. package/dist/live-queries/base-class.js.map +1 -1
  27. package/dist/live-queries/client-document-get-query.d.ts +1 -1
  28. package/dist/live-queries/client-document-get-query.d.ts.map +1 -1
  29. package/dist/live-queries/client-document-get-query.js +4 -3
  30. package/dist/live-queries/client-document-get-query.js.map +1 -1
  31. package/dist/live-queries/computed.d.ts +56 -0
  32. package/dist/live-queries/computed.d.ts.map +1 -1
  33. package/dist/live-queries/computed.js +62 -6
  34. package/dist/live-queries/computed.js.map +1 -1
  35. package/dist/live-queries/db-query.d.ts +2 -2
  36. package/dist/live-queries/db-query.d.ts.map +1 -1
  37. package/dist/live-queries/db-query.js +41 -30
  38. package/dist/live-queries/db-query.js.map +1 -1
  39. package/dist/live-queries/db-query.test.js +112 -29
  40. package/dist/live-queries/db-query.test.js.map +1 -1
  41. package/dist/live-queries/signal.d.ts +49 -0
  42. package/dist/live-queries/signal.d.ts.map +1 -1
  43. package/dist/live-queries/signal.js +51 -2
  44. package/dist/live-queries/signal.js.map +1 -1
  45. package/dist/live-queries/signal.test.js +4 -4
  46. package/dist/live-queries/signal.test.js.map +1 -1
  47. package/dist/mod.d.ts +3 -3
  48. package/dist/mod.d.ts.map +1 -1
  49. package/dist/mod.js +3 -2
  50. package/dist/mod.js.map +1 -1
  51. package/dist/reactive.d.ts +10 -10
  52. package/dist/reactive.d.ts.map +1 -1
  53. package/dist/reactive.js +29 -27
  54. package/dist/reactive.js.map +1 -1
  55. package/dist/reactive.test.js +2 -2
  56. package/dist/reactive.test.js.map +1 -1
  57. package/dist/store/StoreRegistry.d.ts +215 -0
  58. package/dist/store/StoreRegistry.d.ts.map +1 -0
  59. package/dist/store/StoreRegistry.js +267 -0
  60. package/dist/store/StoreRegistry.js.map +1 -0
  61. package/dist/store/StoreRegistry.test.d.ts +2 -0
  62. package/dist/store/StoreRegistry.test.d.ts.map +1 -0
  63. package/dist/store/StoreRegistry.test.js +384 -0
  64. package/dist/store/StoreRegistry.test.js.map +1 -0
  65. package/dist/store/create-store.d.ts +99 -22
  66. package/dist/store/create-store.d.ts.map +1 -1
  67. package/dist/store/create-store.js +85 -37
  68. package/dist/store/create-store.js.map +1 -1
  69. package/dist/store/devtools.d.ts +6 -18
  70. package/dist/store/devtools.d.ts.map +1 -1
  71. package/dist/store/devtools.js +61 -19
  72. package/dist/store/devtools.js.map +1 -1
  73. package/dist/store/store-eventstream.test.d.ts +2 -0
  74. package/dist/store/store-eventstream.test.d.ts.map +1 -0
  75. package/dist/store/store-eventstream.test.js +65 -0
  76. package/dist/store/store-eventstream.test.js.map +1 -0
  77. package/dist/store/store-types.d.ts +271 -31
  78. package/dist/store/store-types.d.ts.map +1 -1
  79. package/dist/store/store-types.js +41 -1
  80. package/dist/store/store-types.js.map +1 -1
  81. package/dist/store/store-types.test.d.ts +2 -0
  82. package/dist/store/store-types.test.d.ts.map +1 -0
  83. package/dist/store/store-types.test.js +39 -0
  84. package/dist/store/store-types.test.js.map +1 -0
  85. package/dist/store/store.d.ts +255 -68
  86. package/dist/store/store.d.ts.map +1 -1
  87. package/dist/store/store.js +533 -186
  88. package/dist/store/store.js.map +1 -1
  89. package/dist/utils/dev.d.ts.map +1 -1
  90. package/dist/utils/dev.js +1 -1
  91. package/dist/utils/dev.js.map +1 -1
  92. package/dist/utils/stack-info.d.ts.map +1 -1
  93. package/dist/utils/stack-info.js +3 -2
  94. package/dist/utils/stack-info.js.map +1 -1
  95. package/dist/utils/tests/fixture.d.ts +46 -39
  96. package/dist/utils/tests/fixture.d.ts.map +1 -1
  97. package/dist/utils/tests/fixture.js +7 -0
  98. package/dist/utils/tests/fixture.js.map +1 -1
  99. package/dist/utils/tests/otel.d.ts.map +1 -1
  100. package/dist/utils/tests/otel.js +5 -5
  101. package/dist/utils/tests/otel.js.map +1 -1
  102. package/package.json +50 -18
  103. package/src/QueryCache.ts +1 -1
  104. package/src/SqliteDbWrapper.test.ts +30 -6
  105. package/src/SqliteDbWrapper.ts +21 -17
  106. package/src/ambient.d.ts +0 -7
  107. package/src/effect/LiveStore.test.ts +61 -0
  108. package/src/effect/LiveStore.ts +426 -22
  109. package/src/effect/mod.ts +13 -1
  110. package/src/live-queries/__snapshots__/db-query.test.ts.snap +814 -178
  111. package/src/live-queries/base-class.ts +162 -32
  112. package/src/live-queries/client-document-get-query.ts +6 -4
  113. package/src/live-queries/computed.ts +65 -8
  114. package/src/live-queries/db-query.test.ts +168 -30
  115. package/src/live-queries/db-query.ts +58 -43
  116. package/src/live-queries/signal.test.ts +5 -4
  117. package/src/live-queries/signal.ts +52 -3
  118. package/src/mod.ts +19 -2
  119. package/src/reactive.test.ts +3 -2
  120. package/src/reactive.ts +58 -49
  121. package/src/store/StoreRegistry.test.ts +543 -0
  122. package/src/store/StoreRegistry.ts +429 -0
  123. package/src/store/create-store.ts +227 -74
  124. package/src/store/devtools.ts +305 -261
  125. package/src/store/store-eventstream.test.ts +123 -0
  126. package/src/store/store-types.test.ts +52 -0
  127. package/src/store/store-types.ts +318 -44
  128. package/src/store/store.ts +695 -283
  129. package/src/utils/dev.ts +3 -4
  130. package/src/utils/stack-info.ts +5 -2
  131. package/src/utils/tests/fixture.ts +9 -1
  132. package/src/utils/tests/otel.ts +8 -7
package/src/utils/dev.ts CHANGED
@@ -3,7 +3,6 @@ import { prettyBytes } from '@livestore/utils'
3
3
  import { Effect } from '@livestore/utils/effect'
4
4
 
5
5
  declare global {
6
- // declaring a global *value* is the least fussy when augmenting inline
7
6
  var __debugLiveStoreUtils: any
8
7
  }
9
8
 
@@ -25,7 +24,7 @@ export const downloadURL = (data: string, fileName: string) => {
25
24
  const a = document.createElement('a')
26
25
  a.href = data
27
26
  a.download = fileName
28
- document.body.append(a)
27
+ document.body.appendChild(a)
29
28
  a.style.display = 'none'
30
29
  a.click()
31
30
  a.remove()
@@ -34,8 +33,8 @@ export const downloadURL = (data: string, fileName: string) => {
34
33
  export const exposeDebugUtils = () => {
35
34
  globalThis.__debugLiveStoreUtils = {
36
35
  downloadBlob,
37
- runSync: (effect: Effect.Effect<any, any, never>) => Effect.runSync(effect),
38
- runFork: (effect: Effect.Effect<any, any, never>) => Effect.runFork(effect),
36
+ runSync: <A, E>(effect: Effect.Effect<A, E>) => Effect.runSync(effect),
37
+ runFork: <A, E>(effect: Effect.Effect<A, E>) => Effect.runFork(effect),
39
38
  dumpDb: (db: SqliteDb) => {
40
39
  const tables = db.select<{ name: string }>(`SELECT name FROM sqlite_master WHERE type='table'`)
41
40
  for (const table of tables) {
@@ -41,12 +41,15 @@ export const extractStackInfoFromStackTrace = (stackTrace: string): StackInfo =>
41
41
  // console.debug(name, filePath)
42
42
 
43
43
  // NOTE No idea where this `Module.` comes from - possibly a Vite thing?
44
- if ((name.startsWith('use') || name.startsWith('Module.use')) && name.endsWith('QueryRef') === false) {
44
+ if (
45
+ (name.startsWith('use') === true || name.startsWith('Module.use') === true) &&
46
+ name.endsWith('QueryRef') === false
47
+ ) {
45
48
  hasReachedStart = true
46
49
  // console.debug('hasReachedStart. adding one more frame.')
47
50
 
48
51
  frames.unshift({ name: name.replace(/^Module\./, ''), filePath })
49
- } else if (hasReachedStart) {
52
+ } else if (hasReachedStart === true) {
50
53
  // We've reached the end of the `use*` functions, so we're adding the component name and stop
51
54
  // Unless it's `react-stack-bottom-frame`, which we skip
52
55
  if (name !== 'Object.react-stack-bottom-frame') {
@@ -1,9 +1,10 @@
1
+ import type * as otel from '@opentelemetry/api'
2
+
1
3
  import { makeInMemoryAdapter } from '@livestore/adapter-web'
2
4
  import { provideOtel } from '@livestore/common'
3
5
  import { createStore, Events, makeSchema, State } from '@livestore/livestore'
4
6
  import { omitUndefineds } from '@livestore/utils'
5
7
  import { Effect, Schema } from '@livestore/utils/effect'
6
- import type * as otel from '@opentelemetry/api'
7
8
 
8
9
  export type Todo = {
9
10
  id: string
@@ -47,10 +48,17 @@ export const events = {
47
48
  completed: Schema.Boolean,
48
49
  }),
49
50
  }),
51
+ todoCompleted: Events.synced({
52
+ name: 'todo.completed',
53
+ schema: Schema.Struct({
54
+ id: Schema.String,
55
+ }),
56
+ }),
50
57
  }
51
58
 
52
59
  const materializers = State.SQLite.materializers(events, {
53
60
  'todo.created': ({ id, text, completed }) => tables.todos.insert({ id, text, completed }),
61
+ 'todo.completed': ({ id }) => tables.todos.update({ completed: true }).where({ id }),
54
62
  })
55
63
 
56
64
  export const state = State.SQLite.makeState({ tables, materializers })
@@ -1,8 +1,9 @@
1
- import { omitUndefineds } from '@livestore/utils'
2
- import { identity } from '@livestore/utils/effect'
3
1
  import type { Attributes } from '@opentelemetry/api'
4
2
  import type { InMemorySpanExporter, ReadableSpan } from '@opentelemetry/sdk-trace-base'
5
3
 
4
+ import { omitUndefineds } from '@livestore/utils'
5
+ import { identity } from '@livestore/utils/effect'
6
+
6
7
  type SimplifiedNestedSpan = { _name: string; attributes: any; children: SimplifiedNestedSpan[] }
7
8
 
8
9
  type NestedSpan = { span: ReadableSpan; children: NestedSpan[] }
@@ -19,8 +20,8 @@ const buildSimplifiedRootSpans = (
19
20
 
20
21
  spansMap.forEach((nestedSpan) => {
21
22
  const parentId = nestedSpan.span.parentSpanContext?.spanId
22
- const parentSpan = parentId ? spansMap.get(parentId) : undefined
23
- if (parentSpan) {
23
+ const parentSpan = parentId !== undefined ? spansMap.get(parentId) : undefined
24
+ if (parentSpan !== undefined) {
24
25
  parentSpan.children.push(nestedSpan)
25
26
  }
26
27
  })
@@ -55,7 +56,7 @@ export const getSimplifiedRootSpan = (
55
56
  ): SimplifiedNestedSpan => {
56
57
  const results = buildSimplifiedRootSpans(exporter, rootSpanName, mapAttributes)
57
58
  const firstResult = results[0]
58
- if (!firstResult) throw new Error(`Could not find the root span named '${rootSpanName}'.`)
59
+ if (firstResult == null) throw new Error(`Could not find the root span named '${rootSpanName}'.`)
59
60
  return firstResult
60
61
  }
61
62
 
@@ -77,7 +78,7 @@ const omitEmpty = (obj: any) => {
77
78
  for (const key in obj) {
78
79
  if (
79
80
  obj[key] !== undefined &&
80
- !(Array.isArray(obj[key]) && obj[key].length === 0) &&
81
+ !(Array.isArray(obj[key]) === true && obj[key].length === 0) &&
81
82
  Object.keys(obj[key]).length > 0
82
83
  ) {
83
84
  result[key] = obj[key]
@@ -119,7 +120,7 @@ export const toTraceFile = (spans: ReadableSpan[]) => {
119
120
  typeof value === 'string'
120
121
  ? { stringValue: value }
121
122
  : typeof value === 'number'
122
- ? Number.isInteger(value)
123
+ ? Number.isInteger(value) === true
123
124
  ? { intValue: value }
124
125
  : { doubleValue: value }
125
126
  : typeof value === 'boolean'