@livestore/common 0.4.0-dev.0 → 0.4.0-dev.10

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 (255) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/ClientSessionLeaderThreadProxy.d.ts +7 -2
  3. package/dist/ClientSessionLeaderThreadProxy.d.ts.map +1 -1
  4. package/dist/ClientSessionLeaderThreadProxy.js.map +1 -1
  5. package/dist/adapter-types.d.ts +9 -3
  6. package/dist/adapter-types.d.ts.map +1 -1
  7. package/dist/adapter-types.js.map +1 -1
  8. package/dist/devtools/devtools-messages-client-session.d.ts +21 -21
  9. package/dist/devtools/devtools-messages-common.d.ts +7 -14
  10. package/dist/devtools/devtools-messages-common.d.ts.map +1 -1
  11. package/dist/devtools/devtools-messages-common.js +1 -6
  12. package/dist/devtools/devtools-messages-common.js.map +1 -1
  13. package/dist/devtools/devtools-messages-leader.d.ts +27 -25
  14. package/dist/devtools/devtools-messages-leader.d.ts.map +1 -1
  15. package/dist/errors.d.ts +47 -5
  16. package/dist/errors.d.ts.map +1 -1
  17. package/dist/errors.js +22 -3
  18. package/dist/errors.js.map +1 -1
  19. package/dist/leader-thread/LeaderSyncProcessor.d.ts +7 -3
  20. package/dist/leader-thread/LeaderSyncProcessor.d.ts.map +1 -1
  21. package/dist/leader-thread/LeaderSyncProcessor.js +122 -49
  22. package/dist/leader-thread/LeaderSyncProcessor.js.map +1 -1
  23. package/dist/leader-thread/eventlog.d.ts +4 -10
  24. package/dist/leader-thread/eventlog.d.ts.map +1 -1
  25. package/dist/leader-thread/eventlog.js +4 -6
  26. package/dist/leader-thread/eventlog.js.map +1 -1
  27. package/dist/leader-thread/leader-worker-devtools.d.ts +1 -1
  28. package/dist/leader-thread/leader-worker-devtools.js +6 -2
  29. package/dist/leader-thread/leader-worker-devtools.js.map +1 -1
  30. package/dist/leader-thread/make-leader-thread-layer.d.ts +1 -2
  31. package/dist/leader-thread/make-leader-thread-layer.d.ts.map +1 -1
  32. package/dist/leader-thread/make-leader-thread-layer.js +68 -19
  33. package/dist/leader-thread/make-leader-thread-layer.js.map +1 -1
  34. package/dist/leader-thread/make-leader-thread-layer.test.d.ts +2 -0
  35. package/dist/leader-thread/make-leader-thread-layer.test.d.ts.map +1 -0
  36. package/dist/leader-thread/make-leader-thread-layer.test.js +32 -0
  37. package/dist/leader-thread/make-leader-thread-layer.test.js.map +1 -0
  38. package/dist/leader-thread/materialize-event.d.ts +2 -2
  39. package/dist/leader-thread/materialize-event.d.ts.map +1 -1
  40. package/dist/leader-thread/materialize-event.js +23 -9
  41. package/dist/leader-thread/materialize-event.js.map +1 -1
  42. package/dist/leader-thread/recreate-db.d.ts +2 -3
  43. package/dist/leader-thread/recreate-db.d.ts.map +1 -1
  44. package/dist/leader-thread/recreate-db.js +1 -1
  45. package/dist/leader-thread/recreate-db.js.map +1 -1
  46. package/dist/leader-thread/shutdown-channel.d.ts +2 -2
  47. package/dist/leader-thread/shutdown-channel.d.ts.map +1 -1
  48. package/dist/leader-thread/shutdown-channel.js +2 -2
  49. package/dist/leader-thread/shutdown-channel.js.map +1 -1
  50. package/dist/leader-thread/types.d.ts +7 -5
  51. package/dist/leader-thread/types.d.ts.map +1 -1
  52. package/dist/leader-thread/types.js.map +1 -1
  53. package/dist/materializer-helper.d.ts +1 -1
  54. package/dist/materializer-helper.d.ts.map +1 -1
  55. package/dist/materializer-helper.js +20 -4
  56. package/dist/materializer-helper.js.map +1 -1
  57. package/dist/rematerialize-from-eventlog.d.ts +1 -1
  58. package/dist/rematerialize-from-eventlog.d.ts.map +1 -1
  59. package/dist/rematerialize-from-eventlog.js +25 -16
  60. package/dist/rematerialize-from-eventlog.js.map +1 -1
  61. package/dist/schema/EventDef.d.ts +3 -0
  62. package/dist/schema/EventDef.d.ts.map +1 -1
  63. package/dist/schema/EventDef.js.map +1 -1
  64. package/dist/schema/LiveStoreEvent.d.ts +1 -1
  65. package/dist/schema/LiveStoreEvent.d.ts.map +1 -1
  66. package/dist/schema/LiveStoreEvent.js +1 -2
  67. package/dist/schema/LiveStoreEvent.js.map +1 -1
  68. package/dist/schema/mod.d.ts +2 -0
  69. package/dist/schema/mod.d.ts.map +1 -1
  70. package/dist/schema/mod.js +1 -0
  71. package/dist/schema/mod.js.map +1 -1
  72. package/dist/schema/schema.d.ts +15 -0
  73. package/dist/schema/schema.d.ts.map +1 -1
  74. package/dist/schema/schema.js +26 -1
  75. package/dist/schema/schema.js.map +1 -1
  76. package/dist/schema/state/sqlite/client-document-def.d.ts +35 -5
  77. package/dist/schema/state/sqlite/client-document-def.d.ts.map +1 -1
  78. package/dist/schema/state/sqlite/client-document-def.js +95 -4
  79. package/dist/schema/state/sqlite/client-document-def.js.map +1 -1
  80. package/dist/schema/state/sqlite/client-document-def.test.js +16 -0
  81. package/dist/schema/state/sqlite/client-document-def.test.js.map +1 -1
  82. package/dist/schema/state/sqlite/column-annotations.d.ts.map +1 -1
  83. package/dist/schema/state/sqlite/column-annotations.js +14 -6
  84. package/dist/schema/state/sqlite/column-annotations.js.map +1 -1
  85. package/dist/schema/state/sqlite/column-def.d.ts +19 -0
  86. package/dist/schema/state/sqlite/column-def.d.ts.map +1 -0
  87. package/dist/schema/state/sqlite/column-def.js +179 -0
  88. package/dist/schema/state/sqlite/column-def.js.map +1 -0
  89. package/dist/schema/state/sqlite/column-def.test.d.ts +2 -0
  90. package/dist/schema/state/sqlite/column-def.test.d.ts.map +1 -0
  91. package/dist/schema/state/sqlite/column-def.test.js +572 -0
  92. package/dist/schema/state/sqlite/column-def.test.js.map +1 -0
  93. package/dist/schema/state/sqlite/db-schema/ast/sqlite.d.ts +2 -1
  94. package/dist/schema/state/sqlite/db-schema/ast/sqlite.d.ts.map +1 -1
  95. package/dist/schema/state/sqlite/db-schema/ast/sqlite.js +23 -6
  96. package/dist/schema/state/sqlite/db-schema/ast/sqlite.js.map +1 -1
  97. package/dist/schema/state/sqlite/db-schema/dsl/mod.d.ts.map +1 -1
  98. package/dist/schema/state/sqlite/db-schema/dsl/mod.js +2 -1
  99. package/dist/schema/state/sqlite/db-schema/dsl/mod.js.map +1 -1
  100. package/dist/schema/state/sqlite/mod.d.ts +1 -1
  101. package/dist/schema/state/sqlite/mod.d.ts.map +1 -1
  102. package/dist/schema/state/sqlite/mod.js +1 -1
  103. package/dist/schema/state/sqlite/mod.js.map +1 -1
  104. package/dist/schema/state/sqlite/query-builder/api.d.ts +5 -2
  105. package/dist/schema/state/sqlite/query-builder/api.d.ts.map +1 -1
  106. package/dist/schema/state/sqlite/query-builder/impl.d.ts.map +1 -1
  107. package/dist/schema/state/sqlite/query-builder/impl.js +6 -2
  108. package/dist/schema/state/sqlite/query-builder/impl.js.map +1 -1
  109. package/dist/schema/state/sqlite/query-builder/impl.test.js +137 -2
  110. package/dist/schema/state/sqlite/query-builder/impl.test.js.map +1 -1
  111. package/dist/schema/state/sqlite/system-tables.d.ts +42 -6
  112. package/dist/schema/state/sqlite/system-tables.d.ts.map +1 -1
  113. package/dist/schema/state/sqlite/system-tables.js +2 -0
  114. package/dist/schema/state/sqlite/system-tables.js.map +1 -1
  115. package/dist/schema/state/sqlite/table-def.d.ts +6 -8
  116. package/dist/schema/state/sqlite/table-def.d.ts.map +1 -1
  117. package/dist/schema/state/sqlite/table-def.js +4 -211
  118. package/dist/schema/state/sqlite/table-def.js.map +1 -1
  119. package/dist/schema/state/sqlite/table-def.test.js +59 -453
  120. package/dist/schema/state/sqlite/table-def.test.js.map +1 -1
  121. package/dist/schema/unknown-events.d.ts +47 -0
  122. package/dist/schema/unknown-events.d.ts.map +1 -0
  123. package/dist/schema/unknown-events.js +69 -0
  124. package/dist/schema/unknown-events.js.map +1 -0
  125. package/dist/sql-queries/sql-query-builder.d.ts.map +1 -1
  126. package/dist/sql-queries/sql-query-builder.js +2 -1
  127. package/dist/sql-queries/sql-query-builder.js.map +1 -1
  128. package/dist/sync/ClientSessionSyncProcessor.d.ts +9 -11
  129. package/dist/sync/ClientSessionSyncProcessor.d.ts.map +1 -1
  130. package/dist/sync/ClientSessionSyncProcessor.js +35 -33
  131. package/dist/sync/ClientSessionSyncProcessor.js.map +1 -1
  132. package/dist/sync/errors.d.ts +61 -0
  133. package/dist/sync/errors.d.ts.map +1 -0
  134. package/dist/sync/errors.js +36 -0
  135. package/dist/sync/errors.js.map +1 -0
  136. package/dist/sync/index.d.ts +3 -0
  137. package/dist/sync/index.d.ts.map +1 -1
  138. package/dist/sync/index.js +3 -0
  139. package/dist/sync/index.js.map +1 -1
  140. package/dist/sync/mock-sync-backend.d.ts +23 -0
  141. package/dist/sync/mock-sync-backend.d.ts.map +1 -0
  142. package/dist/sync/mock-sync-backend.js +114 -0
  143. package/dist/sync/mock-sync-backend.js.map +1 -0
  144. package/dist/sync/next/compact-events.d.ts.map +1 -1
  145. package/dist/sync/next/compact-events.js +4 -5
  146. package/dist/sync/next/compact-events.js.map +1 -1
  147. package/dist/sync/next/facts.d.ts.map +1 -1
  148. package/dist/sync/next/facts.js +1 -2
  149. package/dist/sync/next/facts.js.map +1 -1
  150. package/dist/sync/next/history-dag-common.d.ts +50 -11
  151. package/dist/sync/next/history-dag-common.d.ts.map +1 -1
  152. package/dist/sync/next/history-dag-common.js +193 -4
  153. package/dist/sync/next/history-dag-common.js.map +1 -1
  154. package/dist/sync/next/history-dag.d.ts.map +1 -1
  155. package/dist/sync/next/history-dag.js +3 -1
  156. package/dist/sync/next/history-dag.js.map +1 -1
  157. package/dist/sync/sync-backend-kv.d.ts +7 -0
  158. package/dist/sync/sync-backend-kv.d.ts.map +1 -0
  159. package/dist/sync/sync-backend-kv.js +18 -0
  160. package/dist/sync/sync-backend-kv.js.map +1 -0
  161. package/dist/sync/sync-backend.d.ts +105 -0
  162. package/dist/sync/sync-backend.d.ts.map +1 -0
  163. package/dist/sync/sync-backend.js +61 -0
  164. package/dist/sync/sync-backend.js.map +1 -0
  165. package/dist/sync/sync.d.ts +6 -84
  166. package/dist/sync/sync.d.ts.map +1 -1
  167. package/dist/sync/sync.js +2 -27
  168. package/dist/sync/sync.js.map +1 -1
  169. package/dist/sync/transport-chunking.d.ts +36 -0
  170. package/dist/sync/transport-chunking.d.ts.map +1 -0
  171. package/dist/sync/transport-chunking.js +56 -0
  172. package/dist/sync/transport-chunking.js.map +1 -0
  173. package/dist/sync/validate-push-payload.d.ts +1 -1
  174. package/dist/sync/validate-push-payload.d.ts.map +1 -1
  175. package/dist/sync/validate-push-payload.js +6 -6
  176. package/dist/sync/validate-push-payload.js.map +1 -1
  177. package/dist/testing/event-factory.d.ts +68 -0
  178. package/dist/testing/event-factory.d.ts.map +1 -0
  179. package/dist/testing/event-factory.js +80 -0
  180. package/dist/testing/event-factory.js.map +1 -0
  181. package/dist/testing/mod.d.ts +2 -0
  182. package/dist/testing/mod.d.ts.map +1 -0
  183. package/dist/testing/mod.js +2 -0
  184. package/dist/testing/mod.js.map +1 -0
  185. package/dist/version.d.ts +2 -2
  186. package/dist/version.d.ts.map +1 -1
  187. package/dist/version.js +2 -2
  188. package/dist/version.js.map +1 -1
  189. package/package.json +7 -8
  190. package/src/ClientSessionLeaderThreadProxy.ts +7 -2
  191. package/src/adapter-types.ts +13 -3
  192. package/src/devtools/devtools-messages-common.ts +1 -8
  193. package/src/errors.ts +33 -4
  194. package/src/leader-thread/LeaderSyncProcessor.ts +179 -57
  195. package/src/leader-thread/eventlog.ts +10 -6
  196. package/src/leader-thread/leader-worker-devtools.ts +6 -2
  197. package/src/leader-thread/make-leader-thread-layer.test.ts +44 -0
  198. package/src/leader-thread/make-leader-thread-layer.ts +137 -26
  199. package/src/leader-thread/materialize-event.ts +34 -9
  200. package/src/leader-thread/recreate-db.ts +11 -3
  201. package/src/leader-thread/shutdown-channel.ts +16 -2
  202. package/src/leader-thread/types.ts +7 -5
  203. package/src/materializer-helper.ts +22 -5
  204. package/src/rematerialize-from-eventlog.ts +33 -23
  205. package/src/schema/EventDef.ts +3 -0
  206. package/src/schema/LiveStoreEvent.ts +1 -2
  207. package/src/schema/mod.ts +2 -0
  208. package/src/schema/schema.ts +37 -1
  209. package/src/schema/state/sqlite/client-document-def.test.ts +17 -0
  210. package/src/schema/state/sqlite/client-document-def.ts +117 -5
  211. package/src/schema/state/sqlite/column-annotations.ts +16 -6
  212. package/src/schema/state/sqlite/column-def.test.ts +722 -0
  213. package/src/schema/state/sqlite/column-def.ts +215 -0
  214. package/src/schema/state/sqlite/db-schema/ast/sqlite.ts +26 -6
  215. package/src/schema/state/sqlite/db-schema/dsl/mod.ts +2 -1
  216. package/src/schema/state/sqlite/mod.ts +1 -0
  217. package/src/schema/state/sqlite/query-builder/api.ts +7 -2
  218. package/src/schema/state/sqlite/query-builder/impl.test.ts +187 -6
  219. package/src/schema/state/sqlite/query-builder/impl.ts +8 -2
  220. package/src/schema/state/sqlite/system-tables.ts +2 -0
  221. package/src/schema/state/sqlite/table-def.test.ts +74 -569
  222. package/src/schema/state/sqlite/table-def.ts +13 -262
  223. package/src/schema/unknown-events.ts +131 -0
  224. package/src/sql-queries/sql-query-builder.ts +2 -1
  225. package/src/sync/ClientSessionSyncProcessor.ts +55 -49
  226. package/src/sync/errors.ts +38 -0
  227. package/src/sync/index.ts +3 -0
  228. package/src/sync/mock-sync-backend.ts +184 -0
  229. package/src/sync/next/compact-events.ts +4 -5
  230. package/src/sync/next/facts.ts +1 -3
  231. package/src/sync/next/history-dag-common.ts +272 -21
  232. package/src/sync/next/history-dag.ts +3 -1
  233. package/src/sync/sync-backend-kv.ts +22 -0
  234. package/src/sync/sync-backend.ts +185 -0
  235. package/src/sync/sync.ts +6 -89
  236. package/src/sync/transport-chunking.ts +90 -0
  237. package/src/sync/validate-push-payload.ts +6 -7
  238. package/src/testing/event-factory.ts +133 -0
  239. package/src/testing/mod.ts +1 -0
  240. package/src/version.ts +2 -2
  241. package/dist/schema-management/migrations.test.d.ts +0 -2
  242. package/dist/schema-management/migrations.test.d.ts.map +0 -1
  243. package/dist/schema-management/migrations.test.js +0 -52
  244. package/dist/schema-management/migrations.test.js.map +0 -1
  245. package/dist/sync/next/graphology.d.ts +0 -8
  246. package/dist/sync/next/graphology.d.ts.map +0 -1
  247. package/dist/sync/next/graphology.js +0 -30
  248. package/dist/sync/next/graphology.js.map +0 -1
  249. package/dist/sync/next/graphology_.d.ts +0 -3
  250. package/dist/sync/next/graphology_.d.ts.map +0 -1
  251. package/dist/sync/next/graphology_.js +0 -3
  252. package/dist/sync/next/graphology_.js.map +0 -1
  253. package/src/sync/next/ambient.d.ts +0 -3
  254. package/src/sync/next/graphology.ts +0 -41
  255. package/src/sync/next/graphology_.ts +0 -2
