@livestore/livestore 0.0.13 → 0.0.14

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 (205) hide show
  1. package/README.md +18 -21
  2. package/dist/.tsbuildinfo +1 -1
  3. package/dist/QueryCache.d.ts +1 -1
  4. package/dist/QueryCache.d.ts.map +1 -1
  5. package/dist/QueryCache.js.map +1 -1
  6. package/dist/__tests__/react/fixture.d.ts +5 -4
  7. package/dist/__tests__/react/fixture.d.ts.map +1 -1
  8. package/dist/__tests__/react/fixture.js +13 -14
  9. package/dist/__tests__/react/fixture.js.map +1 -1
  10. package/dist/__tests__/react/useComponentState.test.d.ts +2 -0
  11. package/dist/__tests__/react/useComponentState.test.d.ts.map +1 -0
  12. package/dist/__tests__/react/useComponentState.test.js +68 -0
  13. package/dist/__tests__/react/useComponentState.test.js.map +1 -0
  14. package/dist/__tests__/react/useLQuery.test.d.ts +2 -0
  15. package/dist/__tests__/react/useLQuery.test.d.ts.map +1 -0
  16. package/dist/__tests__/react/useLQuery.test.js +38 -0
  17. package/dist/__tests__/react/useLQuery.test.js.map +1 -0
  18. package/dist/__tests__/react/useLiveStoreComponent.test.js +4 -9
  19. package/dist/__tests__/react/useLiveStoreComponent.test.js.map +1 -1
  20. package/dist/__tests__/react/useQuery.test.d.ts +2 -0
  21. package/dist/__tests__/react/useQuery.test.d.ts.map +1 -0
  22. package/dist/__tests__/react/useQuery.test.js +33 -0
  23. package/dist/__tests__/react/useQuery.test.js.map +1 -0
  24. package/dist/__tests__/react/utils/extractStackInfoFromStackTrace.test.d.ts +2 -0
  25. package/dist/__tests__/react/utils/extractStackInfoFromStackTrace.test.d.ts.map +1 -0
  26. package/dist/__tests__/react/utils/extractStackInfoFromStackTrace.test.js +38 -0
  27. package/dist/__tests__/react/utils/extractStackInfoFromStackTrace.test.js.map +1 -0
  28. package/dist/__tests__/reactive.test.js +168 -95
  29. package/dist/__tests__/reactive.test.js.map +1 -1
  30. package/dist/__tests__/reactiveQueries/sql.test.d.ts +2 -0
  31. package/dist/__tests__/reactiveQueries/sql.test.d.ts.map +1 -0
  32. package/dist/__tests__/reactiveQueries/sql.test.js +337 -0
  33. package/dist/__tests__/reactiveQueries/sql.test.js.map +1 -0
  34. package/dist/effect/LiveStore.d.ts +3 -9
  35. package/dist/effect/LiveStore.d.ts.map +1 -1
  36. package/dist/effect/LiveStore.js +11 -7
  37. package/dist/effect/LiveStore.js.map +1 -1
  38. package/dist/inMemoryDatabase.d.ts +17 -21
  39. package/dist/inMemoryDatabase.d.ts.map +1 -1
  40. package/dist/inMemoryDatabase.js +2 -9
  41. package/dist/inMemoryDatabase.js.map +1 -1
  42. package/dist/index.d.ts +9 -7
  43. package/dist/index.d.ts.map +1 -1
  44. package/dist/index.js +7 -3
  45. package/dist/index.js.map +1 -1
  46. package/dist/migrations.d.ts +7 -0
  47. package/dist/migrations.d.ts.map +1 -1
  48. package/dist/migrations.js +18 -13
  49. package/dist/migrations.js.map +1 -1
  50. package/dist/react/LiveStoreProvider.d.ts +1 -3
  51. package/dist/react/LiveStoreProvider.d.ts.map +1 -1
  52. package/dist/react/LiveStoreProvider.js +13 -10
  53. package/dist/react/LiveStoreProvider.js.map +1 -1
  54. package/dist/react/index.d.ts +4 -4
  55. package/dist/react/index.d.ts.map +1 -1
  56. package/dist/react/index.js +3 -3
  57. package/dist/react/index.js.map +1 -1
  58. package/dist/react/useComponentState.d.ts +50 -0
  59. package/dist/react/useComponentState.d.ts.map +1 -0
  60. package/dist/react/useComponentState.js +248 -0
  61. package/dist/react/useComponentState.js.map +1 -0
  62. package/dist/react/useGlobalQuery.d.ts +2 -2
  63. package/dist/react/useGlobalQuery.d.ts.map +1 -1
  64. package/dist/react/useGlobalQuery.js +5 -2
  65. package/dist/react/useGlobalQuery.js.map +1 -1
  66. package/dist/react/useGraphQL.d.ts +5 -3
  67. package/dist/react/useGraphQL.d.ts.map +1 -1
  68. package/dist/react/useGraphQL.js +27 -7
  69. package/dist/react/useGraphQL.js.map +1 -1
  70. package/dist/react/useLiveStoreComponent.d.ts +14 -14
  71. package/dist/react/useLiveStoreComponent.d.ts.map +1 -1
  72. package/dist/react/useLiveStoreComponent.js +151 -91
  73. package/dist/react/useLiveStoreComponent.js.map +1 -1
  74. package/dist/react/useQuery.d.ts +3 -0
  75. package/dist/react/useQuery.d.ts.map +1 -0
  76. package/dist/react/useQuery.js +42 -0
  77. package/dist/react/useQuery.js.map +1 -0
  78. package/dist/react/useTemporaryQuery.d.ts +8 -0
  79. package/dist/react/useTemporaryQuery.d.ts.map +1 -0
  80. package/dist/react/useTemporaryQuery.js +17 -0
  81. package/dist/react/useTemporaryQuery.js.map +1 -0
  82. package/dist/react/utils/extractNamesFromStackTrace.d.ts +3 -0
  83. package/dist/react/utils/extractNamesFromStackTrace.d.ts.map +1 -0
  84. package/dist/react/utils/extractNamesFromStackTrace.js +40 -0
  85. package/dist/react/utils/extractNamesFromStackTrace.js.map +1 -0
  86. package/dist/react/utils/extractStackInfoFromStackTrace.d.ts +7 -0
  87. package/dist/react/utils/extractStackInfoFromStackTrace.d.ts.map +1 -0
  88. package/dist/react/utils/extractStackInfoFromStackTrace.js +40 -0
  89. package/dist/react/utils/extractStackInfoFromStackTrace.js.map +1 -0
  90. package/dist/reactive.d.ts +42 -48
  91. package/dist/reactive.d.ts.map +1 -1
  92. package/dist/reactive.js +293 -186
  93. package/dist/reactive.js.map +1 -1
  94. package/dist/reactiveQueries/base-class.d.ts +28 -20
  95. package/dist/reactiveQueries/base-class.d.ts.map +1 -1
  96. package/dist/reactiveQueries/base-class.js +25 -17
  97. package/dist/reactiveQueries/base-class.js.map +1 -1
  98. package/dist/reactiveQueries/graph.d.ts +10 -0
  99. package/dist/reactiveQueries/graph.d.ts.map +1 -0
  100. package/dist/reactiveQueries/graph.js +6 -0
  101. package/dist/reactiveQueries/graph.js.map +1 -0
  102. package/dist/reactiveQueries/graphql.d.ts +35 -18
  103. package/dist/reactiveQueries/graphql.d.ts.map +1 -1
  104. package/dist/reactiveQueries/graphql.js +91 -10
  105. package/dist/reactiveQueries/graphql.js.map +1 -1
  106. package/dist/reactiveQueries/js.d.ts +17 -13
  107. package/dist/reactiveQueries/js.d.ts.map +1 -1
  108. package/dist/reactiveQueries/js.js +31 -8
  109. package/dist/reactiveQueries/js.js.map +1 -1
  110. package/dist/reactiveQueries/sql.d.ts +22 -18
  111. package/dist/reactiveQueries/sql.d.ts.map +1 -1
  112. package/dist/reactiveQueries/sql.js +81 -16
  113. package/dist/reactiveQueries/sql.js.map +1 -1
  114. package/dist/schema.d.ts +0 -2
  115. package/dist/schema.d.ts.map +1 -1
  116. package/dist/schema.js +3 -6
  117. package/dist/schema.js.map +1 -1
  118. package/dist/storage/in-memory/index.d.ts +2 -2
  119. package/dist/storage/in-memory/index.d.ts.map +1 -1
  120. package/dist/storage/in-memory/index.js.map +1 -1
  121. package/dist/storage/index.d.ts +2 -2
  122. package/dist/storage/index.d.ts.map +1 -1
  123. package/dist/storage/tauri/index.d.ts +2 -2
  124. package/dist/storage/tauri/index.d.ts.map +1 -1
  125. package/dist/storage/tauri/index.js.map +1 -1
  126. package/dist/storage/web-worker/index.d.ts +4 -4
  127. package/dist/storage/web-worker/index.d.ts.map +1 -1
  128. package/dist/storage/web-worker/index.js +3 -5
  129. package/dist/storage/web-worker/index.js.map +1 -1
  130. package/dist/storage/web-worker/worker.js +2 -2
  131. package/dist/storage/web-worker/worker.js.map +1 -1
  132. package/dist/store.d.ts +19 -52
  133. package/dist/store.d.ts.map +1 -1
  134. package/dist/store.js +323 -266
  135. package/dist/store.js.map +1 -1
  136. package/dist/util.d.ts +3 -1
  137. package/dist/util.d.ts.map +1 -1
  138. package/dist/util.js +2 -0
  139. package/dist/util.js.map +1 -1
  140. package/package.json +2 -1
  141. package/src/QueryCache.ts +1 -1
  142. package/src/__tests__/react/fixture.tsx +21 -16
  143. package/src/__tests__/react/{useLiveStoreComponent.test.tsx → useComponentState.test.tsx} +9 -20
  144. package/src/__tests__/react/useQuery.test.tsx +48 -0
  145. package/src/__tests__/react/utils/extractStackInfoFromStackTrace.test.ts +40 -0
  146. package/src/__tests__/reactive.test.ts +194 -142
  147. package/src/__tests__/reactiveQueries/sql.test.ts +372 -0
  148. package/src/effect/LiveStore.ts +14 -18
  149. package/src/inMemoryDatabase.ts +22 -30
  150. package/src/index.ts +8 -6
  151. package/src/migrations.ts +39 -21
  152. package/src/react/LiveStoreProvider.tsx +13 -16
  153. package/src/react/index.ts +4 -8
  154. package/src/react/{useLiveStoreComponent.ts → useComponentState.ts} +98 -230
  155. package/src/react/useQuery.ts +58 -0
  156. package/src/react/useTemporaryQuery.ts +21 -0
  157. package/src/react/utils/extractStackInfoFromStackTrace.ts +47 -0
  158. package/src/reactive.ts +386 -267
  159. package/src/reactiveQueries/base-class.ts +61 -39
  160. package/src/reactiveQueries/graph.ts +15 -0
  161. package/src/reactiveQueries/graphql.ts +147 -31
  162. package/src/reactiveQueries/js.ts +54 -21
  163. package/src/reactiveQueries/sql.ts +128 -37
  164. package/src/schema.ts +2 -5
  165. package/src/storage/in-memory/index.ts +2 -2
  166. package/src/storage/index.ts +2 -2
  167. package/src/storage/tauri/index.ts +2 -2
  168. package/src/storage/web-worker/index.ts +6 -8
  169. package/src/storage/web-worker/worker.ts +2 -2
  170. package/src/store.ts +394 -418
  171. package/src/util.ts +8 -2
  172. package/dist/backends/base.d.ts +0 -13
  173. package/dist/backends/base.d.ts.map +0 -1
  174. package/dist/backends/base.js +0 -53
  175. package/dist/backends/base.js.map +0 -1
  176. package/dist/backends/in-memory/index.d.ts +0 -22
  177. package/dist/backends/in-memory/index.d.ts.map +0 -1
  178. package/dist/backends/in-memory/index.js +0 -45
  179. package/dist/backends/in-memory/index.js.map +0 -1
  180. package/dist/backends/index.d.ts +0 -41
  181. package/dist/backends/index.d.ts.map +0 -1
  182. package/dist/backends/index.js +0 -16
  183. package/dist/backends/index.js.map +0 -1
  184. package/dist/backends/tauri/index.d.ts +0 -21
  185. package/dist/backends/tauri/index.d.ts.map +0 -1
  186. package/dist/backends/tauri/index.js +0 -48
  187. package/dist/backends/tauri/index.js.map +0 -1
  188. package/dist/backends/utils/idb.d.ts +0 -10
  189. package/dist/backends/utils/idb.d.ts.map +0 -1
  190. package/dist/backends/utils/idb.js +0 -58
  191. package/dist/backends/utils/idb.js.map +0 -1
  192. package/dist/backends/web-worker/index.d.ts +0 -26
  193. package/dist/backends/web-worker/index.d.ts.map +0 -1
  194. package/dist/backends/web-worker/index.js +0 -63
  195. package/dist/backends/web-worker/index.js.map +0 -1
  196. package/dist/backends/web-worker/worker.d.ts +0 -17
  197. package/dist/backends/web-worker/worker.d.ts.map +0 -1
  198. package/dist/backends/web-worker/worker.js +0 -139
  199. package/dist/backends/web-worker/worker.js.map +0 -1
  200. package/dist/storage/base.d.ts +0 -10
  201. package/dist/storage/base.d.ts.map +0 -1
  202. package/dist/storage/base.js +0 -14
  203. package/dist/storage/base.js.map +0 -1
  204. package/src/react/useGlobalQuery.ts +0 -37
  205. package/src/react/useGraphQL.ts +0 -112
