@livestore/livestore 0.0.24 → 0.0.27

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 (243) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/QueryCache.d.ts +3 -3
  3. package/dist/QueryCache.d.ts.map +1 -1
  4. package/dist/QueryCache.js +50 -60
  5. package/dist/QueryCache.js.map +1 -1
  6. package/dist/__tests__/react/fixture.d.ts +22 -7
  7. package/dist/__tests__/react/fixture.d.ts.map +1 -1
  8. package/dist/__tests__/react/fixture.js +14 -15
  9. package/dist/__tests__/react/fixture.js.map +1 -1
  10. package/dist/__tests__/react/useQuery.test.js +37 -12
  11. package/dist/__tests__/react/useQuery.test.js.map +1 -1
  12. package/dist/__tests__/react/useRow.test.d.ts +2 -0
  13. package/dist/__tests__/react/useRow.test.d.ts.map +1 -0
  14. package/dist/__tests__/react/useRow.test.js +131 -0
  15. package/dist/__tests__/react/useRow.test.js.map +1 -0
  16. package/dist/__tests__/react/utils/stack-info.test.js +32 -0
  17. package/dist/__tests__/react/utils/stack-info.test.js.map +1 -1
  18. package/dist/__tests__/reactive.test.js +51 -0
  19. package/dist/__tests__/reactive.test.js.map +1 -1
  20. package/dist/__tests__/reactiveQueries/sql.test.js +6 -13
  21. package/dist/__tests__/reactiveQueries/sql.test.js.map +1 -1
  22. package/dist/effect/LiveStore.d.ts +3 -3
  23. package/dist/effect/LiveStore.d.ts.map +1 -1
  24. package/dist/effect/LiveStore.js +2 -2
  25. package/dist/effect/LiveStore.js.map +1 -1
  26. package/dist/global-state.d.ts +19 -0
  27. package/dist/global-state.d.ts.map +1 -0
  28. package/dist/global-state.js +20 -0
  29. package/dist/global-state.js.map +1 -0
  30. package/dist/inMemoryDatabase.d.ts +6 -6
  31. package/dist/inMemoryDatabase.d.ts.map +1 -1
  32. package/dist/inMemoryDatabase.js +16 -10
  33. package/dist/inMemoryDatabase.js.map +1 -1
  34. package/dist/index.d.ts +9 -13
  35. package/dist/index.d.ts.map +1 -1
  36. package/dist/index.js +7 -8
  37. package/dist/index.js.map +1 -1
  38. package/dist/migrations.d.ts +4 -4
  39. package/dist/migrations.d.ts.map +1 -1
  40. package/dist/migrations.js +34 -28
  41. package/dist/migrations.js.map +1 -1
  42. package/dist/react/LiveStoreContext.js.map +1 -1
  43. package/dist/react/LiveStoreProvider.d.ts +2 -2
  44. package/dist/react/LiveStoreProvider.d.ts.map +1 -1
  45. package/dist/react/LiveStoreProvider.js.map +1 -1
  46. package/dist/react/index.d.ts +1 -2
  47. package/dist/react/index.d.ts.map +1 -1
  48. package/dist/react/index.js +1 -1
  49. package/dist/react/index.js.map +1 -1
  50. package/dist/react/useQuery.d.ts +3 -0
  51. package/dist/react/useQuery.d.ts.map +1 -1
  52. package/dist/react/useQuery.js +7 -6
  53. package/dist/react/useQuery.js.map +1 -1
  54. package/dist/react/useRow.d.ts +33 -0
  55. package/dist/react/useRow.d.ts.map +1 -0
  56. package/dist/react/useRow.js +136 -0
  57. package/dist/react/useRow.js.map +1 -0
  58. package/dist/react/useTemporaryQuery.d.ts +2 -0
  59. package/dist/react/useTemporaryQuery.d.ts.map +1 -1
  60. package/dist/react/useTemporaryQuery.js +28 -11
  61. package/dist/react/useTemporaryQuery.js.map +1 -1
  62. package/dist/react/utils/stack-info.d.ts.map +1 -1
  63. package/dist/react/utils/stack-info.js +3 -3
  64. package/dist/react/utils/stack-info.js.map +1 -1
  65. package/dist/react/utils/useStateRefWithReactiveInput.js.map +1 -1
  66. package/dist/reactive.d.ts +38 -29
  67. package/dist/reactive.d.ts.map +1 -1
  68. package/dist/reactive.js +73 -45
  69. package/dist/reactive.js.map +1 -1
  70. package/dist/reactiveQueries/base-class.d.ts +10 -6
  71. package/dist/reactiveQueries/base-class.d.ts.map +1 -1
  72. package/dist/reactiveQueries/base-class.js +11 -12
  73. package/dist/reactiveQueries/base-class.js.map +1 -1
  74. package/dist/reactiveQueries/graphql.d.ts +2 -2
  75. package/dist/reactiveQueries/graphql.d.ts.map +1 -1
  76. package/dist/reactiveQueries/graphql.js +56 -50
  77. package/dist/reactiveQueries/graphql.js.map +1 -1
  78. package/dist/reactiveQueries/js.d.ts +7 -3
  79. package/dist/reactiveQueries/js.d.ts.map +1 -1
  80. package/dist/reactiveQueries/js.js +25 -15
  81. package/dist/reactiveQueries/js.js.map +1 -1
  82. package/dist/reactiveQueries/sql.d.ts +5 -5
  83. package/dist/reactiveQueries/sql.d.ts.map +1 -1
  84. package/dist/reactiveQueries/sql.js +39 -34
  85. package/dist/reactiveQueries/sql.js.map +1 -1
  86. package/dist/row-query.d.ts +21 -0
  87. package/dist/row-query.d.ts.map +1 -0
  88. package/dist/row-query.js +77 -0
  89. package/dist/row-query.js.map +1 -0
  90. package/dist/schema/action.d.ts +30 -0
  91. package/dist/schema/action.d.ts.map +1 -0
  92. package/dist/schema/action.js +3 -0
  93. package/dist/schema/action.js.map +1 -0
  94. package/dist/schema/index.d.ts +28 -0
  95. package/dist/schema/index.d.ts.map +1 -0
  96. package/dist/schema/index.js +26 -0
  97. package/dist/schema/index.js.map +1 -0
  98. package/dist/schema/system-tables.d.ts +24 -0
  99. package/dist/schema/system-tables.d.ts.map +1 -0
  100. package/dist/schema/system-tables.js +11 -0
  101. package/dist/schema/system-tables.js.map +1 -0
  102. package/dist/schema/table-def.d.ts +161 -0
  103. package/dist/schema/table-def.d.ts.map +1 -0
  104. package/dist/schema/table-def.js +53 -0
  105. package/dist/schema/table-def.js.map +1 -0
  106. package/dist/storage/in-memory/index.d.ts +1 -1
  107. package/dist/storage/in-memory/index.d.ts.map +1 -1
  108. package/dist/storage/in-memory/index.js +6 -7
  109. package/dist/storage/in-memory/index.js.map +1 -1
  110. package/dist/storage/index.d.ts +1 -1
  111. package/dist/storage/index.d.ts.map +1 -1
  112. package/dist/storage/tauri/index.d.ts +1 -1
  113. package/dist/storage/tauri/index.d.ts.map +1 -1
  114. package/dist/storage/tauri/index.js +25 -23
  115. package/dist/storage/tauri/index.js.map +1 -1
  116. package/dist/storage/utils/idb.js +3 -1
  117. package/dist/storage/utils/idb.js.map +1 -1
  118. package/dist/storage/web-worker/index.d.ts +1 -1
  119. package/dist/storage/web-worker/index.d.ts.map +1 -1
  120. package/dist/storage/web-worker/index.js +38 -34
  121. package/dist/storage/web-worker/index.js.map +1 -1
  122. package/dist/storage/web-worker/worker.d.ts +1 -1
  123. package/dist/storage/web-worker/worker.d.ts.map +1 -1
  124. package/dist/storage/web-worker/worker.js +1 -1
  125. package/dist/storage/web-worker/worker.js.map +1 -1
  126. package/dist/store.d.ts +11 -21
  127. package/dist/store.d.ts.map +1 -1
  128. package/dist/store.js +284 -272
  129. package/dist/store.js.map +1 -1
  130. package/dist/utils/bounded-collections.d.ts.map +1 -0
  131. package/dist/utils/bounded-collections.js +90 -0
  132. package/dist/utils/bounded-collections.js.map +1 -0
  133. package/dist/utils/otel.d.ts.map +1 -0
  134. package/dist/{otel.js → utils/otel.js} +1 -1
  135. package/dist/utils/otel.js.map +1 -0
  136. package/dist/utils/util.d.ts.map +1 -0
  137. package/dist/utils/util.js.map +1 -0
  138. package/package.json +21 -18
  139. package/src/QueryCache.ts +4 -4
  140. package/src/__tests__/react/fixture.tsx +17 -17
  141. package/src/__tests__/react/useQuery.test.tsx +56 -14
  142. package/src/__tests__/react/useRow.test.tsx +205 -0
  143. package/src/__tests__/react/utils/stack-info.test.ts +34 -0
  144. package/src/__tests__/reactive.test.ts +71 -0
  145. package/src/__tests__/reactiveQueries/sql.test.ts +6 -13
  146. package/src/effect/LiveStore.ts +7 -7
  147. package/src/global-state.ts +26 -0
  148. package/src/inMemoryDatabase.ts +14 -12
  149. package/src/index.ts +22 -29
  150. package/src/migrations.ts +41 -35
  151. package/src/react/LiveStoreProvider.tsx +2 -2
  152. package/src/react/index.ts +7 -9
  153. package/src/react/useQuery.ts +12 -6
  154. package/src/react/useRow.ts +221 -0
  155. package/src/react/useTemporaryQuery.ts +43 -11
  156. package/src/react/utils/stack-info.ts +4 -3
  157. package/src/reactive.ts +81 -65
  158. package/src/reactiveQueries/base-class.ts +14 -10
  159. package/src/reactiveQueries/graphql.ts +4 -3
  160. package/src/reactiveQueries/js.ts +9 -5
  161. package/src/reactiveQueries/sql.ts +9 -9
  162. package/src/row-query.ts +142 -0
  163. package/src/schema/action.ts +41 -0
  164. package/src/schema/index.ts +63 -0
  165. package/src/schema/system-tables.ts +21 -0
  166. package/src/schema/table-def.ts +199 -0
  167. package/src/storage/in-memory/index.ts +1 -1
  168. package/src/storage/index.ts +2 -1
  169. package/src/storage/tauri/index.ts +2 -2
  170. package/src/storage/web-worker/index.ts +1 -1
  171. package/src/storage/web-worker/worker.ts +2 -2
  172. package/src/store.ts +51 -51
  173. package/dist/__tests__/react/useComponentState.test.d.ts +0 -2
  174. package/dist/__tests__/react/useComponentState.test.d.ts.map +0 -1
  175. package/dist/__tests__/react/useComponentState.test.js +0 -68
  176. package/dist/__tests__/react/useComponentState.test.js.map +0 -1
  177. package/dist/__tests__/react/useLQuery.test.d.ts +0 -2
  178. package/dist/__tests__/react/useLQuery.test.d.ts.map +0 -1
  179. package/dist/__tests__/react/useLQuery.test.js +0 -38
  180. package/dist/__tests__/react/useLQuery.test.js.map +0 -1
  181. package/dist/__tests__/react/useLiveStoreComponent.test.d.ts +0 -2
  182. package/dist/__tests__/react/useLiveStoreComponent.test.d.ts.map +0 -1
  183. package/dist/__tests__/react/useLiveStoreComponent.test.js +0 -73
  184. package/dist/__tests__/react/useLiveStoreComponent.test.js.map +0 -1
  185. package/dist/__tests__/react/utils/extractStackInfoFromStackTrace.test.d.ts +0 -2
  186. package/dist/__tests__/react/utils/extractStackInfoFromStackTrace.test.d.ts.map +0 -1
  187. package/dist/__tests__/react/utils/extractStackInfoFromStackTrace.test.js +0 -38
  188. package/dist/__tests__/react/utils/extractStackInfoFromStackTrace.test.js.map +0 -1
  189. package/dist/bounded-collections.d.ts.map +0 -1
  190. package/dist/bounded-collections.js +0 -103
  191. package/dist/bounded-collections.js.map +0 -1
  192. package/dist/componentKey.d.ts +0 -20
  193. package/dist/componentKey.d.ts.map +0 -1
  194. package/dist/componentKey.js +0 -3
  195. package/dist/componentKey.js.map +0 -1
  196. package/dist/otel.d.ts.map +0 -1
  197. package/dist/otel.js.map +0 -1
  198. package/dist/react/useComponentState.d.ts +0 -50
  199. package/dist/react/useComponentState.d.ts.map +0 -1
  200. package/dist/react/useComponentState.js +0 -240
  201. package/dist/react/useComponentState.js.map +0 -1
  202. package/dist/react/useGlobalQuery.d.ts +0 -3
  203. package/dist/react/useGlobalQuery.d.ts.map +0 -1
  204. package/dist/react/useGlobalQuery.js +0 -26
  205. package/dist/react/useGlobalQuery.js.map +0 -1
  206. package/dist/react/useGraphQL.d.ts +0 -13
  207. package/dist/react/useGraphQL.d.ts.map +0 -1
  208. package/dist/react/useGraphQL.js +0 -87
  209. package/dist/react/useGraphQL.js.map +0 -1
  210. package/dist/react/useLiveStoreComponent.d.ts +0 -75
  211. package/dist/react/useLiveStoreComponent.d.ts.map +0 -1
  212. package/dist/react/useLiveStoreComponent.js +0 -361
  213. package/dist/react/useLiveStoreComponent.js.map +0 -1
  214. package/dist/react/utils/extractNamesFromStackTrace.d.ts +0 -3
  215. package/dist/react/utils/extractNamesFromStackTrace.d.ts.map +0 -1
  216. package/dist/react/utils/extractNamesFromStackTrace.js +0 -40
  217. package/dist/react/utils/extractNamesFromStackTrace.js.map +0 -1
  218. package/dist/react/utils/extractStackInfoFromStackTrace.d.ts +0 -7
  219. package/dist/react/utils/extractStackInfoFromStackTrace.d.ts.map +0 -1
  220. package/dist/react/utils/extractStackInfoFromStackTrace.js +0 -40
  221. package/dist/react/utils/extractStackInfoFromStackTrace.js.map +0 -1
  222. package/dist/reactiveQueries/graph.d.ts +0 -10
  223. package/dist/reactiveQueries/graph.d.ts.map +0 -1
  224. package/dist/reactiveQueries/graph.js +0 -6
  225. package/dist/reactiveQueries/graph.js.map +0 -1
  226. package/dist/schema.d.ts +0 -81
  227. package/dist/schema.d.ts.map +0 -1
  228. package/dist/schema.js +0 -46
  229. package/dist/schema.js.map +0 -1
  230. package/dist/util.d.ts.map +0 -1
  231. package/dist/util.js.map +0 -1
  232. package/src/__tests__/react/useComponentState.test.tsx +0 -100
  233. package/src/componentKey.ts +0 -9
  234. package/src/react/useComponentState.ts +0 -404
  235. package/src/reactiveQueries/graph.ts +0 -15
  236. package/src/schema.ts +0 -143
  237. /package/dist/{bounded-collections.d.ts → utils/bounded-collections.d.ts} +0 -0
  238. /package/dist/{otel.d.ts → utils/otel.d.ts} +0 -0
  239. /package/dist/{util.d.ts → utils/util.d.ts} +0 -0
  240. /package/dist/{util.js → utils/util.js} +0 -0
  241. /package/src/{bounded-collections.ts → utils/bounded-collections.ts} +0 -0
  242. /package/src/{otel.ts → utils/otel.ts} +0 -0
  243. /package/src/{util.ts → utils/util.ts} +0 -0
