@livestore/livestore 0.0.10 → 0.0.12

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 (145) hide show
  1. package/package.json +7 -7
  2. package/src/__tests__/reactive.test.ts +39 -0
  3. package/src/react/useLiveStoreComponent.ts +4 -2
  4. package/src/reactive.ts +2 -1
  5. package/dist/.tsbuildinfo +0 -1
  6. package/dist/QueryCache.d.ts +0 -20
  7. package/dist/QueryCache.d.ts.map +0 -1
  8. package/dist/QueryCache.js +0 -71
  9. package/dist/QueryCache.js.map +0 -1
  10. package/dist/__tests__/react/fixture.d.ts +0 -141
  11. package/dist/__tests__/react/fixture.d.ts.map +0 -1
  12. package/dist/__tests__/react/fixture.js +0 -68
  13. package/dist/__tests__/react/fixture.js.map +0 -1
  14. package/dist/__tests__/react/useLiveStoreComponent.test.d.ts +0 -2
  15. package/dist/__tests__/react/useLiveStoreComponent.test.d.ts.map +0 -1
  16. package/dist/__tests__/react/useLiveStoreComponent.test.js +0 -78
  17. package/dist/__tests__/react/useLiveStoreComponent.test.js.map +0 -1
  18. package/dist/__tests__/reactive.test.d.ts +0 -2
  19. package/dist/__tests__/reactive.test.d.ts.map +0 -1
  20. package/dist/__tests__/reactive.test.js +0 -167
  21. package/dist/__tests__/reactive.test.js.map +0 -1
  22. package/dist/backends/base.d.ts +0 -13
  23. package/dist/backends/base.d.ts.map +0 -1
  24. package/dist/backends/base.js +0 -53
  25. package/dist/backends/base.js.map +0 -1
  26. package/dist/backends/index.d.ts +0 -45
  27. package/dist/backends/index.d.ts.map +0 -1
  28. package/dist/backends/index.js +0 -38
  29. package/dist/backends/index.js.map +0 -1
  30. package/dist/backends/noop.d.ts +0 -18
  31. package/dist/backends/noop.d.ts.map +0 -1
  32. package/dist/backends/noop.js +0 -21
  33. package/dist/backends/noop.js.map +0 -1
  34. package/dist/backends/tauri.d.ts +0 -22
  35. package/dist/backends/tauri.d.ts.map +0 -1
  36. package/dist/backends/tauri.js +0 -48
  37. package/dist/backends/tauri.js.map +0 -1
  38. package/dist/backends/utils/idb.d.ts +0 -10
  39. package/dist/backends/utils/idb.d.ts.map +0 -1
  40. package/dist/backends/utils/idb.js +0 -58
  41. package/dist/backends/utils/idb.js.map +0 -1
  42. package/dist/backends/web-in-memory.d.ts +0 -22
  43. package/dist/backends/web-in-memory.d.ts.map +0 -1
  44. package/dist/backends/web-in-memory.js +0 -45
  45. package/dist/backends/web-in-memory.js.map +0 -1
  46. package/dist/backends/web-worker.d.ts +0 -17
  47. package/dist/backends/web-worker.d.ts.map +0 -1
  48. package/dist/backends/web-worker.js +0 -139
  49. package/dist/backends/web-worker.js.map +0 -1
  50. package/dist/backends/web.d.ts +0 -27
  51. package/dist/backends/web.d.ts.map +0 -1
  52. package/dist/backends/web.js +0 -63
  53. package/dist/backends/web.js.map +0 -1
  54. package/dist/bounded-collections.d.ts +0 -34
  55. package/dist/bounded-collections.d.ts.map +0 -1
  56. package/dist/bounded-collections.js +0 -103
  57. package/dist/bounded-collections.js.map +0 -1
  58. package/dist/componentKey.d.ts +0 -20
  59. package/dist/componentKey.d.ts.map +0 -1
  60. package/dist/componentKey.js +0 -3
  61. package/dist/componentKey.js.map +0 -1
  62. package/dist/effect/LiveStore.d.ts +0 -42
  63. package/dist/effect/LiveStore.d.ts.map +0 -1
  64. package/dist/effect/LiveStore.js +0 -40
  65. package/dist/effect/LiveStore.js.map +0 -1
  66. package/dist/effect/index.d.ts +0 -2
  67. package/dist/effect/index.d.ts.map +0 -1
  68. package/dist/effect/index.js +0 -2
  69. package/dist/effect/index.js.map +0 -1
  70. package/dist/events.d.ts +0 -7
  71. package/dist/events.d.ts.map +0 -1
  72. package/dist/events.js +0 -2
  73. package/dist/events.js.map +0 -1
  74. package/dist/inMemoryDatabase.d.ts +0 -65
  75. package/dist/inMemoryDatabase.d.ts.map +0 -1
  76. package/dist/inMemoryDatabase.js +0 -241
  77. package/dist/inMemoryDatabase.js.map +0 -1
  78. package/dist/index.d.ts +0 -20
  79. package/dist/index.d.ts.map +0 -1
  80. package/dist/index.js +0 -10
  81. package/dist/index.js.map +0 -1
  82. package/dist/otel.d.ts +0 -5
  83. package/dist/otel.d.ts.map +0 -1
  84. package/dist/otel.js +0 -17
  85. package/dist/otel.js.map +0 -1
  86. package/dist/react/LiveStoreContext.d.ts +0 -11
  87. package/dist/react/LiveStoreContext.d.ts.map +0 -1
  88. package/dist/react/LiveStoreContext.js +0 -10
  89. package/dist/react/LiveStoreContext.js.map +0 -1
  90. package/dist/react/LiveStoreProvider.d.ts +0 -21
  91. package/dist/react/LiveStoreProvider.d.ts.map +0 -1
  92. package/dist/react/LiveStoreProvider.js +0 -48
  93. package/dist/react/LiveStoreProvider.js.map +0 -1
  94. package/dist/react/index.d.ts +0 -7
  95. package/dist/react/index.d.ts.map +0 -1
  96. package/dist/react/index.js +0 -6
  97. package/dist/react/index.js.map +0 -1
  98. package/dist/react/useGlobalQuery.d.ts +0 -3
  99. package/dist/react/useGlobalQuery.d.ts.map +0 -1
  100. package/dist/react/useGlobalQuery.js +0 -25
  101. package/dist/react/useGlobalQuery.js.map +0 -1
  102. package/dist/react/useGraphQL.d.ts +0 -11
  103. package/dist/react/useGraphQL.d.ts.map +0 -1
  104. package/dist/react/useGraphQL.js +0 -67
  105. package/dist/react/useGraphQL.js.map +0 -1
  106. package/dist/react/useLiveStoreComponent.d.ts +0 -70
  107. package/dist/react/useLiveStoreComponent.d.ts.map +0 -1
  108. package/dist/react/useLiveStoreComponent.js +0 -272
  109. package/dist/react/useLiveStoreComponent.js.map +0 -1
  110. package/dist/react/utils/useStateRefWithReactiveInput.d.ts +0 -13
  111. package/dist/react/utils/useStateRefWithReactiveInput.d.ts.map +0 -1
  112. package/dist/react/utils/useStateRefWithReactiveInput.js +0 -38
  113. package/dist/react/utils/useStateRefWithReactiveInput.js.map +0 -1
  114. package/dist/reactive.d.ts +0 -140
  115. package/dist/reactive.d.ts.map +0 -1
  116. package/dist/reactive.js +0 -301
  117. package/dist/reactive.js.map +0 -1
  118. package/dist/reactiveQueries/base-class.d.ts +0 -24
  119. package/dist/reactiveQueries/base-class.d.ts.map +0 -1
  120. package/dist/reactiveQueries/base-class.js +0 -22
  121. package/dist/reactiveQueries/base-class.js.map +0 -1
  122. package/dist/reactiveQueries/graphql.d.ts +0 -25
  123. package/dist/reactiveQueries/graphql.d.ts.map +0 -1
  124. package/dist/reactiveQueries/graphql.js +0 -18
  125. package/dist/reactiveQueries/graphql.js.map +0 -1
  126. package/dist/reactiveQueries/js.d.ts +0 -19
  127. package/dist/reactiveQueries/js.d.ts.map +0 -1
  128. package/dist/reactiveQueries/js.js +0 -13
  129. package/dist/reactiveQueries/js.js.map +0 -1
  130. package/dist/reactiveQueries/sql.d.ts +0 -31
  131. package/dist/reactiveQueries/sql.d.ts.map +0 -1
  132. package/dist/reactiveQueries/sql.js +0 -32
  133. package/dist/reactiveQueries/sql.js.map +0 -1
  134. package/dist/schema.d.ts +0 -163
  135. package/dist/schema.d.ts.map +0 -1
  136. package/dist/schema.js +0 -92
  137. package/dist/schema.js.map +0 -1
  138. package/dist/store.d.ts +0 -192
  139. package/dist/store.d.ts.map +0 -1
  140. package/dist/store.js +0 -539
  141. package/dist/store.js.map +0 -1
  142. package/dist/util.d.ts +0 -24
  143. package/dist/util.d.ts.map +0 -1
  144. package/dist/util.js +0 -51
  145. package/dist/util.js.map +0 -1
