@livestore/react 0.3.0-dev.9 → 0.3.1-dev.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (97) hide show
  1. package/LICENSE +201 -0
  2. package/dist/.tsbuildinfo +1 -1
  3. package/dist/LiveStoreContext.d.ts +10 -4
  4. package/dist/LiveStoreContext.d.ts.map +1 -1
  5. package/dist/LiveStoreContext.js +1 -11
  6. package/dist/LiveStoreContext.js.map +1 -1
  7. package/dist/LiveStoreProvider.d.ts +29 -12
  8. package/dist/LiveStoreProvider.d.ts.map +1 -1
  9. package/dist/LiveStoreProvider.js +84 -55
  10. package/dist/LiveStoreProvider.js.map +1 -1
  11. package/dist/LiveStoreProvider.test.js +80 -29
  12. package/dist/LiveStoreProvider.test.js.map +1 -1
  13. package/dist/__tests__/fixture.d.ts +122 -556
  14. package/dist/__tests__/fixture.d.ts.map +1 -1
  15. package/dist/__tests__/fixture.js +71 -30
  16. package/dist/__tests__/fixture.js.map +1 -1
  17. package/dist/experimental/components/LiveList.d.ts +2 -2
  18. package/dist/experimental/components/LiveList.d.ts.map +1 -1
  19. package/dist/experimental/components/LiveList.js +10 -6
  20. package/dist/experimental/components/LiveList.js.map +1 -1
  21. package/dist/mod.d.ts +4 -5
  22. package/dist/mod.d.ts.map +1 -1
  23. package/dist/mod.js +4 -5
  24. package/dist/mod.js.map +1 -1
  25. package/dist/useClientDocument.d.ts +61 -0
  26. package/dist/useClientDocument.d.ts.map +1 -0
  27. package/dist/useClientDocument.js +79 -0
  28. package/dist/useClientDocument.js.map +1 -0
  29. package/dist/useClientDocument.test.d.ts +2 -0
  30. package/dist/useClientDocument.test.d.ts.map +1 -0
  31. package/dist/useClientDocument.test.js +175 -0
  32. package/dist/useClientDocument.test.js.map +1 -0
  33. package/dist/useQuery.d.ts +25 -3
  34. package/dist/useQuery.d.ts.map +1 -1
  35. package/dist/useQuery.js +67 -47
  36. package/dist/useQuery.js.map +1 -1
  37. package/dist/useQuery.test.d.ts +1 -1
  38. package/dist/useQuery.test.d.ts.map +1 -1
  39. package/dist/useQuery.test.js +86 -24
  40. package/dist/useQuery.test.js.map +1 -1
  41. package/dist/useRcResource.d.ts +76 -0
  42. package/dist/useRcResource.d.ts.map +1 -0
  43. package/dist/useRcResource.js +152 -0
  44. package/dist/useRcResource.js.map +1 -0
  45. package/dist/useRcResource.test.d.ts +2 -0
  46. package/dist/useRcResource.test.d.ts.map +1 -0
  47. package/dist/useRcResource.test.js +122 -0
  48. package/dist/useRcResource.test.js.map +1 -0
  49. package/dist/useStore.d.ts +9 -0
  50. package/dist/useStore.d.ts.map +1 -0
  51. package/dist/useStore.js +28 -0
  52. package/dist/useStore.js.map +1 -0
  53. package/dist/utils/useStateRefWithReactiveInput.d.ts.map +1 -1
  54. package/package.json +20 -13
  55. package/src/LiveStoreContext.ts +11 -16
  56. package/src/LiveStoreProvider.test.tsx +176 -37
  57. package/src/LiveStoreProvider.tsx +156 -81
  58. package/src/__snapshots__/useClientDocument.test.tsx.snap +613 -0
  59. package/src/__snapshots__/useQuery.test.tsx.snap +2011 -0
  60. package/src/__tests__/fixture.tsx +74 -47
  61. package/src/experimental/components/LiveList.tsx +10 -7
  62. package/src/mod.ts +5 -6
  63. package/src/useClientDocument.test.tsx +306 -0
  64. package/src/useClientDocument.ts +157 -0
  65. package/src/useQuery.test.tsx +182 -71
  66. package/src/useQuery.ts +95 -58
  67. package/src/useRcResource.test.tsx +167 -0
  68. package/src/useRcResource.ts +182 -0
  69. package/src/useStore.ts +36 -0
  70. package/dist/useAtom.d.ts +0 -5
  71. package/dist/useAtom.d.ts.map +0 -1
  72. package/dist/useAtom.js +0 -38
  73. package/dist/useAtom.js.map +0 -1
  74. package/dist/useRow.d.ts +0 -50
  75. package/dist/useRow.d.ts.map +0 -1
  76. package/dist/useRow.js +0 -93
  77. package/dist/useRow.js.map +0 -1
  78. package/dist/useRow.test.d.ts +0 -2
  79. package/dist/useRow.test.d.ts.map +0 -1
  80. package/dist/useRow.test.js +0 -202
  81. package/dist/useRow.test.js.map +0 -1
  82. package/dist/useScopedQuery.d.ts +0 -33
  83. package/dist/useScopedQuery.d.ts.map +0 -1
  84. package/dist/useScopedQuery.js +0 -87
  85. package/dist/useScopedQuery.js.map +0 -1
  86. package/dist/useScopedQuery.test.d.ts +0 -2
  87. package/dist/useScopedQuery.test.d.ts.map +0 -1
  88. package/dist/useScopedQuery.test.js +0 -60
  89. package/dist/useScopedQuery.test.js.map +0 -1
  90. package/src/__snapshots__/useRow.test.tsx.snap +0 -360
  91. package/src/useAtom.ts +0 -52
  92. package/src/useRow.test.tsx +0 -344
  93. package/src/useRow.ts +0 -188
  94. package/src/useScopedQuery.test.tsx +0 -96
  95. package/src/useScopedQuery.ts +0 -143
  96. package/tsconfig.json +0 -20
  97. package/vitest.config.js +0 -17
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useClientDocument.test.js","sourceRoot":"","sources":["../src/useClientDocument.test.tsx"],"names":[],"mappings":"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"}
@@ -1,9 +1,31 @@
1
- import type { GetResult, LiveQueryAny } from '@livestore/livestore';
1
+ import type { LiveQuery, LiveQueryDef, Store } from '@livestore/livestore';
2
+ import type { LiveQueries } from '@livestore/livestore/internal';
2
3
  import * as otel from '@opentelemetry/api';
