@livestore/livestore 0.0.46-dev.4 → 0.0.47-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.
- package/README.md +10 -0
- package/dist/.tsbuildinfo +1 -1
- package/dist/__tests__/react/fixture.d.ts +28 -12
- package/dist/__tests__/react/fixture.d.ts.map +1 -1
- package/dist/__tests__/react/fixture.js +27 -3
- package/dist/__tests__/react/fixture.js.map +1 -1
- package/dist/__tests__/react/utils/otel.d.ts +10 -0
- package/dist/__tests__/react/utils/otel.d.ts.map +1 -0
- package/dist/__tests__/react/utils/otel.js +42 -0
- package/dist/__tests__/react/utils/otel.js.map +1 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/react/LiveStoreProvider.js +39 -6
- package/dist/react/LiveStoreProvider.js.map +1 -1
- package/dist/react/LiveStoreProvider.test.d.ts +2 -0
- package/dist/react/LiveStoreProvider.test.d.ts.map +1 -0
- package/dist/react/LiveStoreProvider.test.js +40 -0
- package/dist/react/LiveStoreProvider.test.js.map +1 -0
- package/dist/react/components/LiveList.d.ts +21 -0
- package/dist/react/components/LiveList.d.ts.map +1 -0
- package/dist/react/components/LiveList.js +31 -0
- package/dist/react/components/LiveList.js.map +1 -0
- package/dist/react/index.d.ts +1 -1
- package/dist/react/index.d.ts.map +1 -1
- package/dist/react/index.js +1 -1
- package/dist/react/index.js.map +1 -1
- package/dist/react/useAtom.d.ts +1 -1
- package/dist/react/useAtom.d.ts.map +1 -1
- package/dist/react/useAtom.js +6 -1
- package/dist/react/useAtom.js.map +1 -1
- package/dist/react/useQuery.d.ts +4 -1
- package/dist/react/useQuery.d.ts.map +1 -1
- package/dist/react/useQuery.js +24 -19
- package/dist/react/useQuery.js.map +1 -1
- package/dist/react/useQuery.test.js +11 -11
- package/dist/react/useQuery.test.js.map +1 -1
- package/dist/react/useRow.d.ts.map +1 -1
- package/dist/react/useRow.js +14 -69
- package/dist/react/useRow.js.map +1 -1
- package/dist/react/useRow.test.js +440 -28
- package/dist/react/useRow.test.js.map +1 -1
- package/dist/react/useTemporaryQuery.d.ts +15 -3
- package/dist/react/useTemporaryQuery.d.ts.map +1 -1
- package/dist/react/useTemporaryQuery.js +60 -27
- package/dist/react/useTemporaryQuery.js.map +1 -1
- package/dist/react/useTemporaryQuery.test.js +10 -9
- package/dist/react/useTemporaryQuery.test.js.map +1 -1
- package/dist/reactive.d.ts +23 -5
- package/dist/reactive.d.ts.map +1 -1
- package/dist/reactive.js +44 -11
- package/dist/reactive.js.map +1 -1
- package/dist/reactive.test.js +1 -1
- package/dist/reactive.test.js.map +1 -1
- package/dist/reactiveQueries/base-class.d.ts +1 -1
- package/dist/reactiveQueries/base-class.d.ts.map +1 -1
- package/dist/reactiveQueries/base-class.js.map +1 -1
- package/dist/reactiveQueries/graphql.d.ts +2 -2
- package/dist/reactiveQueries/graphql.d.ts.map +1 -1
- package/dist/reactiveQueries/graphql.js +21 -11
- package/dist/reactiveQueries/graphql.js.map +1 -1
- package/dist/reactiveQueries/sql.d.ts +1 -1
- package/dist/reactiveQueries/sql.d.ts.map +1 -1
- package/dist/reactiveQueries/sql.js +15 -11
- package/dist/reactiveQueries/sql.js.map +1 -1
- package/dist/reactiveQueries/sql.test.js +1 -40
- package/dist/reactiveQueries/sql.test.js.map +1 -1
- package/dist/row-query.d.ts.map +1 -1
- package/dist/row-query.js +3 -1
- package/dist/row-query.js.map +1 -1
- package/dist/store.d.ts +7 -5
- package/dist/store.d.ts.map +1 -1
- package/dist/store.js +50 -38
- package/dist/store.js.map +1 -1
- package/package.json +11 -13
- package/src/__tests__/react/fixture.tsx +35 -2
- package/src/__tests__/react/utils/otel.ts +61 -0
- package/src/index.ts +12 -1
- package/src/react/LiveStoreProvider.test.tsx +63 -0
- package/src/react/LiveStoreProvider.tsx +42 -7
- package/src/react/components/LiveList.tsx +84 -0
- package/src/react/index.ts +1 -1
- package/src/react/useAtom.ts +6 -2
- package/src/react/useQuery.test.tsx +11 -11
- package/src/react/useQuery.ts +29 -22
- package/src/react/useRow.test.tsx +502 -30
- package/src/react/useRow.ts +19 -107
- package/src/react/useTemporaryQuery.test.tsx +17 -16
- package/src/react/useTemporaryQuery.ts +96 -28
- package/src/reactive.test.ts +1 -1
- package/src/reactive.ts +76 -15
- package/src/reactiveQueries/base-class.ts +2 -1
- package/src/reactiveQueries/graphql.ts +26 -16
- package/src/reactiveQueries/sql.test.ts +1 -54
- package/src/reactiveQueries/sql.ts +20 -14
- package/src/row-query.ts +3 -1
- package/src/store.ts +71 -49
- package/tsconfig.json +0 -1
- package/dist/react/components/DiffableList.d.ts +0 -20
- package/dist/react/components/DiffableList.d.ts.map +0 -1
- package/dist/react/components/DiffableList.js +0 -113
- package/dist/react/components/DiffableList.js.map +0 -1
- package/dist/react/utils/useCleanup.d.ts +0 -7
- package/dist/react/utils/useCleanup.d.ts.map +0 -1
- package/dist/react/utils/useCleanup.js +0 -19
- package/dist/react/utils/useCleanup.js.map +0 -1
- package/src/react/components/DiffableList.tsx +0 -192
- package/src/react/utils/useCleanup.ts +0 -25
|
@@ -19,7 +19,7 @@ export declare const todos: DbSchema.TableDef<DbSchema.SqliteDsl.TableDefinition
|
|
|
19
19
|
default: import("effect/Option").None<never>;
|
|
20
20
|
nullable: false;
|
|
21
21
|
primaryKey: true;
|
|
22
|
-
}
|
|
22
|
+
};
|
|
23
23
|
text: {
|
|
24
24
|
columnType: "text";
|
|
25
25
|
schema: __Schema.Schema<string, string, never>;
|
|
@@ -54,7 +54,7 @@ export declare const app: DbSchema.TableDef<DbSchema.SqliteDsl.TableDefinition<"
|
|
|
54
54
|
default: import("effect/Option").None<never>;
|
|
55
55
|
nullable: false;
|
|
56
56
|
primaryKey: true;
|
|
57
|
-
}
|
|
57
|
+
};
|
|
58
58
|
newTodoText: {
|
|
59
59
|
columnType: "text";
|
|
60
60
|
schema: __Schema.Schema<string | null, string | null, never>;
|
|
@@ -90,7 +90,7 @@ export declare const tables: {
|
|
|
90
90
|
default: import("effect/Option").None<never>;
|
|
91
91
|
nullable: false;
|
|
92
92
|
primaryKey: true;
|
|
93
|
-
}
|
|
93
|
+
};
|
|
94
94
|
text: {
|
|
95
95
|
columnType: "text";
|
|
96
96
|
schema: __Schema.Schema<string, string, never>;
|
|
@@ -125,7 +125,7 @@ export declare const tables: {
|
|
|
125
125
|
default: import("effect/Option").None<never>;
|
|
126
126
|
nullable: false;
|
|
127
127
|
primaryKey: true;
|
|
128
|
-
}
|
|
128
|
+
};
|
|
129
129
|
newTodoText: {
|
|
130
130
|
columnType: "text";
|
|
131
131
|
schema: __Schema.Schema<string | null, string | null, never>;
|
|
@@ -162,7 +162,7 @@ export declare const schema: import("@livestore/common/dist/schema/index.js").Li
|
|
|
162
162
|
default: import("effect/Option").None<never>;
|
|
163
163
|
nullable: false;
|
|
164
164
|
primaryKey: true;
|
|
165
|
-
}
|
|
165
|
+
};
|
|
166
166
|
text: {
|
|
167
167
|
columnType: "text";
|
|
168
168
|
schema: __Schema.Schema<string, string, never>;
|
|
@@ -185,7 +185,7 @@ export declare const schema: import("@livestore/common/dist/schema/index.js").Li
|
|
|
185
185
|
default: import("effect/Option").None<never>;
|
|
186
186
|
nullable: false;
|
|
187
187
|
primaryKey: true;
|
|
188
|
-
}
|
|
188
|
+
};
|
|
189
189
|
newTodoText: {
|
|
190
190
|
columnType: "text";
|
|
191
191
|
schema: __Schema.Schema<string | null, string | null, never>;
|
|
@@ -204,14 +204,16 @@ export declare const schema: import("@livestore/common/dist/schema/index.js").Li
|
|
|
204
204
|
}, never>;
|
|
205
205
|
export declare const parseTodos: (rawRows: readonly any[]) => readonly {
|
|
206
206
|
text: string;
|
|
207
|
-
completed: boolean;
|
|
208
207
|
id: string;
|
|
208
|
+
completed: boolean;
|
|
209
209
|
}[];
|
|
210
|
-
export declare const makeTodoMvc: ({ otelTracer, otelContext, useGlobalDbGraph, }?: {
|
|
210
|
+
export declare const makeTodoMvc: ({ otelTracer, otelContext, useGlobalDbGraph, strictMode, }?: {
|
|
211
211
|
otelTracer?: otel.Tracer | undefined;
|
|
212
212
|
otelContext?: otel.Context | undefined;
|
|
213
213
|
useGlobalDbGraph?: boolean | undefined;
|
|
214
|
+
strictMode?: boolean | undefined;
|
|
214
215
|
}) => Promise<{
|
|
216
|
+
[Symbol.dispose]: () => Promise<void>;
|
|
215
217
|
wrapper: ({ children }: any) => React.JSX.Element;
|
|
216
218
|
AppComponentSchema: DbSchema.TableDef<DbSchema.SqliteDsl.TableDefinition<"UserInfo", {
|
|
217
219
|
username: {
|
|
@@ -221,6 +223,13 @@ export declare const makeTodoMvc: ({ otelTracer, otelContext, useGlobalDbGraph,
|
|
|
221
223
|
nullable: false;
|
|
222
224
|
primaryKey: false;
|
|
223
225
|
};
|
|
226
|
+
text: {
|
|
227
|
+
columnType: "text";
|
|
228
|
+
schema: __Schema.Schema<string, string, never>;
|
|
229
|
+
default: import("effect/Option").Some<"">;
|
|
230
|
+
nullable: false;
|
|
231
|
+
primaryKey: false;
|
|
232
|
+
};
|
|
224
233
|
id: DbSchema.SqliteDsl.ColumnDefinition<string, string>;
|
|
225
234
|
}>, false, {
|
|
226
235
|
isSingleton: false;
|
|
@@ -228,9 +237,11 @@ export declare const makeTodoMvc: ({ otelTracer, otelContext, useGlobalDbGraph,
|
|
|
228
237
|
disableAutomaticIdColumn: false;
|
|
229
238
|
}, __Schema.Schema<{
|
|
230
239
|
readonly username: string;
|
|
240
|
+
readonly text: string;
|
|
231
241
|
readonly id: string;
|
|
232
242
|
}, {
|
|
233
243
|
readonly username: string;
|
|
244
|
+
readonly text: string;
|
|
234
245
|
readonly id: string;
|
|
235
246
|
}, never>>;
|
|
236
247
|
store: import("@livestore/livestore/src/store.js").Store<import("@livestore/livestore/src/store.js").BaseGraphQLContext, import("@livestore/common/dist/schema/index.js").LiveStoreSchema<{
|
|
@@ -241,7 +252,7 @@ export declare const makeTodoMvc: ({ otelTracer, otelContext, useGlobalDbGraph,
|
|
|
241
252
|
default: import("effect/Option").None<never>;
|
|
242
253
|
nullable: false;
|
|
243
254
|
primaryKey: true;
|
|
244
|
-
}
|
|
255
|
+
};
|
|
245
256
|
text: {
|
|
246
257
|
columnType: "text";
|
|
247
258
|
schema: __Schema.Schema<string, string, never>;
|
|
@@ -264,7 +275,7 @@ export declare const makeTodoMvc: ({ otelTracer, otelContext, useGlobalDbGraph,
|
|
|
264
275
|
default: import("effect/Option").None<never>;
|
|
265
276
|
nullable: false;
|
|
266
277
|
primaryKey: true;
|
|
267
|
-
}
|
|
278
|
+
};
|
|
268
279
|
newTodoText: {
|
|
269
280
|
columnType: "text";
|
|
270
281
|
schema: __Schema.Schema<string | null, string | null, never>;
|
|
@@ -289,7 +300,7 @@ export declare const makeTodoMvc: ({ otelTracer, otelContext, useGlobalDbGraph,
|
|
|
289
300
|
default: import("effect/Option").None<never>;
|
|
290
301
|
nullable: false;
|
|
291
302
|
primaryKey: true;
|
|
292
|
-
}
|
|
303
|
+
};
|
|
293
304
|
text: {
|
|
294
305
|
columnType: "text";
|
|
295
306
|
schema: __Schema.Schema<string, string, never>;
|
|
@@ -323,7 +334,7 @@ export declare const makeTodoMvc: ({ otelTracer, otelContext, useGlobalDbGraph,
|
|
|
323
334
|
default: import("effect/Option").None<never>;
|
|
324
335
|
nullable: false;
|
|
325
336
|
primaryKey: true;
|
|
326
|
-
}
|
|
337
|
+
};
|
|
327
338
|
newTodoText: {
|
|
328
339
|
columnType: "text";
|
|
329
340
|
schema: __Schema.Schema<string | null, string | null, never>;
|
|
@@ -351,5 +362,10 @@ export declare const makeTodoMvc: ({ otelTracer, otelContext, useGlobalDbGraph,
|
|
|
351
362
|
readonly newTodoText: string | null;
|
|
352
363
|
readonly filter: string;
|
|
353
364
|
}, never>>>;
|
|
365
|
+
makeRenderCount: () => {
|
|
366
|
+
readonly val: number;
|
|
367
|
+
inc: () => void;
|
|
368
|
+
};
|
|
369
|
+
strictMode: boolean;
|
|
354
370
|
}>;
|
|
355
371
|
//# sourceMappingURL=fixture.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fixture.d.ts","sourceRoot":"","sources":["../../../src/__tests__/react/fixture.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,QAAQ,EAAE,MAAM,yBAAyB,CAAA;AAE5D,OAAO,KAAK,KAAK,IAAI,MAAM,oBAAoB,CAAA;AAC/C,OAAO,KAAK,MAAM,OAAO,CAAA;AAIzB,OAAO,EAAe,QAAQ,EAA8D,MAAM,gBAAgB,CAAA;AAGlH,MAAM,MAAM,IAAI,GAAG;IACjB,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,EAAE,OAAO,CAAA;CACnB,CAAA;AAED,MAAM,MAAM,MAAM,GAAG,KAAK,GAAG,QAAQ,GAAG,WAAW,CAAA;AAEnD,MAAM,MAAM,QAAQ,GAAG;IACrB,WAAW,EAAE,MAAM,CAAA;IACnB,MAAM,EAAE,MAAM,CAAA;CACf,CAAA;AAED,eAAO,MAAM,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;UAIhB,CAAA;AAEF,eAAO,MAAM,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;UAId,CAAA;AAEF,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAAiB,CAAA;AACpC,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;SAAyB,CAAA;AAE5C,eAAO,MAAM,UAAU;;;;GAAyB,CAAA;AAEhD,eAAO,MAAM,WAAW
|
|
1
|
+
{"version":3,"file":"fixture.d.ts","sourceRoot":"","sources":["../../../src/__tests__/react/fixture.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,QAAQ,EAAE,MAAM,yBAAyB,CAAA;AAE5D,OAAO,KAAK,KAAK,IAAI,MAAM,oBAAoB,CAAA;AAC/C,OAAO,KAAK,MAAM,OAAO,CAAA;AAIzB,OAAO,EAAe,QAAQ,EAA8D,MAAM,gBAAgB,CAAA;AAGlH,MAAM,MAAM,IAAI,GAAG;IACjB,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,EAAE,OAAO,CAAA;CACnB,CAAA;AAED,MAAM,MAAM,MAAM,GAAG,KAAK,GAAG,QAAQ,GAAG,WAAW,CAAA;AAEnD,MAAM,MAAM,QAAQ,GAAG;IACrB,WAAW,EAAE,MAAM,CAAA;IACnB,MAAM,EAAE,MAAM,CAAA;CACf,CAAA;AAED,eAAO,MAAM,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;UAIhB,CAAA;AAEF,eAAO,MAAM,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;UAId,CAAA;AAEF,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAAiB,CAAA;AACpC,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;SAAyB,CAAA;AAE5C,eAAO,MAAM,UAAU;;;;GAAyB,CAAA;AAEhD,eAAO,MAAM,WAAW;;;;;;;4BAiDS,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAkBnC,CAAA"}
|
|
@@ -16,11 +16,24 @@ export const app = DbSchema.table('app', {
|
|
|
16
16
|
export const tables = { todos, app };
|
|
17
17
|
export const schema = makeSchema({ tables });
|
|
18
18
|
export const parseTodos = ParseUtils.many(todos);
|
|
19
|
-
export const makeTodoMvc = async ({ otelTracer, otelContext, useGlobalDbGraph = true, } = {}) => {
|
|
19
|
+
export const makeTodoMvc = async ({ otelTracer, otelContext, useGlobalDbGraph = true, strictMode = process.env.REACT_STRICT_MODE !== undefined, } = {}) => {
|
|
20
20
|
const AppComponentSchema = DbSchema.table('UserInfo', {
|
|
21
21
|
username: DbSchema.text({ default: '' }),
|
|
22
|
+
text: DbSchema.text({ default: '' }),
|
|
22
23
|
});
|
|
23
24
|
const dbGraph = useGlobalDbGraph ? globalDbGraph : makeDbGraph();
|
|
25
|
+
const makeRenderCount = () => {
|
|
26
|
+
let val = 0;
|
|
27
|
+
const inc = () => {
|
|
28
|
+
val += strictMode ? 0.5 : 1;
|
|
29
|
+
};
|
|
30
|
+
return {
|
|
31
|
+
get val() {
|
|
32
|
+
return val;
|
|
33
|
+
},
|
|
34
|
+
inc,
|
|
35
|
+
};
|
|
36
|
+
};
|
|
24
37
|
const store = await createStore({
|
|
25
38
|
schema,
|
|
26
39
|
boot: (db) => db.execute(sql `INSERT OR IGNORE INTO app (id, newTodoText, filter) VALUES ('static', '', 'all');`),
|
|
@@ -32,7 +45,18 @@ export const makeTodoMvc = async ({ otelTracer, otelContext, useGlobalDbGraph =
|
|
|
32
45
|
const cud = makeCudMutations(tables);
|
|
33
46
|
// TODO improve typing of `LiveStoreContext`
|
|
34
47
|
const storeContext = { store };
|
|
35
|
-
const
|
|
36
|
-
|
|
48
|
+
const MaybeStrictMode = strictMode ? React.StrictMode : React.Fragment;
|
|
49
|
+
const wrapper = ({ children }) => (React.createElement(MaybeStrictMode, null,
|
|
50
|
+
React.createElement(LiveStoreReact.LiveStoreContext.Provider, { value: storeContext }, children)));
|
|
51
|
+
return {
|
|
52
|
+
[Symbol.dispose]: () => store.destroy(),
|
|
53
|
+
wrapper,
|
|
54
|
+
AppComponentSchema,
|
|
55
|
+
store,
|
|
56
|
+
dbGraph,
|
|
57
|
+
cud,
|
|
58
|
+
makeRenderCount,
|
|
59
|
+
strictMode,
|
|
60
|
+
};
|
|
37
61
|
};
|
|
38
62
|
//# sourceMappingURL=fixture.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fixture.js","sourceRoot":"","sources":["../../../src/__tests__/react/fixture.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AAEvC,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AAErD,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,gBAAgB,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAA;AAClH,OAAO,KAAK,cAAc,MAAM,sBAAsB,CAAA;AAetD,MAAM,CAAC,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,OAAO,EAAE;IAC3C,EAAE,EAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;IACvC,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;IACrD,SAAS,EAAE,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;CACjE,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,GAAG,GAAG,QAAQ,CAAC,KAAK,CAAC,KAAK,EAAE;IACvC,EAAE,EAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;IACvC,WAAW,EAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IAC3D,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;CAC3D,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,MAAM,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,CAAA;AACpC,MAAM,CAAC,MAAM,MAAM,GAAG,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC,CAAA;AAE5C,MAAM,CAAC,MAAM,UAAU,GAAG,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;AAEhD,MAAM,CAAC,MAAM,WAAW,GAAG,KAAK,EAAE,EAChC,UAAU,EACV,WAAW,EACX,gBAAgB,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"fixture.js","sourceRoot":"","sources":["../../../src/__tests__/react/fixture.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { Attributes } from '@opentelemetry/api';
|
|
2
|
+
import type { InMemorySpanExporter } from '@opentelemetry/sdk-trace-base';
|
|
3
|
+
type SimplifiedNestedSpan = {
|
|
4
|
+
_name: string;
|
|
5
|
+
attributes: any;
|
|
6
|
+
children: SimplifiedNestedSpan[];
|
|
7
|
+
};
|
|
8
|
+
export declare const getSimplifiedRootSpan: (exporter: InMemorySpanExporter, mapAttributes?: ((attributes: Attributes) => Attributes) | undefined) => SimplifiedNestedSpan;
|
|
9
|
+
export {};
|
|
10
|
+
//# sourceMappingURL=otel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"otel.d.ts","sourceRoot":"","sources":["../../../../src/__tests__/react/utils/otel.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AACpD,OAAO,KAAK,EAAE,oBAAoB,EAAgB,MAAM,+BAA+B,CAAA;AAEvF,KAAK,oBAAoB,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,GAAG,CAAC;IAAC,QAAQ,EAAE,oBAAoB,EAAE,CAAA;CAAE,CAAA;AAEhG,eAAO,MAAM,qBAAqB,aACtB,oBAAoB,gCACD,UAAU,KAAK,UAAU,sCAiCvD,CAAA"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { identity } from '@livestore/utils/effect';
|
|
2
|
+
export const getSimplifiedRootSpan = (exporter, mapAttributes) => {
|
|
3
|
+
const spans = exporter.getFinishedSpans();
|
|
4
|
+
const spansMap = new Map(spans.map((span) => [span.spanContext().spanId, { span, children: [] }]));
|
|
5
|
+
const mapAttributesfn = mapAttributes ?? identity;
|
|
6
|
+
spansMap.forEach((nestedSpan) => {
|
|
7
|
+
const parentSpan = nestedSpan.span.parentSpanId ? spansMap.get(nestedSpan.span.parentSpanId) : undefined;
|
|
8
|
+
if (parentSpan) {
|
|
9
|
+
parentSpan.children.push(nestedSpan);
|
|
10
|
+
}
|
|
11
|
+
});
|
|
12
|
+
const rootSpan = spansMap.get(spans.find((_) => _.name === 'test').spanContext().spanId);
|
|
13
|
+
const simplifySpan = (span) => omitEmpty({
|
|
14
|
+
_name: span.span.name,
|
|
15
|
+
attributes: mapAttributesfn(span.span.attributes),
|
|
16
|
+
children: span.children
|
|
17
|
+
.filter((_) => _.span.name !== 'createStore')
|
|
18
|
+
// .sort((a, b) => compareHrTime(a.span.startTime, b.span.startTime))
|
|
19
|
+
.map(simplifySpan),
|
|
20
|
+
});
|
|
21
|
+
// console.dir(
|
|
22
|
+
// spans.map((_) => [_.spanContext().spanId, _.name, _.attributes, _.parentSpanId]),
|
|
23
|
+
// { depth: 10 },
|
|
24
|
+
// )
|
|
25
|
+
return simplifySpan(rootSpan);
|
|
26
|
+
};
|
|
27
|
+
// const compareHrTime = (a: [number, number], b: [number, number]) => {
|
|
28
|
+
// if (a[0] !== b[0]) return a[0] - b[0]
|
|
29
|
+
// return a[1] - b[1]
|
|
30
|
+
// }
|
|
31
|
+
const omitEmpty = (obj) => {
|
|
32
|
+
const result = {};
|
|
33
|
+
for (const key in obj) {
|
|
34
|
+
if (obj[key] !== undefined &&
|
|
35
|
+
!(Array.isArray(obj[key]) && obj[key].length === 0) &&
|
|
36
|
+
Object.keys(obj[key]).length > 0) {
|
|
37
|
+
result[key] = obj[key];
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
return result;
|
|
41
|
+
};
|
|
42
|
+
//# sourceMappingURL=otel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"otel.js","sourceRoot":"","sources":["../../../../src/__tests__/react/utils/otel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAA;AAMlD,MAAM,CAAC,MAAM,qBAAqB,GAAG,CACnC,QAA8B,EAC9B,aAAsD,EACtD,EAAE;IACF,MAAM,KAAK,GAAG,QAAQ,CAAC,gBAAgB,EAAE,CAAA;IACzC,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAqB,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAA;IAEtH,MAAM,eAAe,GAAG,aAAa,IAAI,QAAQ,CAAA;IAEjD,QAAQ,CAAC,OAAO,CAAC,CAAC,UAAU,EAAE,EAAE;QAC9B,MAAM,UAAU,GAAG,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;QACxG,IAAI,UAAU,EAAE,CAAC;YACf,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;QACtC,CAAC;IACH,CAAC,CAAC,CAAA;IAGF,MAAM,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAE,CAAC,WAAW,EAAE,CAAC,MAAM,CAAE,CAAA;IAE1F,MAAM,YAAY,GAAG,CAAC,IAAgB,EAAwB,EAAE,CAC9D,SAAS,CAAC;QACR,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI;QACrB,UAAU,EAAE,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC;QACjD,QAAQ,EAAE,IAAI,CAAC,QAAQ;aACpB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,aAAa,CAAC;YAC7C,qEAAqE;aACpE,GAAG,CAAC,YAAY,CAAC;KACrB,CAAC,CAAA;IAEJ,eAAe;IACf,sFAAsF;IACtF,mBAAmB;IACnB,IAAI;IAEJ,OAAO,YAAY,CAAC,QAAQ,CAAC,CAAA;AAC/B,CAAC,CAAA;AAED,wEAAwE;AACxE,0CAA0C;AAC1C,uBAAuB;AACvB,IAAI;AAEJ,MAAM,SAAS,GAAG,CAAC,GAAQ,EAAE,EAAE;IAC7B,MAAM,MAAM,GAAQ,EAAE,CAAA;IACtB,KAAK,MAAM,GAAG,IAAI,GAAG,EAAE,CAAC;QACtB,IACE,GAAG,CAAC,GAAG,CAAC,KAAK,SAAS;YACtB,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC;YACnD,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,EAChC,CAAC;YACD,MAAM,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAA;QACxB,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAA;AACf,CAAC,CAAA"}
|
package/dist/index.d.ts
CHANGED
|
@@ -2,7 +2,7 @@ export { Store, createStore } from './store.js';
|
|
|
2
2
|
export type { BaseGraphQLContext, QueryDebugInfo, RefreshReason, BootDb } from './store.js';
|
|
3
3
|
export type { QueryDefinition, LiveStoreCreateStoreOptions, LiveStoreContext } from './effect/LiveStore.js';
|
|
4
4
|
export { MainDatabaseWrapper, type DebugInfo, emptyDebugInfo } from './MainDatabaseWrapper.js';
|
|
5
|
-
export type { GetAtom, AtomDebugInfo, RefreshDebugInfo, SerializedAtom, Atom, Node, Ref, Effect } from './reactive.js';
|
|
5
|
+
export type { GetAtom, AtomDebugInfo, RefreshDebugInfo, ReactiveGraphSnapshot, SerializedAtom, SerializedEffect, Atom, Node, Ref, Effect, } from './reactive.js';
|
|
6
6
|
export { LiveStoreJSQuery, computed } from './reactiveQueries/js.js';
|
|
7
7
|
export { LiveStoreSQLQuery, querySQL, type MapRows } from './reactiveQueries/sql.js';
|
|
8
8
|
export { LiveStoreGraphQLQuery, queryGraphQL } from './reactiveQueries/graphql.js';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAC/C,YAAY,EAAE,kBAAkB,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AAE3F,YAAY,EAAE,eAAe,EAAE,2BAA2B,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AAE3G,OAAO,EAAE,mBAAmB,EAAE,KAAK,SAAS,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAA;AAE9F,YAAY,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAC/C,YAAY,EAAE,kBAAkB,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AAE3F,YAAY,EAAE,eAAe,EAAE,2BAA2B,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AAE3G,OAAO,EAAE,mBAAmB,EAAE,KAAK,SAAS,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAA;AAE9F,YAAY,EACV,OAAO,EACP,aAAa,EACb,gBAAgB,EAChB,qBAAqB,EACrB,cAAc,EACd,gBAAgB,EAChB,IAAI,EACJ,IAAI,EACJ,GAAG,EACH,MAAM,GACP,MAAM,eAAe,CAAA;AACtB,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAA;AACpE,OAAO,EAAE,iBAAiB,EAAE,QAAQ,EAAE,KAAK,OAAO,EAAE,MAAM,0BAA0B,CAAA;AACpF,OAAO,EAAE,qBAAqB,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAA;AAClF,OAAO,EAAE,KAAK,aAAa,EAAE,KAAK,OAAO,EAAE,WAAW,EAAE,KAAK,SAAS,EAAE,MAAM,iCAAiC,CAAA;AAE/G,OAAO,EAAE,aAAa,EAAE,2BAA2B,EAAE,MAAM,mBAAmB,CAAA;AAE9E,OAAO,EAAE,KAAK,SAAS,EAAE,KAAK,gBAAgB,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAEhG,cAAc,UAAU,CAAA;AAExB,cAAc,0BAA0B,CAAA;AACxC,OAAO,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAA;AAEvC,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAEvD,OAAO,EAAE,iBAAiB,EAAE,KAAK,QAAQ,EAAE,KAAK,kBAAkB,EAAE,MAAM,iBAAiB,CAAA;AAC3F,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAEnC,YAAY,EAAE,YAAY,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA"}
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAK/C,OAAO,EAAE,mBAAmB,EAAkB,cAAc,EAAE,MAAM,0BAA0B,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAK/C,OAAO,EAAE,mBAAmB,EAAkB,cAAc,EAAE,MAAM,0BAA0B,CAAA;AAc9F,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAA;AACpE,OAAO,EAAE,iBAAiB,EAAE,QAAQ,EAAgB,MAAM,0BAA0B,CAAA;AACpF,OAAO,EAAE,qBAAqB,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAA;AAClF,OAAO,EAAoC,WAAW,EAAkB,MAAM,iCAAiC,CAAA;AAE/G,OAAO,EAAE,aAAa,EAAE,2BAA2B,EAAE,MAAM,mBAAmB,CAAA;AAE9E,OAAO,EAAyC,QAAQ,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAEhG,cAAc,UAAU,CAAA;AAExB,cAAc,0BAA0B,CAAA;AACxC,OAAO,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAA;AAEvC,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAEvD,OAAO,EAAE,iBAAiB,EAA0C,MAAM,iBAAiB,CAAA;AAC3F,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA"}
|
|
@@ -19,11 +19,40 @@ export const LiveStoreProvider = ({ fallback, graphQLOptions, otelTracer, otelRo
|
|
|
19
19
|
return React.createElement(LiveStoreContext.Provider, { value: storeCtx }, children);
|
|
20
20
|
};
|
|
21
21
|
const useCreateStore = ({ schema, graphQLOptions, otelTracer, otelRootSpanContext, boot, makeDb, batchUpdates, }) => {
|
|
22
|
-
const [
|
|
22
|
+
const [_, rerender] = React.useState(0);
|
|
23
|
+
const ctxValueRef = React.useRef(undefined);
|
|
24
|
+
const inputPropsCacheRef = React.useRef({
|
|
25
|
+
schema,
|
|
26
|
+
graphQLOptions,
|
|
27
|
+
otelTracer,
|
|
28
|
+
otelRootSpanContext,
|
|
29
|
+
boot,
|
|
30
|
+
makeDb,
|
|
31
|
+
batchUpdates,
|
|
32
|
+
});
|
|
33
|
+
const oldStoreAlreadyDestroyedRef = React.useRef(false);
|
|
34
|
+
if (inputPropsCacheRef.current.schema !== schema ||
|
|
35
|
+
inputPropsCacheRef.current.graphQLOptions !== graphQLOptions ||
|
|
36
|
+
inputPropsCacheRef.current.otelTracer !== otelTracer ||
|
|
37
|
+
inputPropsCacheRef.current.otelRootSpanContext !== otelRootSpanContext ||
|
|
38
|
+
inputPropsCacheRef.current.boot !== boot ||
|
|
39
|
+
inputPropsCacheRef.current.makeDb !== makeDb ||
|
|
40
|
+
inputPropsCacheRef.current.batchUpdates !== batchUpdates) {
|
|
41
|
+
inputPropsCacheRef.current = {
|
|
42
|
+
schema,
|
|
43
|
+
graphQLOptions,
|
|
44
|
+
otelTracer,
|
|
45
|
+
otelRootSpanContext,
|
|
46
|
+
boot,
|
|
47
|
+
makeDb,
|
|
48
|
+
batchUpdates,
|
|
49
|
+
};
|
|
50
|
+
ctxValueRef.current?.store.destroy();
|
|
51
|
+
oldStoreAlreadyDestroyedRef.current = true;
|
|
52
|
+
ctxValueRef.current = undefined;
|
|
53
|
+
}
|
|
23
54
|
React.useEffect(() => {
|
|
24
55
|
let store;
|
|
25
|
-
// resetting the store context while we're creating a new store
|
|
26
|
-
setCtxValue(undefined);
|
|
27
56
|
void (async () => {
|
|
28
57
|
try {
|
|
29
58
|
store = await createStore({
|
|
@@ -35,16 +64,20 @@ const useCreateStore = ({ schema, graphQLOptions, otelTracer, otelRootSpanContex
|
|
|
35
64
|
makeDb,
|
|
36
65
|
batchUpdates,
|
|
37
66
|
});
|
|
38
|
-
|
|
67
|
+
ctxValueRef.current = { store };
|
|
68
|
+
oldStoreAlreadyDestroyedRef.current = false;
|
|
69
|
+
rerender((c) => c + 1);
|
|
39
70
|
}
|
|
40
71
|
catch (e) {
|
|
41
72
|
shouldNeverHappen(`Error creating LiveStore store: ${e}`);
|
|
42
73
|
}
|
|
43
74
|
})();
|
|
44
75
|
return () => {
|
|
45
|
-
|
|
76
|
+
if (oldStoreAlreadyDestroyedRef.current === false) {
|
|
77
|
+
store?.destroy();
|
|
78
|
+
}
|
|
46
79
|
};
|
|
47
80
|
}, [schema, graphQLOptions, otelTracer, otelRootSpanContext, boot, makeDb, batchUpdates]);
|
|
48
|
-
return
|
|
81
|
+
return ctxValueRef.current;
|
|
49
82
|
};
|
|
50
83
|
//# sourceMappingURL=LiveStoreProvider.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LiveStoreProvider.js","sourceRoot":"","sources":["../../src/react/LiveStoreProvider.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AAGpD,OAAO,KAAK,MAAM,OAAO,CAAA;AAKzB,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AACzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AAaxD,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAA4C,EAC3E,QAAQ,EACR,cAAc,EACd,UAAU,EACV,mBAAmB,EACnB,QAAQ,EACR,MAAM,EACN,IAAI,EACJ,MAAM,EACN,YAAY,GACsD,EAAe,EAAE;IACnF,MAAM,QAAQ,GAAG,cAAc,CAAC;QAC9B,MAAM;QACN,cAAc;QACd,UAAU;QACV,mBAAmB;QACnB,IAAI;QACJ,MAAM;QACN,YAAY;KACb,CAAC,CAAA;IAEF,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,OAAO,QAAQ,CAAA;IACjB,CAAC;IAED,MAAM,CAAC,gBAAgB,GAAG,QAAQ,CAAC,KAAK,CAAA;IAExC,OAAO,oBAAC,gBAAgB,CAAC,QAAQ,IAAC,KAAK,EAAE,QAAQ,IAAG,QAAQ,CAA6B,CAAA;AAC3F,CAAC,CAAA;AAED,MAAM,cAAc,GAAG,CAA4C,EACjE,MAAM,EACN,cAAc,EACd,UAAU,EACV,mBAAmB,EACnB,IAAI,EACJ,MAAM,EACN,YAAY,GACgC,EAAE,EAAE;IAChD,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"LiveStoreProvider.js","sourceRoot":"","sources":["../../src/react/LiveStoreProvider.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LiveStoreProvider.test.d.ts","sourceRoot":"","sources":["../../src/react/LiveStoreProvider.test.tsx"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { sql } from '@livestore/common';
|
|
2
|
+
import { makeDb } from '@livestore/web';
|
|
3
|
+
import { InMemoryStorage } from '@livestore/web/storage/in-memory';
|
|
4
|
+
import { render, screen, waitFor, waitForElementToBeRemoved } from '@testing-library/react';
|
|
5
|
+
import React from 'react';
|
|
6
|
+
import { describe, expect, it } from 'vitest';
|
|
7
|
+
import { parseTodos, schema } from '../__tests__/react/fixture.js';
|
|
8
|
+
import { querySQL } from '../reactiveQueries/sql.js';
|
|
9
|
+
import * as LiveStoreReact from './index.js';
|
|
10
|
+
import { LiveStoreProvider } from './LiveStoreProvider.js';
|
|
11
|
+
describe('LiveStoreProvider', () => {
|
|
12
|
+
it('simple', async () => {
|
|
13
|
+
let renderCount = 0;
|
|
14
|
+
const allTodos$ = querySQL(`select * from todos`, { map: parseTodos });
|
|
15
|
+
let latestStoreCtx = undefined;
|
|
16
|
+
const App = () => {
|
|
17
|
+
renderCount++;
|
|
18
|
+
latestStoreCtx = LiveStoreReact.useStore();
|
|
19
|
+
const todos = LiveStoreReact.useQuery(allTodos$);
|
|
20
|
+
return React.createElement("div", null, JSON.stringify(todos));
|
|
21
|
+
};
|
|
22
|
+
const Root = ({ forceUpdate }) => {
|
|
23
|
+
const bootCb = React.useCallback((db) => db.execute(sql `INSERT OR IGNORE INTO todos (id, text, completed) VALUES ('t1', 'buy milk', 0);`), []);
|
|
24
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
25
|
+
const makeDbMemo = React.useMemo(() => makeDb(() => InMemoryStorage.load()), [forceUpdate]);
|
|
26
|
+
return (React.createElement(LiveStoreProvider, { schema: schema, fallback: React.createElement("div", null, "Loading LiveStore"), makeDb: makeDbMemo, boot: bootCb },
|
|
27
|
+
React.createElement(App, null)));
|
|
28
|
+
};
|
|
29
|
+
const { rerender } = render(React.createElement(Root, { forceUpdate: 1 }));
|
|
30
|
+
expect(renderCount).toBe(0);
|
|
31
|
+
await waitForElementToBeRemoved(() => screen.getByText('Loading LiveStore'));
|
|
32
|
+
expect(renderCount).toBe(1);
|
|
33
|
+
rerender(React.createElement(Root, { forceUpdate: 2 }));
|
|
34
|
+
await waitFor(() => screen.getByText('Loading LiveStore'));
|
|
35
|
+
await waitForElementToBeRemoved(() => screen.getByText('Loading LiveStore'));
|
|
36
|
+
expect(renderCount).toBe(2);
|
|
37
|
+
await latestStoreCtx.store.destroy();
|
|
38
|
+
});
|
|
39
|
+
});
|
|
40
|
+
//# sourceMappingURL=LiveStoreProvider.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LiveStoreProvider.test.js","sourceRoot":"","sources":["../../src/react/LiveStoreProvider.test.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { LiveQuery } from '../../reactiveQueries/base-class.js';
|
|
3
|
+
export type LiveListProps<TItem> = {
|
|
4
|
+
items$: LiveQuery<ReadonlyArray<TItem>>;
|
|
5
|
+
renderItem: (item: TItem, opts: {
|
|
6
|
+
index: number;
|
|
7
|
+
isInitialListRender: boolean;
|
|
8
|
+
}) => React.ReactNode;
|
|
9
|
+
/** Needs to be unique across all list items */
|
|
10
|
+
getKey: (item: TItem, index: number) => string | number;
|
|
11
|
+
};
|
|
12
|
+
/**
|
|
13
|
+
* This component is a helper component for rendering a list of items for a LiveQuery of an array of items.
|
|
14
|
+
* The idea is that instead of letting React handle the rendering of the items array directly,
|
|
15
|
+
* we derive a item LiveQuery for each item which moves the reactivity to the item level when a single item changes.
|
|
16
|
+
*
|
|
17
|
+
* In the future we want to make this component even more efficient by using incremental rendering (https://github.com/livestorejs/livestore/pull/55)
|
|
18
|
+
* e.g. when an item is added/removed/moved to only re-render the affected DOM nodes.
|
|
19
|
+
*/
|
|
20
|
+
export declare const LiveList: <TItem>({ items$, renderItem, getKey }: LiveListProps<TItem>) => React.ReactNode;
|
|
21
|
+
//# sourceMappingURL=LiveList.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LiveList.d.ts","sourceRoot":"","sources":["../../../src/react/components/LiveList.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qCAAqC,CAAA;AAWpE,MAAM,MAAM,aAAa,CAAC,KAAK,IAAI;IACjC,MAAM,EAAE,SAAS,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAA;IAEvC,UAAU,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,mBAAmB,EAAE,OAAO,CAAA;KAAE,KAAK,KAAK,CAAC,SAAS,CAAA;IACnG,+CAA+C;IAC/C,MAAM,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,KAAK,MAAM,GAAG,MAAM,CAAA;CACxD,CAAA;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,QAAQ,0CAA4C,cAAc,KAAK,CAAC,KAAG,MAAM,SA8B7F,CAAA"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { computed } from '../../reactiveQueries/js.js';
|
|
3
|
+
import { useQuery } from '../useQuery.js';
|
|
4
|
+
import { useTemporaryQuery } from '../useTemporaryQuery.js';
|
|
5
|
+
/**
|
|
6
|
+
* This component is a helper component for rendering a list of items for a LiveQuery of an array of items.
|
|
7
|
+
* The idea is that instead of letting React handle the rendering of the items array directly,
|
|
8
|
+
* we derive a item LiveQuery for each item which moves the reactivity to the item level when a single item changes.
|
|
9
|
+
*
|
|
10
|
+
* In the future we want to make this component even more efficient by using incremental rendering (https://github.com/livestorejs/livestore/pull/55)
|
|
11
|
+
* e.g. when an item is added/removed/moved to only re-render the affected DOM nodes.
|
|
12
|
+
*/
|
|
13
|
+
export const LiveList = ({ items$, renderItem, getKey }) => {
|
|
14
|
+
const [hasMounted, setHasMounted] = React.useState(false);
|
|
15
|
+
React.useEffect(() => setHasMounted(true), []);
|
|
16
|
+
const keysCb = React.useCallback(() => computed((get) => get(items$).map(getKey)), [getKey, items$]);
|
|
17
|
+
const keys = useTemporaryQuery(keysCb, 'fixed');
|
|
18
|
+
const arr = React.useMemo(() => keys.map((key) =>
|
|
19
|
+
// TODO figure out a way so that `item$` returns an ordered lookup map to more efficiently find the item by key
|
|
20
|
+
[key, computed((get) => get(items$).find((item) => getKey(item, 0) === key))]), [getKey, items$, keys]);
|
|
21
|
+
return (React.createElement(React.Fragment, null, arr.map(([key, item$], index) => (React.createElement(ItemWrapperMemo, { key: key, itemKey: key, "item$": item$, opts: { isInitialListRender: !hasMounted, index }, renderItem: renderItem })))));
|
|
22
|
+
};
|
|
23
|
+
const ItemWrapper = ({ item$, opts, renderItem, }) => {
|
|
24
|
+
const item = useQuery(item$);
|
|
25
|
+
return React.createElement(React.Fragment, null, renderItem(item, opts));
|
|
26
|
+
};
|
|
27
|
+
const ItemWrapperMemo = React.memo(ItemWrapper, (prev, next) => prev.itemKey === next.itemKey &&
|
|
28
|
+
prev.renderItem === prev.renderItem &&
|
|
29
|
+
prev.opts.index === next.opts.index &&
|
|
30
|
+
prev.opts.isInitialListRender === next.opts.isInitialListRender);
|
|
31
|
+
//# sourceMappingURL=LiveList.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LiveList.js","sourceRoot":"","sources":["../../../src/react/components/LiveList.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAGzB,OAAO,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAA;AACtD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AACzC,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAA;AAgB3D;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAwB,EAAmB,EAAE;IACxG,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;IAEzD,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAA;IAE9C,MAAM,MAAM,GAAG,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;IACpG,MAAM,IAAI,GAAG,iBAAiB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC/C,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CACvB,GAAG,EAAE,CACH,IAAI,CAAC,GAAG,CACN,CAAC,GAAG,EAAE,EAAE;IACN,+GAA+G;IAC/G,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,GAAG,CAAE,CAAqB,CAAU,CAC9G,EACH,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,CACvB,CAAA;IAED,OAAO,CACL,0CACG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,CAChC,oBAAC,eAAe,IACd,GAAG,EAAE,GAAG,EACR,OAAO,EAAE,GAAG,WACL,KAAK,EACZ,IAAI,EAAE,EAAE,mBAAmB,EAAE,CAAC,UAAU,EAAE,KAAK,EAAE,EACjD,UAAU,EAAE,UAAU,GACtB,CACH,CAAC,CACD,CACJ,CAAA;AACH,CAAC,CAAA;AAED,MAAM,WAAW,GAAG,CAAS,EAC3B,KAAK,EACL,IAAI,EACJ,UAAU,GAMX,EAAE,EAAE;IACH,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IAE5B,OAAO,0CAAG,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,CAAI,CAAA;AACtC,CAAC,CAAA;AAED,MAAM,eAAe,GAAG,KAAK,CAAC,IAAI,CAChC,WAAW,EACX,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CACb,IAAI,CAAC,OAAO,KAAK,IAAI,CAAC,OAAO;IAC7B,IAAI,CAAC,UAAU,KAAK,IAAI,CAAC,UAAU;IACnC,IAAI,CAAC,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,IAAI,CAAC,KAAK;IACnC,IAAI,CAAC,IAAI,CAAC,mBAAmB,KAAK,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAC5C,CAAA"}
|
package/dist/react/index.d.ts
CHANGED
|
@@ -5,6 +5,6 @@ export { useTemporaryQuery } from './useTemporaryQuery.js';
|
|
|
5
5
|
export { useStackInfo } from './utils/stack-info.js';
|
|
6
6
|
export { useRow, type StateSetters, type SetStateAction, type Dispatch, type UseRowResult as UseStateResult, } from './useRow.js';
|
|
7
7
|
export { useAtom } from './useAtom.js';
|
|
8
|
-
export {
|
|
8
|
+
export { LiveList, type LiveListProps } from './components/LiveList.js';
|
|
9
9
|
export type { TypedDocumentNode } from '@graphql-typed-document-node/core';
|
|
10
10
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
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;AACpB,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAEtC,OAAO,EAAE,
|
|
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;AACpB,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAEtC,OAAO,EAAE,QAAQ,EAAE,KAAK,aAAa,EAAE,MAAM,0BAA0B,CAAA;AAGvE,YAAY,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAA"}
|
package/dist/react/index.js
CHANGED
|
@@ -5,5 +5,5 @@ export { useTemporaryQuery } from './useTemporaryQuery.js';
|
|
|
5
5
|
export { useStackInfo } from './utils/stack-info.js';
|
|
6
6
|
export { useRow, } from './useRow.js';
|
|
7
7
|
export { useAtom } from './useAtom.js';
|
|
8
|
-
export {
|
|
8
|
+
export { LiveList } from './components/LiveList.js';
|
|
9
9
|
//# sourceMappingURL=index.js.map
|
package/dist/react/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
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;AACpB,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAEtC,OAAO,EAAE,
|
|
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;AACpB,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAEtC,OAAO,EAAE,QAAQ,EAAsB,MAAM,0BAA0B,CAAA"}
|
package/dist/react/useAtom.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type QueryInfoCol, type QueryInfoRow } from '../query-info.js';
|
|
2
2
|
import type { LiveQuery } from '../reactiveQueries/base-class.js';
|
|
3
3
|
import type { Dispatch, SetStateAction } from './useRow.js';
|
|
4
|
-
export declare const useAtom: <TQuery extends LiveQuery<any, QueryInfoRow<any> | QueryInfoCol<any, any>>>(query$: TQuery) => [value: TQuery["__result!"], setValue: Dispatch<SetStateAction<TQuery["__result!"]
|
|
4
|
+
export declare const useAtom: <TQuery extends LiveQuery<any, QueryInfoRow<any> | QueryInfoCol<any, any>>>(query$: TQuery) => [value: TQuery["__result!"], setValue: Dispatch<SetStateAction<Partial<TQuery["__result!"]>>>];
|
|
5
5
|
//# sourceMappingURL=useAtom.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useAtom.d.ts","sourceRoot":"","sources":["../../src/react/useAtom.ts"],"names":[],"mappings":"AAEA,OAAO,EAAwB,KAAK,YAAY,EAAE,KAAK,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAC7F,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kCAAkC,CAAA;AAGjE,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAE3D,eAAO,MAAM,OAAO,sFACV,MAAM,
|
|
1
|
+
{"version":3,"file":"useAtom.d.ts","sourceRoot":"","sources":["../../src/react/useAtom.ts"],"names":[],"mappings":"AAEA,OAAO,EAAwB,KAAK,YAAY,EAAE,KAAK,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAC7F,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kCAAkC,CAAA;AAGjE,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAE3D,eAAO,MAAM,OAAO,sFACV,MAAM,mGAmBf,CAAA"}
|
package/dist/react/useAtom.js
CHANGED
|
@@ -8,7 +8,12 @@ export const useAtom = (query$) => {
|
|
|
8
8
|
const setValue = React.useMemo(() => {
|
|
9
9
|
return (newValueOrFn) => {
|
|
10
10
|
const newValue = typeof newValueOrFn === 'function' ? newValueOrFn(query$Ref.current) : newValueOrFn;
|
|
11
|
-
|
|
11
|
+
if (query$.queryInfo._tag === 'Row' && query$.queryInfo.table.isSingleColumn) {
|
|
12
|
+
store.mutate(mutationForQueryInfo(query$.queryInfo, { value: newValue }));
|
|
13
|
+
}
|
|
14
|
+
else {
|
|
15
|
+
store.mutate(mutationForQueryInfo(query$.queryInfo, newValue));
|
|
16
|
+
}
|
|
12
17
|
};
|
|
13
18
|
}, [query$.queryInfo, query$Ref, store]);
|
|
14
19
|
return [query$Ref.current, setValue];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useAtom.js","sourceRoot":"","sources":["../../src/react/useAtom.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,EAAE,oBAAoB,EAAwC,MAAM,kBAAkB,CAAA;AAE7F,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAA;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAG3C,MAAM,CAAC,MAAM,OAAO,GAAG,CACrB,MAAc,
|
|
1
|
+
{"version":3,"file":"useAtom.js","sourceRoot":"","sources":["../../src/react/useAtom.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,EAAE,oBAAoB,EAAwC,MAAM,kBAAkB,CAAA;AAE7F,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAA;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAG3C,MAAM,CAAC,MAAM,OAAO,GAAG,CACrB,MAAc,EACkF,EAAE;IAClG,MAAM,SAAS,GAAG,WAAW,CAAC,MAAM,CAAC,CAAA;IAErC,MAAM,EAAE,KAAK,EAAE,GAAG,QAAQ,EAAE,CAAA;IAE5B,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAgD,GAAG,EAAE;QACjF,OAAO,CAAC,YAAiB,EAAE,EAAE;YAC3B,MAAM,QAAQ,GAAG,OAAO,YAAY,KAAK,UAAU,CAAC,CAAC,CAAC,YAAY,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,YAAY,CAAA;YAEpG,IAAI,MAAM,CAAC,SAAS,CAAC,IAAI,KAAK,KAAK,IAAI,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,cAAc,EAAE,CAAC;gBAC7E,KAAK,CAAC,MAAM,CAAC,oBAAoB,CAAC,MAAM,CAAC,SAAU,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAA;YAC5E,CAAC;iBAAM,CAAC;gBACN,KAAK,CAAC,MAAM,CAAC,oBAAoB,CAAC,MAAM,CAAC,SAAU,EAAE,QAAQ,CAAC,CAAC,CAAA;YACjE,CAAC;QACH,CAAC,CAAA;IACH,CAAC,EAAE,CAAC,MAAM,CAAC,SAAS,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC,CAAA;IAExC,OAAO,CAAC,SAAS,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAA;AACtC,CAAC,CAAA"}
|
package/dist/react/useQuery.d.ts
CHANGED
|
@@ -2,5 +2,8 @@ import * as otel from '@opentelemetry/api';
|
|
|
2
2
|
import React from 'react';
|
|
3
3
|
import type { GetResult, LiveQueryAny } from '../reactiveQueries/base-class.js';
|
|
4
4
|
export declare const useQuery: <TQuery extends LiveQueryAny>(query: TQuery) => GetResult<TQuery>;
|
|
5
|
-
|
|
5
|
+
/**
|
|
6
|
+
*
|
|
7
|
+
*/
|
|
8
|
+
export declare const useQueryRef: <TQuery extends LiveQueryAny>(query$: TQuery, parentOtelContext?: otel.Context) => React.MutableRefObject<GetResult<TQuery>>;
|
|
6
9
|
//# sourceMappingURL=useQuery.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
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,SAAS,EAAE,YAAY,EAAE,MAAM,kCAAkC,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,SAAS,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAA;AAiB/E,eAAO,MAAM,QAAQ,uCAAwC,MAAM,KAAG,UAAU,MAAM,CAA+B,CAAA;AAErH;;GAEG;AACH,eAAO,MAAM,WAAW,wCACd,MAAM,sBACM,KAAK,OAAO,KAC/B,MAAM,gBAAgB,CAAC,UAAU,MAAM,CAAC,CA2E1C,CAAA"}
|