@@ -1,7 +1,9 @@
1
+ import { Schema as EffectSchema } from '@livestore/utils/effect';
1
2
  import { SqliteAst } from 'effect-db-schema';
2
- import { memoize, omit } from 'lodash-es';
3
- import { componentStateTables, SCHEMA_META_TABLE, systemTables } from './schema.js';
4
- import { sql } from './util.js';
3
+ import { memoize } from 'lodash-es';
4
+ import { dynamicallyRegisteredTables } from './global-state.js';
5
+ import { SCHEMA_META_TABLE, systemTables } from './schema/index.js';
6
+ import { sql } from './utils/util.js';
5
7
  const getMemoizedTimestamp = memoize(() => new Date().toISOString());
6
8
  // TODO more graceful DB migration (e.g. backup DB before destructive migrations)
7
9
  export const migrateDb = ({ db, otelContext, schema, }) => {
@@ -10,34 +12,36 @@ export const migrateDb = ({ db, otelContext, schema, }) => {
10
12
  sql `create table if not exists ${SCHEMA_META_TABLE} (tableName text primary key, schemaHash text, updatedAt text);`, undefined, [], { otelContext });
11
13
  const schemaMetaRows = db.select(sql `SELECT * FROM ${SCHEMA_META_TABLE}`);
12
14
  const dbSchemaHashByTable = Object.fromEntries(schemaMetaRows.map(({ tableName, schemaHash }) => [tableName, schemaHash]));
13
- const tableDefs = {
15
+ const tableDefs = new Set([
14
16
  // NOTE it's important the `SCHEMA_META_TABLE` comes first since we're writing to it below
15
- [SCHEMA_META_TABLE]: systemTables[SCHEMA_META_TABLE],
16
- ...omit(schema.tables, [SCHEMA_META_TABLE]),
17
- ...componentStateTables,
18
- };
19
- for (const [tableName, tableDef] of Object.entries(tableDefs)) {
17
+ ...systemTables,
18
+ ...Array.from(schema.tables.values()).filter((_) => _.schema.name !== SCHEMA_META_TABLE),
19
+ ...dynamicallyRegisteredTables.values(),
20
+ ]);
21
+ for (const tableDef of tableDefs) {
22
+ const tableAst = tableDef.schema.ast;
23
+ const tableName = tableAst.name;
20
24
  const dbSchemaHash = dbSchemaHashByTable[tableName];
21
- const schemaHash = SqliteAst.hash(tableDef);
25
+ const schemaHash = SqliteAst.hash(tableAst);
22
26
  if (schemaHash !== dbSchemaHash) {
23
27
  if (import.meta.env.VITE_LIVESTORE_SKIP_MIGRATIONS) {
24
28
  console.log(`Schema hash mismatch for table '${tableName}' (DB: ${dbSchemaHash}, expected: ${schemaHash}), skipping migration...`);
25
29
  }
26
30
  else {
27
31
  console.log(`Schema hash mismatch for table '${tableName}' (DB: ${dbSchemaHash}, expected: ${schemaHash}), migrating table...`);
28
- migrateTable({ db, tableDef, otelContext, schemaHash });
32
+ migrateTable({ db, tableAst, otelContext, schemaHash });
29
33
  }
30
34
  }
31
35
  }
32
36
  };
33
- export const migrateTable = ({ db, tableDef, otelContext, schemaHash, }) => {
34
- console.log(`Migrating table '${tableDef.name}'...`);
35
- const tableName = tableDef.name;
36
- const columnSpec = makeColumnSpec(tableDef);
37
+ export const migrateTable = ({ db, tableAst, otelContext, schemaHash, }) => {
38
+ console.log(`Migrating table '${tableAst.name}'...`);
39
+ const tableName = tableAst.name;
40
+ const columnSpec = makeColumnSpec(tableAst);
37
41
  // TODO need to possibly handle cascading deletes due to foreign keys
38
42
  db.execute(sql `drop table if exists ${tableName}`, undefined, [], { otelContext });
39
43
  db.execute(sql `create table if not exists ${tableName} (${columnSpec});`, undefined, [], { otelContext });
40
- for (const index of tableDef.indexes) {
44
+ for (const index of tableAst.indexes) {
41
45
  db.execute(createIndexFromDefinition(tableName, index), undefined, [], { otelContext });
42
46
  }
43
47
  const updatedAt = getMemoizedTimestamp();
@@ -50,23 +54,25 @@ const createIndexFromDefinition = (tableName, index) => {
50
54
  const uniqueStr = index.unique ? 'UNIQUE' : '';
51
55
  return sql `create ${uniqueStr} index ${index.name} on ${tableName} (${index.columns.join(', ')})`;
52
56
  };
53
- const makeColumnSpec = (tableDef) => {
54
- const primaryKeys = tableDef.columns.filter((_) => _.primaryKey).map((_) => _.name);
55
- const columnDefStrs = tableDef.columns.map(toSqliteColumnSpec);
57
+ const makeColumnSpec = (tableAst) => {
58
+ const primaryKeys = tableAst.columns.filter((_) => _.primaryKey).map((_) => _.name);
59
+ const columnDefStrs = tableAst.columns.map(toSqliteColumnSpec);
56
60
  if (primaryKeys.length > 0) {
57
61
  columnDefStrs.push(`PRIMARY KEY (${primaryKeys.join(', ')})`);
58
62
  }
59
63
  return columnDefStrs.join(', ');
60
64
  };
65
+ /** NOTE primary keys are applied on a table level not on a column level to account for multi-column primary keys */
61
66
  const toSqliteColumnSpec = (column) => {
62
- const columnType = column.type._tag;
63
- // const primaryKey = column.primaryKey ? 'primary key' : ''
64
- const nullable = column.nullable === false ? 'not null' : '';
65
- const defaultValue = column.default === undefined
66
- ? ''
67
- : columnType === 'text'
68
- ? `default '${column.default}'`
69
- : `default ${column.default}`;
70
- return `${column.name} ${columnType} ${nullable} ${defaultValue}`;
67
+ const columnTypeStr = column.type._tag;
68
+ const nullableStr = column.nullable === false ? 'not null' : '';
69
+ const defaultValueStr = (() => {
70
+ if (column.default === undefined)
71
+ return '';
72
+ const encodeValue = EffectSchema.encodeSync(column.codec);
73
+ const encodedDefaultValue = encodeValue(column.default ?? null);
74
+ return columnTypeStr === 'text' ? `default '${encodedDefaultValue}'` : `default ${encodedDefaultValue}`;
75
+ })();
76
+ return `${column.name} ${columnTypeStr} ${nullableStr} ${defaultValueStr}`;
71
77
  };
72
78
  //# sourceMappingURL=migrations.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"migrations.js","sourceRoot":"","sources":["../src/migrations.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAC5C,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAIzC,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAEnF,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAA;AAE/B,MAAM,oBAAoB,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,CAAA;AAEpE,iFAAiF;AACjF,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,EACxB,EAAE,EACF,WAAW,EACX,MAAM,GAKP,EAAE,EAAE;IACH,EAAE,CAAC,OAAO;IACR,8DAA8D;IAC9D,GAAG,CAAA,8BAA8B,iBAAiB,iEAAiE,EACnH,SAAS,EACT,EAAE,EACF,EAAE,WAAW,EAAE,CAChB,CAAA;IAED,MAAM,cAAc,GAAG,EAAE,CAAC,MAAM,CAAgB,GAAG,CAAA,iBAAiB,iBAAiB,EAAE,CAAC,CAAA;IAExF,MAAM,mBAAmB,GAAG,MAAM,CAAC,WAAW,CAC5C,cAAc,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC,CAC3E,CAAA;IAED,MAAM,SAAS,GAAG;QAChB,0FAA0F;QAC1F,CAAC,iBAAiB,CAAC,EAAE,YAAY,CAAC,iBAAiB,CAAC;QACpD,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,iBAAiB,CAAC,CAAC;QAC3C,GAAG,oBAAoB;KACxB,CAAA;IAED,KAAK,MAAM,CAAC,SAAS,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE;QAC7D,MAAM,YAAY,GAAG,mBAAmB,CAAC,SAAS,CAAC,CAAA;QACnD,MAAM,UAAU,GAAG,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QAC3C,IAAI,UAAU,KAAK,YAAY,EAAE;YAC/B,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,8BAA8B,EAAE;gBAClD,OAAO,CAAC,GAAG,CACT,mCAAmC,SAAS,UAAU,YAAY,eAAe,UAAU,0BAA0B,CACtH,CAAA;aACF;iBAAM;gBACL,OAAO,CAAC,GAAG,CACT,mCAAmC,SAAS,UAAU,YAAY,eAAe,UAAU,uBAAuB,CACnH,CAAA;gBAED,YAAY,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,WAAW,EAAE,UAAU,EAAE,CAAC,CAAA;aACxD;SACF;KACF;AACH,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,EAC3B,EAAE,EACF,QAAQ,EACR,WAAW,EACX,UAAU,GAMX,EAAE,EAAE;IACH,OAAO,CAAC,GAAG,CAAC,oBAAoB,QAAQ,CAAC,IAAI,MAAM,CAAC,CAAA;IACpD,MAAM,SAAS,GAAG,QAAQ,CAAC,IAAI,CAAA;IAC/B,MAAM,UAAU,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAA;IAE3C,qEAAqE;IACrE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAA,wBAAwB,SAAS,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,EAAE,WAAW,EAAE,CAAC,CAAA;IAClF,EAAE,CAAC,OAAO,CAAC,GAAG,CAAA,8BAA8B,SAAS,KAAK,UAAU,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,EAAE,WAAW,EAAE,CAAC,CAAA;IAEzG,KAAK,MAAM,KAAK,IAAI,QAAQ,CAAC,OAAO,EAAE;QACpC,EAAE,CAAC,OAAO,CAAC,yBAAyB,CAAC,SAAS,EAAE,KAAK,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,EAAE,WAAW,EAAE,CAAC,CAAA;KACxF;IAED,MAAM,SAAS,GAAG,oBAAoB,EAAE,CAAA;IACxC,EAAE,CAAC,OAAO,CACR,GAAG,CAAA;oBACa,iBAAiB;;KAEhC,EACD,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,EAAmC,EAC1G,EAAE,EACF,EAAE,WAAW,EAAE,CAChB,CAAA;AACH,CAAC,CAAA;AAED,MAAM,yBAAyB,GAAG,CAAC,SAAiB,EAAE,KAAsB,EAAE,EAAE;IAC9E,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAA;IAC9C,OAAO,GAAG,CAAA,UAAU,SAAS,UAAU,KAAK,CAAC,IAAI,OAAO,SAAS,KAAK,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAA;AACnG,CAAC,CAAA;AAED,MAAM,cAAc,GAAG,CAAC,QAAyB,EAAE,EAAE;IACnD,MAAM,WAAW,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;IACnF,MAAM,aAAa,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAA;IAC9D,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE;QAC1B,aAAa,CAAC,IAAI,CAAC,gBAAgB,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;KAC9D;IAED,OAAO,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACjC,CAAC,CAAA;AAED,MAAM,kBAAkB,GAAG,CAAC,MAAwB,EAAE,EAAE;IACtD,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAA;IACnC,4DAA4D;IAC5D,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,KAAK,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAA;IAC5D,MAAM,YAAY,GAChB,MAAM,CAAC,OAAO,KAAK,SAAS;QAC1B,CAAC,CAAC,EAAE;QACJ,CAAC,CAAC,UAAU,KAAK,MAAM;YACvB,CAAC,CAAC,YAAY,MAAM,CAAC,OAAO,GAAG;YAC/B,CAAC,CAAC,WAAW,MAAM,CAAC,OAAO,EAAE,CAAA;IAEjC,OAAO,GAAG,MAAM,CAAC,IAAI,IAAI,UAAU,IAAI,QAAQ,IAAI,YAAY,EAAE,CAAA;AACnE,CAAC,CAAA"}
1
+ {"version":3,"file":"migrations.js","sourceRoot":"","sources":["../src/migrations.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"LiveStoreContext.js","sourceRoot":"","sources":["../../src/react/LiveStoreContext.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,UAAU,EAAE,MAAM,OAAO,CAAA;AAYzC,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,CAAC,aAAa,CAAgC,SAAS,CAAC,CAAA;AAE7F,MAAM,CAAC,MAAM,QAAQ,GAAG,GAAsB,EAAE;IAC9C,MAAM,YAAY,GAAG,UAAU,CAAC,gBAAgB,CAAC,CAAA;IAEjD,IAAI,YAAY,KAAK,SAAS,EAAE;QAC9B,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAA;KAC1E;IAED,OAAO,YAAY,CAAA;AACrB,CAAC,CAAA"}
1
+ {"version":3,"file":"LiveStoreContext.js","sourceRoot":"","sources":["../../src/react/LiveStoreContext.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,UAAU,EAAE,MAAM,OAAO,CAAA;AAYzC,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,CAAC,aAAa,CAAgC,SAAS,CAAC,CAAA;AAE7F,MAAM,CAAC,MAAM,QAAQ,GAAG,GAAsB,EAAE;IAC9C,MAAM,YAAY,GAAG,UAAU,CAAC,gBAAgB,CAAC,CAAA;IAEjD,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;QAC/B,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAA;IAC3E,CAAC;IAED,OAAO,YAAY,CAAA;AACrB,CAAC,CAAA"}
@@ -1,11 +1,11 @@
1
1
  import type * as otel from '@opentelemetry/api';
2
2
  import type { ReactElement, ReactNode } from 'react';
3
3
  import type { InMemoryDatabase } from '../inMemoryDatabase.js';
4
- import type { Schema } from '../schema.js';
4
+ import type { LiveStoreSchema } from '../schema/index.js';
5
5
  import type { StorageInit } from '../storage/index.js';
6
6
  import type { BaseGraphQLContext, GraphQLOptions } from '../store.js';
7
7
  interface LiveStoreProviderProps<GraphQLContext> {
8
- schema: Schema;
8
+ schema: LiveStoreSchema;
9
9
  loadStorage: () => StorageInit | Promise<StorageInit>;
10
10
  boot?: (db: InMemoryDatabase, parentSpan: otel.Span) => unknown | Promise<unknown>;
11
11
  graphQLOptions?: GraphQLOptions<GraphQLContext>;
@@ -1 +1 @@
1
- {"version":3,"file":"LiveStoreProvider.d.ts","sourceRoot":"","sources":["../../src/react/LiveStoreProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,IAAI,MAAM,oBAAoB,CAAA;AAC/C,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAMpD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AAC9D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AAC1C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AACtD,OAAO,KAAK,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAWrE,UAAU,sBAAsB,CAAC,cAAc;IAC7C,MAAM,EAAE,MAAM,CAAA;IACd,WAAW,EAAE,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC,CAAA;IACrD,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,gBAAgB,EAAE,UAAU,EAAE,IAAI,CAAC,IAAI,KAAK,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;IAClF,cAAc,CAAC,EAAE,cAAc,CAAC,cAAc,CAAC,CAAA;IAC/C,UAAU,CAAC,EAAE,IAAI,CAAC,MAAM,CAAA;IACxB,mBAAmB,CAAC,EAAE,IAAI,CAAC,OAAO,CAAA;IAClC,QAAQ,EAAE,YAAY,CAAA;CACvB;AAED,eAAO,MAAM,iBAAiB;eAS2B,SAAS;MAAK,WAiBtE,CAAA"}
1
+ {"version":3,"file":"LiveStoreProvider.d.ts","sourceRoot":"","sources":["../../src/react/LiveStoreProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,IAAI,MAAM,oBAAoB,CAAA;AAC/C,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAMpD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AAC9D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AACzD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AACtD,OAAO,KAAK,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAWrE,UAAU,sBAAsB,CAAC,cAAc;IAC7C,MAAM,EAAE,eAAe,CAAA;IACvB,WAAW,EAAE,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC,CAAA;IACrD,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,gBAAgB,EAAE,UAAU,EAAE,IAAI,CAAC,IAAI,KAAK,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;IAClF,cAAc,CAAC,EAAE,cAAc,CAAC,cAAc,CAAC,CAAA;IAC/C,UAAU,CAAC,EAAE,IAAI,CAAC,MAAM,CAAA;IACxB,mBAAmB,CAAC,EAAE,IAAI,CAAC,OAAO,CAAA;IAClC,QAAQ,EAAE,YAAY,CAAA;CACvB;AAED,eAAO,MAAM,iBAAiB;eAS2B,SAAS;MAAK,WAiBtE,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"LiveStoreProvider.js","sourceRoot":"","sources":["../../src/react/LiveStoreProvider.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,eAAe,MAAM,YAAY,CAAA;AAQxC,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AACzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AAExD,wGAAwG;AACxG,qCAAqC;AACrC,MAAM,cAAc,GAAG,eAAe,CAAC;IACrC,KAAK,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,sBAAsB,OAAO,EAAE,CAAC;IAChE,QAAQ,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,sBAAsB,OAAO,EAAE,CAAC;CACtE,CAAC,CAAA;AAYF,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAA4C,EAC3E,QAAQ,EACR,WAAW,EACX,cAAc,EACd,UAAU,EACV,mBAAmB,EACnB,QAAQ,EACR,MAAM,EACN,IAAI,GAC8D,EAAe,EAAE;IACnF,MAAM,KAAK,GAAG,cAAc,CAAC;QAC3B,MAAM;QACN,WAAW;QACX,cAAc;QACd,UAAU;QACV,mBAAmB;QACnB,IAAI;KACL,CAAC,CAAA;IAEF,IAAI,KAAK,KAAK,SAAS,EAAE;QACvB,OAAO,QAAQ,CAAA;KAChB;IAED,MAAM,CAAC,gBAAgB,GAAG,KAAK,CAAC,KAAK,CAAA;IAErC,OAAO,oBAAC,gBAAgB,CAAC,QAAQ,IAAC,KAAK,EAAE,KAAK,IAAG,QAAQ,CAA6B,CAAA;AACxF,CAAC,CAAA;AAED,MAAM,cAAc,GAAG,CAA4C,EACjE,MAAM,EACN,WAAW,EACX,cAAc,EACd,UAAU,EACV,mBAAmB,EACnB,IAAI,GACwC,EAAE,EAAE;IAChD,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,KAAK,CAAC,QAAQ,EAA6B,CAAA;IAE3E,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,KAAK,CAAC,KAAK,IAAI,EAAE;YACf,IAAI;gBACF,MAAM,OAAO,GAAG,MAAM,cAAc,CAAA;gBACpC,MAAM,KAAK,GAAG,MAAM,WAAW,CAAC;oBAC9B,MAAM;oBACN,WAAW;oBACX,cAAc;oBACd,UAAU;oBACV,mBAAmB;oBACnB,IAAI;oBACJ,OAAO;iBACR,CAAC,CAAA;gBACF,WAAW,CAAC,EAAE,KAAK,EAAE,CAAC,CAAA;aACvB;YAAC,OAAO,CAAC,EAAE;gBACV,OAAO,CAAC,KAAK,CAAC,iCAAiC,EAAE,CAAC,CAAC,CAAA;gBACnD,MAAM,CAAC,CAAA;aACR;QACH,CAAC,CAAC,EAAE,CAAA;QAEJ,wDAAwD;IAC1D,CAAC,EAAE,CAAC,MAAM,EAAE,WAAW,EAAE,cAAc,EAAE,UAAU,EAAE,mBAAmB,EAAE,IAAI,CAAC,CAAC,CAAA;IAEhF,OAAO,QAAQ,CAAA;AACjB,CAAC,CAAA"}
1
+ {"version":3,"file":"LiveStoreProvider.js","sourceRoot":"","sources":["../../src/react/LiveStoreProvider.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,eAAe,MAAM,YAAY,CAAA;AAQxC,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AACzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AAExD,wGAAwG;AACxG,qCAAqC;AACrC,MAAM,cAAc,GAAG,eAAe,CAAC;IACrC,KAAK,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,sBAAsB,OAAO,EAAE,CAAC;IAChE,QAAQ,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,sBAAsB,OAAO,EAAE,CAAC;CACtE,CAAC,CAAA;AAYF,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAA4C,EAC3E,QAAQ,EACR,WAAW,EACX,cAAc,EACd,UAAU,EACV,mBAAmB,EACnB,QAAQ,EACR,MAAM,EACN,IAAI,GAC8D,EAAe,EAAE;IACnF,MAAM,KAAK,GAAG,cAAc,CAAC;QAC3B,MAAM;QACN,WAAW;QACX,cAAc;QACd,UAAU;QACV,mBAAmB;QACnB,IAAI;KACL,CAAC,CAAA;IAEF,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,OAAO,QAAQ,CAAA;IACjB,CAAC;IAED,MAAM,CAAC,gBAAgB,GAAG,KAAK,CAAC,KAAK,CAAA;IAErC,OAAO,oBAAC,gBAAgB,CAAC,QAAQ,IAAC,KAAK,EAAE,KAAK,IAAG,QAAQ,CAA6B,CAAA;AACxF,CAAC,CAAA;AAED,MAAM,cAAc,GAAG,CAA4C,EACjE,MAAM,EACN,WAAW,EACX,cAAc,EACd,UAAU,EACV,mBAAmB,EACnB,IAAI,GACwC,EAAE,EAAE;IAChD,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,KAAK,CAAC,QAAQ,EAA6B,CAAA;IAE3E,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,KAAK,CAAC,KAAK,IAAI,EAAE;YACf,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,MAAM,cAAc,CAAA;gBACpC,MAAM,KAAK,GAAG,MAAM,WAAW,CAAC;oBAC9B,MAAM;oBACN,WAAW;oBACX,cAAc;oBACd,UAAU;oBACV,mBAAmB;oBACnB,IAAI;oBACJ,OAAO;iBACR,CAAC,CAAA;gBACF,WAAW,CAAC,EAAE,KAAK,EAAE,CAAC,CAAA;YACxB,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,OAAO,CAAC,KAAK,CAAC,iCAAiC,EAAE,CAAC,CAAC,CAAA;gBACnD,MAAM,CAAC,CAAA;YACT,CAAC;QACH,CAAC,CAAC,EAAE,CAAA;QAEJ,wDAAwD;IAC1D,CAAC,EAAE,CAAC,MAAM,EAAE,WAAW,EAAE,cAAc,EAAE,UAAU,EAAE,mBAAmB,EAAE,IAAI,CAAC,CAAC,CAAA;IAEhF,OAAO,QAAQ,CAAA;AACjB,CAAC,CAAA"}
@@ -1,9 +1,8 @@
1
- export type { Setters, ComponentKeyConfig, QueryDefinitions, ComponentColumns, GetStateType, GetStateTypeEncoded, } from './useComponentState.js';
2
1
  export { LiveStoreContext, useStore } from './LiveStoreContext.js';
3
2
  export { LiveStoreProvider } from './LiveStoreProvider.js';
4
- export { useComponentState } from './useComponentState.js';
5
3
  export { useQuery } from './useQuery.js';
6
4
  export { useTemporaryQuery } from './useTemporaryQuery.js';
7
5
  export { useStackInfo } from './utils/stack-info.js';
6
+ export { useRow, type StateSetters, type SetStateAction, type Dispatch, type UseRowResult as UseStateResult, } from './useRow.js';
8
7
  export type { TypedDocumentNode } from '@graphql-typed-document-node/core';
9
8
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/react/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,OAAO,EACP,kBAAkB,EAClB,gBAAgB,EAChB,gBAAgB,EAChB,YAAY,EACZ,mBAAmB,GACpB,MAAM,wBAAwB,CAAA;AAC/B,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAA;AAClE,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAC1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAC1D,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AAGpD,YAAY,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/react/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAA;AAClE,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAC1D,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AACpD,OAAO,EACL,MAAM,EACN,KAAK,YAAY,EACjB,KAAK,cAAc,EACnB,KAAK,QAAQ,EACb,KAAK,YAAY,IAAI,cAAc,GACpC,MAAM,aAAa,CAAA;AAGpB,YAAY,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAA"}
@@ -1,7 +1,7 @@
1
1
  export { LiveStoreContext, useStore } from './LiveStoreContext.js';
2
2
  export { LiveStoreProvider } from './LiveStoreProvider.js';
3
- export { useComponentState } from './useComponentState.js';
4
3
  export { useQuery } from './useQuery.js';
5
4
  export { useTemporaryQuery } from './useTemporaryQuery.js';
6
5
  export { useStackInfo } from './utils/stack-info.js';
6
+ export { useRow, } from './useRow.js';
7
7
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/react/index.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAA;AAClE,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAC1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAC1D,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/react/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAA;AAClE,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAC1D,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AACpD,OAAO,EACL,MAAM,GAKP,MAAM,aAAa,CAAA"}
@@ -1,3 +1,6 @@
1
+ import * as otel from '@opentelemetry/api';
2
+ import React from 'react';
1
3
  import type { ILiveStoreQuery } from '../reactiveQueries/base-class.js';
2
4
  export declare const useQuery: <TResult>(query: ILiveStoreQuery<TResult>) => TResult;
5
+ export declare const useQueryRef: <TResult>(query: ILiveStoreQuery<TResult>, parentOtelContext?: otel.Context) => React.MutableRefObject<TResult>;
3
6
  //# sourceMappingURL=useQuery.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useQuery.d.ts","sourceRoot":"","sources":["../../src/react/useQuery.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAA;AAWvE,eAAO,MAAM,QAAQ,uDA0EpB,CAAA"}
1
+ {"version":3,"file":"useQuery.d.ts","sourceRoot":"","sources":["../../src/react/useQuery.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,oBAAoB,CAAA;AAE1C,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAA;AAYvE,eAAO,MAAM,QAAQ,uDAAoF,CAAA;AAEzG,eAAO,MAAM,WAAW,iEAEF,KAAK,OAAO,oCA2EjC,CAAA"}
@@ -10,7 +10,8 @@ import { useStateRefWithReactiveInput } from './utils/useStateRefWithReactiveInp
10
10
  * The map entry is being removed again in the `React.useEffect` call below.
11
11
  */
12
12
  const spanAlreadyStartedCache = new Map();
13
- export const useQuery = (query) => {
13
+ export const useQuery = (query) => useQueryRef(query).current;
14
+ export const useQueryRef = (query, parentOtelContext) => {
14
15
  const { store } = useStore();
15
16
  const stackInfo = React.useMemo(() => {
16
17
  Error.stackTraceLimit = 10;
@@ -24,11 +25,11 @@ export const useQuery = (query) => {
24
25
  const existingSpan = spanAlreadyStartedCache.get(query);
25
26
  if (existingSpan !== undefined)
26
27
  return existingSpan;
27
- const span = store.otel.tracer.startSpan(`LiveStore:useQuery:${query.label}`, { attributes: { label: query.label, stackInfo: JSON.stringify(stackInfo) } }, store.otel.queriesSpanContext);
28
+ const span = store.otel.tracer.startSpan(`LiveStore:useQuery:${query.label}`, { attributes: { label: query.label, stackInfo: JSON.stringify(stackInfo) } }, parentOtelContext ?? store.otel.queriesSpanContext);
28
29
  const otelContext = otel.trace.setSpan(otel.context.active(), span);
29
30
  spanAlreadyStartedCache.set(query, { span, otelContext });
30
31
  return { span, otelContext };
31
- }, [query, stackInfo, store.otel.queriesSpanContext, store.otel.tracer]);
32
+ }, [parentOtelContext, query, stackInfo, store.otel.queriesSpanContext, store.otel.tracer]);
32
33
  const initialResult = React.useMemo(() => query.run(otelContext, {
33
34
  _tag: 'react',
34
35
  api: 'useQuery',
@@ -44,7 +45,7 @@ export const useQuery = (query) => {
44
45
  // Subscribe to future updates for this query
45
46
  React.useEffect(() => {
46
47
  query.activeSubscriptions.add(stackInfo);
47
- const unsub = store.subscribe(query, (newValue) => {
48
+ const unsubFromStore = store.subscribe(query, (newValue) => {
48
49
  // NOTE: we return a reference to the result object within LiveStore;
49
50
  // this implies that app code must not mutate the results, or else
50
51
  // there may be weird reactivity bugs.
@@ -54,9 +55,9 @@ export const useQuery = (query) => {
54
55
  }, undefined, { label: query.label, otelContext });
55
56
  return () => {
56
57
  query.activeSubscriptions.delete(stackInfo);
57
- unsub();
58
+ unsubFromStore();
58
59
  };
59
60
  }, [stackInfo, query, setValue, store, valueRef, otelContext, span]);
60
- return valueRef.current;
61
+ return valueRef;
61
62
  };
62
63
  //# sourceMappingURL=useQuery.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useQuery.js","sourceRoot":"","sources":["../../src/react/useQuery.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"useQuery.js","sourceRoot":"","sources":["../../src/react/useQuery.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ import type { LiveStoreJSQuery } from '../reactiveQueries/js.js';
2
+ import type { RowResult } from '../row-query.js';
3
+ import type { DefaultSqliteTableDef, TableDef, TableOptions } from '../schema/table-def.js';
4
+ export type UseRowResult<TTableDef extends TableDef> = [
5
+ row: RowResult<TTableDef>,
6
+ setRow: StateSetters<TTableDef>,
7
+ query$: LiveStoreJSQuery<RowResult<TTableDef>>
8
+ ];
9
+ /**
10
+ * Similar to `React.useState` but returns a tuple of `[row, setRow, query$]` for a given table where ...
11
+ *
12
+ * - `row` is the current value of the row (fully decoded according to the table schema)
13
+ * - `setRow` is a function that can be used to update the row (values will be encoded according to the table schema)
14
+ * - `query$` is a `LiveStoreJSQuery` that e.g. can be used to subscribe to changes to the row
15
+ *
16
+ * If the table is a singleton table, `useRow` can be called without an `id` argument. Otherwise, the `id` argument is required.
17
+ */
18
+ export declare const useRow: {
19
+ <TTableDef extends TableDef<DefaultSqliteTableDef, boolean, TableOptions & {
20
+ isSingleton: true;
21
+ }>>(table: TTableDef): UseRowResult<TTableDef>;
22
+ <TTableDef extends TableDef<DefaultSqliteTableDef, boolean, TableOptions & {
23
+ isSingleton: false;
24
+ }>>(table: TTableDef, id: string): UseRowResult<TTableDef>;
25
+ };
26
+ export type Dispatch<A> = (action: A) => void;
27
+ export type SetStateAction<S> = S | ((previousValue: S) => S);
28
+ export type StateSetters<TTableDef extends TableDef> = TTableDef['isSingleColumn'] extends true ? Dispatch<SetStateAction<RowResult<TTableDef>>> : {
29
+ [K in keyof RowResult<TTableDef>]: Dispatch<SetStateAction<RowResult<TTableDef>[K]>>;
30
+ } & {
31
+ setMany: Dispatch<SetStateAction<Partial<RowResult<TTableDef>>>>;
32
+ };
33
+ //# sourceMappingURL=useRow.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useRow.d.ts","sourceRoot":"","sources":["../../src/react/useRow.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAA;AAChE,OAAO,KAAK,EAAgB,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAE9D,OAAO,KAAK,EAAE,qBAAqB,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAA;AAI3F,MAAM,MAAM,YAAY,CAAC,SAAS,SAAS,QAAQ,IAAI;IACrD,GAAG,EAAE,SAAS,CAAC,SAAS,CAAC;IACzB,MAAM,EAAE,YAAY,CAAC,SAAS,CAAC;IAC/B,MAAM,EAAE,gBAAgB,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;CAC/C,CAAA;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,MAAM,EAAE;IACnB,CAAC,SAAS,SAAS,QAAQ,CAAC,qBAAqB,EAAE,OAAO,EAAE,YAAY,GAAG;QAAE,WAAW,EAAE,IAAI,CAAA;KAAE,CAAC,EAC/F,KAAK,EAAE,SAAS,GACf,YAAY,CAAC,SAAS,CAAC,CAAA;IAC1B,CAAC,SAAS,SAAS,QAAQ,CAAC,qBAAqB,EAAE,OAAO,EAAE,YAAY,GAAG;QAAE,WAAW,EAAE,KAAK,CAAA;KAAE,CAAC,EAChG,KAAK,EAAE,SAAS,EAEhB,EAAE,EAAE,MAAM,GACT,YAAY,CAAC,SAAS,CAAC,CAAA;CAkH3B,CAAA;AAED,MAAM,MAAM,QAAQ,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,KAAK,IAAI,CAAA;AAC7C,MAAM,MAAM,cAAc,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,aAAa,EAAE,CAAC,KAAK,CAAC,CAAC,CAAA;AAE7D,MAAM,MAAM,YAAY,CAAC,SAAS,SAAS,QAAQ,IAAI,SAAS,CAAC,gBAAgB,CAAC,SAAS,IAAI,GAC3F,QAAQ,CAAC,cAAc,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,GAC9C;KACG,CAAC,IAAI,MAAM,SAAS,CAAC,SAAS,CAAC,GAAG,QAAQ,CAAC,cAAc,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CACrF,GAAG;IACF,OAAO,EAAE,QAAQ,CAAC,cAAc,CAAC,OAAO,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAA;CACjE,CAAA"}
@@ -0,0 +1,136 @@
1
+ import { Schema } from '@livestore/utils/effect';
2
+ import * as otel from '@opentelemetry/api';
3
+ import { mapValues } from 'lodash-es';
4
+ import React from 'react';
5
+ import { rowQuery } from '../row-query.js';
6
+ import { useStore } from './LiveStoreContext.js';
7
+ import { useQueryRef } from './useQuery.js';
8
+ /**
9
+ * Similar to `React.useState` but returns a tuple of `[row, setRow, query$]` for a given table where ...
10
+ *
11
+ * - `row` is the current value of the row (fully decoded according to the table schema)
12
+ * - `setRow` is a function that can be used to update the row (values will be encoded according to the table schema)
13
+ * - `query$` is a `LiveStoreJSQuery` that e.g. can be used to subscribe to changes to the row
14
+ *
15
+ * If the table is a singleton table, `useRow` can be called without an `id` argument. Otherwise, the `id` argument is required.
16
+ */
17
+ export const useRow = (table, id) => {
18
+ const sqliteTableDef = table.schema;
19
+ const { store } = useStore();
20
+ const reactId = React.useId();
21
+ const { query$, otelContext } = React.useMemo(() => {
22
+ const cachedItem = rcCache.get(table, id ?? 'singleton');
23
+ if (cachedItem !== undefined) {
24
+ cachedItem.reactIds.add(reactId);
25
+ cachedItem.span.addEvent('new-subscriber', { reactId });
26
+ return {
27
+ query$: cachedItem.query$,
28
+ otelContext: cachedItem.otelContext,
29
+ };
30
+ }
31
+ const span = store.otel.tracer.startSpan(`LiveStore:useState:${table.schema.name}${id === undefined ? '' : `:${id}`}`, { attributes: { id } }, store.otel.queriesSpanContext);
32
+ const otelContext = otel.trace.setSpan(otel.context.active(), span);
33
+ const query$ = table.options.isSingleton
34
+ ? rowQuery({ table, store, otelContext })
35
+ : rowQuery({ table, store, id, otelContext });
36
+ rcCache.set(table, id ?? 'singleton', query$, reactId, otelContext, span);
37
+ return { query$, otelContext };
38
+ }, [table, id, reactId, store]);
39
+ React.useEffect(() => () => {
40
+ const cachedItem = rcCache.get(table, id ?? 'singleton');
41
+ cachedItem.reactIds.delete(reactId);
42
+ if (cachedItem.reactIds.size === 0) {
43
+ rcCache.delete(cachedItem.query$);
44
+ cachedItem.query$.destroy();
45
+ cachedItem.span.end();
46
+ }
47
+ }, [table, id, reactId]);
48
+ const query$Ref = useQueryRef(query$, otelContext);
49
+ const setState = React.useMemo(() => {
50
+ if (table.isSingleColumn) {
51
+ return (newValue) => {
52
+ if (query$Ref.current === newValue)
53
+ return;
54
+ const encodedValue = Schema.encodeSync(sqliteTableDef.columns['value'].type.codec)(newValue);
55
+ store.applyEvent('livestore.UpdateComponentState', {
56
+ tableName: sqliteTableDef.name,
57
+ columnNames: ['value'],
58
+ id,
59
+ bindValues: { ['value']: encodedValue },
60
+ });
61
+ };
62
+ }
63
+ else {
64
+ const setState = // TODO: do we have a better type for the values that can go in SQLite?
65
+ mapValues(sqliteTableDef.columns, (column, columnName) => (newValue) => {
66
+ // Don't update the state if it's the same as the value already seen in the component
67
+ // @ts-expect-error TODO fix typing
68
+ if (query$Ref.current[columnName] === newValue)
69
+ return;
70
+ const encodedValue = Schema.encodeSync(column.type.codec)(newValue);
71
+ store.applyEvent('livestore.UpdateComponentState', {
72
+ tableName: sqliteTableDef.name,
73
+ columnNames: [columnName],
74
+ id,
75
+ bindValues: { [columnName]: encodedValue },
76
+ });
77
+ });
78
+ // @ts-expect-error TODO fix typing
79
+ setState.setMany = (columnValues) => {
80
+ // TODO use hashing instead
81
+ // Don't update the state if it's the same as the value already seen in the component
82
+ if (
83
+ // @ts-expect-error TODO fix typing
84
+ Object.entries(columnValues).every(([columnName, value]) => query$Ref.current[columnName] === value)) {
85
+ return;
86
+ }
87
+ const columnNames = Object.keys(columnValues);
88
+ const bindValues = mapValues(columnValues, (value, columnName) => Schema.encodeSync(sqliteTableDef.columns[columnName].type.codec)(value));
89
+ store.applyEvent('livestore.UpdateComponentState', {
90
+ tableName: sqliteTableDef.name,
91
+ columnNames,
92
+ id,
93
+ bindValues,
94
+ });
95
+ };
96
+ return setState;
97
+ }
98
+ }, [table.isSingleColumn, id, sqliteTableDef.columns, sqliteTableDef.name, store, query$Ref]);
99
+ return [query$Ref.current, setState, query$];
100
+ };
101
+ /** Reference counted cache for `query$` and otel context */
102
+ class RCCache {
103
+ cache = new Map();
104
+ reverseCache = new Map();
105
+ get = (table, id) => {
106
+ const queries = this.cache.get(table);
107
+ if (queries === undefined)
108
+ return undefined;
109
+ return queries.get(id);
110
+ };
111
+ set = (table, id, query$, reactId, otelContext, span) => {
112
+ let queries = this.cache.get(table);
113
+ if (queries === undefined) {
114
+ queries = new Map();
115
+ this.cache.set(table, queries);
116
+ }
117
+ queries.set(id, { query$, otelContext, span, reactIds: new Set([reactId]) });
118
+ this.reverseCache.set(query$, [table, id]);
119
+ };
120
+ delete = (query$) => {
121
+ const item = this.reverseCache.get(query$);
122
+ if (item === undefined)
123
+ return;
124
+ const [table, id] = item;
125
+ const queries = this.cache.get(table);
126
+ if (queries === undefined)
127
+ return;
128
+ queries.delete(id);
129
+ if (queries.size === 0) {
130
+ this.cache.delete(table);
131
+ }
132
+ this.reverseCache.delete(query$);
133
+ };
134
+ }
135
+ const rcCache = new RCCache();
136
+ //# sourceMappingURL=useRow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useRow.js","sourceRoot":"","sources":["../../src/react/useRow.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import React from 'react';
1
2
  import type { ILiveStoreQuery } from '../reactiveQueries/base-class.js';
2
3
  /**
3
4
  * Creates a query, subscribes and destroys it when the component unmounts.
@@ -5,4 +6,5 @@ import type { ILiveStoreQuery } from '../reactiveQueries/base-class.js';
5
6
  * Make sure `makeQuery` is a memoized function.
6
7
  */
7
8
  export declare const useTemporaryQuery: <TResult>(makeQuery: () => ILiveStoreQuery<TResult>) => TResult;
9
+ export declare const useTemporaryQueryRef: <TResult>(makeQuery: () => ILiveStoreQuery<TResult>) => React.MutableRefObject<TResult>;
8
10
  //# sourceMappingURL=useTemporaryQuery.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useTemporaryQuery.d.ts","sourceRoot":"","sources":["../../src/react/useTemporaryQuery.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAA;AAGvE;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,iEAY7B,CAAA"}
1
+ {"version":3,"file":"useTemporaryQuery.d.ts","sourceRoot":"","sources":["../../src/react/useTemporaryQuery.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAA;AASvE;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,iEACW,CAAA;AAEzC,eAAO,MAAM,oBAAoB,yFAmChC,CAAA"}
@@ -1,19 +1,36 @@
1
1
  import React from 'react';
2
- import { useQuery } from './useQuery.js';
2
+ import { useQueryRef } from './useQuery.js';
3
+ /**
4
+ * This is needed because the `React.useMemo` call below, can sometimes be called multiple times 🤷.
5
+ * The map entry is being removed again in the `React.useEffect` call below.
6
+ */
7
+ const queryCache = new Map();
3
8
  /**
4
9
  * Creates a query, subscribes and destroys it when the component unmounts.
5
10
  *
6
11
  * Make sure `makeQuery` is a memoized function.
7
12
  */
8
- export const useTemporaryQuery = (makeQuery) => {
9
- // TODO cache the query outside of the `useMemo` since `useMemo` might be called multiple times
10
- // also need to update the `useEffect` below https://stackoverflow.com/questions/66446642/react-usememo-memory-clean/77457605#77457605
11
- const query = React.useMemo(() => makeQuery(), [makeQuery]);
12
- React.useEffect(() => {
13
- return () => {
14
- query.destroy();
15
- };
16
- }, [query]);
17
- return useQuery(query);
13
+ export const useTemporaryQuery = (makeQuery) => useTemporaryQueryRef(makeQuery).current;
14
+ export const useTemporaryQueryRef = (makeQuery) => {
15
+ const reactId = React.useId();
16
+ const query$ = React.useMemo(() => {
17
+ const cachedItem = queryCache.get(makeQuery);
18
+ if (cachedItem !== undefined) {
19
+ cachedItem.reactIds.add(reactId);
20
+ return cachedItem.query$;
21
+ }
22
+ const query$ = makeQuery();
23
+ queryCache.set(makeQuery, { reactIds: new Set([reactId]), query$ });
24
+ return query$;
25
+ }, [reactId, makeQuery]);
26
+ React.useEffect(() => () => {
27
+ const cachedItem = queryCache.get(makeQuery);
28
+ cachedItem.reactIds.delete(reactId);
29
+ if (cachedItem.reactIds.size === 0) {
30
+ cachedItem.query$.destroy();
31
+ queryCache.delete(makeQuery);
32
+ }
33
+ }, [makeQuery, reactId]);
34
+ return useQueryRef(query$);
18
35
  };
19
36
  //# sourceMappingURL=useTemporaryQuery.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useTemporaryQuery.js","sourceRoot":"","sources":["../../src/react/useTemporaryQuery.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAGzB,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAExC;;;;GAIG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAU,SAAyC,EAAW,EAAE;IAC/F,+FAA+F;IAC/F,sIAAsI;IACtI,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,CAAA;IAE3D,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,OAAO,GAAG,EAAE;YACV,KAAK,CAAC,OAAO,EAAE,CAAA;QACjB,CAAC,CAAA;IACH,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAA;IAEX,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAA;AACxB,CAAC,CAAA"}
1
+ {"version":3,"file":"useTemporaryQuery.js","sourceRoot":"","sources":["../../src/react/useTemporaryQuery.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAGzB,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAE3C;;;GAGG;AACH,MAAM,UAAU,GAAG,IAAI,GAAG,EAAuF,CAAA;AAEjH;;;;GAIG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAU,SAAyC,EAAW,EAAE,CAC/F,oBAAoB,CAAC,SAAS,CAAC,CAAC,OAAO,CAAA;AAEzC,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAClC,SAAyC,EACR,EAAE;IACnC,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,EAAE,CAAA;IAE7B,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE;QAChC,MAAM,UAAU,GAAG,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;QAC5C,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;YAC7B,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;YAEhC,OAAO,UAAU,CAAC,MAAM,CAAA;QAC1B,CAAC;QAED,MAAM,MAAM,GAAG,SAAS,EAAE,CAAA;QAE1B,UAAU,CAAC,GAAG,CAAC,SAAS,EAAE,EAAE,QAAQ,EAAE,IAAI,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAA;QAEnE,OAAO,MAAM,CAAA;IACf,CAAC,EAAE,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,CAAA;IAExB,KAAK,CAAC,SAAS,CACb,GAAG,EAAE,CAAC,GAAG,EAAE;QACT,MAAM,UAAU,GAAG,UAAU,CAAC,GAAG,CAAC,SAAS,CAAE,CAAA;QAE7C,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;QAEnC,IAAI,UAAU,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;YACnC,UAAU,CAAC,MAAM,CAAC,OAAO,EAAE,CAAA;YAC3B,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC,CAAA;QAC9B,CAAC;IACH,CAAC,EACD,CAAC,SAAS,EAAE,OAAO,CAAC,CACrB,CAAA;IAED,OAAO,WAAW,CAAC,MAAM,CAAC,CAAA;AAC5B,CAAC,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"stack-info.d.ts","sourceRoot":"","sources":["../../../src/react/utils/stack-info.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,kBAAkB,QAAwB,CAAA;AAEvD,MAAM,MAAM,SAAS,GAAG;IACtB,MAAM,EAAE,UAAU,EAAE,CAAA;CACrB,CAAA;AAED,MAAM,MAAM,UAAU,GAAG;IACvB,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,MAAM,CAAA;CACjB,CAAA;AAqBD,eAAO,MAAM,8BAA8B,eAAgB,MAAM,KAAG,SAoBnE,CAAA;AAED,eAAO,MAAM,YAAY,QAAO,SAQxB,CAAA"}
1
+ {"version":3,"file":"stack-info.d.ts","sourceRoot":"","sources":["../../../src/react/utils/stack-info.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,kBAAkB,QAAwB,CAAA;AAEvD,MAAM,MAAM,SAAS,GAAG;IACtB,MAAM,EAAE,UAAU,EAAE,CAAA;CACrB,CAAA;AAED,MAAM,MAAM,UAAU,GAAG;IACvB,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,MAAM,CAAA;CACjB,CAAA;AAqBD,eAAO,MAAM,8BAA8B,eAAgB,MAAM,KAAG,SAsBnE,CAAA;AAED,eAAO,MAAM,YAAY,QAAO,SAOxB,CAAA"}
@@ -26,9 +26,10 @@ export const extractStackInfoFromStackTrace = (stackTrace) => {
26
26
  let hasReachedStart = false;
27
27
  while ((match = namePattern.exec(stackTrace)) !== null) {
28
28
  const [, name, filePath] = match;
29
- if (name.startsWith('use')) {
29
+ // NOTE No idea where this `Module.` comes from - possibly a Vite thing?
30
+ if ((name.startsWith('use') || name.startsWith('Module.use')) && name.endsWith('QueryRef') === false) {
30
31
  hasReachedStart = true;
31
- frames.unshift({ name, filePath });
32
+ frames.unshift({ name: name.replace(/^Module\./, ''), filePath });
32
33
  }
33
34
  else if (hasReachedStart) {
34
35
  // We've reached the end of the `use*` functions, so we're adding the component name and stop
@@ -42,7 +43,6 @@ export const useStackInfo = () => React.useMemo(() => {
42
43
  Error.stackTraceLimit = 10;
43
44
  // eslint-disable-next-line unicorn/error-message
44
45
  const stack = new Error().stack;
45
- console.log('stack', stack);
46
46
  Error.stackTraceLimit = originalStackLimit;
47
47
  return extractStackInfoFromStackTrace(stack);
48
48
  }, []);
@@ -1 +1 @@
1
- {"version":3,"file":"stack-info.js","sourceRoot":"","sources":["../../../src/react/utils/stack-info.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,MAAM,CAAC,MAAM,kBAAkB,GAAG,KAAK,CAAC,eAAe,CAAA;AAWvD;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,CAAC,MAAM,8BAA8B,GAAG,CAAC,UAAkB,EAAa,EAAE;IAC9E,MAAM,WAAW,GAAG,oBAAoB,CAAA;IACxC,IAAI,KAA6B,CAAA;IACjC,MAAM,MAAM,GAAiB,EAAE,CAAA;IAC/B,IAAI,eAAe,GAAG,KAAK,CAAA;IAE3B,OAAO,CAAC,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,KAAK,IAAI,EAAE;QACtD,MAAM,CAAC,EAAE,IAAI,EAAE,QAAQ,CAAC,GAAG,KAAwC,CAAA;QACnE,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE;YAC1B,eAAe,GAAG,IAAI,CAAA;YAEtB,MAAM,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAA;SACnC;aAAM,IAAI,eAAe,EAAE;YAC1B,6FAA6F;YAC7F,MAAM,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAA;YAClC,MAAK;SACN;KACF;IAED,OAAO,EAAE,MAAM,EAAE,CAAA;AACnB,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,YAAY,GAAG,GAAc,EAAE,CAC1C,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE;IACjB,KAAK,CAAC,eAAe,GAAG,EAAE,CAAA;IAC1B,iDAAiD;IACjD,MAAM,KAAK,GAAG,IAAI,KAAK,EAAE,CAAC,KAAM,CAAA;IAChC,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,CAAA;IAC3B,KAAK,CAAC,eAAe,GAAG,kBAAkB,CAAA;IAC1C,OAAO,8BAA8B,CAAC,KAAK,CAAC,CAAA;AAC9C,CAAC,EAAE,EAAE,CAAC,CAAA"}
1
+ {"version":3,"file":"stack-info.js","sourceRoot":"","sources":["../../../src/react/utils/stack-info.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,MAAM,CAAC,MAAM,kBAAkB,GAAG,KAAK,CAAC,eAAe,CAAA;AAWvD;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,CAAC,MAAM,8BAA8B,GAAG,CAAC,UAAkB,EAAa,EAAE;IAC9E,MAAM,WAAW,GAAG,oBAAoB,CAAA;IACxC,IAAI,KAA6B,CAAA;IACjC,MAAM,MAAM,GAAiB,EAAE,CAAA;IAC/B,IAAI,eAAe,GAAG,KAAK,CAAA;IAE3B,OAAO,CAAC,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QACvD,MAAM,CAAC,EAAE,IAAI,EAAE,QAAQ,CAAC,GAAG,KAAwC,CAAA;QAEnE,wEAAwE;QACxE,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,KAAK,KAAK,EAAE,CAAC;YACrG,eAAe,GAAG,IAAI,CAAA;YAEtB,MAAM,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAA;QACnE,CAAC;aAAM,IAAI,eAAe,EAAE,CAAC;YAC3B,6FAA6F;YAC7F,MAAM,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAA;YAClC,MAAK;QACP,CAAC;IACH,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,CAAA;AACnB,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,YAAY,GAAG,GAAc,EAAE,CAC1C,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE;IACjB,KAAK,CAAC,eAAe,GAAG,EAAE,CAAA;IAC1B,iDAAiD;IACjD,MAAM,KAAK,GAAG,IAAI,KAAK,EAAE,CAAC,KAAM,CAAA;IAChC,KAAK,CAAC,eAAe,GAAG,kBAAkB,CAAA;IAC1C,OAAO,8BAA8B,CAAC,KAAK,CAAC,CAAA;AAC9C,CAAC,EAAE,EAAE,CAAC,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"useStateRefWithReactiveInput.js","sourceRoot":"","sources":["../../../src/react/utils/useStateRefWithReactiveInput.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAC1C,UAAa,EAC0D,EAAE;IACzE,MAAM,CAAC,CAAC,EAAE,QAAQ,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAA;IAEvC,MAAM,sBAAsB,GAAG,KAAK,CAAC,MAAM,CAAI,UAAU,CAAC,CAAA;IAC1D,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAI,UAAU,CAAC,CAAA;IAE5C,IAAI,sBAAsB,CAAC,OAAO,KAAK,UAAU,EAAE;QACjD,sBAAsB,CAAC,OAAO,GAAG,UAAU,CAAA;QAE3C,qHAAqH;QACrH,QAAQ,CAAC,OAAO,GAAG,UAAU,CAAA;KAC9B;IAED,MAAM,mBAAmB,GAAG,KAAK,CAAC,WAAW,CAC3C,CAAC,QAA8B,EAAE,EAAE;QACjC,wEAAwE;QACxE,MAAM,GAAG,GAAG,OAAO,QAAQ,KAAK,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAA;QAClF,QAAQ,CAAC,OAAO,GAAG,GAAG,CAAA;QACtB,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;IACxB,CAAC,EACD,CAAC,QAAQ,CAAC,CACX,CAAA;IAED,OAAO,CAAC,QAAQ,EAAE,mBAAmB,CAAC,CAAA;AACxC,CAAC,CAAA;AAED,yGAAyG;AACzG,iFAAiF;AACjF,4GAA4G;AAC5G,yEAAyE;AAEzE,wCAAwC;AACxC,mCAAmC;AACnC,MAAM;AAEN,6CAA6C;AAC7C,IAAI"}
1
+ {"version":3,"file":"useStateRefWithReactiveInput.js","sourceRoot":"","sources":["../../../src/react/utils/useStateRefWithReactiveInput.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAC1C,UAAa,EAC0D,EAAE;IACzE,MAAM,CAAC,CAAC,EAAE,QAAQ,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAA;IAEvC,MAAM,sBAAsB,GAAG,KAAK,CAAC,MAAM,CAAI,UAAU,CAAC,CAAA;IAC1D,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAI,UAAU,CAAC,CAAA;IAE5C,IAAI,sBAAsB,CAAC,OAAO,KAAK,UAAU,EAAE,CAAC;QAClD,sBAAsB,CAAC,OAAO,GAAG,UAAU,CAAA;QAE3C,qHAAqH;QACrH,QAAQ,CAAC,OAAO,GAAG,UAAU,CAAA;IAC/B,CAAC;IAED,MAAM,mBAAmB,GAAG,KAAK,CAAC,WAAW,CAC3C,CAAC,QAA8B,EAAE,EAAE;QACjC,wEAAwE;QACxE,MAAM,GAAG,GAAG,OAAO,QAAQ,KAAK,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAA;QAClF,QAAQ,CAAC,OAAO,GAAG,GAAG,CAAA;QACtB,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;IACxB,CAAC,EACD,CAAC,QAAQ,CAAC,CACX,CAAA;IAED,OAAO,CAAC,QAAQ,EAAE,mBAAmB,CAAC,CAAA;AACxC,CAAC,CAAA;AAED,yGAAyG;AACzG,iFAAiF;AACjF,4GAA4G;AAC5G,yEAAyE;AAEzE,wCAAwC;AACxC,mCAAmC;AACnC,MAAM;AAEN,6CAA6C;AAC7C,IAAI"}