3
4
  import React from 'react';
4
- export declare const useQuery: <TQuery extends LiveQueryAny>(query: TQuery) => GetResult<TQuery>;
5
5
  /**
6
+ * Returns the result of a query and subscribes to future updates.
6
7
  *
8
+ * Example:
9
+ * ```tsx
10
+ * const App = () => {
11
+ * const todos = useQuery(queryDb(tables.todos.query.where({ complete: true })))
12
+ * return <div>{todos.map((todo) => <div key={todo.id}>{todo.title}</div>)}</div>
13
+ * }
14
+ * ```
7
15
  */
8
- export declare const useQueryRef: <TQuery extends LiveQueryAny>(query$: TQuery, parentOtelContext?: otel.Context) => React.RefObject<GetResult<TQuery>>;
16
+ export declare const useQuery: <TQuery extends LiveQueryDef.Any>(queryDef: TQuery, options?: {
17
+ store?: Store;
18
+ }) => LiveQueries.GetResult<TQuery>;
19
+ /**
20
+ */
21
+ export declare const useQueryRef: <TQuery extends LiveQueryDef.Any>(queryDef: TQuery, options?: {
22
+ store?: Store;
23
+ /** Parent otel context for the query */
24
+ otelContext?: otel.Context;
25
+ /** The name of the span to use for the query */
26
+ otelSpanName?: string;
27
+ }) => {
28
+ valueRef: React.RefObject<LiveQueries.GetResult<TQuery>>;
29
+ queryRcRef: LiveQueries.RcRef<LiveQuery<LiveQueries.GetResult<TQuery>>>;
30
+ };
9
31
  //# sourceMappingURL=useQuery.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useQuery.d.ts","sourceRoot":"","sources":["../src/useQuery.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AAGnE,OAAO,KAAK,IAAI,MAAM,oBAAoB,CAAA;AAC1C,OAAO,KAAK,MAAM,OAAO,CAAA;AAkBzB,eAAO,MAAM,QAAQ,GAAI,MAAM,SAAS,YAAY,SAAS,MAAM,KAAG,SAAS,CAAC,MAAM,CAA+B,CAAA;AAErH;;GAEG;AACH,eAAO,MAAM,WAAW,GAAI,MAAM,SAAS,YAAY,UAC7C,MAAM,sBACM,IAAI,CAAC,OAAO,KAC/B,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,MAAM,CAAC,CA+FnC,CAAA"}
