@livestore/livestore 0.4.0-dev.9 → 0.4.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 (129) 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 +4 -3
  10. package/dist/SqliteDbWrapper.test.js.map +1 -1
  11. package/dist/effect/LiveStore.d.ts +133 -5
  12. package/dist/effect/LiveStore.d.ts.map +1 -1
  13. package/dist/effect/LiveStore.js +187 -8
  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/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 +110 -7
  24. package/dist/live-queries/base-class.d.ts.map +1 -1
  25. package/dist/live-queries/base-class.js +2 -2
  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 +58 -2
  34. package/dist/live-queries/computed.js.map +1 -1
  35. package/dist/live-queries/db-query.d.ts.map +1 -1
  36. package/dist/live-queries/db-query.js +21 -19
  37. package/dist/live-queries/db-query.js.map +1 -1
  38. package/dist/live-queries/db-query.test.js +106 -23
  39. package/dist/live-queries/db-query.test.js.map +1 -1
  40. package/dist/live-queries/signal.d.ts +49 -0
  41. package/dist/live-queries/signal.d.ts.map +1 -1
  42. package/dist/live-queries/signal.js +49 -0
  43. package/dist/live-queries/signal.js.map +1 -1
  44. package/dist/live-queries/signal.test.js +2 -2
  45. package/dist/live-queries/signal.test.js.map +1 -1
  46. package/dist/mod.d.ts +3 -3
  47. package/dist/mod.d.ts.map +1 -1
  48. package/dist/mod.js +3 -2
  49. package/dist/mod.js.map +1 -1
  50. package/dist/reactive.d.ts +9 -9
  51. package/dist/reactive.d.ts.map +1 -1
  52. package/dist/reactive.js +9 -26
  53. package/dist/reactive.js.map +1 -1
  54. package/dist/reactive.test.js +2 -2
  55. package/dist/reactive.test.js.map +1 -1
  56. package/dist/store/StoreRegistry.d.ts +215 -0
  57. package/dist/store/StoreRegistry.d.ts.map +1 -0
  58. package/dist/store/StoreRegistry.js +267 -0
  59. package/dist/store/StoreRegistry.js.map +1 -0
  60. package/dist/store/StoreRegistry.test.d.ts +2 -0
  61. package/dist/store/StoreRegistry.test.d.ts.map +1 -0
  62. package/dist/store/StoreRegistry.test.js +381 -0
  63. package/dist/store/StoreRegistry.test.js.map +1 -0
  64. package/dist/store/create-store.d.ts +98 -18
  65. package/dist/store/create-store.d.ts.map +1 -1
  66. package/dist/store/create-store.js +49 -20
  67. package/dist/store/create-store.js.map +1 -1
  68. package/dist/store/devtools.d.ts +5 -16
  69. package/dist/store/devtools.d.ts.map +1 -1
  70. package/dist/store/devtools.js +59 -18
  71. package/dist/store/devtools.js.map +1 -1
  72. package/dist/store/store-eventstream.test.d.ts +2 -0
  73. package/dist/store/store-eventstream.test.d.ts.map +1 -0
  74. package/dist/store/store-eventstream.test.js +65 -0
  75. package/dist/store/store-eventstream.test.js.map +1 -0
  76. package/dist/store/store-types.d.ts +285 -27
  77. package/dist/store/store-types.d.ts.map +1 -1
  78. package/dist/store/store-types.js +77 -1
  79. package/dist/store/store-types.js.map +1 -1
  80. package/dist/store/store-types.test.d.ts +2 -0
  81. package/dist/store/store-types.test.d.ts.map +1 -0
  82. package/dist/store/store-types.test.js +39 -0
  83. package/dist/store/store-types.test.js.map +1 -0
  84. package/dist/store/store.d.ts +253 -66
  85. package/dist/store/store.d.ts.map +1 -1
  86. package/dist/store/store.js +442 -153
  87. package/dist/store/store.js.map +1 -1
  88. package/dist/utils/dev.d.ts.map +1 -1
  89. package/dist/utils/dev.js.map +1 -1
  90. package/dist/utils/stack-info.js +2 -2
  91. package/dist/utils/stack-info.js.map +1 -1
  92. package/dist/utils/tests/fixture.d.ts +20 -5
  93. package/dist/utils/tests/fixture.d.ts.map +1 -1
  94. package/dist/utils/tests/fixture.js +7 -0
  95. package/dist/utils/tests/fixture.js.map +1 -1
  96. package/dist/utils/tests/otel.d.ts.map +1 -1
  97. package/dist/utils/tests/otel.js +5 -5
  98. package/dist/utils/tests/otel.js.map +1 -1
  99. package/package.json +59 -17
  100. package/src/QueryCache.ts +1 -1
  101. package/src/SqliteDbWrapper.test.ts +5 -3
  102. package/src/SqliteDbWrapper.ts +12 -11
  103. package/src/ambient.d.ts +0 -7
  104. package/src/effect/LiveStore.test.ts +61 -0
  105. package/src/effect/LiveStore.ts +388 -13
  106. package/src/effect/mod.ts +13 -1
  107. package/src/live-queries/__snapshots__/db-query.test.ts.snap +604 -192
  108. package/src/live-queries/base-class.ts +126 -28
  109. package/src/live-queries/client-document-get-query.ts +6 -4
  110. package/src/live-queries/computed.ts +59 -2
  111. package/src/live-queries/db-query.test.ts +162 -24
  112. package/src/live-queries/db-query.ts +23 -20
  113. package/src/live-queries/signal.test.ts +3 -2
  114. package/src/live-queries/signal.ts +49 -0
  115. package/src/mod.ts +19 -2
  116. package/src/reactive.test.ts +3 -2
  117. package/src/reactive.ts +22 -23
  118. package/src/store/StoreRegistry.test.ts +540 -0
  119. package/src/store/StoreRegistry.ts +418 -0
  120. package/src/store/create-store.ts +158 -39
  121. package/src/store/devtools.ts +77 -33
  122. package/src/store/store-eventstream.test.ts +114 -0
  123. package/src/store/store-types.test.ts +52 -0
  124. package/src/store/store-types.ts +360 -40
  125. package/src/store/store.ts +571 -236
  126. package/src/utils/dev.ts +2 -3
  127. package/src/utils/stack-info.ts +2 -2
  128. package/src/utils/tests/fixture.ts +9 -1
  129. 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
 
@@ -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,12 @@ 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 ((name.startsWith('use') === true || name.startsWith('Module.use') === true) && name.endsWith('QueryRef') === false) {
45
45
  hasReachedStart = true
46
46
  // console.debug('hasReachedStart. adding one more frame.')
47
47
 
48
48
  frames.unshift({ name: name.replace(/^Module\./, ''), filePath })
49
- } else if (hasReachedStart) {
49
+ } else if (hasReachedStart === true) {
50
50
  // We've reached the end of the `use*` functions, so we're adding the component name and stop
51
51
  // Unless it's `react-stack-bottom-frame`, which we skip
52
52
  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'