@livestore/common 0.4.0-dev.0 → 0.4.0-dev.1
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/devtools/devtools-messages-client-session.d.ts +21 -21
- package/dist/devtools/devtools-messages-common.d.ts +6 -6
- package/dist/devtools/devtools-messages-leader.d.ts +24 -24
- package/dist/schema/state/sqlite/column-def.d.ts +15 -0
- package/dist/schema/state/sqlite/column-def.d.ts.map +1 -0
- package/dist/schema/state/sqlite/column-def.js +242 -0
- package/dist/schema/state/sqlite/column-def.js.map +1 -0
- package/dist/schema/state/sqlite/column-def.test.d.ts +2 -0
- package/dist/schema/state/sqlite/column-def.test.d.ts.map +1 -0
- package/dist/schema/state/sqlite/column-def.test.js +529 -0
- package/dist/schema/state/sqlite/column-def.test.js.map +1 -0
- package/dist/schema/state/sqlite/table-def.d.ts +3 -5
- package/dist/schema/state/sqlite/table-def.d.ts.map +1 -1
- package/dist/schema/state/sqlite/table-def.js +4 -211
- package/dist/schema/state/sqlite/table-def.js.map +1 -1
- package/dist/schema/state/sqlite/table-def.test.js +9 -452
- package/dist/schema/state/sqlite/table-def.test.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +4 -4
- package/src/schema/state/sqlite/column-def.test.ts +665 -0
- package/src/schema/state/sqlite/column-def.ts +290 -0
- package/src/schema/state/sqlite/table-def.test.ts +11 -568
- package/src/schema/state/sqlite/table-def.ts +6 -256
- package/src/version.ts +1 -1
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"table-def.d.ts","sourceRoot":"","sources":["../../../../src/schema/state/sqlite/table-def.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,QAAQ,
|
1
|
+
{"version":3,"file":"table-def.d.ts","sourceRoot":"","sources":["../../../../src/schema/state/sqlite/table-def.ts"],"names":[],"mappings":"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"}
|
@@ -1,9 +1,11 @@
|
|
1
1
|
import { shouldNeverHappen } from '@livestore/utils';
|
2
|
-
import { Option,
|
3
|
-
import {
|
2
|
+
import { Option, SchemaAST } from '@livestore/utils/effect';
|
3
|
+
import { getColumnDefForSchema, schemaFieldsToColumns } from "./column-def.js";
|
4
4
|
import { SqliteDsl } from "./db-schema/mod.js";
|
5
5
|
import { makeQueryBuilder, QueryBuilderAstSymbol, QueryBuilderTypeId } from "./query-builder/mod.js";
|
6
6
|
export const { blob, boolean, column, datetime, integer, isColumnDefinition, json, real, text } = SqliteDsl;
|
7
|
+
// Re-export the column definition function
|
8
|
+
export { getColumnDefForSchema };
|
7
9
|
// TODO use to hide table def internals
|
8
10
|
export const TableDefInternalsSymbol = Symbol('TableDefInternals');
|
9
11
|
// Implementation
|
@@ -70,213 +72,4 @@ export function table(args) {
|
|
70
72
|
tableDef[QueryBuilderTypeId] = query[QueryBuilderTypeId];
|
71
73
|
return tableDef;
|
72
74
|
}
|
73
|
-
/**
|
74
|
-
* Checks if a property signature has a specific annotation, checking both
|
75
|
-
* the property signature itself and its type AST.
|
76
|
-
*/
|
77
|
-
const hasPropertyAnnotation = (propertySignature, annotationId) => {
|
78
|
-
// When using Schema.optional(Schema.String).pipe(withPrimaryKey) in a struct,
|
79
|
-
// the annotation ends up on a PropertySignatureDeclaration, not the Union type
|
80
|
-
// Check if this is a PropertySignatureDeclaration with annotations
|
81
|
-
if ('annotations' in propertySignature && propertySignature.annotations) {
|
82
|
-
const annotation = SchemaAST.getAnnotation(annotationId)(propertySignature);
|
83
|
-
if (Option.isSome(annotation)) {
|
84
|
-
return annotation;
|
85
|
-
}
|
86
|
-
}
|
87
|
-
// Otherwise check the type AST
|
88
|
-
return SchemaAST.getAnnotation(annotationId)(propertySignature.type);
|
89
|
-
};
|
90
|
-
/**
|
91
|
-
* Maps schema property signatures to SQLite column definitions.
|
92
|
-
* Returns both columns and unique column names for index creation.
|
93
|
-
*/
|
94
|
-
const schemaFieldsToColumns = (propertySignatures) => {
|
95
|
-
const columns = {};
|
96
|
-
const uniqueColumns = [];
|
97
|
-
for (const prop of propertySignatures) {
|
98
|
-
if (typeof prop.name === 'string') {
|
99
|
-
// Create a schema from the AST
|
100
|
-
const fieldSchema = Schema.make(prop.type);
|
101
|
-
// Check if property has primary key annotation
|
102
|
-
const hasPrimaryKey = hasPropertyAnnotation(prop, PrimaryKeyId).pipe(Option.getOrElse(() => false));
|
103
|
-
// Check if property has unique annotation
|
104
|
-
const hasUnique = hasPropertyAnnotation(prop, Unique).pipe(Option.getOrElse(() => false));
|
105
|
-
columns[prop.name] = schemaFieldToColumn(fieldSchema, prop, hasPrimaryKey);
|
106
|
-
if (hasUnique) {
|
107
|
-
uniqueColumns.push(prop.name);
|
108
|
-
}
|
109
|
-
}
|
110
|
-
}
|
111
|
-
return { columns, uniqueColumns };
|
112
|
-
};
|
113
|
-
/**
|
114
|
-
* Converts a schema field and its property signature to a SQLite column definition.
|
115
|
-
*/
|
116
|
-
const schemaFieldToColumn = (fieldSchema, propertySignature, forceHasPrimaryKey) => {
|
117
|
-
// Determine column type based on schema type
|
118
|
-
const columnDef = getColumnDefForSchema(fieldSchema, propertySignature);
|
119
|
-
// Create a new object with appropriate properties
|
120
|
-
const result = {
|
121
|
-
columnType: columnDef.columnType,
|
122
|
-
schema: columnDef.schema,
|
123
|
-
default: columnDef.default,
|
124
|
-
nullable: columnDef.nullable,
|
125
|
-
primaryKey: columnDef.primaryKey,
|
126
|
-
autoIncrement: columnDef.autoIncrement,
|
127
|
-
};
|
128
|
-
// Set primaryKey property explicitly
|
129
|
-
if (forceHasPrimaryKey || columnDef.primaryKey) {
|
130
|
-
result.primaryKey = true;
|
131
|
-
}
|
132
|
-
else {
|
133
|
-
result.primaryKey = false;
|
134
|
-
}
|
135
|
-
// Check for invalid primary key + nullable combination
|
136
|
-
if (result.primaryKey && (propertySignature.isOptional || columnDef.nullable)) {
|
137
|
-
return shouldNeverHappen(`Primary key columns cannot be nullable. Found nullable primary key for column. ` +
|
138
|
-
`Either remove the primary key annotation or use a non-nullable schema.`);
|
139
|
-
}
|
140
|
-
// Set nullable property explicitly
|
141
|
-
if (propertySignature.isOptional) {
|
142
|
-
result.nullable = true;
|
143
|
-
}
|
144
|
-
else if (columnDef.nullable) {
|
145
|
-
result.nullable = true;
|
146
|
-
}
|
147
|
-
else {
|
148
|
-
result.nullable = false;
|
149
|
-
}
|
150
|
-
// Only add autoIncrement if it's true
|
151
|
-
if (columnDef.autoIncrement) {
|
152
|
-
result.autoIncrement = true;
|
153
|
-
}
|
154
|
-
return result;
|
155
|
-
};
|
156
|
-
/**
|
157
|
-
* Maps a schema to a SQLite column definition, respecting column annotations.
|
158
|
-
*/
|
159
|
-
export const getColumnDefForSchema = (schema, propertySignature) => {
|
160
|
-
const ast = schema.ast;
|
161
|
-
// Check for annotations
|
162
|
-
const hasPrimaryKey = propertySignature
|
163
|
-
? hasPropertyAnnotation(propertySignature, PrimaryKeyId).pipe(Option.getOrElse(() => false))
|
164
|
-
: SchemaAST.getAnnotation(PrimaryKeyId)(ast).pipe(Option.getOrElse(() => false));
|
165
|
-
const hasAutoIncrement = propertySignature
|
166
|
-
? hasPropertyAnnotation(propertySignature, AutoIncrement).pipe(Option.getOrElse(() => false))
|
167
|
-
: SchemaAST.getAnnotation(AutoIncrement)(ast).pipe(Option.getOrElse(() => false));
|
168
|
-
const defaultValue = propertySignature
|
169
|
-
? hasPropertyAnnotation(propertySignature, Default)
|
170
|
-
: SchemaAST.getAnnotation(Default)(ast);
|
171
|
-
/** Adds annotations to a column definition if they are present. */
|
172
|
-
const withAnnotationsIfNeeded = (columnDef) => {
|
173
|
-
const result = { ...columnDef };
|
174
|
-
if (hasPrimaryKey) {
|
175
|
-
result.primaryKey = true;
|
176
|
-
}
|
177
|
-
if (hasAutoIncrement) {
|
178
|
-
result.autoIncrement = true;
|
179
|
-
}
|
180
|
-
if (Option.isSome(defaultValue)) {
|
181
|
-
result.default = Option.some(defaultValue.value);
|
182
|
-
}
|
183
|
-
return result;
|
184
|
-
};
|
185
|
-
// Check for custom column type annotation
|
186
|
-
const columnTypeAnnotation = SchemaAST.getAnnotation(ColumnType)(ast);
|
187
|
-
if (Option.isSome(columnTypeAnnotation)) {
|
188
|
-
const columnType = columnTypeAnnotation.value;
|
189
|
-
let columnDef;
|
190
|
-
switch (columnType) {
|
191
|
-
case 'text':
|
192
|
-
columnDef = SqliteDsl.text();
|
193
|
-
break;
|
194
|
-
case 'integer':
|
195
|
-
columnDef = SqliteDsl.integer();
|
196
|
-
break;
|
197
|
-
case 'real':
|
198
|
-
columnDef = SqliteDsl.real();
|
199
|
-
break;
|
200
|
-
case 'blob':
|
201
|
-
columnDef = SqliteDsl.blob();
|
202
|
-
break;
|
203
|
-
default:
|
204
|
-
return shouldNeverHappen(`Unsupported column type annotation: ${columnType}`);
|
205
|
-
}
|
206
|
-
return withAnnotationsIfNeeded(columnDef);
|
207
|
-
}
|
208
|
-
// Check for refinements (e.g., Schema.Int)
|
209
|
-
if (SchemaAST.isRefinement(ast)) {
|
210
|
-
// Check if this is specifically Schema.Int by looking at the identifier annotation
|
211
|
-
const identifier = SchemaAST.getIdentifierAnnotation(ast).pipe(Option.getOrElse(() => ''));
|
212
|
-
if (identifier === 'Int') {
|
213
|
-
return withAnnotationsIfNeeded(SqliteDsl.integer());
|
214
|
-
}
|
215
|
-
// For other refinements, check the underlying type
|
216
|
-
return getColumnDefForSchema(Schema.make(ast.from), propertySignature);
|
217
|
-
}
|
218
|
-
// Check for string types
|
219
|
-
if (SchemaAST.isStringKeyword(ast)) {
|
220
|
-
return withAnnotationsIfNeeded(SqliteDsl.text());
|
221
|
-
}
|
222
|
-
// Check for number types
|
223
|
-
if (SchemaAST.isNumberKeyword(ast)) {
|
224
|
-
return withAnnotationsIfNeeded(SqliteDsl.real());
|
225
|
-
}
|
226
|
-
// Check for boolean types
|
227
|
-
if (SchemaAST.isBooleanKeyword(ast)) {
|
228
|
-
return withAnnotationsIfNeeded(SqliteDsl.boolean());
|
229
|
-
}
|
230
|
-
// Check for unions (like optional or nullable)
|
231
|
-
if (SchemaAST.isUnion(ast)) {
|
232
|
-
// Check if this union contains null or undefined (making it nullable/optional)
|
233
|
-
let hasNull = false;
|
234
|
-
let hasUndefined = false;
|
235
|
-
let nonNullableType;
|
236
|
-
for (const type of ast.types) {
|
237
|
-
if (SchemaAST.isUndefinedKeyword(type)) {
|
238
|
-
hasUndefined = true;
|
239
|
-
}
|
240
|
-
else if (SchemaAST.isLiteral(type) && type.literal === null) {
|
241
|
-
hasNull = true;
|
242
|
-
}
|
243
|
-
else {
|
244
|
-
nonNullableType = type;
|
245
|
-
}
|
246
|
-
}
|
247
|
-
// If we found a non-nullable type, use it for the column definition
|
248
|
-
if (nonNullableType) {
|
249
|
-
const innerSchema = Schema.make(nonNullableType);
|
250
|
-
const innerColumnDef = getColumnDefForSchema(innerSchema, propertySignature);
|
251
|
-
// If the union contains null or undefined, mark as nullable
|
252
|
-
if (hasNull || hasUndefined) {
|
253
|
-
return withAnnotationsIfNeeded({
|
254
|
-
...innerColumnDef,
|
255
|
-
nullable: true,
|
256
|
-
});
|
257
|
-
}
|
258
|
-
return withAnnotationsIfNeeded(innerColumnDef);
|
259
|
-
}
|
260
|
-
}
|
261
|
-
// Check for Date types
|
262
|
-
if (SchemaAST.isTransformation(ast)) {
|
263
|
-
// Try to map the transformation's target type
|
264
|
-
return getColumnDefForSchema(Schema.make(ast.to), propertySignature);
|
265
|
-
}
|
266
|
-
// Check for literal types
|
267
|
-
if (SchemaAST.isLiteral(ast)) {
|
268
|
-
const value = ast.literal;
|
269
|
-
if (typeof value === 'string') {
|
270
|
-
return withAnnotationsIfNeeded(SqliteDsl.text());
|
271
|
-
}
|
272
|
-
else if (typeof value === 'number') {
|
273
|
-
return withAnnotationsIfNeeded(SqliteDsl.real());
|
274
|
-
}
|
275
|
-
else if (typeof value === 'boolean') {
|
276
|
-
return withAnnotationsIfNeeded(SqliteDsl.boolean());
|
277
|
-
}
|
278
|
-
}
|
279
|
-
// Default to JSON column for complex types
|
280
|
-
return withAnnotationsIfNeeded(SqliteDsl.json({ schema }));
|
281
|
-
};
|
282
75
|
//# sourceMappingURL=table-def.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"table-def.js","sourceRoot":"","sources":["../../../../src/schema/state/sqlite/table-def.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,iBAAiB,
|
1
|
+
{"version":3,"file":"table-def.js","sourceRoot":"","sources":["../../../../src/schema/state/sqlite/table-def.ts"],"names":[],"mappings":"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"}
|