1
+ {"version":3,"file":"useQuery.d.ts","sourceRoot":"","sources":["../src/useQuery.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAA;AAE1E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAA;AAEhE,OAAO,KAAK,IAAI,MAAM,oBAAoB,CAAA;AAC1C,OAAO,KAAK,MAAM,OAAO,CAAA;AAOzB;;;;;;;;;;GAUG;AACH,eAAO,MAAM,QAAQ,GAAI,MAAM,SAAS,YAAY,CAAC,GAAG,EACtD,UAAU,MAAM,EAChB,UAAU;IAAE,KAAK,CAAC,EAAE,KAAK,CAAA;CAAE,KAC1B,WAAW,CAAC,SAAS,CAAC,MAAM,CAAoD,CAAA;AAEnF;GACG;AACH,eAAO,MAAM,WAAW,GAAI,MAAM,SAAS,YAAY,CAAC,GAAG,EACzD,UAAU,MAAM,EAChB,UAAU;IACR,KAAK,CAAC,EAAE,KAAK,CAAA;IACb,wCAAwC;IACxC,WAAW,CAAC,EAAE,IAAI,CAAC,OAAO,CAAA;IAC1B,gDAAgD;IAChD,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB,KACA;IACD,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC,WAAW,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAA;IACxD,UAAU,EAAE,WAAW,CAAC,KAAK,CAAC,SAAS,CAAC,WAAW,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;CAwHxE,CAAA"}
package/dist/useQuery.js CHANGED
@@ -1,28 +1,29 @@
1
1
  import { extractStackInfoFromStackTrace, stackInfoToString } from '@livestore/livestore';
2
- import { deepEqual, indent } from '@livestore/utils';
2
+ import { deepEqual, indent, shouldNeverHappen } from '@livestore/utils';
3
3
  import * as otel from '@opentelemetry/api';
4
4
  import React from 'react';
5
- import { useStore } from './LiveStoreContext.js';
5
+ import { LiveStoreContext } from './LiveStoreContext.js';
6
+ import { useRcResource } from './useRcResource.js';
6
7
  import { originalStackLimit } from './utils/stack-info.js';
7
8
  import { useStateRefWithReactiveInput } from './utils/useStateRefWithReactiveInput.js';
8
9
  /**
9
- * NOTE Some folks have suggested to use `React.useSyncExternalStore`, however, it's not doing anything special
10
- * for what's needed here, so we handle everything manually.
10
+ * Returns the result of a query and subscribes to future updates.
11
+ *
12
+ * Example:
13
+ * ```tsx
14
+ * const App = () => {
15
+ * const todos = useQuery(queryDb(tables.todos.query.where({ complete: true })))
16
+ * return <div>{todos.map((todo) => <div key={todo.id}>{todo.title}</div>)}</div>
17
+ * }
18
+ * ```
11
19
  */
20
+ export const useQuery = (queryDef, options) => useQueryRef(queryDef, options).valueRef.current;
12
21
  /**
13
- * This is needed because the `React.useMemo` call below, can sometimes be called multiple times 🤷,
14
- * so we need to "cache" the fact that we've already started a span for this component.
15
- * The map entry is being removed again in the `React.useEffect` call below.
16
22
  */
17
- const spanAlreadyStartedCache = new Map();
18
- export const useQuery = (query) => useQueryRef(query).current;
19
- /**
20
- *
21
- */
22
- export const useQueryRef = (query$, parentOtelContext) => {
23
- const { store } = useStore();
24
- React.useDebugValue(`LiveStore:useQuery:${query$.id}:${query$.label}`);
25
- // console.debug(`LiveStore:useQuery:${query$.id}:${query$.label}`)
23
+ export const useQueryRef = (queryDef, options) => {
24
+ const store = options?.store ?? React.useContext(LiveStoreContext)?.store ?? shouldNeverHappen(`No store provided to useQuery`);
25
+ // It's important to use all "aspects" of a store instance here, otherwise we get unexpected cache mappings
26
+ const rcRefKey = `${store.storeId}_${store.clientId}_${store.sessionId}_${queryDef.hash}`;
26
27
  const stackInfo = React.useMemo(() => {
27
28
  Error.stackTraceLimit = 10;
28
29
  // eslint-disable-next-line unicorn/error-message
@@ -30,26 +31,36 @@ export const useQueryRef = (query$, parentOtelContext) => {
30
31
  Error.stackTraceLimit = originalStackLimit;
31
32
  return extractStackInfoFromStackTrace(stack);
32
33
  }, []);
33
- // The following `React.useMemo` and `React.useEffect` calls are used to start and end a span for the lifetime of this component.
34
- const { span, otelContext } = React.useMemo(() => {
35
- const existingSpan = spanAlreadyStartedCache.get(query$);
36
- if (existingSpan !== undefined)
37
- return existingSpan;
38
- const span = store.otel.tracer.startSpan(`LiveStore:useQuery:${query$.label}`, { attributes: { label: query$.label, stackInfo: JSON.stringify(stackInfo) } }, parentOtelContext ?? store.otel.queriesSpanContext);
34
+ const { queryRcRef, span, otelContext } = useRcResource(rcRefKey, () => {
35
+ const queryDefLabel = queryDef.label;
36
+ const span = store.otel.tracer.startSpan(options?.otelSpanName ?? `LiveStore:useQuery:${queryDefLabel}`, { attributes: { label: queryDefLabel, firstStackInfo: JSON.stringify(stackInfo) } }, options?.otelContext ?? store.otel.queriesSpanContext);
39
37
  const otelContext = otel.trace.setSpan(otel.context.active(), span);
40
- spanAlreadyStartedCache.set(query$, { span, otelContext });
41
- return { span, otelContext };
42
- }, [parentOtelContext, query$, stackInfo, store.otel.queriesSpanContext, store.otel.tracer]);
38
+ const queryRcRef = queryDef.make(store.reactivityGraph.context, otelContext);
39
+ return { queryRcRef, span, otelContext };
40
+ },
41
+ // We need to keep the queryRcRef alive a bit longer, so we have a second `useRcResource` below
42
+ // which takes care of disposing the queryRcRef
43
+ () => { });
44
+ // if (queryRcRef.value._tag === 'signal') {
45
+ // const queryRcRef.value.get()
46
+ // }
47
+ const query$ = queryRcRef.value;
48
+ React.useDebugValue(`LiveStore:useQuery:${query$.id}:${query$.label}`);
49
+ // console.debug(`LiveStore:useQuery:${query$.id}:${query$.label}`)
43
50
  const initialResult = React.useMemo(() => {
44
51
  try {
45
- return query$.run(otelContext, {
46
- _tag: 'react',
47
- api: 'useQuery',
48
- label: query$.label,
49
- stackInfo,
52
+ return query$.run({
53
+ otelContext,
54
+ debugRefreshReason: {
55
+ _tag: 'react',
56
+ api: 'useQuery',
57
+ label: `useQuery:initial-run:${query$.label}`,
58
+ stackInfo,
59
+ },
50
60
  });
51
61
  }
52
62
  catch (cause) {
63
+ console.error('[@livestore/react:useQuery] Error running query', cause);
53
64
  throw new Error(`\
54
65
  [@livestore/react:useQuery] Error running query: ${cause.name}
55
66
 
@@ -65,27 +76,36 @@ Stack trace:
65
76
  }, [otelContext, query$, stackInfo]);
66
77
  // We know the query has a result by the time we use it; so we can synchronously populate a default state
67
78
  const [valueRef, setValue] = useStateRefWithReactiveInput(initialResult);
68
- React.useEffect(() => () => {
69
- spanAlreadyStartedCache.delete(query$);
70
- span.end();
71
- }, [query$, span]);
79
+ // TODO we probably need to change the order of `useEffect` calls, so we destroy the query at the end
80
+ // before calling the LS `onEffect` on it
72
81
  // Subscribe to future updates for this query
73
82
  React.useEffect(() => {
83
+ // TODO double check whether we still need `activeSubscriptions`
74
84
  query$.activeSubscriptions.add(stackInfo);
75
85
  // Dynamic queries only set their actual label after they've been run the first time,
76
86
  // so we're also updating the span name here.
77
- span.updateName(`LiveStore:useQuery:${query$.label}`);
78
- return store.subscribe(query$, (newValue) => {
79
- // NOTE: we return a reference to the result object within LiveStore;
80
- // this implies that app code must not mutate the results, or else
81
- // there may be weird reactivity bugs.
82
- if (deepEqual(newValue, valueRef.current) === false) {
83
- setValue(newValue);
84
- }
85
- }, () => {
86
- query$.activeSubscriptions.delete(stackInfo);
87
- }, { label: query$.label, otelContext });
88
- }, [stackInfo, query$, setValue, store, valueRef, otelContext, span]);
89
- return valueRef;
87
+ span.updateName(options?.otelSpanName ?? `LiveStore:useQuery:${query$.label}`);
88
+ return store.subscribe(query$, {
89
+ onUpdate: (newValue) => {
90
+ // NOTE: we return a reference to the result object within LiveStore;
91
+ // this implies that app code must not mutate the results, or else
92
+ // there may be weird reactivity bugs.
93
+ if (deepEqual(newValue, valueRef.current) === false) {
94
+ setValue(newValue);
95
+ }
96
+ },
97
+ onUnsubsubscribe: () => {
98
+ query$.activeSubscriptions.delete(stackInfo);
99
+ },
100
+ label: query$.label,
101
+ otelContext,
102
+ });
103
+ }, [stackInfo, query$, setValue, store, valueRef, otelContext, span, options?.otelSpanName]);
104
+ useRcResource(rcRefKey, () => ({ queryRcRef, span }), ({ queryRcRef, span }) => {
105
+ // console.debug('deref', queryRcRef.value.id, queryRcRef.value.label)
106
+ queryRcRef.deref();
107
+ span.end();
108
+ });
109
+ return { valueRef, queryRcRef };
90
110
  };
91
111
  //# sourceMappingURL=useQuery.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useQuery.js","sourceRoot":"","sources":["../src/useQuery.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"useQuery.js","sourceRoot":"","sources":["../src/useQuery.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,8BAA8B,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AAExF,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AACvE,OAAO,KAAK,IAAI,MAAM,oBAAoB,CAAA;AAC1C,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAClD,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAA;AAC1D,OAAO,EAAE,4BAA4B,EAAE,MAAM,yCAAyC,CAAA;AAEtF;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG,CACtB,QAAgB,EAChB,OAA2B,EACI,EAAE,CAAC,WAAW,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAA;AAEnF;GACG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,CACzB,QAAgB,EAChB,OAMC,EAID,EAAE;IACF,MAAM,KAAK,GACT,OAAO,EAAE,KAAK,IAAI,KAAK,CAAC,UAAU,CAAC,gBAAgB,CAAC,EAAE,KAAK,IAAI,iBAAiB,CAAC,+BAA+B,CAAC,CAAA;IAEnH,2GAA2G;IAC3G,MAAM,QAAQ,GAAG,GAAG,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,SAAS,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAA;IAEzF,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE;QACnC,KAAK,CAAC,eAAe,GAAG,EAAE,CAAA;QAC1B,iDAAiD;QACjD,MAAM,KAAK,GAAG,IAAI,KAAK,EAAE,CAAC,KAAM,CAAA;QAChC,KAAK,CAAC,eAAe,GAAG,kBAAkB,CAAA;QAC1C,OAAO,8BAA8B,CAAC,KAAK,CAAC,CAAA;IAC9C,CAAC,EAAE,EAAE,CAAC,CAAA;IAEN,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,aAAa,CACrD,QAAQ,EACR,GAAG,EAAE;QACH,MAAM,aAAa,GAAG,QAAQ,CAAC,KAAK,CAAA;QAEpC,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CACtC,OAAO,EAAE,YAAY,IAAI,sBAAsB,aAAa,EAAE,EAC9D,EAAE,UAAU,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,EAAE,EACnF,OAAO,EAAE,WAAW,IAAI,KAAK,CAAC,IAAI,CAAC,kBAAkB,CACtD,CAAA;QAED,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,IAAI,CAAC,CAAA;QAEnE,MAAM,UAAU,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,OAAQ,EAAE,WAAW,CAAC,CAAA;QAE7E,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,WAAW,EAAE,CAAA;IAC1C,CAAC;IACD,+FAA+F;IAC/F,+CAA+C;IAC/C,GAAG,EAAE,GAAE,CAAC,CACT,CAAA;IAED,4CAA4C;IAC5C,kCAAkC;IAClC,IAAI;IAEJ,MAAM,MAAM,GAAG,UAAU,CAAC,KAAiD,CAAA;IAE3E,KAAK,CAAC,aAAa,CAAC,sBAAsB,MAAM,CAAC,EAAE,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC,CAAA;IACtE,mEAAmE;IAEnE,MAAM,aAAa,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE;QACvC,IAAI,CAAC;YACH,OAAO,MAAM,CAAC,GAAG,CAAC;gBAChB,WAAW;gBACX,kBAAkB,EAAE;oBAClB,IAAI,EAAE,OAAO;oBACb,GAAG,EAAE,UAAU;oBACf,KAAK,EAAE,wBAAwB,MAAM,CAAC,KAAK,EAAE;oBAC7C,SAAS;iBACV;aACF,CAAC,CAAA;QACJ,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,OAAO,CAAC,KAAK,CAAC,iDAAiD,EAAE,KAAK,CAAC,CAAA;YACvE,MAAM,IAAI,KAAK,CACb;mDAC2C,KAAK,CAAC,IAAI;;SAEpD,MAAM,CAAC,KAAK;;;;EAInB,MAAM,CAAC,iBAAiB,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;;;CAGxC,EACO,EAAE,KAAK,EAAE,CACV,CAAA;QACH,CAAC;IACH,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC,CAAA;IAEpC,yGAAyG;IACzG,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,GAAG,4BAA4B,CAAgC,aAAa,CAAC,CAAA;IAEvG,qGAAqG;IACrG,yCAAyC;IAEzC,6CAA6C;IAC7C,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,gEAAgE;QAChE,MAAM,CAAC,mBAAmB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;QAEzC,qFAAqF;QACrF,6CAA6C;QAC7C,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,YAAY,IAAI,sBAAsB,MAAM,CAAC,KAAK,EAAE,CAAC,CAAA;QAE9E,OAAO,KAAK,CAAC,SAAS,CAAC,MAAM,EAAE;YAC7B,QAAQ,EAAE,CAAC,QAAQ,EAAE,EAAE;gBACrB,qEAAqE;gBACrE,kEAAkE;gBAClE,sCAAsC;gBACtC,IAAI,SAAS,CAAC,QAAQ,EAAE,QAAQ,CAAC,OAAO,CAAC,KAAK,KAAK,EAAE,CAAC;oBACpD,QAAQ,CAAC,QAAQ,CAAC,CAAA;gBACpB,CAAC;YACH,CAAC;YACD,gBAAgB,EAAE,GAAG,EAAE;gBACrB,MAAM,CAAC,mBAAmB,CAAC,MAAM,CAAC,SAAS,CAAC,CAAA;YAC9C,CAAC;YACD,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,WAAW;SACZ,CAAC,CAAA;IACJ,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,IAAI,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC,CAAA;IAE5F,aAAa,CACX,QAAQ,EACR,GAAG,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,EAC5B,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,EAAE,EAAE;QACvB,sEAAsE;QACtE,UAAU,CAAC,KAAK,EAAE,CAAA;QAClB,IAAI,CAAC,GAAG,EAAE,CAAA;IACZ,CAAC,CACF,CAAA;IAED,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAA;AACjC,CAAC,CAAA"}
@@ -1,2 +1,2 @@
1
- export {};
1
+ import '@livestore/utils-dev/node-vitest-polyfill';
2
2
  //# sourceMappingURL=useQuery.test.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useQuery.test.d.ts","sourceRoot":"","sources":["../src/useQuery.test.tsx"],"names":[],"mappings":""}
1
+ {"version":3,"file":"useQuery.test.d.ts","sourceRoot":"","sources":["../src/useQuery.test.tsx"],"names":[],"mappings":"AAAA,OAAO,2CAA2C,CAAA"}
@@ -1,45 +1,107 @@
1
- import { queryDb } from '@livestore/livestore';
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import '@livestore/utils-dev/node-vitest-polyfill';
3
+ import { queryDb, signal } from '@livestore/livestore';
4
+ import * as LiveStore from '@livestore/livestore';
5
+ import { RG } from '@livestore/livestore/internal/testing-utils';
2
6
  import { Effect, Schema } from '@livestore/utils/effect';
3
- import { renderHook } from '@testing-library/react';
7
+ import { Vitest } from '@livestore/utils-dev/node-vitest';
8
+ import * as ReactTesting from '@testing-library/react';
4
9
  import React from 'react';
5
- import { describe, expect, it } from 'vitest';
6
- import { makeTodoMvcReact, tables, todos } from './__tests__/fixture.js';
7
- import * as LiveStoreReact from './mod.js';
8
- describe('useQuery', () => {
9
- it('simple', () => Effect.gen(function* () {
10
- const { wrapper, store, makeRenderCount } = yield* makeTodoMvcReact();
11
- const renderCount = makeRenderCount();
12
- const allTodos$ = queryDb({ query: `select * from todos`, schema: Schema.Array(tables.todos.schema) });
13
- const { result } = renderHook(() => {
10
+ // @ts-expect-error no types
11
+ import * as ReactWindow from 'react-window';
12
+ import { expect } from 'vitest';
13
+ import { events, makeTodoMvcReact, tables } from './__tests__/fixture.js';
14
+ import { __resetUseRcResourceCache } from './useRcResource.js';
15
+ Vitest.describe.each([{ strictMode: true }, { strictMode: false }])('useQuery (strictMode=%s)', ({ strictMode }) => {
16
+ Vitest.afterEach(() => {
17
+ RG.__resetIds();
18
+ __resetUseRcResourceCache();
19
+ });
20
+ Vitest.scopedLive('simple', () => Effect.gen(function* () {
21
+ const { wrapper, store, renderCount } = yield* makeTodoMvcReact({ strictMode });
22
+ const allTodos$ = queryDb({ query: `select * from todos`, schema: Schema.Array(tables.todos.rowSchema) });
23
+ const { result } = ReactTesting.renderHook(() => {
14
24
  renderCount.inc();
15
- return LiveStoreReact.useQuery(allTodos$);
25
+ return store.useQuery(allTodos$);
16
26
  }, { wrapper });
17
27
  expect(result.current.length).toBe(0);
18
28
  expect(renderCount.val).toBe(1);
19
- React.act(() => store.mutate(todos.insert({ id: 't1', text: 'buy milk', completed: false })));
29
+ expect(store.reactivityGraph.getSnapshot({ includeResults: true })).toMatchSnapshot();
30
+ ReactTesting.act(() => store.commit(events.todoCreated({ id: 't1', text: 'buy milk', completed: false })));
20
31
  expect(result.current.length).toBe(1);
21
32
  expect(result.current[0].text).toBe('buy milk');
22
33
  expect(renderCount.val).toBe(2);
23
- }).pipe(Effect.scoped, Effect.tapCauseLogPretty, Effect.runPromise));
24
- it('same `useQuery` hook invoked with different queries', () => Effect.gen(function* () {
25
- const { wrapper, store, makeRenderCount } = yield* makeTodoMvcReact();
26
- const renderCount = makeRenderCount();
27
- const todo1$ = queryDb({ query: `select * from todos where id = 't1'`, schema: Schema.Array(tables.todos.schema) }, { label: 'libraryTracksView1' });
28
- const todo2$ = queryDb({ query: `select * from todos where id = 't2'`, schema: Schema.Array(tables.todos.schema) }, { label: 'libraryTracksView2' });
29
- store.mutate(todos.insert({ id: 't1', text: 'buy milk', completed: false }), todos.insert({ id: 't2', text: 'buy eggs', completed: false }));
30
- const { result, rerender } = renderHook((todoId) => {
34
+ expect(store.reactivityGraph.getSnapshot({ includeResults: true })).toMatchSnapshot();
35
+ }));
36
+ Vitest.scopedLive('same `useQuery` hook invoked with different queries', () => Effect.gen(function* () {
37
+ const { wrapper, store, renderCount } = yield* makeTodoMvcReact({ strictMode });
38
+ const todo1$ = queryDb({ query: `select * from todos where id = 't1'`, schema: Schema.Array(tables.todos.rowSchema) }, { label: 'libraryTracksView1' });
39
+ const todo2$ = queryDb({ query: `select * from todos where id = 't2'`, schema: Schema.Array(tables.todos.rowSchema) }, { label: 'libraryTracksView2' });
40
+ store.commit(events.todoCreated({ id: 't1', text: 'buy milk', completed: false }), events.todoCreated({ id: 't2', text: 'buy eggs', completed: false }));
41
+ const { result, rerender } = ReactTesting.renderHook((todoId) => {
31
42
  renderCount.inc();
32
43
  const query$ = React.useMemo(() => (todoId === 't1' ? todo1$ : todo2$), [todoId]);
33
- return LiveStoreReact.useQuery(query$)[0].text;
44
+ return store.useQuery(query$)[0].text;
34
45
  }, { wrapper, initialProps: 't1' });
35
46
  expect(result.current).toBe('buy milk');
36
47
  expect(renderCount.val).toBe(1);
37
- React.act(() => store.mutate(todos.update({ where: { id: 't1' }, values: { text: 'buy soy milk' } })));
48
+ expect(store.reactivityGraph.getSnapshot({ includeResults: true })).toMatchSnapshot('1: after first render');
49
+ ReactTesting.act(() => store.commit(events.todoUpdated({ id: 't1', text: 'buy soy milk' })));
38
50
  expect(result.current).toBe('buy soy milk');
39
51
  expect(renderCount.val).toBe(2);
52
+ expect(store.reactivityGraph.getSnapshot({ includeResults: true })).toMatchSnapshot('2: after first commit');
40
53
  rerender('t2');
41
54
  expect(result.current).toBe('buy eggs');
42
55
  expect(renderCount.val).toBe(3);
43
- }).pipe(Effect.scoped, Effect.tapCauseLogPretty, Effect.runPromise));
56
+ expect(store.reactivityGraph.getSnapshot({ includeResults: true })).toMatchSnapshot('3: after forced rerender');
57
+ }));
58
+ Vitest.scopedLive('filtered dependency query', () => Effect.gen(function* () {
59
+ const { wrapper, store, renderCount } = yield* makeTodoMvcReact({ strictMode });
60
+ const filter$ = signal('t1', { label: 'id-filter' });
61
+ const todo$ = queryDb((get) => tables.todos.where('id', get(filter$)), { label: 'todo' });
62
+ store.commit(events.todoCreated({ id: 't1', text: 'buy milk', completed: false }), events.todoCreated({ id: 't2', text: 'buy eggs', completed: false }));
63
+ const { result } = ReactTesting.renderHook(() => {
64
+ renderCount.inc();
65
+ return store.useQuery(todo$)[0].text;
66
+ }, { wrapper });
67
+ expect(result.current).toBe('buy milk');
68
+ expect(renderCount.val).toBe(1);
69
+ expect(store.reactivityGraph.getSnapshot({ includeResults: true })).toMatchSnapshot();
70
+ ReactTesting.act(() => store.commit(events.todoUpdated({ id: 't1', text: 'buy soy milk' })));
71
+ expect(result.current).toBe('buy soy milk');
72
+ expect(renderCount.val).toBe(2);
73
+ expect(store.reactivityGraph.getSnapshot({ includeResults: true })).toMatchSnapshot();
74
+ ReactTesting.act(() => store.setSignal(filter$, 't2'));
75
+ expect(result.current).toBe('buy eggs');
76
+ expect(renderCount.val).toBe(3);
77
+ expect(store.reactivityGraph.getSnapshot({ includeResults: true })).toMatchSnapshot();
78
+ }));
79
+ // NOTE this test covers some special react lifecyle paths which I couldn't easily reproduce without react-window
80
+ // it basically causes a "query swap" in the `useMemo` and both a `useEffect` cleanup call.
81
+ // To handle this properly we introduced the `_tag: 'destroyed'` state in the `spanAlreadyStartedCache`.
82
+ Vitest.scopedLive('should work for a list with react-window', () => Effect.gen(function* () {
83
+ const { wrapper, store } = yield* makeTodoMvcReact({ strictMode });
84
+ const ListWrapper = ({ numItems }) => {
85
+ return (_jsx(ReactWindow.FixedSizeList, { height: 100, width: 100, itemSize: 10, itemCount: numItems, itemData: Array.from({ length: numItems }, (_, i) => i).reverse(), children: ListItem }));
86
+ };
87
+ const ListItem = ({ data: ids, index }) => {
88
+ const id = ids[index];
89
+ const res = store.useQuery(LiveStore.computed(() => id, { label: `ListItem.${id}`, deps: id }));
90
+ // biome-ignore lint/a11y/useSemanticElements: <explanation>
91
+ return _jsx("div", { role: "listitem", children: res });
92
+ };
93
+ const renderResult = ReactTesting.render(_jsx(ListWrapper, { numItems: 1 }), { wrapper });
94
+ expect(renderResult.container.textContent).toBe('0');
95
+ renderResult.rerender(_jsx(ListWrapper, { numItems: 2 }));
96
+ expect(renderResult.container.textContent).toBe('10');
97
+ }));
98
+ Vitest.scopedLive('should work with signal', () => Effect.gen(function* () {
99
+ const { wrapper, store } = yield* makeTodoMvcReact({ strictMode });
100
+ const num$ = signal(0);
101
+ const { result } = ReactTesting.renderHook(() => store.useQuery(num$), { wrapper });
102
+ expect(result.current).toBe(0);
103
+ ReactTesting.act(() => store.setSignal(num$, 1));
104
+ expect(result.current).toBe(1);
105
+ }));
44
106
  });
45
107
  //# sourceMappingURL=useQuery.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useQuery.test.js","sourceRoot":"","sources":["../src/useQuery.test.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"useQuery.test.js","sourceRoot":"","sources":["../src/useQuery.test.tsx"],"names":[],"mappings":";AAAA,OAAO,2CAA2C,CAAA;AAElD,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAA;AACtD,OAAO,KAAK,SAAS,MAAM,sBAAsB,CAAA;AACjD,OAAO,EAAE,EAAE,EAAE,MAAM,6CAA6C,CAAA;AAChE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AACxD,OAAO,EAAE,MAAM,EAAE,MAAM,kCAAkC,CAAA;AACzD,OAAO,KAAK,YAAY,MAAM,wBAAwB,CAAA;AACtD,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,4BAA4B;AAC5B,OAAO,KAAK,WAAW,MAAM,cAAc,CAAA;AAC3C,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAE/B,OAAO,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAA;AACzE,OAAO,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAA;AAE9D,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,CAAU,CAAC,CAC1E,0BAA0B,EAC1B,CAAC,EAAE,UAAU,EAAE,EAAE,EAAE;IACjB,MAAM,CAAC,SAAS,CAAC,GAAG,EAAE;QACpB,EAAE,CAAC,UAAU,EAAE,CAAA;QACf,yBAAyB,EAAE,CAAA;IAC7B,CAAC,CAAC,CAAA;IAEF,MAAM,CAAC,UAAU,CAAC,QAAQ,EAAE,GAAG,EAAE,CAC/B,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QAClB,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,KAAK,CAAC,CAAC,gBAAgB,CAAC,EAAE,UAAU,EAAE,CAAC,CAAA;QAE/E,MAAM,SAAS,GAAG,OAAO,CAAC,EAAE,KAAK,EAAE,qBAAqB,EAAE,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC,CAAA;QAEzG,MAAM,EAAE,MAAM,EAAE,GAAG,YAAY,CAAC,UAAU,CACxC,GAAG,EAAE;YACH,WAAW,CAAC,GAAG,EAAE,CAAA;YAEjB,OAAO,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAA;QAClC,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,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QAC/B,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,WAAW,CAAC,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,eAAe,EAAE,CAAA;QAErF,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAA;QAE1G,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,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QAC/B,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,WAAW,CAAC,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,eAAe,EAAE,CAAA;IACvF,CAAC,CAAC,CACH,CAAA;IAED,MAAM,CAAC,UAAU,CAAC,qDAAqD,EAAE,GAAG,EAAE,CAC5E,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QAClB,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,KAAK,CAAC,CAAC,gBAAgB,CAAC,EAAE,UAAU,EAAE,CAAC,CAAA;QAE/E,MAAM,MAAM,GAAG,OAAO,CACpB,EAAE,KAAK,EAAE,qCAAqC,EAAE,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,EAC9F,EAAE,KAAK,EAAE,oBAAoB,EAAE,CAChC,CAAA;QACD,MAAM,MAAM,GAAG,OAAO,CACpB,EAAE,KAAK,EAAE,qCAAqC,EAAE,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,EAC9F,EAAE,KAAK,EAAE,oBAAoB,EAAE,CAChC,CAAA;QAED,KAAK,CAAC,MAAM,CACV,MAAM,CAAC,WAAW,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,EACpE,MAAM,CAAC,WAAW,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CACrE,CAAA;QAED,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,YAAY,CAAC,UAAU,CAClD,CAAC,MAAc,EAAE,EAAE;YACjB,WAAW,CAAC,GAAG,EAAE,CAAA;YAEjB,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAA;YAEjF,OAAO,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAE,CAAC,IAAI,CAAA;QACxC,CAAC,EACD,EAAE,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,CAChC,CAAA;QAED,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;QACvC,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QAC/B,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,WAAW,CAAC,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,eAAe,CAAC,uBAAuB,CAAC,CAAA;QAE5G,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC,CAAA;QAE5F,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAA;QAC3C,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QAC/B,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,WAAW,CAAC,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,eAAe,CAAC,uBAAuB,CAAC,CAAA;QAE5G,QAAQ,CAAC,IAAI,CAAC,CAAA;QAEd,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;QACvC,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QAC/B,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,WAAW,CAAC,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,eAAe,CAAC,0BAA0B,CAAC,CAAA;IACjH,CAAC,CAAC,CACH,CAAA;IAED,MAAM,CAAC,UAAU,CAAC,2BAA2B,EAAE,GAAG,EAAE,CAClD,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QAClB,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,KAAK,CAAC,CAAC,gBAAgB,CAAC,EAAE,UAAU,EAAE,CAAC,CAAA;QAE/E,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CAAA;QAEpD,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAA;QAEzF,KAAK,CAAC,MAAM,CACV,MAAM,CAAC,WAAW,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,EACpE,MAAM,CAAC,WAAW,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CACrE,CAAA;QAED,MAAM,EAAE,MAAM,EAAE,GAAG,YAAY,CAAC,UAAU,CACxC,GAAG,EAAE;YACH,WAAW,CAAC,GAAG,EAAE,CAAA;YAEjB,OAAO,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAE,CAAC,IAAI,CAAA;QACvC,CAAC,EACD,EAAE,OAAO,EAAE,CACZ,CAAA;QAED,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;QACvC,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QAC/B,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,WAAW,CAAC,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,eAAe,EAAE,CAAA;QAErF,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC,CAAA;QAE5F,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAA;QAC3C,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QAC/B,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,WAAW,CAAC,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,eAAe,EAAE,CAAA;QAErF,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAA;QAEtD,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;QACvC,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QAC/B,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,WAAW,CAAC,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,eAAe,EAAE,CAAA;IACvF,CAAC,CAAC,CACH,CAAA;IAED,iHAAiH;IACjH,2FAA2F;IAC3F,wGAAwG;IACxG,MAAM,CAAC,UAAU,CAAC,0CAA0C,EAAE,GAAG,EAAE,CACjE,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QAClB,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC,CAAC,gBAAgB,CAAC,EAAE,UAAU,EAAE,CAAC,CAAA;QAElE,MAAM,WAAW,GAAmC,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE;YACnE,OAAO,CACL,KAAC,WAAW,CAAC,aAAa,IACxB,MAAM,EAAE,GAAG,EACX,KAAK,EAAE,GAAG,EACV,QAAQ,EAAE,EAAE,EACZ,SAAS,EAAE,QAAQ,EACnB,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,YAEhE,QAAQ,GACiB,CAC7B,CAAA;QACH,CAAC,CAAA;QAED,MAAM,QAAQ,GAA6D,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE;YAClG,MAAM,EAAE,GAAG,GAAG,CAAC,KAAK,CAAE,CAAA;YACtB,MAAM,GAAG,GAAG,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,CAAA;YAC/F,4DAA4D;YAC5D,OAAO,cAAK,IAAI,EAAC,UAAU,YAAE,GAAG,GAAO,CAAA;QACzC,CAAC,CAAA;QAED,MAAM,YAAY,GAAG,YAAY,CAAC,MAAM,CAAC,KAAC,WAAW,IAAC,QAAQ,EAAE,CAAC,GAAI,EAAE,EAAE,OAAO,EAAE,CAAC,CAAA;QAEnF,MAAM,CAAC,YAAY,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QAEpD,YAAY,CAAC,QAAQ,CAAC,KAAC,WAAW,IAAC,QAAQ,EAAE,CAAC,GAAI,CAAC,CAAA;QAEnD,MAAM,CAAC,YAAY,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACvD,CAAC,CAAC,CACH,CAAA;IAED,MAAM,CAAC,UAAU,CAAC,yBAAyB,EAAE,GAAG,EAAE,CAChD,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QAClB,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC,CAAC,gBAAgB,CAAC,EAAE,UAAU,EAAE,CAAC,CAAA;QAClE,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,CAAA;QAEtB,MAAM,EAAE,MAAM,EAAE,GAAG,YAAY,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,OAAO,EAAE,CAAC,CAAA;QAEnF,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QAE9B,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAA;QAEhD,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IAChC,CAAC,CAAC,CACH,CAAA;AACH,CAAC,CACF,CAAA"}
@@ -0,0 +1,76 @@
1
+ /**
2
+ * Creates a reference-counted resource object that is "stable" across React lifecycles.
3
+ *
4
+ * The hook is primarily intended for creating stateful objects or entities where:
5
+ * 1) reference identity is crucial (e.g. stateful objects, references, ...)
6
+ * and needed to persist across multiple component instances
7
+ * 2) the `create`/`dispose` functions might be effectful and can be called exactly once per key
8
+ *
9
+ * **Goals:**
10
+ * - Guarantee stable reference identity for stateful entities that are created via the `create` function.
11
+ * - Strong guarantees about the `create`/`dispose` calls (i.e. exactly one `create`/`dispose` call per key)
12
+ * - Ensure that such state is retained across component re-mounts, even in development environments like
13
+ * React Strict Mode or during Fast Refresh.
14
+ * - Automatically handle resource disposal by decrementing a reference count and disposing of the resource
15
+ * when no components are using it.
16
+ *
17
+ * **Behavior:**
18
+ * - On the first render with a specific key, the `create` function is invoked to create the stateful entity,
19
+ * and the resource is stored in a cache with a reference count set to 1.
20
+ * - If another component renders with the same key, the cached entity is reused and its reference count is incremented.
21
+ * - When a component renders with a new key, the previous key's reference count is decremented and, if it reaches zero,
22
+ * the `dispose` function is called for that resource.
23
+ * - Upon component unmount, the reference count is decremented, leading to disposal (via the `dispose` function)
24
+ * if the reference count drops to zero. An unmount is either detected via React's `useEffect` callback or
25
+ * in the useMemo hook when the key changes.
26
+ *
27
+ * Why this is needed in LiveStore:
28
+ * Let's first take a look at the "trivial implementation":
29
+ *
30
+ * ```ts
31
+ * const useSimpleResource = <T>(create: () => T, dispose: (resource: T) => void) => {
32
+ * const val = React.useMemo(() => create(), [create])
33
+ *
34
+ * React.useEffect(() => {
35
+ * return () => {
36
+ * dispose(val)
37
+ * }
38
+ * }, [dispose, val])
39
+
40
+ * return val
41
+ * }
42
+ * ```
43
+ *
44
+ * LiveStore uses this hook to create LiveQuery instances which are stateful and must not be leaked.
45
+ * The simple implementation above would leak the LiveQuery instance if the component is unmounted or props change.
46
+ *
47
+ * **Usage:**
48
+ * ```tsx
49
+ * // Create a stateful object instance for a unique key and share it between components.
50
+ * const statefulObject = useRcResource(
51
+ * 'stable-object-key',
52
+ * () => createObjectInstance(),
53
+ * (object) => object.dispose()
54
+ * );
55
+ * ```
56
+ *
57
+ * **Caveats:**
58
+ * - The `create` function is intentionally omitted from the dependency array in `useMemo` to prevent
59
+ * unintended re-creations of the stateful entity. Avoid closing over changing values within `create`
60
+ * or include them in the `key`.
61
+ * - Ensure that the `dispose` function is stable or properly memoized as its reference is used in a `useEffect`.
62
+ * - Although the caching mechanism prevents duplicate instance creation for the same key, the strategy
63
+ * can interact in unexpected ways with React’s development patterns. Please report any issues if encountered.
64
+ *
65
+ * @template T The type of the stateful entity managed by the hook.
66
+ * @param key A unique identifier for the stateful entity. A change in this key triggers a disposal of the previous resource.
67
+ * @param create Function to create the stateful entity when it does not exist in the cache.
68
+ * @param dispose Function to dispose of the stateful entity when it’s no longer needed. Needs to be stable.
69
+ * @param _options Optional. Additional options such as a debug print callback for logging purposes.
70
+ * @returns The stateful entity corresponding to the provided key.
71
+ */
72
+ export declare const useRcResource: <T>(key: string, create: () => T, dispose: (resource: NoInfer<T>) => void, _options?: {
73
+ debugPrint?: (resource: NoInfer<T>) => ReadonlyArray<any>;
74
+ }) => T;
75
+ export declare const __resetUseRcResourceCache: () => void;
76
+ //# sourceMappingURL=useRcResource.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useRcResource.d.ts","sourceRoot":"","sources":["../src/useRcResource.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsEG;AACH,eAAO,MAAM,aAAa,GAAI,CAAC,EAC7B,KAAK,MAAM,EACX,QAAQ,MAAM,CAAC,EACf,SAAS,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,KAAK,IAAI,EACvC,WAAW;IAAE,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,KAAK,aAAa,CAAC,GAAG,CAAC,CAAA;CAAE,KACvE,CAmFF,CAAA;AAkBD,eAAO,MAAM,yBAAyB,YAErC,CAAA"}