@@ -0,0 +1,179 @@
1
+ import { shouldNeverHappen } from '@livestore/utils';
2
+ import { Option, Schema, SchemaAST } from '@livestore/utils/effect';
3
+ import { AutoIncrement, ColumnType, Default, PrimaryKeyId, Unique } from "./column-annotations.js";
4
+ import { SqliteDsl } from "./db-schema/mod.js";
5
+ /**
6
+ * Maps a schema to a SQLite column definition, respecting column annotations.
7
+ *
8
+ * Note: When used with schema-based table definitions, optional fields (| undefined)
9
+ * are transformed to nullable fields (| null) to match SQLite's NULL semantics.
10
+ * Fields with both null and undefined will emit a warning as this is a lossy conversion.
11
+ */
12
+ export const getColumnDefForSchema = (schema, propertySignature, forceNullable = false) => {
13
+ const ast = schema.ast;
14
+ // Extract annotations
15
+ const getAnnotation = (annotationId) => propertySignature
16
+ ? hasPropertyAnnotation(propertySignature, annotationId)
17
+ : SchemaAST.getAnnotation(annotationId)(ast);
18
+ const columnType = SchemaAST.getAnnotation(ColumnType)(ast);
19
+ // Check if schema has null (e.g., Schema.NullOr) or undefined or if it's forced nullable (optional field)
20
+ const isNullable = forceNullable || hasNull(ast) || hasUndefined(ast);
21
+ // Get base column definition with nullable flag
22
+ const baseColumn = Option.isSome(columnType)
23
+ ? getColumnForType(columnType.value, isNullable)
24
+ : getColumnForSchema(schema, isNullable);
25
+ // Apply annotations
26
+ const primaryKey = getAnnotation(PrimaryKeyId).pipe(Option.getOrElse(() => false));
27
+ const autoIncrement = getAnnotation(AutoIncrement).pipe(Option.getOrElse(() => false));
28
+ const defaultValue = getAnnotation(Default);
29
+ return {
30
+ ...baseColumn,
31
+ ...(primaryKey && { primaryKey: true }),
32
+ ...(autoIncrement && { autoIncrement: true }),
33
+ ...(Option.isSome(defaultValue) && { default: Option.some(defaultValue.value) }),
34
+ };
35
+ };
36
+ const hasPropertyAnnotation = (propertySignature, annotationId) => {
37
+ if ('annotations' in propertySignature && propertySignature.annotations) {
38
+ const annotation = SchemaAST.getAnnotation(annotationId)(propertySignature);
39
+ if (Option.isSome(annotation))
40
+ return annotation;
41
+ }
42
+ return SchemaAST.getAnnotation(annotationId)(propertySignature.type);
43
+ };
44
+ /**
45
+ * Maps schema property signatures to SQLite column definitions.
46
+ * Optional fields (| undefined) become nullable columns (| null).
47
+ */
48
+ export const schemaFieldsToColumns = (propertySignatures) => {
49
+ const columns = {};
50
+ const uniqueColumns = [];
51
+ for (const prop of propertySignatures) {
52
+ if (typeof prop.name !== 'string')
53
+ continue;
54
+ const fieldSchema = Schema.make(prop.type);
55
+ // Warn about lossy conversion for fields with both null and undefined
56
+ if (prop.isOptional) {
57
+ const { hasNull, hasUndefined } = checkNullUndefined(fieldSchema.ast);
58
+ if (hasNull && hasUndefined) {
59
+ console.warn(`Field '${prop.name}' has both null and undefined - treating | undefined as | null`);
60
+ }
61
+ }
62
+ // Get column definition - pass nullable flag for optional fields
63
+ const columnDef = getColumnDefForSchema(fieldSchema, prop, prop.isOptional);
64
+ // Check for primary key and unique annotations
65
+ const hasPrimaryKey = hasPropertyAnnotation(prop, PrimaryKeyId).pipe(Option.getOrElse(() => false));
66
+ const hasUnique = hasPropertyAnnotation(prop, Unique).pipe(Option.getOrElse(() => false));
67
+ // Build final column
68
+ columns[prop.name] = {
69
+ ...columnDef,
70
+ ...(hasPrimaryKey && { primaryKey: true }),
71
+ };
72
+ // Validate primary key + nullable
73
+ const column = columns[prop.name];
74
+ if (column?.primaryKey && column.nullable) {
75
+ throw new Error('Primary key columns cannot be nullable');
76
+ }
77
+ if (hasUnique)
78
+ uniqueColumns.push(prop.name);
79
+ }
80
+ return { columns, uniqueColumns };
81
+ };
82
+ const checkNullUndefined = (ast) => {
83
+ let hasNull = false;
84
+ let hasUndefined = false;
85
+ const visit = (type) => {
86
+ if (SchemaAST.isUndefinedKeyword(type))
87
+ hasUndefined = true;
88
+ else if (SchemaAST.isLiteral(type) && type.literal === null)
89
+ hasNull = true;
90
+ else if (SchemaAST.isUnion(type))
91
+ type.types.forEach(visit);
92
+ };
93
+ visit(ast);
94
+ return { hasNull, hasUndefined };
95
+ };
96
+ const hasNull = (ast) => {
97
+ if (SchemaAST.isLiteral(ast) && ast.literal === null)
98
+ return true;
99
+ if (SchemaAST.isUnion(ast)) {
100
+ return ast.types.some((type) => hasNull(type));
101
+ }
102
+ return false;
103
+ };
104
+ const hasUndefined = (ast) => {
105
+ if (SchemaAST.isUndefinedKeyword(ast))
106
+ return true;
107
+ if (SchemaAST.isUnion(ast)) {
108
+ return ast.types.some((type) => hasUndefined(type));
109
+ }
110
+ return false;
111
+ };
112
+ const getColumnForType = (columnType, nullable = false) => {
113
+ switch (columnType) {
114
+ case 'text':
115
+ return SqliteDsl.text({ nullable });
116
+ case 'integer':
117
+ return SqliteDsl.integer({ nullable });
118
+ case 'real':
119
+ return SqliteDsl.real({ nullable });
120
+ case 'blob':
121
+ return SqliteDsl.blob({ nullable });
122
+ default:
123
+ return shouldNeverHappen(`Unsupported column type: ${columnType}`);
124
+ }
125
+ };
126
+ const getColumnForSchema = (schema, nullable = false) => {
127
+ const ast = schema.ast;
128
+ // Strip nullable wrapper to get core type
129
+ const coreAst = stripNullable(ast);
130
+ const coreSchema = stripNullable(ast) === ast ? schema : Schema.make(coreAst);
131
+ // Special case: Boolean is transformed to integer in SQLite
132
+ if (SchemaAST.isBooleanKeyword(coreAst)) {
133
+ return SqliteDsl.boolean({ nullable });
134
+ }
135
+ // Get the encoded AST - what actually gets stored in SQLite
136
+ const encodedAst = Schema.encodedSchema(coreSchema).ast;
137
+ // Check if the encoded type matches SQLite native types
138
+ if (SchemaAST.isStringKeyword(encodedAst)) {
139
+ return SqliteDsl.text({ schema: coreSchema, nullable });
140
+ }
141
+ if (SchemaAST.isNumberKeyword(encodedAst)) {
142
+ // Special cases for integer columns
143
+ const id = SchemaAST.getIdentifierAnnotation(coreAst).pipe(Option.getOrElse(() => ''));
144
+ if (id === 'Int' || id === 'DateFromNumber') {
145
+ return SqliteDsl.integer({ schema: coreSchema, nullable });
146
+ }
147
+ return SqliteDsl.real({ schema: coreSchema, nullable });
148
+ }
149
+ // Literals based on their type
150
+ if (SchemaAST.isLiteral(coreAst)) {
151
+ const value = coreAst.literal;
152
+ if (typeof value === 'boolean')
153
+ return SqliteDsl.boolean({ nullable });
154
+ }
155
+ // Literals based on their encoded type
156
+ if (SchemaAST.isLiteral(encodedAst)) {
157
+ const value = encodedAst.literal;
158
+ if (typeof value === 'string')
159
+ return SqliteDsl.text({ schema: coreSchema, nullable });
160
+ if (typeof value === 'number') {
161
+ // Check if the original schema is Int
162
+ const id = SchemaAST.getIdentifierAnnotation(coreAst).pipe(Option.getOrElse(() => ''));
163
+ if (id === 'Int') {
164
+ return SqliteDsl.integer({ schema: coreSchema, nullable });
165
+ }
166
+ return SqliteDsl.real({ schema: coreSchema, nullable });
167
+ }
168
+ }
169
+ // Everything else needs JSON encoding
170
+ return SqliteDsl.json({ schema: coreSchema, nullable });
171
+ };
172
+ const stripNullable = (ast) => {
173
+ if (!SchemaAST.isUnion(ast))
174
+ return ast;
175
+ // Find non-null/undefined type
176
+ const core = ast.types.find((type) => !(SchemaAST.isLiteral(type) && type.literal === null) && !SchemaAST.isUndefinedKeyword(type));
177
+ return core || ast;
178
+ };
179
+ //# sourceMappingURL=column-def.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"column-def.js","sourceRoot":"","sources":["../../../../src/schema/state/sqlite/column-def.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=column-def.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"column-def.test.d.ts","sourceRoot":"","sources":["../../../../src/schema/state/sqlite/column-def.test.ts"],"names":[],"mappings":""}