@@ -12,7 +12,7 @@ export default class QueryCache {
12
12
  #private;
13
13
  getKey: (sql: string, bindValues?: Bindable) => CacheKey;
14
14
  get: (key: CacheKey) => any;
15
- set: (queriedTables: string[], key: CacheKey, results: any) => void;
15
+ set: (queriedTables: ReadonlyArray<string>, key: CacheKey, results: any) => void;
16
16
  ignoreQuery: (query: string) => boolean;
17
17
  invalidate: (queriedTables: string[]) => void;
18
18
  }
@@ -1 +1 @@
1
- {"version":3,"file":"QueryCache.d.ts","sourceRoot":"","sources":["../src/QueryCache.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AAEzC,KAAK,MAAM,CAAC,QAAQ,EAAE,SAAS,GAAG,OAAO,IAAI,QAAQ,GAAG;IACtD,QAAQ,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAA;IACjC,QAAQ,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,SAAS,CAAA;CACpC,CAAA;AAED,kBAAU,OAAO,CAAC;IACD,MAAM,IAAI,EAAE,OAAO,MAAM,CAAA;IACzB,MAAM,KAAK,EAAE,OAAO,MAAM,CAAA;CAC1C;AAED,MAAM,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;AAO7C,MAAM,CAAC,OAAO,OAAO,UAAU;;IAI7B,MAAM,QAAS,MAAM,eAAe,QAAQ,KAAG,QAAQ,CAUtD;IAED,GAAG,QAAS,QAAQ,SAEnB;IAED,GAAG,kBAAmB,MAAM,EAAE,OAAO,QAAQ,WAAW,GAAG,UAW1D;IAMD,WAAW,UAAW,MAAM,aAE3B;IAUD,UAAU,kBAAmB,MAAM,EAAE,UAUpC;CACF"}
1
+ {"version":3,"file":"QueryCache.d.ts","sourceRoot":"","sources":["../src/QueryCache.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AAEzC,KAAK,MAAM,CAAC,QAAQ,EAAE,SAAS,GAAG,OAAO,IAAI,QAAQ,GAAG;IACtD,QAAQ,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAA;IACjC,QAAQ,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,SAAS,CAAA;CACpC,CAAA;AAED,kBAAU,OAAO,CAAC;IACD,MAAM,IAAI,EAAE,OAAO,MAAM,CAAA;IACzB,MAAM,KAAK,EAAE,OAAO,MAAM,CAAA;CAC1C;AAED,MAAM,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;AAO7C,MAAM,CAAC,OAAO,OAAO,UAAU;;IAI7B,MAAM,QAAS,MAAM,eAAe,QAAQ,KAAG,QAAQ,CAUtD;IAED,GAAG,QAAS,QAAQ,SAEnB;IAED,GAAG,kBAAmB,cAAc,MAAM,CAAC,OAAO,QAAQ,WAAW,GAAG,UAWvE;IAMD,WAAW,UAAW,MAAM,aAE3B;IAUD,UAAU,kBAAmB,MAAM,EAAE,UAUpC;CACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"QueryCache.js","sourceRoot":"","sources":["../src/QueryCache.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,QAAQ,EAAE,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAA;AAQ7D,IAAU,OAAO,CAGhB;AAHD,WAAU,OAAO;AAGjB,CAAC,EAHS,OAAO,KAAP,OAAO,QAGhB;AAKD,MAAM,MAAM,GAAG,CAAC,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,WAAW,EAAE,SAAS,CAAC,CAAA;AAEtE,yDAAyD;AACzD,MAAM,SAAS,GAAG,GAAG,CAAA;AACrB,MAAqB,UAAU;IAA/B;QACE,8BAAW,IAAI,QAAQ,CAAgB,SAAS,CAAC,EAAA;QACjD,mCAAgB,IAAI,GAAG,EAAiC,EAAA;QAExD,WAAM,GAAG,CAAC,GAAW,EAAE,UAAqB,EAAY,EAAE;YACxD,IAAI,UAAU,IAAI,IAAI,EAAE;gBACtB,OAAO,GAAe,CAAA;aACvB;YAED,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE;gBAC7B,OAAO,CAAC,GAAG,GAAG,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAa,CAAA;aACxD;YAED,OAAO,CAAC,GAAG,GAAG,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAa,CAAA;QACxE,CAAC,CAAA;QAED,QAAG,GAAG,CAAC,GAAa,EAAE,EAAE;YACtB,OAAO,uBAAA,IAAI,2BAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QAC/B,CAAC,CAAA;QAED,QAAG,GAAG,CAAC,aAAuB,EAAE,GAAa,EAAE,OAAY,EAAE,EAAE;YAC7D,uBAAA,IAAI,2BAAS,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;YAC/B,KAAK,MAAM,KAAK,IAAI,aAAa,EAAE;gBACjC,IAAI,IAAI,GAAG,uBAAA,IAAI,gCAAc,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;gBACxC,IAAI,IAAI,IAAI,IAAI,EAAE;oBAChB,IAAI,GAAG,IAAI,QAAQ,CAAC,SAAS,CAAC,CAAA;oBAC9B,IAAI,CAAC,OAAO,GAAG,uBAAA,IAAI,4CAA0B,CAAA;oBAC7C,uBAAA,IAAI,gCAAc,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;iBACpC;gBACD,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;aACd;QACH,CAAC,CAAA;QAED,+CAA4B,CAAC,GAAa,EAAE,EAAE;YAC5C,uBAAA,IAAI,2BAAS,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;QAC3B,CAAC,EAAA;QAED,gBAAW,GAAG,CAAC,KAAa,EAAE,EAAE;YAC9B,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAA;QAC1D,CAAC,CAAA;QAED,iFAAiF;QACjF,yGAAyG;QACzG,EAAE;QACF,qBAAqB;QACrB,yDAAyD;QACzD,oEAAoE;QACpE,EAAE;QACF,6FAA6F;QAC7F,eAAU,GAAG,CAAC,aAAuB,EAAE,EAAE;YACvC,KAAK,MAAM,KAAK,IAAI,aAAa,EAAE;gBACjC,MAAM,IAAI,GAAG,uBAAA,IAAI,gCAAc,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;gBAC1C,IAAI,IAAI,IAAI,IAAI,EAAE;oBAChB,SAAQ;iBACT;gBACD,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE;oBACpB,uBAAA,IAAI,2BAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;iBACxB;aACF;QACH,CAAC,CAAA;IACH,CAAC;CAAA;;eA5DoB,UAAU"}
1
+ {"version":3,"file":"QueryCache.js","sourceRoot":"","sources":["../src/QueryCache.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,QAAQ,EAAE,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAA;AAQ7D,IAAU,OAAO,CAGhB;AAHD,WAAU,OAAO;AAGjB,CAAC,EAHS,OAAO,KAAP,OAAO,QAGhB;AAKD,MAAM,MAAM,GAAG,CAAC,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,WAAW,EAAE,SAAS,CAAC,CAAA;AAEtE,yDAAyD;AACzD,MAAM,SAAS,GAAG,GAAG,CAAA;AACrB,MAAqB,UAAU;IAA/B;QACE,8BAAW,IAAI,QAAQ,CAAgB,SAAS,CAAC,EAAA;QACjD,mCAAgB,IAAI,GAAG,EAAiC,EAAA;QAExD,WAAM,GAAG,CAAC,GAAW,EAAE,UAAqB,EAAY,EAAE;YACxD,IAAI,UAAU,IAAI,IAAI,EAAE;gBACtB,OAAO,GAAe,CAAA;aACvB;YAED,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE;gBAC7B,OAAO,CAAC,GAAG,GAAG,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAa,CAAA;aACxD;YAED,OAAO,CAAC,GAAG,GAAG,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAa,CAAA;QACxE,CAAC,CAAA;QAED,QAAG,GAAG,CAAC,GAAa,EAAE,EAAE;YACtB,OAAO,uBAAA,IAAI,2BAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QAC/B,CAAC,CAAA;QAED,QAAG,GAAG,CAAC,aAAoC,EAAE,GAAa,EAAE,OAAY,EAAE,EAAE;YAC1E,uBAAA,IAAI,2BAAS,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;YAC/B,KAAK,MAAM,KAAK,IAAI,aAAa,EAAE;gBACjC,IAAI,IAAI,GAAG,uBAAA,IAAI,gCAAc,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;gBACxC,IAAI,IAAI,IAAI,IAAI,EAAE;oBAChB,IAAI,GAAG,IAAI,QAAQ,CAAC,SAAS,CAAC,CAAA;oBAC9B,IAAI,CAAC,OAAO,GAAG,uBAAA,IAAI,4CAA0B,CAAA;oBAC7C,uBAAA,IAAI,gCAAc,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;iBACpC;gBACD,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;aACd;QACH,CAAC,CAAA;QAED,+CAA4B,CAAC,GAAa,EAAE,EAAE;YAC5C,uBAAA,IAAI,2BAAS,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;QAC3B,CAAC,EAAA;QAED,gBAAW,GAAG,CAAC,KAAa,EAAE,EAAE;YAC9B,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAA;QAC1D,CAAC,CAAA;QAED,iFAAiF;QACjF,yGAAyG;QACzG,EAAE;QACF,qBAAqB;QACrB,yDAAyD;QACzD,oEAAoE;QACpE,EAAE;QACF,6FAA6F;QAC7F,eAAU,GAAG,CAAC,aAAuB,EAAE,EAAE;YACvC,KAAK,MAAM,KAAK,IAAI,aAAa,EAAE;gBACjC,MAAM,IAAI,GAAG,uBAAA,IAAI,gCAAc,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;gBAC1C,IAAI,IAAI,IAAI,IAAI,EAAE;oBAChB,SAAQ;iBACT;gBACD,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE;oBACpB,uBAAA,IAAI,2BAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;iBACxB;aACF;QACH,CAAC,CAAA;IACH,CAAC;CAAA;;eA5DoB,UAAU"}
@@ -1,3 +1,4 @@
1
+ import type * as otel from '@opentelemetry/api';
1
2
  import React from 'react';
2
3
  import * as LiveStore from '../../index.js';
3
4
  export type Todo = {
@@ -10,11 +11,11 @@ export type AppState = {
10
11
  newTodoText: string;
11
12
  filter: Filter;
12
13
  };
13
- export declare const globalQueryDefs: {
14
- appState: LiveStore.QueryDefinition;
15
- };
16
14
  export declare const schema: LiveStore.Schema;
17
- export declare const makeTodoMvc: () => Promise<{
15
+ export declare const makeTodoMvc: ({ otelTracer, otelContext, }?: {
16
+ otelTracer?: otel.Tracer | undefined;
17
+ otelContext?: otel.Context | undefined;
18
+ }) => Promise<{
18
19
  wrapper: ({ children }: any) => React.JSX.Element;
19
20
  AppSchema: LiveStore.SqliteDsl.TableDefinition<"components__UserInfo", {
20
21
  username: LiveStore.SqliteDsl.ColumnDefinition<LiveStore.SqliteDsl.FieldType.FieldTypeText<string, string>, false>;
@@ -1 +1 @@
1
- {"version":3,"file":"fixture.d.ts","sourceRoot":"","sources":["../../../src/__tests__/react/fixture.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,KAAK,SAAS,MAAM,gBAAgB,CAAA;AAK3C,MAAM,MAAM,IAAI,GAAG;IACjB,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;IACnB,SAAS,EAAE,OAAO,CAAA;CACnB,CAAA;AAED,MAAM,MAAM,MAAM,GAAG,KAAK,GAAG,QAAQ,GAAG,WAAW,CAAA;AAEnD,MAAM,MAAM,QAAQ,GAAG;IACrB,WAAW,EAAE,MAAM,CAAA;IACnB,MAAM,EAAE,MAAM,CAAA;CACf,CAAA;AAKD,eAAO,MAAM,eAAe;;CAE3B,CAAA;AAED,eAAO,MAAM,MAAM,kBA8BjB,CAAA;AAEF,eAAO,MAAM,WAAW;4BAmBS,GAAG;;;;;;EAKnC,CAAA"}
1
+ {"version":3,"file":"fixture.d.ts","sourceRoot":"","sources":["../../../src/__tests__/react/fixture.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,IAAI,MAAM,oBAAoB,CAAA;AAC/C,OAAO,KAAK,MAAM,OAAO,CAAA;AAGzB,OAAO,KAAK,SAAS,MAAM,gBAAgB,CAAA;AAK3C,MAAM,MAAM,IAAI,GAAG;IACjB,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;IACnB,SAAS,EAAE,OAAO,CAAA;CACnB,CAAA;AAED,MAAM,MAAM,MAAM,GAAG,KAAK,GAAG,QAAQ,GAAG,WAAW,CAAA;AAEnD,MAAM,MAAM,QAAQ,GAAG;IACrB,WAAW,EAAE,MAAM,CAAA;IACnB,MAAM,EAAE,MAAM,CAAA;CACf,CAAA;AAKD,eAAO,MAAM,MAAM,kBA8BjB,CAAA;AAEF,eAAO,MAAM,WAAW;;;;4BA2BS,GAAG;;;;;;EAKnC,CAAA"}
@@ -1,13 +1,11 @@
1
- import { mapObjectValues } from '@livestore/utils';
2
1
  import React from 'react';
2
+ import initSqlite3Wasm from 'sqlite-esm';
3
3
  import * as LiveStore from '../../index.js';
4
4
  import { sql } from '../../index.js';
5
5
  import * as LiveStoreReact from '../../react/index.js';
6
6
  import { InMemoryStorage } from '../../storage/in-memory/index.js';
7
- const appState = (store) => store.querySQL(() => `select newTodoText, filter from app;`, { queriedTables: ['app'] }).getFirstRow();
8
- export const globalQueryDefs = {
9
- appState,
10
- };
7
+ // const appState: LiveStore.QueryDefinition = (store) =>
8
+ // store.querySQL<AppState>(() => `select newTodoText, filter from app;`, { queriedTables: ['app'] }).getFirstRow()
11
9
  export const schema = LiveStore.makeSchema({
12
10
  tables: {
13
11
  todos: LiveStore.DbSchema.table('todos', {
@@ -39,22 +37,23 @@ export const schema = LiveStore.makeSchema({
39
37
  setFilter: { statement: { sql: sql `UPDATE app SET filter = $filter;`, writeTables: ['app'] } },
40
38
  },
41
39
  });
42
- export const makeTodoMvc = async () => {
40
+ export const makeTodoMvc = async ({ otelTracer, otelContext, } = {}) => {
43
41
  const AppSchema = LiveStore.defineComponentStateSchema('UserInfo', {
44
42
  username: LiveStore.DbSchema.text({ default: '' }),
45
43
  });
44
+ const sqlite3 = await initSqlite3Wasm({
45
+ print: (message) => console.log(`[livestore sqlite] ${message}`),
46
+ printErr: (message) => console.error(`[livestore sqlite] ${message}`),
47
+ });
46
48
  const store = await LiveStore.createStore({
47
49
  schema,
48
50
  loadStorage: () => InMemoryStorage.load(),
49
- boot: async (storage) => {
50
- storage.execute(sql `INSERT INTO app (newTodoText, filter) VALUES ('', 'all');`);
51
- // NOTE we can't insert into components__UserInfo yet because the table doesn't exist yet
52
- // storage.execute(sql`INSERT INTO components__UserInfo (id, username) VALUES ('u1', 'username_u1');`)
53
- // storage.execute(sql`INSERT INTO components__UserInfo (id, username) VALUES ('u2', 'username_u2');`)
54
- },
51
+ boot: (db) => db.execute(sql `INSERT OR IGNORE INTO app (id, newTodoText, filter) VALUES ('static', '', 'all');`),
52
+ sqlite3,
53
+ otelTracer,
54
+ otelRootSpanContext: otelContext,
55
55
  });
56
- const globalQueries = mapObjectValues(globalQueryDefs, (_, queryDef) => queryDef(store));
57
- const storeContext = { store, globalQueries };
56
+ const storeContext = { store };
58
57
  const wrapper = ({ children }) => (React.createElement(LiveStoreReact.LiveStoreContext.Provider, { value: storeContext }, children));
59
58
  return { wrapper, AppSchema, store };
60
59
  };
@@ -1 +1 @@
1
- {"version":3,"file":"fixture.js","sourceRoot":"","sources":["../../../src/__tests__/react/fixture.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fixture.js","sourceRoot":"","sources":["../../../src/__tests__/react/fixture.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=useComponentState.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useComponentState.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/react/useComponentState.test.tsx"],"names":[],"mappings":""}
@@ -0,0 +1,68 @@
1
+ import { act, renderHook } from '@testing-library/react';
2
+ import { describe, expect, it } from 'vitest';
3
+ import { sql } from '../../index.js';
4
+ import * as LiveStoreReact from '../../react/index.js';
5
+ import { makeTodoMvc } from './fixture.js';
6
+ describe('useComponentState', () => {
7
+ it('should update the data based on component key', async () => {
8
+ let renderCount = 0;
9
+ const { wrapper, AppSchema, store } = await makeTodoMvc();
10
+ const { result, rerender } = renderHook((userId) => {
11
+ renderCount++;
12
+ return LiveStoreReact.useComponentState({
13
+ schema: AppSchema,
14
+ componentKey: { name: 'UserInfo', id: userId },
15
+ });
16
+ }, { wrapper, initialProps: 'u1' });
17
+ expect(result.current.state.id).toBe('u1');
18
+ expect(result.current.state.username).toBe('');
19
+ expect(renderCount).toBe(1);
20
+ act(() => {
21
+ void store.execute(sql `INSERT INTO components__UserInfo (id, username) VALUES ('u2', 'username_u2');`);
22
+ });
23
+ rerender('u2');
24
+ expect(result.current.state.id).toBe('u2');
25
+ expect(result.current.state.username).toBe('username_u2');
26
+ expect(renderCount).toBe(2);
27
+ });
28
+ it('should update the data reactively - via setState', async () => {
29
+ let renderCount = 0;
30
+ const { wrapper, AppSchema } = await makeTodoMvc();
31
+ const { result } = renderHook((userId) => {
32
+ renderCount++;
33
+ return LiveStoreReact.useComponentState({
34
+ schema: AppSchema,
35
+ componentKey: { name: 'UserInfo', id: userId },
36
+ });
37
+ }, { wrapper, initialProps: 'u1' });
38
+ expect(result.current.state.id).toBe('u1');
39
+ expect(result.current.state.username).toBe('');
40
+ expect(renderCount).toBe(1);
41
+ act(() => result.current.setState.username('username_u1_hello'));
42
+ expect(result.current.state.id).toBe('u1');
43
+ expect(result.current.state.username).toBe('username_u1_hello');
44
+ expect(renderCount).toBe(2);
45
+ });
46
+ it('should update the data reactively - via raw store update', async () => {
47
+ let renderCount = 0;
48
+ const { wrapper, AppSchema, store } = await makeTodoMvc();
49
+ const { result } = renderHook((userId) => {
50
+ renderCount++;
51
+ return LiveStoreReact.useComponentState({
52
+ schema: AppSchema,
53
+ componentKey: { name: 'UserInfo', id: userId },
54
+ });
55
+ }, { wrapper, initialProps: 'u1' });
56
+ expect(result.current.state.id).toBe('u1');
57
+ expect(result.current.state.username).toBe('');
58
+ expect(renderCount).toBe(1);
59
+ act(() => result.current.setState.username('username_u1_hello'));
60
+ act(() => {
61
+ void store.execute(sql `UPDATE components__UserInfo SET username = 'username_u1_hello' WHERE id = 'u1';`);
62
+ });
63
+ expect(result.current.state.id).toBe('u1');
64
+ expect(result.current.state.username).toBe('username_u1_hello');
65
+ expect(renderCount).toBe(2);
66
+ });
67
+ });
68
+ //# sourceMappingURL=useComponentState.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useComponentState.test.js","sourceRoot":"","sources":["../../../src/__tests__/react/useComponentState.test.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=useLQuery.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useLQuery.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/react/useLQuery.test.tsx"],"names":[],"mappings":""}
@@ -0,0 +1,38 @@
1
+ import { makeNoopTracer } from '@livestore/utils';
2
+ import * as otel from '@opentelemetry/api';
3
+ import { renderHook } from '@testing-library/react';
4
+ import { describe, it } from 'vitest';
5
+ import * as LiveStoreReact from '../../react/index.js';
6
+ import { LiveStoreSQLQuery } from '../../reactiveQueries/sql.js';
7
+ import { makeTodoMvc } from './fixture.js';
8
+ describe.only('useQuery', () => {
9
+ it('todo', async () => {
10
+ let renderCount = 0;
11
+ const { wrapper, AppSchema, store } = await makeTodoMvc();
12
+ const { result, rerender } = renderHook((userId) => {
13
+ renderCount++;
14
+ const query = new LiveStoreSQLQuery({
15
+ label: 'todo',
16
+ otelContext: otel.context.active(),
17
+ otelTracer: makeNoopTracer(),
18
+ payload: {
19
+ genQueryString: `select * from todos`,
20
+ queriedTables: ['todos'],
21
+ },
22
+ });
23
+ return LiveStoreReact.useQuery(query);
24
+ }, { wrapper, initialProps: 'u1' });
25
+ console.log(result.current);
26
+ // expect(result.current.state.id).toBe('u1')
27
+ // expect(result.current.state.username).toBe('')
28
+ // expect(renderCount).toBe(1)
29
+ // act(() => {
30
+ // void store.execute(sql`INSERT INTO components__UserInfo (id, username) VALUES ('u2', 'username_u2');`)
31
+ // })
32
+ // rerender('u2')
33
+ // expect(result.current.state.id).toBe('u2')
34
+ // expect(result.current.state.username).toBe('username_u2')
35
+ // expect(renderCount).toBe(2)
36
+ });
37
+ });
38
+ //# sourceMappingURL=useLQuery.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useLQuery.test.js","sourceRoot":"","sources":["../../../src/__tests__/react/useLQuery.test.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,KAAK,IAAI,MAAM,oBAAoB,CAAA;AAC1C,OAAO,EAAO,UAAU,EAAE,MAAM,wBAAwB,CAAA;AACxD,OAAO,EAAE,QAAQ,EAAU,EAAE,EAAE,MAAM,QAAQ,CAAA;AAE7C,OAAO,KAAK,cAAc,MAAM,sBAAsB,CAAA;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAA;AAEhE,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAE1C,QAAQ,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,EAAE;IAC7B,EAAE,CAAC,MAAM,EAAE,KAAK,IAAI,EAAE;QACpB,IAAI,WAAW,GAAG,CAAC,CAAA;QAEnB,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,MAAM,WAAW,EAAE,CAAA;QAEzD,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,UAAU,CACrC,CAAC,MAAc,EAAE,EAAE;YACjB,WAAW,EAAE,CAAA;YAEb,MAAM,KAAK,GAAG,IAAI,iBAAiB,CAAO;gBACxC,KAAK,EAAE,MAAM;gBACb,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;gBAClC,UAAU,EAAE,cAAc,EAAE;gBAC5B,OAAO,EAAE;oBACP,cAAc,EAAE,qBAAqB;oBACrC,aAAa,EAAE,CAAC,OAAO,CAAC;iBACzB;aACF,CAAC,CAAA;YAEF,OAAO,cAAc,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;QACvC,CAAC,EACD,EAAE,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,CAChC,CAAA;QAED,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;QAE3B,6CAA6C;QAC7C,iDAAiD;QACjD,8BAA8B;QAE9B,cAAc;QACd,2GAA2G;QAC3G,KAAK;QAEL,iBAAiB;QAEjB,6CAA6C;QAC7C,4DAA4D;QAC5D,8BAA8B;IAChC,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
@@ -40,12 +40,7 @@ describe('useLiveStoreComponent', () => {
40
40
  expect(result.current.state.id).toBe('u1');
41
41
  expect(result.current.state.username).toBe('');
42
42
  expect(renderCount).toBe(1);
43
- act(() => {
44
- result.current.setState.username('username_u1_hello');
45
- });
46
- // act(() => {
47
- // store.execute(sql`UPDATE components__UserInfo SET username = 'username_u1_hello' WHERE id = 'u1';`)
48
- // })
43
+ act(() => result.current.setState.username('username_u1_hello'));
49
44
  expect(result.current.state.id).toBe('u1');
50
45
  expect(result.current.state.username).toBe('username_u1_hello');
51
46
  expect(renderCount).toBe(2);
@@ -64,9 +59,7 @@ describe('useLiveStoreComponent', () => {
64
59
  expect(result.current.state.id).toBe('u1');
65
60
  expect(result.current.state.username).toBe('');
66
61
  expect(renderCount).toBe(1);
67
- act(() => {
68
- result.current.setState.username('username_u1_hello');
69
- });
62
+ act(() => result.current.setState.username('username_u1_hello'));
70
63
  act(() => {
71
64
  void store.execute(sql `UPDATE components__UserInfo SET username = 'username_u1_hello' WHERE id = 'u1';`);
72
65
  });
@@ -75,4 +68,6 @@ describe('useLiveStoreComponent', () => {
75
68
  expect(renderCount).toBe(2);
76
69
  });
77
70
  });
71
+ // TODO add a test case that tests the `queries` callback
72
+ // TODO add a test case that tests the `subscribe` in the `queries` callback
78
73
  //# sourceMappingURL=useLiveStoreComponent.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useLiveStoreComponent.test.js","sourceRoot":"","sources":["../../../src/__tests__/react/useLiveStoreComponent.test.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"useLiveStoreComponent.test.js","sourceRoot":"","sources":["../../../src/__tests__/react/useLiveStoreComponent.test.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=useQuery.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useQuery.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/react/useQuery.test.tsx"],"names":[],"mappings":""}
@@ -0,0 +1,33 @@
1
+ import { act, renderHook } from '@testing-library/react';
2
+ import { describe, expect, it } from 'vitest';
3
+ import * as LiveStoreReact from '../../react/index.js';
4
+ import { LiveStoreSQLQuery } from '../../reactiveQueries/sql.js';
5
+ import { sql } from '../../util.js';
6
+ import { makeTodoMvc } from './fixture.js';
7
+ const query = new LiveStoreSQLQuery({
8
+ label: 'todo',
9
+ genQueryString: `select * from todos`,
10
+ queriedTables: ['todos'],
11
+ });
12
+ describe('useQuery', () => {
13
+ it('simple', async () => {
14
+ let renderCount = 0;
15
+ const { wrapper, store } = await makeTodoMvc();
16
+ const { result } = renderHook(() => {
17
+ renderCount++;
18
+ return LiveStoreReact.useQuery(query);
19
+ }, { wrapper });
20
+ expect(result.current.length).toBe(0);
21
+ expect(renderCount).toBe(1);
22
+ act(() => store.applyEvent('RawSql', {
23
+ sql: sql `INSERT INTO todos (id, text, completed) VALUES ('t1', 'buy milk', 0);`,
24
+ bindValues: {},
25
+ writeTables: ['todos'],
26
+ }));
27
+ expect(result.current.length).toBe(1);
28
+ expect(result.current[0].text).toBe('buy milk');
29
+ expect(renderCount).toBe(2);
30
+ });
31
+ });
32
+ // TODO write tests that use the same query in multiple components at the same time with different bind values
33
+ //# sourceMappingURL=useQuery.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useQuery.test.js","sourceRoot":"","sources":["../../../src/__tests__/react/useQuery.test.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAA;AACxD,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAA;AAE7C,OAAO,KAAK,cAAc,MAAM,sBAAsB,CAAA;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAA;AAChE,OAAO,EAAE,GAAG,EAAE,MAAM,eAAe,CAAA;AAEnC,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAE1C,MAAM,KAAK,GAAG,IAAI,iBAAiB,CAAO;IACxC,KAAK,EAAE,MAAM;IACb,cAAc,EAAE,qBAAqB;IACrC,aAAa,EAAE,CAAC,OAAO,CAAC;CACzB,CAAC,CAAA;AAEF,QAAQ,CAAC,UAAU,EAAE,GAAG,EAAE;IACxB,EAAE,CAAC,QAAQ,EAAE,KAAK,IAAI,EAAE;QACtB,IAAI,WAAW,GAAG,CAAC,CAAA;QAEnB,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,MAAM,WAAW,EAAE,CAAA;QAE9C,MAAM,EAAE,MAAM,EAAE,GAAG,UAAU,CAC3B,GAAG,EAAE;YACH,WAAW,EAAE,CAAA;YAEb,OAAO,cAAc,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;QACvC,CAAC,EACD,EAAE,OAAO,EAAE,CACZ,CAAA;QAED,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACrC,MAAM,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QAE3B,GAAG,CAAC,GAAG,EAAE,CACP,KAAK,CAAC,UAAU,CAAC,QAAQ,EAAE;YACzB,GAAG,EAAE,GAAG,CAAA,uEAAuE;YAC/E,UAAU,EAAE,EAAE;YACd,WAAW,EAAE,CAAC,OAAO,CAAC;SACvB,CAAC,CACH,CAAA;QAED,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACrC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;QAChD,MAAM,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IAC7B,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA;AAEF,8GAA8G"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=extractStackInfoFromStackTrace.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extractStackInfoFromStackTrace.test.d.ts","sourceRoot":"","sources":["../../../../src/__tests__/react/utils/extractStackInfoFromStackTrace.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,38 @@
1
+ import { expect, it } from 'vitest';
2
+ import { extractStackInfoFromStackTrace } from '../../../react/utils/extractStackInfoFromStackTrace.js';
3
+ it('RouteLink stacktrace', async () => {
4
+ const stackTrace = `\
5
+ Error
6
+ at https://localhost:8081/@fs/Users/schickling/Code/overtone/submodules/livestore/packages/@livestore/livestore/dist/react/useQuery.js?t=1699550216884:18:23
7
+ at mountMemo (https://localhost:8081/node_modules/.vite-web/deps/chunk-M23HUTQV.js?v=3eb66ed6:12817:27)
8
+ at Object.useMemo (https://localhost:8081/node_modules/.vite-web/deps/chunk-M23HUTQV.js?v=3eb66ed6:13141:24)
9
+ at Object.useMemo (https://localhost:8081/node_modules/.vite-web/deps/chunk-4WADDZ2G.js?v=3eb66ed6:1094:29)
10
+ at useQuery (https://localhost:8081/@fs/Users/schickling/Code/overtone/submodules/livestore/packages/@livestore/livestore/dist/react/useQuery.js?t=1699550216884:13:33)
11
+ at useAppState (https://localhost:8081/src/db/AppState.ts?t=1699550216884:17:34)
12
+ at useRoute (https://localhost:8081/src/db/AppState.ts?t=1699550216884:74:22)
13
+ at RouteLink (https://localhost:8081/src/components/Link.tsx?t=1699550216884:36:7)
14
+ at renderWithHooks (https://localhost:8081/node_modules/.vite-web/deps/chunk-M23HUTQV.js?v=3eb66ed6:12171:26)
15
+ at mountIndeterminateComponent (https://localhost:8081/node_modules/.vite-web/deps/chunk-M23HUTQV.js?v=3eb66ed6:14921:21)
16
+ `;
17
+ expect(extractStackInfoFromStackTrace(stackTrace)).toMatchInlineSnapshot(`
18
+ [
19
+ {
20
+ "filePath": "https://localhost:8081/src/components/Link.tsx?t=1699550216884:36:7",
21
+ "name": "RouteLink",
22
+ },
23
+ {
24
+ "filePath": "https://localhost:8081/src/db/AppState.ts?t=1699550216884:74:22",
25
+ "name": "useRoute",
26
+ },
27
+ {
28
+ "filePath": "https://localhost:8081/src/db/AppState.ts?t=1699550216884:17:34",
29
+ "name": "useAppState",
30
+ },
31
+ {
32
+ "filePath": "https://localhost:8081/@fs/Users/schickling/Code/overtone/submodules/livestore/packages/@livestore/livestore/dist/react/useQuery.js?t=1699550216884:13:33",
33
+ "name": "useQuery",
34
+ },
35
+ ]
36
+ `);
37
+ });
38
+ //# sourceMappingURL=extractStackInfoFromStackTrace.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extractStackInfoFromStackTrace.test.js","sourceRoot":"","sources":["../../../../src/__tests__/react/utils/extractStackInfoFromStackTrace.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAA;AAEnC,OAAO,EAAE,8BAA8B,EAAE,MAAM,wDAAwD,CAAA;AAEvG,EAAE,CAAC,sBAAsB,EAAE,KAAK,IAAI,EAAE;IACpC,MAAM,UAAU,GAAG;;;;;;;;;;;;CAYpB,CAAA;IAEC,MAAM,CAAC,8BAA8B,CAAC,UAAU,CAAC,CAAC,CAAC,qBAAqB,CAAC;;;;;;;;;;;;;;;;;;;GAmBxE,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}