@livestore/common 0.3.2-dev.8 → 0.4.0-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/dist/.tsbuildinfo +1 -1
- package/dist/ClientSessionLeaderThreadProxy.d.ts +2 -2
- package/dist/ClientSessionLeaderThreadProxy.d.ts.map +1 -1
- package/dist/adapter-types.d.ts +4 -4
- package/dist/adapter-types.d.ts.map +1 -1
- package/dist/debug-info.d.ts +17 -17
- package/dist/devtools/devtools-messages-client-session.d.ts +38 -38
- package/dist/devtools/devtools-messages-common.d.ts +6 -6
- package/dist/devtools/devtools-messages-leader.d.ts +28 -28
- package/dist/devtools/devtools-messages-leader.d.ts.map +1 -1
- package/dist/devtools/devtools-messages-leader.js.map +1 -1
- package/dist/leader-thread/LeaderSyncProcessor.js +3 -1
- package/dist/leader-thread/LeaderSyncProcessor.js.map +1 -1
- package/dist/leader-thread/make-leader-thread-layer.d.ts.map +1 -1
- package/dist/leader-thread/make-leader-thread-layer.js +21 -4
- package/dist/leader-thread/make-leader-thread-layer.js.map +1 -1
- package/dist/leader-thread/shutdown-channel.d.ts +2 -2
- package/dist/leader-thread/shutdown-channel.d.ts.map +1 -1
- package/dist/leader-thread/shutdown-channel.js +2 -2
- package/dist/leader-thread/shutdown-channel.js.map +1 -1
- package/dist/leader-thread/types.d.ts +1 -1
- package/dist/leader-thread/types.d.ts.map +1 -1
- package/dist/materializer-helper.d.ts +3 -3
- package/dist/materializer-helper.d.ts.map +1 -1
- package/dist/materializer-helper.js +2 -2
- package/dist/materializer-helper.js.map +1 -1
- package/dist/rematerialize-from-eventlog.js +1 -1
- package/dist/rematerialize-from-eventlog.js.map +1 -1
- package/dist/schema/EventDef.d.ts +104 -178
- package/dist/schema/EventSequenceNumber.d.ts +5 -0
- package/dist/schema/EventSequenceNumber.d.ts.map +1 -1
- package/dist/schema/EventSequenceNumber.js +7 -2
- package/dist/schema/EventSequenceNumber.js.map +1 -1
- package/dist/schema/EventSequenceNumber.test.js +2 -2
- package/dist/schema/LiveStoreEvent.d.ts +6 -5
- package/dist/schema/LiveStoreEvent.d.ts.map +1 -1
- package/dist/schema/LiveStoreEvent.js +5 -0
- package/dist/schema/LiveStoreEvent.js.map +1 -1
- package/dist/schema/schema.d.ts +3 -0
- package/dist/schema/schema.d.ts.map +1 -1
- package/dist/schema/schema.js.map +1 -1
- package/dist/schema/state/sqlite/client-document-def.d.ts +3 -2
- package/dist/schema/state/sqlite/client-document-def.d.ts.map +1 -1
- package/dist/schema/state/sqlite/client-document-def.js +6 -4
- package/dist/schema/state/sqlite/client-document-def.js.map +1 -1
- package/dist/schema/state/sqlite/client-document-def.test.js +76 -1
- package/dist/schema/state/sqlite/client-document-def.test.js.map +1 -1
- package/dist/schema/state/sqlite/column-annotations.d.ts +34 -0
- package/dist/schema/state/sqlite/column-annotations.d.ts.map +1 -0
- package/dist/schema/state/sqlite/column-annotations.js +50 -0
- package/dist/schema/state/sqlite/column-annotations.js.map +1 -0
- package/dist/schema/state/sqlite/column-annotations.test.d.ts +2 -0
- package/dist/schema/state/sqlite/column-annotations.test.d.ts.map +1 -0
- package/dist/schema/state/sqlite/column-annotations.test.js +179 -0
- package/dist/schema/state/sqlite/column-annotations.test.js.map +1 -0
- package/dist/schema/state/sqlite/column-spec.d.ts +11 -0
- package/dist/schema/state/sqlite/column-spec.d.ts.map +1 -0
- package/dist/schema/state/sqlite/column-spec.js +39 -0
- package/dist/schema/state/sqlite/column-spec.js.map +1 -0
- package/dist/schema/state/sqlite/column-spec.test.d.ts +2 -0
- package/dist/schema/state/sqlite/column-spec.test.d.ts.map +1 -0
- package/dist/schema/state/sqlite/column-spec.test.js +146 -0
- package/dist/schema/state/sqlite/column-spec.test.js.map +1 -0
- package/dist/schema/state/sqlite/db-schema/ast/sqlite.d.ts +1 -0
- package/dist/schema/state/sqlite/db-schema/ast/sqlite.d.ts.map +1 -1
- package/dist/schema/state/sqlite/db-schema/ast/sqlite.js +1 -0
- package/dist/schema/state/sqlite/db-schema/ast/sqlite.js.map +1 -1
- package/dist/schema/state/sqlite/db-schema/dsl/field-defs.d.ts +17 -4
- package/dist/schema/state/sqlite/db-schema/dsl/field-defs.d.ts.map +1 -1
- package/dist/schema/state/sqlite/db-schema/dsl/field-defs.js +2 -0
- package/dist/schema/state/sqlite/db-schema/dsl/field-defs.js.map +1 -1
- package/dist/schema/state/sqlite/db-schema/dsl/mod.d.ts +65 -165
- package/dist/schema/state/sqlite/db-schema/dsl/mod.d.ts.map +1 -1
- package/dist/schema/state/sqlite/db-schema/dsl/mod.js +1 -0
- package/dist/schema/state/sqlite/db-schema/dsl/mod.js.map +1 -1
- package/dist/schema/state/sqlite/mod.d.ts +2 -0
- package/dist/schema/state/sqlite/mod.d.ts.map +1 -1
- package/dist/schema/state/sqlite/mod.js +2 -0
- package/dist/schema/state/sqlite/mod.js.map +1 -1
- package/dist/schema/state/sqlite/query-builder/api.d.ts +309 -560
- package/dist/schema/state/sqlite/query-builder/api.d.ts.map +1 -1
- package/dist/schema/state/sqlite/query-builder/astToSql.d.ts +1 -0
- package/dist/schema/state/sqlite/query-builder/astToSql.d.ts.map +1 -1
- package/dist/schema/state/sqlite/query-builder/astToSql.js +8 -6
- package/dist/schema/state/sqlite/query-builder/astToSql.js.map +1 -1
- package/dist/schema/state/sqlite/system-tables.d.ts +464 -46
- package/dist/schema/state/sqlite/system-tables.d.ts.map +1 -1
- package/dist/schema/state/sqlite/table-def.d.ts +161 -152
- package/dist/schema/state/sqlite/table-def.d.ts.map +1 -1
- package/dist/schema/state/sqlite/table-def.js +251 -5
- package/dist/schema/state/sqlite/table-def.js.map +1 -1
- package/dist/schema/state/sqlite/table-def.test.d.ts +2 -0
- package/dist/schema/state/sqlite/table-def.test.d.ts.map +1 -0
- package/dist/schema/state/sqlite/table-def.test.js +635 -0
- package/dist/schema/state/sqlite/table-def.test.js.map +1 -0
- package/dist/schema-management/common.d.ts +1 -1
- package/dist/schema-management/common.d.ts.map +1 -1
- package/dist/schema-management/common.js +11 -2
- package/dist/schema-management/common.js.map +1 -1
- package/dist/schema-management/migrations.d.ts +0 -1
- package/dist/schema-management/migrations.d.ts.map +1 -1
- package/dist/schema-management/migrations.js +4 -30
- package/dist/schema-management/migrations.js.map +1 -1
- package/dist/schema-management/migrations.test.d.ts +2 -0
- package/dist/schema-management/migrations.test.d.ts.map +1 -0
- package/dist/schema-management/migrations.test.js +52 -0
- package/dist/schema-management/migrations.test.js.map +1 -0
- package/dist/sql-queries/types.d.ts +37 -133
- package/dist/sqlite-db-helper.d.ts +3 -1
- package/dist/sqlite-db-helper.d.ts.map +1 -1
- package/dist/sqlite-db-helper.js +16 -0
- package/dist/sqlite-db-helper.js.map +1 -1
- package/dist/sqlite-types.d.ts +4 -4
- package/dist/sqlite-types.d.ts.map +1 -1
- package/dist/sync/ClientSessionSyncProcessor.d.ts +2 -2
- package/dist/sync/ClientSessionSyncProcessor.d.ts.map +1 -1
- package/dist/sync/ClientSessionSyncProcessor.js +8 -7
- package/dist/sync/ClientSessionSyncProcessor.js.map +1 -1
- package/dist/sync/sync.d.ts.map +1 -1
- package/dist/sync/sync.js.map +1 -1
- package/dist/util.d.ts +3 -3
- package/dist/util.d.ts.map +1 -1
- package/dist/util.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +4 -4
- package/src/ClientSessionLeaderThreadProxy.ts +2 -2
- package/src/adapter-types.ts +6 -4
- package/src/devtools/devtools-messages-leader.ts +3 -3
- package/src/leader-thread/LeaderSyncProcessor.ts +3 -1
- package/src/leader-thread/make-leader-thread-layer.ts +26 -7
- package/src/leader-thread/shutdown-channel.ts +2 -2
- package/src/leader-thread/types.ts +1 -1
- package/src/materializer-helper.ts +5 -11
- package/src/rematerialize-from-eventlog.ts +2 -2
- package/src/schema/EventSequenceNumber.test.ts +2 -2
- package/src/schema/EventSequenceNumber.ts +8 -2
- package/src/schema/LiveStoreEvent.ts +7 -1
- package/src/schema/schema.ts +4 -0
- package/src/schema/state/sqlite/client-document-def.test.ts +89 -1
- package/src/schema/state/sqlite/client-document-def.ts +7 -4
- package/src/schema/state/sqlite/column-annotations.test.ts +212 -0
- package/src/schema/state/sqlite/column-annotations.ts +77 -0
- package/src/schema/state/sqlite/column-spec.test.ts +223 -0
- package/src/schema/state/sqlite/column-spec.ts +42 -0
- package/src/schema/state/sqlite/db-schema/ast/sqlite.ts +2 -0
- package/src/schema/state/sqlite/db-schema/dsl/__snapshots__/field-defs.test.ts.snap +15 -0
- package/src/schema/state/sqlite/db-schema/dsl/field-defs.ts +20 -2
- package/src/schema/state/sqlite/db-schema/dsl/mod.ts +1 -0
- package/src/schema/state/sqlite/mod.ts +2 -0
- package/src/schema/state/sqlite/query-builder/api.ts +4 -3
- package/src/schema/state/sqlite/query-builder/astToSql.ts +9 -7
- package/src/schema/state/sqlite/table-def.test.ts +798 -0
- package/src/schema/state/sqlite/table-def.ts +472 -16
- package/src/schema-management/common.ts +10 -3
- package/src/schema-management/migrations.ts +4 -33
- package/src/sqlite-db-helper.ts +19 -1
- package/src/sqlite-types.ts +4 -4
- package/src/sync/ClientSessionSyncProcessor.ts +13 -8
- package/src/sync/sync.ts +2 -0
- package/src/util.ts +7 -2
- package/src/version.ts +1 -1
@@ -9,9 +9,15 @@ export type ColumnDefinition<TEncoded, TDecoded> = {
|
|
9
9
|
readonly nullable: boolean
|
10
10
|
/** @default false */
|
11
11
|
readonly primaryKey: boolean
|
12
|
+
/** @default false */
|
13
|
+
readonly autoIncrement: boolean
|
14
|
+
}
|
15
|
+
|
16
|
+
export declare namespace ColumnDefinition {
|
17
|
+
export type Any = ColumnDefinition<any, any>
|
12
18
|
}
|
13
19
|
|
14
|
-
export const isColumnDefinition = (value: unknown): value is ColumnDefinition
|
20
|
+
export const isColumnDefinition = (value: unknown): value is ColumnDefinition.Any => {
|
15
21
|
const validColumnTypes = ['text', 'integer', 'real', 'blob'] as const
|
16
22
|
return (
|
17
23
|
typeof value === 'object' &&
|
@@ -26,6 +32,7 @@ export type ColumnDefinitionInput = {
|
|
26
32
|
readonly default?: unknown | NoDefault
|
27
33
|
readonly nullable?: boolean
|
28
34
|
readonly primaryKey?: boolean
|
35
|
+
readonly autoIncrement?: boolean
|
29
36
|
}
|
30
37
|
|
31
38
|
export const NoDefault = Symbol.for('NoDefault')
|
@@ -46,6 +53,7 @@ export type ColDefFn<TColumnType extends FieldColumnType> = {
|
|
46
53
|
default: Option.None<never>
|
47
54
|
nullable: false
|
48
55
|
primaryKey: false
|
56
|
+
autoIncrement: false
|
49
57
|
}
|
50
58
|
<
|
51
59
|
TEncoded extends DefaultEncodedForColumnType<TColumnType>,
|
@@ -53,11 +61,13 @@ export type ColDefFn<TColumnType extends FieldColumnType> = {
|
|
53
61
|
const TNullable extends boolean = false,
|
54
62
|
const TDefault extends TDecoded | SqlDefaultValue | NoDefault | (TNullable extends true ? null : never) = NoDefault,
|
55
63
|
const TPrimaryKey extends boolean = false,
|
64
|
+
const TAutoIncrement extends boolean = false,
|
56
65
|
>(args: {
|
57
66
|
schema?: Schema.Schema<TDecoded, TEncoded>
|
58
67
|
default?: TDefault
|
59
68
|
nullable?: TNullable
|
60
69
|
primaryKey?: TPrimaryKey
|
70
|
+
autoIncrement?: TAutoIncrement
|
61
71
|
}): {
|
62
72
|
columnType: TColumnType
|
63
73
|
schema: TNullable extends true
|
@@ -66,6 +76,7 @@ export type ColDefFn<TColumnType extends FieldColumnType> = {
|
|
66
76
|
default: TDefault extends NoDefault ? Option.None<never> : Option.Some<NoInfer<TDefault>>
|
67
77
|
nullable: NoInfer<TNullable>
|
68
78
|
primaryKey: NoInfer<TPrimaryKey>
|
79
|
+
autoIncrement: NoInfer<TAutoIncrement>
|
69
80
|
}
|
70
81
|
}
|
71
82
|
|
@@ -83,6 +94,7 @@ const makeColDef =
|
|
83
94
|
default: default_,
|
84
95
|
nullable,
|
85
96
|
primaryKey: def?.primaryKey ?? false,
|
97
|
+
autoIncrement: def?.autoIncrement ?? false,
|
86
98
|
} as any
|
87
99
|
}
|
88
100
|
|
@@ -115,12 +127,14 @@ export type SpecializedColDefFn<
|
|
115
127
|
default: Option.None<never>
|
116
128
|
nullable: false
|
117
129
|
primaryKey: false
|
130
|
+
autoIncrement: false
|
118
131
|
}
|
119
132
|
<
|
120
133
|
TDecoded = TBaseDecoded,
|
121
134
|
const TNullable extends boolean = false,
|
122
135
|
const TDefault extends TDecoded | NoDefault | (TNullable extends true ? null : never) = NoDefault,
|
123
136
|
const TPrimaryKey extends boolean = false,
|
137
|
+
const TAutoIncrement extends boolean = false,
|
124
138
|
>(
|
125
139
|
args: TAllowsCustomSchema extends true
|
126
140
|
? {
|
@@ -128,11 +142,13 @@ export type SpecializedColDefFn<
|
|
128
142
|
default?: TDefault
|
129
143
|
nullable?: TNullable
|
130
144
|
primaryKey?: TPrimaryKey
|
145
|
+
autoIncrement?: TAutoIncrement
|
131
146
|
}
|
132
147
|
: {
|
133
148
|
default?: TDefault
|
134
149
|
nullable?: TNullable
|
135
150
|
primaryKey?: TPrimaryKey
|
151
|
+
autoIncrement?: TAutoIncrement
|
136
152
|
},
|
137
153
|
): {
|
138
154
|
columnType: TColumnType
|
@@ -142,6 +158,7 @@ export type SpecializedColDefFn<
|
|
142
158
|
default: TDefault extends NoDefault ? Option.None<never> : Option.Some<TDefault>
|
143
159
|
nullable: NoInfer<TNullable>
|
144
160
|
primaryKey: NoInfer<TPrimaryKey>
|
161
|
+
autoIncrement: NoInfer<TAutoIncrement>
|
145
162
|
}
|
146
163
|
}
|
147
164
|
|
@@ -176,6 +193,7 @@ const makeSpecializedColDef: MakeSpecializedColDefFn = (columnType, opts) => (de
|
|
176
193
|
default: default_,
|
177
194
|
nullable,
|
178
195
|
primaryKey: def?.primaryKey ?? false,
|
196
|
+
autoIncrement: def?.autoIncrement ?? false,
|
179
197
|
} as any
|
180
198
|
}
|
181
199
|
|
@@ -214,7 +232,7 @@ export type DefaultEncodedForColumnType<TColumnType extends FieldColumnType> = T
|
|
214
232
|
: TColumnType extends 'real'
|
215
233
|
? number
|
216
234
|
: TColumnType extends 'blob'
|
217
|
-
? Uint8Array
|
235
|
+
? Uint8Array<ArrayBuffer>
|
218
236
|
: never
|
219
237
|
|
220
238
|
export const defaultSchemaForColumnType = <TColumnType extends FieldColumnType>(
|
@@ -92,6 +92,7 @@ const columsToAst = (columns: Columns): ReadonlyArray<SqliteAst.Column> => {
|
|
92
92
|
default: column.default as any,
|
93
93
|
nullable: column.nullable ?? false,
|
94
94
|
primaryKey: column.primaryKey ?? false,
|
95
|
+
autoIncrement: column.autoIncrement ?? false,
|
95
96
|
type: { _tag: column.columnType },
|
96
97
|
} satisfies SqliteAst.Column
|
97
98
|
})
|
@@ -16,6 +16,8 @@ export {
|
|
16
16
|
clientDocument,
|
17
17
|
tableIsClientDocumentTable,
|
18
18
|
} from './client-document-def.ts'
|
19
|
+
export * from './column-annotations.ts'
|
20
|
+
export * from './column-spec.ts'
|
19
21
|
export * from './table-def.ts'
|
20
22
|
|
21
23
|
export const makeState = <TStateInput extends InputState>(inputSchema: TStateInput): InternalState => {
|
@@ -122,7 +122,7 @@ export type QueryBuilder<
|
|
122
122
|
readonly [QueryBuilderTypeId]: QueryBuilderTypeId
|
123
123
|
readonly [QueryBuilderAstSymbol]: QueryBuilderAst
|
124
124
|
readonly ResultType: TResult
|
125
|
-
readonly asSql: () => { query: string; bindValues: SqlValue[] }
|
125
|
+
readonly asSql: () => { query: string; bindValues: SqlValue[]; usedTables: Set<string> }
|
126
126
|
readonly toString: () => string
|
127
127
|
} & Omit<QueryBuilder.ApiFull<TResult, TTableDef, TWithout>, TWithout>
|
128
128
|
|
@@ -264,14 +264,15 @@ export namespace QueryBuilder {
|
|
264
264
|
* Example:
|
265
265
|
* ```ts
|
266
266
|
* db.todos.orderBy('createdAt', 'desc')
|
267
|
+
* db.todos.orderBy([{ col: 'createdAt', direction: 'desc' }])
|
267
268
|
* ```
|
268
269
|
*/
|
269
270
|
readonly orderBy: {
|
270
|
-
<TColName extends keyof TTableDef['sqliteDef']['columns'] & string>(
|
271
|
+
<const TColName extends keyof TTableDef['sqliteDef']['columns'] & string>(
|
271
272
|
col: TColName,
|
272
273
|
direction: 'asc' | 'desc',
|
273
274
|
): QueryBuilder<TResult, TTableDef, TWithout | 'returning' | 'onConflict'>
|
274
|
-
<TParams extends QueryBuilder.OrderByParams<TTableDef>>(
|
275
|
+
<const TParams extends QueryBuilder.OrderByParams<TTableDef>>(
|
275
276
|
params: TParams,
|
276
277
|
): QueryBuilder<TResult, TTableDef, TWithout | 'returning' | 'onConflict'>
|
277
278
|
}
|
@@ -65,8 +65,9 @@ const formatReturningClause = (returning?: string[]): string => {
|
|
65
65
|
return ` RETURNING ${returning.join(', ')}`
|
66
66
|
}
|
67
67
|
|
68
|
-
export const astToSql = (ast: QueryBuilderAst): { query: string; bindValues: SqlValue[] } => {
|
68
|
+
export const astToSql = (ast: QueryBuilderAst): { query: string; bindValues: SqlValue[]; usedTables: Set<string> } => {
|
69
69
|
const bindValues: SqlValue[] = []
|
70
|
+
const usedTables = new Set<string>([ast.tableDef.sqliteDef.name])
|
70
71
|
|
71
72
|
// INSERT query
|
72
73
|
if (ast._tag === 'InsertQuery') {
|
@@ -134,7 +135,7 @@ export const astToSql = (ast: QueryBuilderAst): { query: string; bindValues: Sql
|
|
134
135
|
query += conflictClause
|
135
136
|
|
136
137
|
query += formatReturningClause(ast.returning)
|
137
|
-
return { query, bindValues }
|
138
|
+
return { query, bindValues, usedTables }
|
138
139
|
}
|
139
140
|
|
140
141
|
// UPDATE query
|
@@ -145,7 +146,7 @@ export const astToSql = (ast: QueryBuilderAst): { query: string; bindValues: Sql
|
|
145
146
|
console.warn(
|
146
147
|
`UPDATE query requires at least one column to set (for table ${ast.tableDef.sqliteDef.name}). Running no-op query instead to skip this update query.`,
|
147
148
|
)
|
148
|
-
return { query: 'SELECT 1', bindValues: [] }
|
149
|
+
return { query: 'SELECT 1', bindValues: [], usedTables }
|
149
150
|
// return shouldNeverHappen('UPDATE query requires at least one column to set.')
|
150
151
|
}
|
151
152
|
|
@@ -162,7 +163,7 @@ export const astToSql = (ast: QueryBuilderAst): { query: string; bindValues: Sql
|
|
162
163
|
if (whereClause) query += ` ${whereClause}`
|
163
164
|
|
164
165
|
query += formatReturningClause(ast.returning)
|
165
|
-
return { query, bindValues }
|
166
|
+
return { query, bindValues, usedTables }
|
166
167
|
}
|
167
168
|
|
168
169
|
// DELETE query
|
@@ -173,7 +174,7 @@ export const astToSql = (ast: QueryBuilderAst): { query: string; bindValues: Sql
|
|
173
174
|
if (whereClause) query += ` ${whereClause}`
|
174
175
|
|
175
176
|
query += formatReturningClause(ast.returning)
|
176
|
-
return { query, bindValues }
|
177
|
+
return { query, bindValues, usedTables }
|
177
178
|
}
|
178
179
|
|
179
180
|
// COUNT query
|
@@ -185,7 +186,7 @@ export const astToSql = (ast: QueryBuilderAst): { query: string; bindValues: Sql
|
|
185
186
|
.filter((clause) => clause.length > 0)
|
186
187
|
.join(' ')
|
187
188
|
|
188
|
-
return { query, bindValues }
|
189
|
+
return { query, bindValues, usedTables }
|
189
190
|
}
|
190
191
|
|
191
192
|
// ROW query
|
@@ -202,6 +203,7 @@ export const astToSql = (ast: QueryBuilderAst): { query: string; bindValues: Sql
|
|
202
203
|
return {
|
203
204
|
query: `SELECT * FROM '${ast.tableDef.sqliteDef.name}' WHERE id = ?`,
|
204
205
|
bindValues: [encodedId as SqlValue],
|
206
|
+
usedTables,
|
205
207
|
}
|
206
208
|
}
|
207
209
|
|
@@ -228,5 +230,5 @@ export const astToSql = (ast: QueryBuilderAst): { query: string; bindValues: Sql
|
|
228
230
|
.filter((clause) => clause.length > 0)
|
229
231
|
.join(' ')
|
230
232
|
|
231
|
-
return { query, bindValues }
|
233
|
+
return { query, bindValues, usedTables }
|
232
234
|
}
|