package/dist/schema.d.ts DELETED
@@ -1,163 +0,0 @@
1
- import type { Backend } from './backends/index.js';
2
- import type { InMemoryDatabase } from './inMemoryDatabase.js';
3
- export type ColumnDefinition = {
4
- nullable?: boolean;
5
- primaryKey?: boolean;
6
- } & ({
7
- type: 'text';
8
- default?: string;
9
- } | {
10
- type: 'json';
11
- default?: string;
12
- } | {
13
- type: 'integer';
14
- default?: number;
15
- } | {
16
- type: 'boolean';
17
- default?: boolean;
18
- } | {
19
- type: 'real';
20
- default?: number;
21
- } | {
22
- type: 'blob';
23
- default?: any;
24
- });
25
- type ColumnDefinitionWithDefault = {
26
- primaryKey?: boolean;
27
- } & ({
28
- type: 'text';
29
- nullable?: true;
30
- default: string;
31
- } | {
32
- type: 'json';
33
- nullable?: true;
34
- default: string;
35
- } | {
36
- type: 'integer';
37
- nullable?: true;
38
- default: number;
39
- } | {
40
- type: 'boolean';
41
- nullable?: true;
42
- default: boolean;
43
- } | {
44
- type: 'real';
45
- nullable: true;
46
- default: number | null;
47
- } | {
48
- type: 'blob';
49
- nullable: true;
50
- default: any | null;
51
- });
52
- export type TableDefinition = {
53
- columns: {
54
- [key: string]: ColumnDefinition;
55
- };
56
- /**
57
- * Can be used for various purposes e.g. to provide a foreign key constraint like below:
58
- * ```ts
59
- * columnsRaw: (columnsStr) => `${columnsStr}, foreign key (userId) references users(id)`
60
- * ```
61
- */
62
- columnsRaw?: (columnsStr: string) => string;
63
- indexes?: Index[];
64
- };
65
- export type Index = {
66
- name: string;
67
- columns: string[];
68
- /** @default false */
69
- isUnique?: boolean;
70
- };
71
- export type ComponentStateSchema<T> = {
72
- componentType: string;
73
- columns: {
74
- [k in keyof T]: ColumnDefinitionWithDefault;
75
- };
76
- };
77
- export declare const componentStateTables: {
78
- [key: string]: TableDefinition;
79
- };
80
- export declare const defineComponentStateSchema: <T>(schema: ComponentStateSchema<T>) => ComponentStateSchema<T & {
81
- id: string;
82
- }>;
83
- type SQLWriteStatement = {
84
- sql: string;
85
- /** Tables written by the statement */
86
- writeTables: string[];
87
- argsAlreadyBound?: boolean;
88
- };
89
- export type ActionDefinition<TArgs = any> = {
90
- statement: SQLWriteStatement | ((args: TArgs) => SQLWriteStatement);
91
- prepareBindValues?: (args: TArgs) => any;
92
- };
93
- export type Schema = {
94
- tables: TableDefinitions;
95
- materializedViews: MaterializedViewDefinitions;
96
- actions: ActionDefinitions<any>;
97
- };
98
- export type TableDefinitions = {
99
- [key: string]: TableDefinition;
100
- };
101
- export type MaterializedViewDefinitions = {
102
- [key: string]: {};
103
- };
104
- export type ActionDefinitions<TArgsMap extends Record<string, any>> = {
105
- [key in keyof TArgsMap]: ActionDefinition<TArgsMap[key]>;
106
- };
107
- export declare const EVENT_CURSOR_TABLE = "livestore__event_cursor";
108
- export declare const defineSchema: <S extends Schema>(schema: S) => S & {
109
- tables: {
110
- __events: {
111
- readonly columns: {
112
- readonly id: {
113
- readonly type: "text";
114
- readonly primaryKey: true;
115
- };
116
- readonly type: {
117
- readonly type: "text";
118
- readonly nullable: false;
119
- };
120
- readonly args: {
121
- readonly type: "text";
122
- readonly nullable: false;
123
- };
124
- };
125
- };
126
- livestore__event_cursor: {
127
- readonly columns: {
128
- readonly id: {
129
- readonly type: "text";
130
- readonly primaryKey: true;
131
- };
132
- readonly cursor: {
133
- readonly type: "text";
134
- readonly nullable: false;
135
- };
136
- };
137
- };
138
- };
139
- };
140
- export declare const defineTables: <T extends TableDefinitions>(tables: T) => T;
141
- export declare const defineMaterializedViews: <M extends MaterializedViewDefinitions>(materializedViews: M) => M;
142
- export declare const defineActions: <A extends ActionDefinitions<any>>(actions: A) => A;
143
- export declare const defineAction: <TArgs extends Record<string, any>>(action: ActionDefinition<TArgs>) => ActionDefinition<TArgs>;
144
- export type GetApplyEventArgs<TActionDefinitionsMap> = RecordValues<{
145
- [eventType in keyof TActionDefinitionsMap]: {
146
- eventType: eventType;
147
- args: GetActionArgs<TActionDefinitionsMap[eventType]>;
148
- };
149
- }>;
150
- type RecordValues<T> = T extends Record<string, infer V> ? V : never;
151
- export type GetActionArgs<A> = A extends ActionDefinition<infer TArgs> ? TArgs : never;
152
- declare global {
153
- interface LiveStoreActionDefinitionsTypes {
154
- [key: string]: ActionDefinition;
155
- }
156
- }
157
- /**
158
- * Destructively load a schema into a database,
159
- * dropping any existing tables and creating new ones.
160
- */
161
- export declare const loadSchema: (backend: InMemoryDatabase | Backend, schema: Schema) => Promise<void>;
162
- export {};
163
- //# sourceMappingURL=schema.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"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"}
package/dist/schema.js DELETED
@@ -1,92 +0,0 @@
1
- import { EVENTS_TABLE_NAME } from './events.js';
2
- import { sql } from './util.js';
3
- // A global variable representing component state tables we should create in the database
4
- export const componentStateTables = {};
5
- export const defineComponentStateSchema = (schema) => {
6
- const tablePath = `components__${schema.componentType}`;
7
- if (Object.keys(componentStateTables).includes(tablePath)) {
8
- // throw new Error(`Can't register duplicate component: ${name}`)
9
- console.error(`Can't register duplicate component: ${tablePath}`);
10
- }
11
- const schemaWithId = schema;
12
- schemaWithId.columns.id = { type: 'text', primaryKey: true };
13
- componentStateTables[tablePath] = schemaWithId;
14
- return schemaWithId;
15
- };
16
- export const EVENT_CURSOR_TABLE = 'livestore__event_cursor';
17
- const systemTables = {
18
- [EVENTS_TABLE_NAME]: {
19
- columns: {
20
- id: { type: 'text', primaryKey: true },
21
- type: { type: 'text', nullable: false },
22
- args: { type: 'text', nullable: false },
23
- },
24
- },
25
- [EVENT_CURSOR_TABLE]: {
26
- columns: {
27
- id: { type: 'text', primaryKey: true },
28
- cursor: { type: 'text', nullable: false },
29
- },
30
- },
31
- };
32
- export const defineSchema = (schema) => mergeSystemSchema(schema);
33
- export const defineTables = (tables) => tables;
34
- export const defineMaterializedViews = (materializedViews) => materializedViews;
35
- export const defineActions = (actions) => actions;
36
- export const defineAction = (action) => action;
37
- const mergeSystemSchema = (schema) => {
38
- return {
39
- ...schema,
40
- tables: {
41
- ...schema.tables,
42
- ...systemTables,
43
- },
44
- };
45
- };
46
- /**
47
- * Destructively load a schema into a database,
48
- * dropping any existing tables and creating new ones.
49
- */
50
- export const loadSchema = async (backend, schema) => {
51
- const fullSchemaWithComponents = { ...schema, tables: { ...schema.tables, ...componentStateTables } };
52
- // Loop through all the tables and create them in the SQLite database
53
- for (const [tableName, tableDefinition] of Object.entries(fullSchemaWithComponents.tables)) {
54
- const primaryKeys = Object.entries(tableDefinition.columns)
55
- .filter(([_, columnDef]) => columnDef.primaryKey)
56
- .map(([columnName, _]) => columnName);
57
- const columnDefStrs = Object.entries(tableDefinition.columns).map(([columnName, column]) => toSqliteColumnSpec(columnName, column));
58
- if (primaryKeys.length > 0) {
59
- columnDefStrs.push(`PRIMARY KEY (${primaryKeys.join(', ')})`);
60
- }
61
- const mapColumns = tableDefinition.columnsRaw ?? ((_) => _);
62
- const columnSpec = mapColumns(columnDefStrs.join(', '));
63
- backend.execute(sql `drop table if exists ${tableName}`);
64
- backend.execute(sql `create table if not exists ${tableName} (${columnSpec});`);
65
- }
66
- await createIndexes(backend, schema);
67
- };
68
- const toSqliteColumnSpec = (columnName, column) => {
69
- const columnType = column.type === 'boolean' ? 'integer' : column.type;
70
- // const primaryKey = column.primaryKey ? 'primary key' : ''
71
- const nullable = column.nullable === false ? 'not null' : '';
72
- const defaultValue = column.default === undefined
73
- ? ''
74
- : column.type === 'text'
75
- ? `default '${column.default}'`
76
- : `default ${column.default}`;
77
- return `${columnName} ${columnType} ${nullable} ${defaultValue}`;
78
- };
79
- const createIndexFromDefinition = (tableName, index) => {
80
- const uniqueStr = index.isUnique ? 'UNIQUE' : '';
81
- return sql `create ${uniqueStr} index ${index.name} on ${tableName} (${index.columns.join(', ')})`;
82
- };
83
- const createIndexes = async (db, schema) => {
84
- for (const [tableName, tableDefinition] of Object.entries(schema.tables)) {
85
- if (tableDefinition.indexes !== undefined) {
86
- for (const index of tableDefinition.indexes) {
87
- db.execute(createIndexFromDefinition(tableName, index));
88
- }
89
- }
90
- }
91
- };
92
- //# sourceMappingURL=schema.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"schema.js","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"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"}
package/dist/store.d.ts DELETED
@@ -1,192 +0,0 @@
1
- import type { TypedDocumentNode as DocumentNode } from '@graphql-typed-document-node/core';
2
- import * as otel from '@opentelemetry/api';
3
- import type { GraphQLSchema } from 'graphql';
4
- import type { Backend, BackendOptions } from './backends/index.js';
5
- import type { ComponentKey } from './componentKey.js';
6
- import type { LiveStoreEvent } from './events.js';
7
- import { InMemoryDatabase } from './inMemoryDatabase.js';
8
- import type { GetAtom, Ref } from './reactive.js';
9
- import { ReactiveGraph } from './reactive.js';
10
- import { LiveStoreGraphQLQuery } from './reactiveQueries/graphql.js';
11
- import { LiveStoreJSQuery } from './reactiveQueries/js.js';
12
- import { LiveStoreSQLQuery } from './reactiveQueries/sql.js';
13
- import type { GetActionArgs, Schema } from './schema.js';
14
- import type { Bindable, ParamsObject } from './util.js';
15
- export type LiveStoreQuery<TResult extends Record<string, any> = any> = LiveStoreSQLQuery<TResult> | LiveStoreJSQuery<TResult> | LiveStoreGraphQLQuery<TResult, any, any>;
16
- export type BaseGraphQLContext = {
17
- queriedTables: Set<string>;
18
- /** Needed by Pothos Otel plugin for resolver tracing to work */
19
- otelContext?: otel.Context;
20
- };
21
- export declare const RESET_DB_LOCAL_STORAGE_KEY = "livestore-reset";
22
- export type QueryResult<TQuery> = TQuery extends LiveStoreSQLQuery<infer R> ? ReadonlyArray<Readonly<R>> : TQuery extends LiveStoreJSQuery<infer S> ? Readonly<S> : TQuery extends LiveStoreGraphQLQuery<infer Result, any, any> ? Readonly<Result> : never;
23
- export type GraphQLOptions<TContext> = {
24
- schema: GraphQLSchema;
25
- makeContext: (db: InMemoryDatabase, tracer: otel.Tracer) => TContext;
26
- };
27
- export type StoreOptions<TGraphQLContext extends BaseGraphQLContext> = {
28
- db: InMemoryDatabase;
29
- schema: Schema;
30
- backend?: Backend;
31
- graphQLOptions?: GraphQLOptions<TGraphQLContext>;
32
- otelTracer: otel.Tracer;
33
- otelRootSpanContext: otel.Context;
34
- };
35
- export type RefreshReason = {
36
- _tag: 'applyEvent';
37
- /** The event that was applied */
38
- event: Omit<LiveStoreEvent, 'id'>;
39
- /** The tables that were written to by the event */
40
- writeTables: string[];
41
- } | {
42
- _tag: 'applyEvents';
43
- /** The events that was applied */
44
- events: Omit<LiveStoreEvent, 'id'>[];
45
- /** The tables that were written to by the event */
46
- writeTables: string[];
47
- }
48
- /** Usually in response to some `applyEvent`/`applyEvents` with `skipRefresh: true` */
49
- | {
50
- _tag: 'manualRefresh';
51
- } | {
52
- _tag: 'makeThunk';
53
- label?: string;
54
- } | {
55
- _tag: 'unknown';
56
- };
57
- export type QueryDebugInfo = {
58
- _tag: 'graphql' | 'sql' | 'js' | 'unknown';
59
- label: string;
60
- query: string;
61
- };
62
- export type StoreOtel = {
63
- tracer: otel.Tracer;
64
- applyEventsSpanContext: otel.Context;
65
- queriesSpanContext: otel.Context;
66
- };
67
- export declare class Store<TGraphQLContext extends BaseGraphQLContext> {
68
- graph: ReactiveGraph<RefreshReason, QueryDebugInfo>;
69
- inMemoryDB: InMemoryDatabase;
70
- schema: Schema;
71
- graphQLSchema?: GraphQLSchema;
72
- graphQLContext?: TGraphQLContext;
73
- otel: StoreOtel;
74
- /**
75
- * Note we're using `Ref<null>` here as we don't care about the value but only about *that* something has changed.
76
- * This only works in combination with `equal: () => false` which will always trigger a refresh.
77
- */
78
- tableRefs: {
79
- [key: string]: Ref<null>;
80
- };
81
- activeQueries: Set<LiveStoreQuery>;
82
- backend?: Backend;
83
- temporaryQueries: Set<LiveStoreQuery> | undefined;
84
- private constructor();
85
- static createStore: <TGraphQLContext_1 extends BaseGraphQLContext>(storeOptions: StoreOptions<TGraphQLContext_1>, parentSpan: otel.Span) => Store<TGraphQLContext_1>;
86
- /**
87
- * Creates a reactive LiveStore SQL query
88
- *
89
- * NOTE The query is actually running (even if no one has subscribed to it yet) and will be kept up to date.
90
- */
91
- querySQL: <TResult>(genQueryString: (get: GetAtom) => string, { queriedTables, bindValues, componentKey, label, otelContext, }: {
92
- /**
93
- * List of tables that are queried in this query;
94
- * used to determine reactive dependencies.
95
- *
96
- * NOTE In the future we want to auto-generate this via parsing the query
97
- */
98
- queriedTables: string[];
99
- bindValues?: Bindable | undefined;
100
- componentKey?: ComponentKey | undefined;
101
- label?: string | undefined;
102
- otelContext?: otel.Context | undefined;
103
- }) => LiveStoreSQLQuery<TResult>;
104
- queryJS: <TResult>(genResults: (get: GetAtom) => TResult, { componentKey, label, otelContext, }: {
105
- componentKey?: ComponentKey | undefined;
106
- label?: string | undefined;
107
- otelContext?: otel.Context | undefined;
108
- }) => LiveStoreJSQuery<TResult>;
109
- queryGraphQL: <TResult extends Record<string, any>, TVariableValues extends Record<string, any>>(document: DocumentNode<TResult, TVariableValues>, genVariableValues: (get: GetAtom) => TVariableValues, { componentKey, label, otelContext, }: {
110
- componentKey: ComponentKey;
111
- label?: string | undefined;
112
- otelContext?: otel.Context | undefined;
113
- }) => LiveStoreGraphQLQuery<TResult, TVariableValues, TGraphQLContext>;
114
- queryGraphQLOnce: <TResult extends Record<string, any>, TVariableValues extends Record<string, any>>(document: DocumentNode<TResult, TVariableValues>, variableValues: TVariableValues, otelContext?: otel.Context) => {
115
- result: TResult;
116
- queriedTables: string[];
117
- };
118
- /**
119
- * Subscribe to the results of a query
120
- * Returns a function to cancel the subscription.
121
- */
122
- subscribe: <TQuery extends LiveStoreQuery<any>>(query: TQuery, onNewValue: (value: QueryResult<TQuery>) => void, onSubsubscribe?: () => void, options?: {
123
- label?: string;
124
- } | undefined) => (() => void);
125
- /**
126
- * Any queries created in the callback will be destroyed when the callback is complete.
127
- * Useful for temporarily creating reactive queries, which is an idempotent operation
128
- * that can be safely called inside a React useMemo hook.
129
- */
130
- inTempQueryContext: <TResult>(callback: () => TResult) => TResult;
131
- /**
132
- * Destroys the entire store, including all queries and subscriptions.
133
- *
134
- * Currently only used when shutting down the app for debugging purposes (e.g. to close Otel spans).
135
- */
136
- destroy: () => void;
137
- private destroyQuery;
138
- /**
139
- * Clean up queries and downstream subscriptions associated with a component.
140
- * This is critical to avoid memory leaks.
141
- */
142
- unmountComponent: (componentKey: ComponentKey) => void;
143
- applyEvent: <TEventType extends string>(eventType: TEventType, args?: any, options?: {
144
- skipRefresh?: boolean;
145
- }) => {
146
- durationMs: number;
147
- };
148
- /**
149
- * Apply multiple write events to the store, and refresh all queries in response.
150
- * This is faster than calling applyEvent many times in quick succession because
151
- * we can do a single refresh after all the events.
152
- */
153
- applyEvents: (events: Iterable<{
154
- eventType: string;
155
- args: any;
156
- }>, options?: {
157
- label?: string;
158
- skipRefresh?: boolean;
159
- }) => {
160
- durationMs: number;
161
- };
162
- /**
163
- * This can be used in combination with `skipRefresh` when applying events.
164
- * We might need a better solution for this. Let's see.
165
- */
166
- manualRefresh: (options?: {
167
- label?: string;
168
- }) => void;
169
- /**
170
- * Apply an event to the store.
171
- * Returns the tables that were affected by the event.
172
- * This is an internal method that doesn't trigger a refresh;
173
- * the caller must refresh queries after calling this method.
174
- */
175
- private applyEventWithoutRefresh;
176
- /**
177
- * Directly execute a SQL query on the Store.
178
- * This should only be used for framework-internal purposes;
179
- * all app writes should go through applyEvent.
180
- */
181
- execute: (query: string, params?: ParamsObject, writeTables?: string[]) => Promise<void>;
182
- }
183
- /** Create a new LiveStore Store */
184
- export declare const createStore: <TGraphQLContext extends BaseGraphQLContext>({ schema, backendOptions, graphQLOptions, otelTracer, otelRootSpanContext, boot, }: {
185
- schema: Schema;
186
- backendOptions: BackendOptions;
187
- graphQLOptions?: GraphQLOptions<TGraphQLContext> | undefined;
188
- otelTracer?: otel.Tracer | undefined;
189
- otelRootSpanContext?: otel.Context | undefined;
190
- boot?: ((backend: Backend, parentSpan: otel.Span) => Promise<void>) | undefined;
191
- }) => Promise<Store<TGraphQLContext>>;
192
- //# sourceMappingURL=store.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,IAAI,YAAY,EAAE,MAAM,mCAAmC,CAAA;AAE1F,OAAO,KAAK,IAAI,MAAM,oBAAoB,CAAA;AAC1C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAM5C,OAAO,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AAElE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAErD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AAExD,OAAO,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,eAAe,CAAA;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAC7C,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAA;AACpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAA;AAC1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAA;AAC5D,OAAO,KAAK,EAAoB,aAAa,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAE1E,OAAO,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AAGvD,MAAM,MAAM,cAAc,CAAC,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,IAChE,iBAAiB,CAAC,OAAO,CAAC,GAC1B,gBAAgB,CAAC,OAAO,CAAC,GACzB,qBAAqB,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,CAAC,CAAA;AAE5C,MAAM,MAAM,kBAAkB,GAAG;IAC/B,aAAa,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IAC1B,gEAAgE;IAChE,WAAW,CAAC,EAAE,IAAI,CAAC,OAAO,CAAA;CAC3B,CAAA;AAED,eAAO,MAAM,0BAA0B,oBAAoB,CAAA;AAE3D,MAAM,MAAM,WAAW,CAAC,MAAM,IAAI,MAAM,SAAS,iBAAiB,CAAC,MAAM,CAAC,CAAC,GACvE,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAC1B,MAAM,SAAS,gBAAgB,CAAC,MAAM,CAAC,CAAC,GACxC,QAAQ,CAAC,CAAC,CAAC,GACX,MAAM,SAAS,qBAAqB,CAAC,MAAM,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC,GAC5D,QAAQ,CAAC,MAAM,CAAC,GAChB,KAAK,CAAA;AAIT,MAAM,MAAM,cAAc,CAAC,QAAQ,IAAI;IACrC,MAAM,EAAE,aAAa,CAAA;IACrB,WAAW,EAAE,CAAC,EAAE,EAAE,gBAAgB,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,KAAK,QAAQ,CAAA;CACrE,CAAA;AAED,MAAM,MAAM,YAAY,CAAC,eAAe,SAAS,kBAAkB,IAAI;IACrE,EAAE,EAAE,gBAAgB,CAAA;IACpB,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,cAAc,CAAC,EAAE,cAAc,CAAC,eAAe,CAAC,CAAA;IAChD,UAAU,EAAE,IAAI,CAAC,MAAM,CAAA;IACvB,mBAAmB,EAAE,IAAI,CAAC,OAAO,CAAA;CAClC,CAAA;AAED,MAAM,MAAM,aAAa,GACrB;IACE,IAAI,EAAE,YAAY,CAAA;IAClB,iCAAiC;IAGjC,KAAK,EAAE,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,CAAA;IAEjC,mDAAmD;IACnD,WAAW,EAAE,MAAM,EAAE,CAAA;CACtB,GACD;IACE,IAAI,EAAE,aAAa,CAAA;IACnB,kCAAkC;IAGlC,MAAM,EAAE,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,EAAE,CAAA;IAEpC,mDAAmD;IACnD,WAAW,EAAE,MAAM,EAAE,CAAA;CACtB;AACH,sFAAsF;GACpF;IAAE,IAAI,EAAE,eAAe,CAAA;CAAE,GACzB;IACE,IAAI,EAAE,WAAW,CAAA;IACjB,KAAK,CAAC,EAAE,MAAM,CAAA;CACf,GACD;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,CAAA;AAEvB,MAAM,MAAM,cAAc,GAAG;IAAE,IAAI,EAAE,SAAS,GAAG,KAAK,GAAG,IAAI,GAAG,SAAS,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAA;AAEzG,MAAM,MAAM,SAAS,GAAG;IACtB,MAAM,EAAE,IAAI,CAAC,MAAM,CAAA;IACnB,sBAAsB,EAAE,IAAI,CAAC,OAAO,CAAA;IACpC,kBAAkB,EAAE,IAAI,CAAC,OAAO,CAAA;CACjC,CAAA;AAED,qBAAa,KAAK,CAAC,eAAe,SAAS,kBAAkB;IAC3D,KAAK,EAAE,aAAa,CAAC,aAAa,EAAE,cAAc,CAAC,CAAA;IACnD,UAAU,EAAE,gBAAgB,CAAA;IAC5B,MAAM,EAAE,MAAM,CAAA;IACd,aAAa,CAAC,EAAE,aAAa,CAAA;IAC7B,cAAc,CAAC,EAAE,eAAe,CAAA;IAChC,IAAI,EAAE,SAAS,CAAA;IACf;;;OAGG;IACH,SAAS,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,CAAA;KAAE,CAAA;IACvC,aAAa,EAAE,GAAG,CAAC,cAAc,CAAC,CAAA;IAClC,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,gBAAgB,EAAE,GAAG,CAAC,cAAc,CAAC,GAAG,SAAS,CAAA;IAEjD,OAAO;IAoDP,MAAM,CAAC,WAAW,4GAEJ,KAAK,IAAI,8BAUtB;IAED;;;;OAIG;IACH,QAAQ,kCACgB,OAAO,KAAK,MAAM;QAQtC;;;;;WAKG;uBACY,MAAM,EAAE;qBACV,QAAQ,GAAG,SAAS;uBAClB,YAAY,GAAG,SAAS;gBAC/B,MAAM,GAAG,SAAS;;qCAiF3B;IAEH,OAAO,8BACa,OAAO;;;;oCAoCvB;IAEJ,YAAY,gKAEe,OAAO;sBAMhB,YAAY;;;2EAmE3B;IAEH,gBAAgB,sLAGD,KAAK,OAAO;;uBACU,MAAM,EAAE;MAuC5C;IAED;;;OAGG;IACH,SAAS,kGAEqC,IAAI,mBAC/B,MAAM,IAAI,YACjB;QAAE,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS,KACvC,CAAC,MAAM,IAAI,CAAC,CAiCZ;IAEH;;;;OAIG;IACH,kBAAkB,gDASjB;IAED;;;;OAIG;IACH,OAAO,aAcN;IAED,OAAO,CAAC,YAAY,CASnB;IAED;;;OAGG;IACH,gBAAgB,iBAAkB,YAAY,UAM7C;IAGD,UAAU,2EAGE;QAAE,WAAW,CAAC,EAAE,OAAO,CAAA;KAAE,KAClC;QAAE,UAAU,EAAE,MAAM,CAAA;KAAE,CAiDxB;IAED;;;;OAIG;IACH,WAAW,WAED,SAAS;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,GAAG,CAAA;KAAE,CAAC,YACxC;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,OAAO,CAAA;KAAE,KAClD;QAAE,UAAU,EAAE,MAAM,CAAA;KAAE,CAkFxB;IAED;;;OAGG;IACH,aAAa,aAAc;QAAE,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,UAY5C;IAED;;;;;OAKG;IACH,OAAO,CAAC,wBAAwB,CA6D/B;IAED;;;;OAIG;IACH,OAAO,UAAiB,MAAM,WAAU,YAAY,gBAAqB,MAAM,EAAE,mBAOhF;CACF;AAED,mCAAmC;AACnC,eAAO,MAAM,WAAW;YAQd,MAAM;oBACE,cAAc;;;;sBAIb,OAAO,cAAc,KAAK,IAAI,KAAK,QAAQ,IAAI,CAAC;qCAwElE,CAAA"}