uql-orm 0.9.4 → 0.9.5

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 (657) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/README.md +62 -683
  3. package/dist/browser/uql-browser.min.js +1380 -0
  4. package/dist/browser/uql-browser.min.js.map +1 -1
  5. package/package.json +4 -4
  6. package/dist/browser/http/bus.d.ts +0 -4
  7. package/dist/browser/http/bus.d.ts.map +0 -1
  8. package/dist/browser/http/bus.js +0 -14
  9. package/dist/browser/http/bus.js.map +0 -1
  10. package/dist/browser/http/http.d.ts +0 -7
  11. package/dist/browser/http/http.d.ts.map +0 -1
  12. package/dist/browser/http/http.js +0 -45
  13. package/dist/browser/http/http.js.map +0 -1
  14. package/dist/browser/http/index.d.ts +0 -3
  15. package/dist/browser/http/index.d.ts.map +0 -1
  16. package/dist/browser/http/index.js +0 -3
  17. package/dist/browser/http/index.js.map +0 -1
  18. package/dist/browser/index.d.ts +0 -5
  19. package/dist/browser/index.d.ts.map +0 -1
  20. package/dist/browser/index.js +0 -5
  21. package/dist/browser/index.js.map +0 -1
  22. package/dist/browser/options.d.ts +0 -5
  23. package/dist/browser/options.d.ts.map +0 -1
  24. package/dist/browser/options.js +0 -14
  25. package/dist/browser/options.js.map +0 -1
  26. package/dist/browser/querier/httpQuerier.d.ts +0 -20
  27. package/dist/browser/querier/httpQuerier.d.ts.map +0 -1
  28. package/dist/browser/querier/httpQuerier.js +0 -68
  29. package/dist/browser/querier/httpQuerier.js.map +0 -1
  30. package/dist/browser/querier/index.d.ts +0 -3
  31. package/dist/browser/querier/index.d.ts.map +0 -1
  32. package/dist/browser/querier/index.js +0 -3
  33. package/dist/browser/querier/index.js.map +0 -1
  34. package/dist/browser/querier/querier.util.d.ts +0 -3
  35. package/dist/browser/querier/querier.util.d.ts.map +0 -1
  36. package/dist/browser/querier/querier.util.js +0 -17
  37. package/dist/browser/querier/querier.util.js.map +0 -1
  38. package/dist/browser/type/clientQuerier.d.ts +0 -24
  39. package/dist/browser/type/clientQuerier.d.ts.map +0 -1
  40. package/dist/browser/type/clientQuerier.js +0 -2
  41. package/dist/browser/type/clientQuerier.js.map +0 -1
  42. package/dist/browser/type/clientQuerierPool.d.ts +0 -5
  43. package/dist/browser/type/clientQuerierPool.d.ts.map +0 -1
  44. package/dist/browser/type/clientQuerierPool.js +0 -2
  45. package/dist/browser/type/clientQuerierPool.js.map +0 -1
  46. package/dist/browser/type/index.d.ts +0 -4
  47. package/dist/browser/type/index.d.ts.map +0 -1
  48. package/dist/browser/type/index.js +0 -4
  49. package/dist/browser/type/index.js.map +0 -1
  50. package/dist/browser/type/request.d.ts +0 -29
  51. package/dist/browser/type/request.d.ts.map +0 -1
  52. package/dist/browser/type/request.js +0 -2
  53. package/dist/browser/type/request.js.map +0 -1
  54. package/dist/bunSql/bunSql.util.d.ts +0 -30
  55. package/dist/bunSql/bunSql.util.d.ts.map +0 -1
  56. package/dist/bunSql/bunSql.util.js +0 -101
  57. package/dist/bunSql/bunSql.util.js.map +0 -1
  58. package/dist/bunSql/bunSqlPostgresDialect.d.ts +0 -12
  59. package/dist/bunSql/bunSqlPostgresDialect.d.ts.map +0 -1
  60. package/dist/bunSql/bunSqlPostgresDialect.js +0 -21
  61. package/dist/bunSql/bunSqlPostgresDialect.js.map +0 -1
  62. package/dist/bunSql/bunSqlQuerier.d.ts +0 -14
  63. package/dist/bunSql/bunSqlQuerier.d.ts.map +0 -1
  64. package/dist/bunSql/bunSqlQuerier.js +0 -37
  65. package/dist/bunSql/bunSqlQuerier.js.map +0 -1
  66. package/dist/bunSql/bunSqlQuerierPool.d.ts +0 -19
  67. package/dist/bunSql/bunSqlQuerierPool.d.ts.map +0 -1
  68. package/dist/bunSql/bunSqlQuerierPool.js +0 -58
  69. package/dist/bunSql/bunSqlQuerierPool.js.map +0 -1
  70. package/dist/bunSql/bunSqliteDialect.d.ts +0 -7
  71. package/dist/bunSql/bunSqliteDialect.d.ts.map +0 -1
  72. package/dist/bunSql/bunSqliteDialect.js +0 -7
  73. package/dist/bunSql/bunSqliteDialect.js.map +0 -1
  74. package/dist/bunSql/index.d.ts +0 -5
  75. package/dist/bunSql/index.d.ts.map +0 -1
  76. package/dist/bunSql/index.js +0 -5
  77. package/dist/bunSql/index.js.map +0 -1
  78. package/dist/cockroachdb/cockroachDialect.d.ts +0 -15
  79. package/dist/cockroachdb/cockroachDialect.d.ts.map +0 -1
  80. package/dist/cockroachdb/cockroachDialect.js +0 -14
  81. package/dist/cockroachdb/cockroachDialect.js.map +0 -1
  82. package/dist/cockroachdb/crdbQuerier.d.ts +0 -9
  83. package/dist/cockroachdb/crdbQuerier.d.ts.map +0 -1
  84. package/dist/cockroachdb/crdbQuerier.js +0 -7
  85. package/dist/cockroachdb/crdbQuerier.js.map +0 -1
  86. package/dist/cockroachdb/crdbQuerierPool.d.ts +0 -14
  87. package/dist/cockroachdb/crdbQuerierPool.d.ts.map +0 -1
  88. package/dist/cockroachdb/crdbQuerierPool.js +0 -18
  89. package/dist/cockroachdb/crdbQuerierPool.js.map +0 -1
  90. package/dist/cockroachdb/index.d.ts +0 -4
  91. package/dist/cockroachdb/index.d.ts.map +0 -1
  92. package/dist/cockroachdb/index.js +0 -4
  93. package/dist/cockroachdb/index.js.map +0 -1
  94. package/dist/d1/d1Querier.d.ts +0 -46
  95. package/dist/d1/d1Querier.d.ts.map +0 -1
  96. package/dist/d1/d1Querier.js +0 -30
  97. package/dist/d1/d1Querier.js.map +0 -1
  98. package/dist/d1/d1QuerierPool.d.ts +0 -11
  99. package/dist/d1/d1QuerierPool.d.ts.map +0 -1
  100. package/dist/d1/d1QuerierPool.js +0 -17
  101. package/dist/d1/d1QuerierPool.js.map +0 -1
  102. package/dist/d1/d1SqliteDialect.d.ts +0 -10
  103. package/dist/d1/d1SqliteDialect.d.ts.map +0 -1
  104. package/dist/d1/d1SqliteDialect.js +0 -10
  105. package/dist/d1/d1SqliteDialect.js.map +0 -1
  106. package/dist/d1/index.d.ts +0 -4
  107. package/dist/d1/index.d.ts.map +0 -1
  108. package/dist/d1/index.js +0 -4
  109. package/dist/d1/index.js.map +0 -1
  110. package/dist/dialect/abstractDialect.d.ts +0 -32
  111. package/dist/dialect/abstractDialect.d.ts.map +0 -1
  112. package/dist/dialect/abstractDialect.js +0 -39
  113. package/dist/dialect/abstractDialect.js.map +0 -1
  114. package/dist/dialect/abstractSqlDialect.d.ts +0 -233
  115. package/dist/dialect/abstractSqlDialect.d.ts.map +0 -1
  116. package/dist/dialect/abstractSqlDialect.js +0 -1332
  117. package/dist/dialect/abstractSqlDialect.js.map +0 -1
  118. package/dist/dialect/index.d.ts +0 -9
  119. package/dist/dialect/index.d.ts.map +0 -1
  120. package/dist/dialect/index.js +0 -9
  121. package/dist/dialect/index.js.map +0 -1
  122. package/dist/dialect/jsonArrayElemMatchUtils.d.ts +0 -10
  123. package/dist/dialect/jsonArrayElemMatchUtils.d.ts.map +0 -1
  124. package/dist/dialect/jsonArrayElemMatchUtils.js +0 -24
  125. package/dist/dialect/jsonArrayElemMatchUtils.js.map +0 -1
  126. package/dist/dialect/mysqlLikeSqlDialect.d.ts +0 -36
  127. package/dist/dialect/mysqlLikeSqlDialect.d.ts.map +0 -1
  128. package/dist/dialect/mysqlLikeSqlDialect.js +0 -84
  129. package/dist/dialect/mysqlLikeSqlDialect.js.map +0 -1
  130. package/dist/dialect/queryContext.d.ts +0 -49
  131. package/dist/dialect/queryContext.d.ts.map +0 -1
  132. package/dist/dialect/queryContext.js +0 -65
  133. package/dist/dialect/queryContext.js.map +0 -1
  134. package/dist/entity/decorator/entity.d.ts +0 -3
  135. package/dist/entity/decorator/entity.d.ts.map +0 -1
  136. package/dist/entity/decorator/entity.js +0 -7
  137. package/dist/entity/decorator/entity.js.map +0 -1
  138. package/dist/entity/decorator/field.d.ts +0 -3
  139. package/dist/entity/decorator/field.d.ts.map +0 -1
  140. package/dist/entity/decorator/field.js +0 -8
  141. package/dist/entity/decorator/field.js.map +0 -1
  142. package/dist/entity/decorator/hook.d.ts +0 -8
  143. package/dist/entity/decorator/hook.d.ts.map +0 -1
  144. package/dist/entity/decorator/hook.js +0 -15
  145. package/dist/entity/decorator/hook.js.map +0 -1
  146. package/dist/entity/decorator/id.d.ts +0 -3
  147. package/dist/entity/decorator/id.d.ts.map +0 -1
  148. package/dist/entity/decorator/id.js +0 -8
  149. package/dist/entity/decorator/id.js.map +0 -1
  150. package/dist/entity/decorator/index-decorator.d.ts +0 -37
  151. package/dist/entity/decorator/index-decorator.d.ts.map +0 -1
  152. package/dist/entity/decorator/index-decorator.js +0 -27
  153. package/dist/entity/decorator/index-decorator.js.map +0 -1
  154. package/dist/entity/decorator/index.d.ts +0 -8
  155. package/dist/entity/decorator/index.d.ts.map +0 -1
  156. package/dist/entity/decorator/index.js +0 -8
  157. package/dist/entity/decorator/index.js.map +0 -1
  158. package/dist/entity/decorator/relation.d.ts +0 -9
  159. package/dist/entity/decorator/relation.d.ts.map +0 -1
  160. package/dist/entity/decorator/relation.js +0 -20
  161. package/dist/entity/decorator/relation.js.map +0 -1
  162. package/dist/entity/index.d.ts +0 -2
  163. package/dist/entity/index.d.ts.map +0 -1
  164. package/dist/entity/index.js +0 -2
  165. package/dist/entity/index.js.map +0 -1
  166. package/dist/entity/metadata/definition.d.ts +0 -16
  167. package/dist/entity/metadata/definition.d.ts.map +0 -1
  168. package/dist/entity/metadata/definition.js +0 -309
  169. package/dist/entity/metadata/definition.js.map +0 -1
  170. package/dist/entity/test-helpers.d.ts +0 -4
  171. package/dist/entity/test-helpers.d.ts.map +0 -1
  172. package/dist/entity/test-helpers.js +0 -15
  173. package/dist/entity/test-helpers.js.map +0 -1
  174. package/dist/express/index.d.ts +0 -3
  175. package/dist/express/index.d.ts.map +0 -1
  176. package/dist/express/index.js +0 -3
  177. package/dist/express/index.js.map +0 -1
  178. package/dist/express/querierMiddleware.d.ts +0 -26
  179. package/dist/express/querierMiddleware.d.ts.map +0 -1
  180. package/dist/express/querierMiddleware.js +0 -143
  181. package/dist/express/querierMiddleware.js.map +0 -1
  182. package/dist/express/query.util.d.ts +0 -7
  183. package/dist/express/query.util.d.ts.map +0 -1
  184. package/dist/express/query.util.js +0 -27
  185. package/dist/express/query.util.js.map +0 -1
  186. package/dist/index.d.ts +0 -8
  187. package/dist/index.d.ts.map +0 -1
  188. package/dist/index.js +0 -8
  189. package/dist/index.js.map +0 -1
  190. package/dist/libsql/index.d.ts +0 -4
  191. package/dist/libsql/index.d.ts.map +0 -1
  192. package/dist/libsql/index.js +0 -4
  193. package/dist/libsql/index.js.map +0 -1
  194. package/dist/libsql/libsqlDialect.d.ts +0 -10
  195. package/dist/libsql/libsqlDialect.d.ts.map +0 -1
  196. package/dist/libsql/libsqlDialect.js +0 -10
  197. package/dist/libsql/libsqlDialect.js.map +0 -1
  198. package/dist/libsql/libsqlQuerier.d.ts +0 -24
  199. package/dist/libsql/libsqlQuerier.d.ts.map +0 -1
  200. package/dist/libsql/libsqlQuerier.js +0 -76
  201. package/dist/libsql/libsqlQuerier.js.map +0 -1
  202. package/dist/libsql/libsqlQuerierPool.d.ts +0 -20
  203. package/dist/libsql/libsqlQuerierPool.d.ts.map +0 -1
  204. package/dist/libsql/libsqlQuerierPool.js +0 -40
  205. package/dist/libsql/libsqlQuerierPool.js.map +0 -1
  206. package/dist/maria/index.d.ts +0 -4
  207. package/dist/maria/index.d.ts.map +0 -1
  208. package/dist/maria/index.js +0 -4
  209. package/dist/maria/index.js.map +0 -1
  210. package/dist/maria/mariaDialect.d.ts +0 -16
  211. package/dist/maria/mariaDialect.d.ts.map +0 -1
  212. package/dist/maria/mariaDialect.js +0 -56
  213. package/dist/maria/mariaDialect.js.map +0 -1
  214. package/dist/maria/mariadbQuerier.d.ts +0 -12
  215. package/dist/maria/mariadbQuerier.d.ts.map +0 -1
  216. package/dist/maria/mariadbQuerier.js +0 -31
  217. package/dist/maria/mariadbQuerier.js.map +0 -1
  218. package/dist/maria/mariadbQuerierPool.d.ts +0 -14
  219. package/dist/maria/mariadbQuerierPool.d.ts.map +0 -1
  220. package/dist/maria/mariadbQuerierPool.js +0 -18
  221. package/dist/maria/mariadbQuerierPool.js.map +0 -1
  222. package/dist/migrate/acquireQuerierForMigrations.d.ts +0 -9
  223. package/dist/migrate/acquireQuerierForMigrations.d.ts.map +0 -1
  224. package/dist/migrate/acquireQuerierForMigrations.js +0 -10
  225. package/dist/migrate/acquireQuerierForMigrations.js.map +0 -1
  226. package/dist/migrate/assertCliConfig.d.ts +0 -6
  227. package/dist/migrate/assertCliConfig.d.ts.map +0 -1
  228. package/dist/migrate/assertCliConfig.js +0 -31
  229. package/dist/migrate/assertCliConfig.js.map +0 -1
  230. package/dist/migrate/bin.d.ts +0 -3
  231. package/dist/migrate/bin.d.ts.map +0 -1
  232. package/dist/migrate/bin.js +0 -7
  233. package/dist/migrate/bin.js.map +0 -1
  234. package/dist/migrate/builder/columnBuilder.d.ts +0 -79
  235. package/dist/migrate/builder/columnBuilder.d.ts.map +0 -1
  236. package/dist/migrate/builder/columnBuilder.js +0 -159
  237. package/dist/migrate/builder/columnBuilder.js.map +0 -1
  238. package/dist/migrate/builder/expressions.d.ts +0 -87
  239. package/dist/migrate/builder/expressions.d.ts.map +0 -1
  240. package/dist/migrate/builder/expressions.js +0 -150
  241. package/dist/migrate/builder/expressions.js.map +0 -1
  242. package/dist/migrate/builder/index.d.ts +0 -6
  243. package/dist/migrate/builder/index.d.ts.map +0 -1
  244. package/dist/migrate/builder/index.js +0 -6
  245. package/dist/migrate/builder/index.js.map +0 -1
  246. package/dist/migrate/builder/migrationBuilder.d.ts +0 -110
  247. package/dist/migrate/builder/migrationBuilder.d.ts.map +0 -1
  248. package/dist/migrate/builder/migrationBuilder.js +0 -470
  249. package/dist/migrate/builder/migrationBuilder.js.map +0 -1
  250. package/dist/migrate/builder/splitSqlStatements.d.ts +0 -18
  251. package/dist/migrate/builder/splitSqlStatements.d.ts.map +0 -1
  252. package/dist/migrate/builder/splitSqlStatements.js +0 -44
  253. package/dist/migrate/builder/splitSqlStatements.js.map +0 -1
  254. package/dist/migrate/builder/tableBuilder.d.ts +0 -51
  255. package/dist/migrate/builder/tableBuilder.d.ts.map +0 -1
  256. package/dist/migrate/builder/tableBuilder.js +0 -291
  257. package/dist/migrate/builder/tableBuilder.js.map +0 -1
  258. package/dist/migrate/builder/types.d.ts +0 -466
  259. package/dist/migrate/builder/types.d.ts.map +0 -1
  260. package/dist/migrate/builder/types.js +0 -8
  261. package/dist/migrate/builder/types.js.map +0 -1
  262. package/dist/migrate/cli-config.d.ts +0 -3
  263. package/dist/migrate/cli-config.d.ts.map +0 -1
  264. package/dist/migrate/cli-config.js +0 -35
  265. package/dist/migrate/cli-config.js.map +0 -1
  266. package/dist/migrate/cli.d.ts +0 -20
  267. package/dist/migrate/cli.d.ts.map +0 -1
  268. package/dist/migrate/cli.js +0 -398
  269. package/dist/migrate/cli.js.map +0 -1
  270. package/dist/migrate/codegen/entityCodeGenerator.d.ts +0 -137
  271. package/dist/migrate/codegen/entityCodeGenerator.d.ts.map +0 -1
  272. package/dist/migrate/codegen/entityCodeGenerator.js +0 -405
  273. package/dist/migrate/codegen/entityCodeGenerator.js.map +0 -1
  274. package/dist/migrate/codegen/entityMerger.d.ts +0 -115
  275. package/dist/migrate/codegen/entityMerger.d.ts.map +0 -1
  276. package/dist/migrate/codegen/entityMerger.js +0 -294
  277. package/dist/migrate/codegen/entityMerger.js.map +0 -1
  278. package/dist/migrate/codegen/index.d.ts +0 -11
  279. package/dist/migrate/codegen/index.d.ts.map +0 -1
  280. package/dist/migrate/codegen/index.js +0 -15
  281. package/dist/migrate/codegen/index.js.map +0 -1
  282. package/dist/migrate/codegen/migrationCodeGenerator.d.ts +0 -62
  283. package/dist/migrate/codegen/migrationCodeGenerator.d.ts.map +0 -1
  284. package/dist/migrate/codegen/migrationCodeGenerator.js +0 -356
  285. package/dist/migrate/codegen/migrationCodeGenerator.js.map +0 -1
  286. package/dist/migrate/codegen/migrationFile.d.ts +0 -29
  287. package/dist/migrate/codegen/migrationFile.d.ts.map +0 -1
  288. package/dist/migrate/codegen/migrationFile.js +0 -48
  289. package/dist/migrate/codegen/migrationFile.js.map +0 -1
  290. package/dist/migrate/codegen/smartRelationDetector.d.ts +0 -48
  291. package/dist/migrate/codegen/smartRelationDetector.d.ts.map +0 -1
  292. package/dist/migrate/codegen/smartRelationDetector.js +0 -135
  293. package/dist/migrate/codegen/smartRelationDetector.js.map +0 -1
  294. package/dist/migrate/drift/driftDetector.d.ts +0 -80
  295. package/dist/migrate/drift/driftDetector.d.ts.map +0 -1
  296. package/dist/migrate/drift/driftDetector.js +0 -247
  297. package/dist/migrate/drift/driftDetector.js.map +0 -1
  298. package/dist/migrate/drift/index.d.ts +0 -7
  299. package/dist/migrate/drift/index.d.ts.map +0 -1
  300. package/dist/migrate/drift/index.js +0 -7
  301. package/dist/migrate/drift/index.js.map +0 -1
  302. package/dist/migrate/generator/index.d.ts +0 -3
  303. package/dist/migrate/generator/index.d.ts.map +0 -1
  304. package/dist/migrate/generator/index.js +0 -3
  305. package/dist/migrate/generator/index.js.map +0 -1
  306. package/dist/migrate/generator/mongoSchemaGenerator.d.ts +0 -48
  307. package/dist/migrate/generator/mongoSchemaGenerator.d.ts.map +0 -1
  308. package/dist/migrate/generator/mongoSchemaGenerator.js +0 -188
  309. package/dist/migrate/generator/mongoSchemaGenerator.js.map +0 -1
  310. package/dist/migrate/index.d.ts +0 -16
  311. package/dist/migrate/index.d.ts.map +0 -1
  312. package/dist/migrate/index.js +0 -23
  313. package/dist/migrate/index.js.map +0 -1
  314. package/dist/migrate/introspection/abstractSqlSchemaIntrospector.d.ts +0 -77
  315. package/dist/migrate/introspection/abstractSqlSchemaIntrospector.d.ts.map +0 -1
  316. package/dist/migrate/introspection/abstractSqlSchemaIntrospector.js +0 -156
  317. package/dist/migrate/introspection/abstractSqlSchemaIntrospector.js.map +0 -1
  318. package/dist/migrate/introspection/baseSqlIntrospector.d.ts +0 -26
  319. package/dist/migrate/introspection/baseSqlIntrospector.d.ts.map +0 -1
  320. package/dist/migrate/introspection/baseSqlIntrospector.js +0 -132
  321. package/dist/migrate/introspection/baseSqlIntrospector.js.map +0 -1
  322. package/dist/migrate/introspection/index.d.ts +0 -6
  323. package/dist/migrate/introspection/index.d.ts.map +0 -1
  324. package/dist/migrate/introspection/index.js +0 -6
  325. package/dist/migrate/introspection/index.js.map +0 -1
  326. package/dist/migrate/introspection/mongoIntrospector.d.ts +0 -15
  327. package/dist/migrate/introspection/mongoIntrospector.d.ts.map +0 -1
  328. package/dist/migrate/introspection/mongoIntrospector.js +0 -100
  329. package/dist/migrate/introspection/mongoIntrospector.js.map +0 -1
  330. package/dist/migrate/introspection/mysqlIntrospector.d.ts +0 -59
  331. package/dist/migrate/introspection/mysqlIntrospector.d.ts.map +0 -1
  332. package/dist/migrate/introspection/mysqlIntrospector.js +0 -175
  333. package/dist/migrate/introspection/mysqlIntrospector.js.map +0 -1
  334. package/dist/migrate/introspection/postgresIntrospector.d.ts +0 -55
  335. package/dist/migrate/introspection/postgresIntrospector.d.ts.map +0 -1
  336. package/dist/migrate/introspection/postgresIntrospector.js +0 -226
  337. package/dist/migrate/introspection/postgresIntrospector.js.map +0 -1
  338. package/dist/migrate/introspection/sqliteIntrospector.d.ts +0 -60
  339. package/dist/migrate/introspection/sqliteIntrospector.d.ts.map +0 -1
  340. package/dist/migrate/introspection/sqliteIntrospector.js +0 -188
  341. package/dist/migrate/introspection/sqliteIntrospector.js.map +0 -1
  342. package/dist/migrate/migrator.d.ts +0 -168
  343. package/dist/migrate/migrator.d.ts.map +0 -1
  344. package/dist/migrate/migrator.js +0 -614
  345. package/dist/migrate/migrator.js.map +0 -1
  346. package/dist/migrate/schemaGenerator.d.ts +0 -142
  347. package/dist/migrate/schemaGenerator.d.ts.map +0 -1
  348. package/dist/migrate/schemaGenerator.js +0 -693
  349. package/dist/migrate/schemaGenerator.js.map +0 -1
  350. package/dist/migrate/schemaGeneratorAsync.d.ts +0 -9
  351. package/dist/migrate/schemaGeneratorAsync.d.ts.map +0 -1
  352. package/dist/migrate/schemaGeneratorAsync.js +0 -13
  353. package/dist/migrate/schemaGeneratorAsync.js.map +0 -1
  354. package/dist/migrate/storage/databaseStorage.d.ts +0 -25
  355. package/dist/migrate/storage/databaseStorage.d.ts.map +0 -1
  356. package/dist/migrate/storage/databaseStorage.js +0 -78
  357. package/dist/migrate/storage/databaseStorage.js.map +0 -1
  358. package/dist/migrate/storage/index.d.ts +0 -3
  359. package/dist/migrate/storage/index.d.ts.map +0 -1
  360. package/dist/migrate/storage/index.js +0 -3
  361. package/dist/migrate/storage/index.js.map +0 -1
  362. package/dist/migrate/storage/jsonStorage.d.ts +0 -16
  363. package/dist/migrate/storage/jsonStorage.d.ts.map +0 -1
  364. package/dist/migrate/storage/jsonStorage.js +0 -43
  365. package/dist/migrate/storage/jsonStorage.js.map +0 -1
  366. package/dist/migrate/sync/index.d.ts +0 -7
  367. package/dist/migrate/sync/index.d.ts.map +0 -1
  368. package/dist/migrate/sync/index.js +0 -7
  369. package/dist/migrate/sync/index.js.map +0 -1
  370. package/dist/migrate/sync/schemaSync.d.ts +0 -132
  371. package/dist/migrate/sync/schemaSync.d.ts.map +0 -1
  372. package/dist/migrate/sync/schemaSync.js +0 -260
  373. package/dist/migrate/sync/schemaSync.js.map +0 -1
  374. package/dist/mongo/index.d.ts +0 -6
  375. package/dist/mongo/index.d.ts.map +0 -1
  376. package/dist/mongo/index.js +0 -6
  377. package/dist/mongo/index.js.map +0 -1
  378. package/dist/mongo/mongoDialect.d.ts +0 -83
  379. package/dist/mongo/mongoDialect.d.ts.map +0 -1
  380. package/dist/mongo/mongoDialect.js +0 -418
  381. package/dist/mongo/mongoDialect.js.map +0 -1
  382. package/dist/mongo/mongodbNativeDialect.d.ts +0 -10
  383. package/dist/mongo/mongodbNativeDialect.d.ts.map +0 -1
  384. package/dist/mongo/mongodbNativeDialect.js +0 -10
  385. package/dist/mongo/mongodbNativeDialect.js.map +0 -1
  386. package/dist/mongo/mongodbQuerier.d.ts +0 -46
  387. package/dist/mongo/mongodbQuerier.d.ts.map +0 -1
  388. package/dist/mongo/mongodbQuerier.js +0 -344
  389. package/dist/mongo/mongodbQuerier.js.map +0 -1
  390. package/dist/mongo/mongodbQuerierPool.d.ts +0 -12
  391. package/dist/mongo/mongodbQuerierPool.d.ts.map +0 -1
  392. package/dist/mongo/mongodbQuerierPool.js +0 -19
  393. package/dist/mongo/mongodbQuerierPool.js.map +0 -1
  394. package/dist/mysql/index.d.ts +0 -5
  395. package/dist/mysql/index.d.ts.map +0 -1
  396. package/dist/mysql/index.js +0 -5
  397. package/dist/mysql/index.js.map +0 -1
  398. package/dist/mysql/mysql2Dialect.d.ts +0 -10
  399. package/dist/mysql/mysql2Dialect.d.ts.map +0 -1
  400. package/dist/mysql/mysql2Dialect.js +0 -10
  401. package/dist/mysql/mysql2Dialect.js.map +0 -1
  402. package/dist/mysql/mysql2Querier.d.ts +0 -12
  403. package/dist/mysql/mysql2Querier.d.ts.map +0 -1
  404. package/dist/mysql/mysql2Querier.js +0 -34
  405. package/dist/mysql/mysql2Querier.js.map +0 -1
  406. package/dist/mysql/mysql2QuerierPool.d.ts +0 -12
  407. package/dist/mysql/mysql2QuerierPool.d.ts.map +0 -1
  408. package/dist/mysql/mysql2QuerierPool.js +0 -18
  409. package/dist/mysql/mysql2QuerierPool.js.map +0 -1
  410. package/dist/mysql/mysqlDialect.d.ts +0 -6
  411. package/dist/mysql/mysqlDialect.d.ts.map +0 -1
  412. package/dist/mysql/mysqlDialect.js +0 -6
  413. package/dist/mysql/mysqlDialect.js.map +0 -1
  414. package/dist/namingStrategy/defaultNamingStrategy.d.ts +0 -10
  415. package/dist/namingStrategy/defaultNamingStrategy.d.ts.map +0 -1
  416. package/dist/namingStrategy/defaultNamingStrategy.js +0 -15
  417. package/dist/namingStrategy/defaultNamingStrategy.js.map +0 -1
  418. package/dist/namingStrategy/index.d.ts +0 -3
  419. package/dist/namingStrategy/index.d.ts.map +0 -1
  420. package/dist/namingStrategy/index.js +0 -3
  421. package/dist/namingStrategy/index.js.map +0 -1
  422. package/dist/namingStrategy/snakeCaseNamingStrategy.d.ts +0 -9
  423. package/dist/namingStrategy/snakeCaseNamingStrategy.d.ts.map +0 -1
  424. package/dist/namingStrategy/snakeCaseNamingStrategy.js +0 -14
  425. package/dist/namingStrategy/snakeCaseNamingStrategy.js.map +0 -1
  426. package/dist/neon/index.d.ts +0 -4
  427. package/dist/neon/index.d.ts.map +0 -1
  428. package/dist/neon/index.js +0 -4
  429. package/dist/neon/index.js.map +0 -1
  430. package/dist/neon/neonDialect.d.ts +0 -11
  431. package/dist/neon/neonDialect.d.ts.map +0 -1
  432. package/dist/neon/neonDialect.js +0 -11
  433. package/dist/neon/neonDialect.js.map +0 -1
  434. package/dist/neon/neonQuerier.d.ts +0 -6
  435. package/dist/neon/neonQuerier.d.ts.map +0 -1
  436. package/dist/neon/neonQuerier.js +0 -4
  437. package/dist/neon/neonQuerier.js.map +0 -1
  438. package/dist/neon/neonQuerierPool.d.ts +0 -11
  439. package/dist/neon/neonQuerierPool.d.ts.map +0 -1
  440. package/dist/neon/neonQuerierPool.js +0 -15
  441. package/dist/neon/neonQuerierPool.js.map +0 -1
  442. package/dist/options.d.ts +0 -5
  443. package/dist/options.d.ts.map +0 -1
  444. package/dist/options.js +0 -14
  445. package/dist/options.js.map +0 -1
  446. package/dist/postgres/abstractPgQuerier.d.ts +0 -24
  447. package/dist/postgres/abstractPgQuerier.d.ts.map +0 -1
  448. package/dist/postgres/abstractPgQuerier.js +0 -33
  449. package/dist/postgres/abstractPgQuerier.js.map +0 -1
  450. package/dist/postgres/abstractPgQuerierPool.d.ts +0 -15
  451. package/dist/postgres/abstractPgQuerierPool.d.ts.map +0 -1
  452. package/dist/postgres/abstractPgQuerierPool.js +0 -10
  453. package/dist/postgres/abstractPgQuerierPool.js.map +0 -1
  454. package/dist/postgres/index.d.ts +0 -6
  455. package/dist/postgres/index.d.ts.map +0 -1
  456. package/dist/postgres/index.js +0 -6
  457. package/dist/postgres/index.js.map +0 -1
  458. package/dist/postgres/pgDialect.d.ts +0 -13
  459. package/dist/postgres/pgDialect.d.ts.map +0 -1
  460. package/dist/postgres/pgDialect.js +0 -14
  461. package/dist/postgres/pgDialect.js.map +0 -1
  462. package/dist/postgres/pgQuerier.d.ts +0 -6
  463. package/dist/postgres/pgQuerier.d.ts.map +0 -1
  464. package/dist/postgres/pgQuerier.js +0 -4
  465. package/dist/postgres/pgQuerier.js.map +0 -1
  466. package/dist/postgres/pgQuerierPool.d.ts +0 -11
  467. package/dist/postgres/pgQuerierPool.d.ts.map +0 -1
  468. package/dist/postgres/pgQuerierPool.js +0 -15
  469. package/dist/postgres/pgQuerierPool.js.map +0 -1
  470. package/dist/postgres/postgresDialect.d.ts +0 -48
  471. package/dist/postgres/postgresDialect.d.ts.map +0 -1
  472. package/dist/postgres/postgresDialect.js +0 -222
  473. package/dist/postgres/postgresDialect.js.map +0 -1
  474. package/dist/postgres/postgresWireDriverCapabilities.d.ts +0 -15
  475. package/dist/postgres/postgresWireDriverCapabilities.d.ts.map +0 -1
  476. package/dist/postgres/postgresWireDriverCapabilities.js +0 -15
  477. package/dist/postgres/postgresWireDriverCapabilities.js.map +0 -1
  478. package/dist/querier/abstractPoolQuerier.d.ts +0 -14
  479. package/dist/querier/abstractPoolQuerier.d.ts.map +0 -1
  480. package/dist/querier/abstractPoolQuerier.js +0 -31
  481. package/dist/querier/abstractPoolQuerier.js.map +0 -1
  482. package/dist/querier/abstractQuerier.d.ts +0 -138
  483. package/dist/querier/abstractQuerier.d.ts.map +0 -1
  484. package/dist/querier/abstractQuerier.js +0 -426
  485. package/dist/querier/abstractQuerier.js.map +0 -1
  486. package/dist/querier/abstractQuerierPool.d.ts +0 -27
  487. package/dist/querier/abstractQuerierPool.d.ts.map +0 -1
  488. package/dist/querier/abstractQuerierPool.js +0 -31
  489. package/dist/querier/abstractQuerierPool.js.map +0 -1
  490. package/dist/querier/abstractSqlQuerier.d.ts +0 -53
  491. package/dist/querier/abstractSqlQuerier.d.ts.map +0 -1
  492. package/dist/querier/abstractSqlQuerier.js +0 -256
  493. package/dist/querier/abstractSqlQuerier.js.map +0 -1
  494. package/dist/querier/decorator/index.d.ts +0 -5
  495. package/dist/querier/decorator/index.d.ts.map +0 -1
  496. package/dist/querier/decorator/index.js +0 -5
  497. package/dist/querier/decorator/index.js.map +0 -1
  498. package/dist/querier/decorator/injectQuerier.d.ts +0 -4
  499. package/dist/querier/decorator/injectQuerier.d.ts.map +0 -1
  500. package/dist/querier/decorator/injectQuerier.js +0 -34
  501. package/dist/querier/decorator/injectQuerier.js.map +0 -1
  502. package/dist/querier/decorator/log.d.ts +0 -7
  503. package/dist/querier/decorator/log.d.ts.map +0 -1
  504. package/dist/querier/decorator/log.js +0 -27
  505. package/dist/querier/decorator/log.js.map +0 -1
  506. package/dist/querier/decorator/serialized.d.ts +0 -7
  507. package/dist/querier/decorator/serialized.d.ts.map +0 -1
  508. package/dist/querier/decorator/serialized.js +0 -14
  509. package/dist/querier/decorator/serialized.js.map +0 -1
  510. package/dist/querier/decorator/transactional.d.ts +0 -7
  511. package/dist/querier/decorator/transactional.d.ts.map +0 -1
  512. package/dist/querier/decorator/transactional.js +0 -49
  513. package/dist/querier/decorator/transactional.js.map +0 -1
  514. package/dist/querier/index.d.ts +0 -5
  515. package/dist/querier/index.d.ts.map +0 -1
  516. package/dist/querier/index.js +0 -5
  517. package/dist/querier/index.js.map +0 -1
  518. package/dist/schema/canonicalType.d.ts +0 -54
  519. package/dist/schema/canonicalType.d.ts.map +0 -1
  520. package/dist/schema/canonicalType.js +0 -571
  521. package/dist/schema/canonicalType.js.map +0 -1
  522. package/dist/schema/index.d.ts +0 -26
  523. package/dist/schema/index.d.ts.map +0 -1
  524. package/dist/schema/index.js +0 -27
  525. package/dist/schema/index.js.map +0 -1
  526. package/dist/schema/schemaAST.d.ts +0 -155
  527. package/dist/schema/schemaAST.d.ts.map +0 -1
  528. package/dist/schema/schemaAST.js +0 -496
  529. package/dist/schema/schemaAST.js.map +0 -1
  530. package/dist/schema/schemaASTBuilder.d.ts +0 -58
  531. package/dist/schema/schemaASTBuilder.d.ts.map +0 -1
  532. package/dist/schema/schemaASTBuilder.js +0 -228
  533. package/dist/schema/schemaASTBuilder.js.map +0 -1
  534. package/dist/schema/schemaASTDiffer.d.ts +0 -84
  535. package/dist/schema/schemaASTDiffer.d.ts.map +0 -1
  536. package/dist/schema/schemaASTDiffer.js +0 -431
  537. package/dist/schema/schemaASTDiffer.js.map +0 -1
  538. package/dist/schema/types.d.ts +0 -348
  539. package/dist/schema/types.d.ts.map +0 -1
  540. package/dist/schema/types.js +0 -11
  541. package/dist/schema/types.js.map +0 -1
  542. package/dist/sqlite/abstractSqliteQuerier.d.ts +0 -4
  543. package/dist/sqlite/abstractSqliteQuerier.d.ts.map +0 -1
  544. package/dist/sqlite/abstractSqliteQuerier.js +0 -4
  545. package/dist/sqlite/abstractSqliteQuerier.js.map +0 -1
  546. package/dist/sqlite/betterSqlite3Dialect.d.ts +0 -10
  547. package/dist/sqlite/betterSqlite3Dialect.d.ts.map +0 -1
  548. package/dist/sqlite/betterSqlite3Dialect.js +0 -10
  549. package/dist/sqlite/betterSqlite3Dialect.js.map +0 -1
  550. package/dist/sqlite/index.d.ts +0 -6
  551. package/dist/sqlite/index.d.ts.map +0 -1
  552. package/dist/sqlite/index.js +0 -6
  553. package/dist/sqlite/index.js.map +0 -1
  554. package/dist/sqlite/sqliteDialect.d.ts +0 -36
  555. package/dist/sqlite/sqliteDialect.d.ts.map +0 -1
  556. package/dist/sqlite/sqliteDialect.js +0 -155
  557. package/dist/sqlite/sqliteDialect.js.map +0 -1
  558. package/dist/sqlite/sqliteQuerier.d.ts +0 -14
  559. package/dist/sqlite/sqliteQuerier.d.ts.map +0 -1
  560. package/dist/sqlite/sqliteQuerier.js +0 -30
  561. package/dist/sqlite/sqliteQuerier.js.map +0 -1
  562. package/dist/sqlite/sqliteQuerierPool.d.ts +0 -14
  563. package/dist/sqlite/sqliteQuerierPool.d.ts.map +0 -1
  564. package/dist/sqlite/sqliteQuerierPool.js +0 -36
  565. package/dist/sqlite/sqliteQuerierPool.js.map +0 -1
  566. package/dist/type/config.d.ts +0 -43
  567. package/dist/type/config.d.ts.map +0 -1
  568. package/dist/type/config.js +0 -2
  569. package/dist/type/config.js.map +0 -1
  570. package/dist/type/entity.d.ts +0 -332
  571. package/dist/type/entity.d.ts.map +0 -1
  572. package/dist/type/entity.js +0 -5
  573. package/dist/type/entity.js.map +0 -1
  574. package/dist/type/index.d.ts +0 -12
  575. package/dist/type/index.d.ts.map +0 -1
  576. package/dist/type/index.js +0 -12
  577. package/dist/type/index.js.map +0 -1
  578. package/dist/type/logger.d.ts +0 -61
  579. package/dist/type/logger.d.ts.map +0 -1
  580. package/dist/type/logger.js +0 -2
  581. package/dist/type/logger.js.map +0 -1
  582. package/dist/type/migration.d.ts +0 -267
  583. package/dist/type/migration.d.ts.map +0 -1
  584. package/dist/type/migration.js +0 -2
  585. package/dist/type/migration.js.map +0 -1
  586. package/dist/type/migratorDialect.d.ts +0 -10
  587. package/dist/type/migratorDialect.d.ts.map +0 -1
  588. package/dist/type/migratorDialect.js +0 -16
  589. package/dist/type/migratorDialect.js.map +0 -1
  590. package/dist/type/namingStrategy.d.ts +0 -18
  591. package/dist/type/namingStrategy.d.ts.map +0 -1
  592. package/dist/type/namingStrategy.js +0 -2
  593. package/dist/type/namingStrategy.js.map +0 -1
  594. package/dist/type/querier.d.ts +0 -162
  595. package/dist/type/querier.d.ts.map +0 -1
  596. package/dist/type/querier.js +0 -11
  597. package/dist/type/querier.js.map +0 -1
  598. package/dist/type/querierPool.d.ts +0 -62
  599. package/dist/type/querierPool.d.ts.map +0 -1
  600. package/dist/type/querierPool.js +0 -2
  601. package/dist/type/querierPool.js.map +0 -1
  602. package/dist/type/query.d.ts +0 -700
  603. package/dist/type/query.d.ts.map +0 -1
  604. package/dist/type/query.js +0 -11
  605. package/dist/type/query.js.map +0 -1
  606. package/dist/type/universalQuerier.d.ts +0 -136
  607. package/dist/type/universalQuerier.d.ts.map +0 -1
  608. package/dist/type/universalQuerier.js +0 -2
  609. package/dist/type/universalQuerier.js.map +0 -1
  610. package/dist/type/utility.d.ts +0 -37
  611. package/dist/type/utility.d.ts.map +0 -1
  612. package/dist/type/utility.js +0 -2
  613. package/dist/type/utility.js.map +0 -1
  614. package/dist/util/ansiSqlLiteral.d.ts +0 -21
  615. package/dist/util/ansiSqlLiteral.d.ts.map +0 -1
  616. package/dist/util/ansiSqlLiteral.js +0 -101
  617. package/dist/util/ansiSqlLiteral.js.map +0 -1
  618. package/dist/util/dialect.util.d.ts +0 -31
  619. package/dist/util/dialect.util.d.ts.map +0 -1
  620. package/dist/util/dialect.util.js +0 -113
  621. package/dist/util/dialect.util.js.map +0 -1
  622. package/dist/util/field.util.d.ts +0 -14
  623. package/dist/util/field.util.d.ts.map +0 -1
  624. package/dist/util/field.util.js +0 -57
  625. package/dist/util/field.util.js.map +0 -1
  626. package/dist/util/hook.util.d.ts +0 -15
  627. package/dist/util/hook.util.d.ts.map +0 -1
  628. package/dist/util/hook.util.js +0 -20
  629. package/dist/util/hook.util.js.map +0 -1
  630. package/dist/util/index.d.ts +0 -10
  631. package/dist/util/index.d.ts.map +0 -1
  632. package/dist/util/index.js +0 -10
  633. package/dist/util/index.js.map +0 -1
  634. package/dist/util/logger.d.ts +0 -34
  635. package/dist/util/logger.d.ts.map +0 -1
  636. package/dist/util/logger.js +0 -129
  637. package/dist/util/logger.js.map +0 -1
  638. package/dist/util/object.util.d.ts +0 -10
  639. package/dist/util/object.util.d.ts.map +0 -1
  640. package/dist/util/object.util.js +0 -29
  641. package/dist/util/object.util.js.map +0 -1
  642. package/dist/util/raw.d.ts +0 -18
  643. package/dist/util/raw.d.ts.map +0 -1
  644. package/dist/util/raw.js +0 -20
  645. package/dist/util/raw.js.map +0 -1
  646. package/dist/util/relationQuery.util.d.ts +0 -25
  647. package/dist/util/relationQuery.util.d.ts.map +0 -1
  648. package/dist/util/relationQuery.util.js +0 -101
  649. package/dist/util/relationQuery.util.js.map +0 -1
  650. package/dist/util/sql.util.d.ts +0 -50
  651. package/dist/util/sql.util.d.ts.map +0 -1
  652. package/dist/util/sql.util.js +0 -141
  653. package/dist/util/sql.util.js.map +0 -1
  654. package/dist/util/string.util.d.ts +0 -29
  655. package/dist/util/string.util.d.ts.map +0 -1
  656. package/dist/util/string.util.js +0 -93
  657. package/dist/util/string.util.js.map +0 -1
@@ -5649,3 +5649,1383 @@ const hooks = {
5649
5649
 
5650
5650
  export { BaseEntity, _Company as Company, _InventoryAdjustment as InventoryAdjustment, _Item as Item, _ItemAdjustment as ItemAdjustment, _ItemTag as ItemTag, _LedgerAccount as LedgerAccount, _MeasureUnit as MeasureUnit, _MeasureUnitCategory as MeasureUnitCategory, _Profile as Profile, _Storehouse as Storehouse, _Tag as Tag, _Tax as Tax, _TaxCategory as TaxCategory, _User as User, _UserWithNonUpdatableId as UserWithNonUpdatableId, _VectorItem as VectorItem, clearTables, createMockQuerierPool, createSpec, createTables, dropTables, loadTsDefaultExportWithJiti };
5651
5651
  //# sourceMappingURL=uql-browser.min.js.map
5652
+ ized = defaultValue.toUpperCase();
5653
+ if (normalized === 'NULL') {
5654
+ return null;
5655
+ }
5656
+ if (normalized === 'CURRENT_TIMESTAMP' || normalized === 'CURRENT_TIMESTAMP()') {
5657
+ return 'CURRENT_TIMESTAMP';
5658
+ }
5659
+ if (/^-?\d+$/.test(defaultValue)) {
5660
+ return Number.parseInt(defaultValue, 10);
5661
+ }
5662
+ if (/^-?\d+\.\d+$/.test(defaultValue)) {
5663
+ return Number.parseFloat(defaultValue);
5664
+ }
5665
+ if (defaultValue?.startsWith("'") && defaultValue?.endsWith("'")) {
5666
+ return defaultValue.slice(1, -1);
5667
+ }
5668
+ return defaultValue;
5669
+ }
5670
+ }
5671
+ /**
5672
+ * Alias for MysqlSchemaIntrospector.
5673
+ * MariaDB uses the same information_schema structure as MySQL.
5674
+ */ const MariadbSchemaIntrospector = MysqlSchemaIntrospector;
5675
+
5676
+ /**
5677
+ * PostgreSQL schema introspector
5678
+ */ class PostgresSchemaIntrospector extends AbstractSqlSchemaIntrospector {
5679
+ constructor(pool){
5680
+ super(pool.dialect), this.pool = pool;
5681
+ }
5682
+ // ============================================================================
5683
+ // SQL Queries (dialect-specific)
5684
+ // ============================================================================
5685
+ getTableNamesQuery() {
5686
+ return /*sql*/ `
5687
+ SELECT table_name
5688
+ FROM information_schema.tables
5689
+ WHERE table_schema = 'public'
5690
+ AND table_type = 'BASE TABLE'
5691
+ ORDER BY table_name
5692
+ `;
5693
+ }
5694
+ tableExistsQuery() {
5695
+ return /*sql*/ `
5696
+ SELECT EXISTS (
5697
+ SELECT FROM information_schema.tables
5698
+ WHERE table_schema = 'public'
5699
+ AND table_name = $1
5700
+ ) AS exists
5701
+ `;
5702
+ }
5703
+ parseTableExistsResult(results) {
5704
+ return results[0]?.['exists'] ?? false;
5705
+ }
5706
+ getColumnsQuery(_tableName) {
5707
+ return /*sql*/ `
5708
+ SELECT
5709
+ c.column_name,
5710
+ c.data_type,
5711
+ c.udt_name,
5712
+ c.is_nullable,
5713
+ c.column_default,
5714
+ c.character_maximum_length,
5715
+ c.numeric_precision,
5716
+ c.numeric_scale,
5717
+ c.is_identity,
5718
+ c.identity_generation,
5719
+ COALESCE(
5720
+ (SELECT TRUE FROM information_schema.table_constraints tc
5721
+ JOIN information_schema.key_column_usage kcu
5722
+ ON tc.constraint_name = kcu.constraint_name
5723
+ WHERE tc.table_name = c.table_name
5724
+ AND tc.constraint_type = 'PRIMARY KEY'
5725
+ AND kcu.column_name = c.column_name
5726
+ LIMIT 1),
5727
+ FALSE
5728
+ ) AS is_primary_key,
5729
+ COALESCE(
5730
+ (SELECT TRUE FROM information_schema.table_constraints tc
5731
+ JOIN information_schema.key_column_usage kcu
5732
+ ON tc.constraint_name = kcu.constraint_name
5733
+ WHERE tc.table_name = c.table_name
5734
+ AND tc.constraint_type = 'UNIQUE'
5735
+ AND kcu.column_name = c.column_name
5736
+ LIMIT 1),
5737
+ FALSE
5738
+ ) AS is_unique,
5739
+ pg_catalog.col_description(
5740
+ (SELECT oid FROM pg_catalog.pg_class WHERE relname = c.table_name),
5741
+ c.ordinal_position
5742
+ ) AS column_comment
5743
+ FROM information_schema.columns c
5744
+ WHERE c.table_schema = 'public'
5745
+ AND c.table_name = $1
5746
+ ORDER BY c.ordinal_position
5747
+ `;
5748
+ }
5749
+ getIndexesQuery(_tableName) {
5750
+ return /*sql*/ `
5751
+ SELECT
5752
+ i.relname AS index_name,
5753
+ array_to_json(array_agg(a.attname ORDER BY k.n)) AS columns,
5754
+ ix.indisunique AS is_unique
5755
+ FROM pg_class t
5756
+ JOIN pg_index ix ON t.oid = ix.indrelid
5757
+ JOIN pg_class i ON i.oid = ix.indexrelid
5758
+ JOIN pg_namespace n ON n.oid = t.relnamespace
5759
+ CROSS JOIN LATERAL unnest(ix.indkey) WITH ORDINALITY AS k(attnum, n)
5760
+ JOIN pg_attribute a ON a.attrelid = t.oid AND a.attnum = k.attnum
5761
+ WHERE t.relname = $1
5762
+ AND n.nspname = 'public'
5763
+ AND NOT ix.indisprimary
5764
+ GROUP BY i.relname, ix.indisunique
5765
+ ORDER BY i.relname
5766
+ `;
5767
+ }
5768
+ getForeignKeysQuery(_tableName) {
5769
+ return /*sql*/ `
5770
+ SELECT
5771
+ tc.constraint_name,
5772
+ array_to_json(array_agg(kcu.column_name ORDER BY kcu.ordinal_position)) AS columns,
5773
+ ccu.table_name AS referenced_table,
5774
+ array_to_json(array_agg(ccu.column_name ORDER BY kcu.ordinal_position)) AS referenced_columns,
5775
+ rc.delete_rule,
5776
+ rc.update_rule
5777
+ FROM information_schema.table_constraints tc
5778
+ JOIN information_schema.key_column_usage kcu
5779
+ ON tc.constraint_name = kcu.constraint_name
5780
+ AND tc.table_schema = kcu.table_schema
5781
+ JOIN information_schema.constraint_column_usage ccu
5782
+ ON ccu.constraint_name = tc.constraint_name
5783
+ AND ccu.table_schema = tc.table_schema
5784
+ JOIN information_schema.referential_constraints rc
5785
+ ON rc.constraint_name = tc.constraint_name
5786
+ AND rc.constraint_schema = tc.table_schema
5787
+ WHERE tc.constraint_type = 'FOREIGN KEY'
5788
+ AND tc.table_name = $1
5789
+ AND tc.table_schema = 'public'
5790
+ GROUP BY tc.constraint_name, ccu.table_name, rc.delete_rule, rc.update_rule
5791
+ ORDER BY tc.constraint_name
5792
+ `;
5793
+ }
5794
+ getPrimaryKeyQuery(_tableName) {
5795
+ return /*sql*/ `
5796
+ SELECT kcu.column_name
5797
+ FROM information_schema.table_constraints tc
5798
+ JOIN information_schema.key_column_usage kcu
5799
+ ON tc.constraint_name = kcu.constraint_name
5800
+ AND tc.table_schema = kcu.table_schema
5801
+ WHERE tc.constraint_type = 'PRIMARY KEY'
5802
+ AND tc.table_name = $1
5803
+ AND tc.table_schema = 'public'
5804
+ ORDER BY kcu.ordinal_position
5805
+ `;
5806
+ }
5807
+ // ============================================================================
5808
+ // Internal Types
5809
+ // ============================================================================
5810
+ mapTableNameRow(row) {
5811
+ return row.table_name;
5812
+ }
5813
+ async mapColumnsResult(_querier, _tableName, results) {
5814
+ return results.map((row)=>({
5815
+ name: row.column_name,
5816
+ type: this.normalizeType(row.data_type, row.udt_name),
5817
+ nullable: row.is_nullable === 'YES',
5818
+ defaultValue: this.parseDefaultValue(row.column_default),
5819
+ isPrimaryKey: row.is_primary_key,
5820
+ isAutoIncrement: this.isAutoIncrement(row.column_default, row.is_identity),
5821
+ isUnique: row.is_unique,
5822
+ length: row.character_maximum_length ?? undefined,
5823
+ precision: row.numeric_precision ?? undefined,
5824
+ scale: row.numeric_scale ?? undefined,
5825
+ comment: row.column_comment ?? undefined
5826
+ }));
5827
+ }
5828
+ async mapIndexesResult(_querier, _tableName, results) {
5829
+ return results.map((row)=>({
5830
+ name: row.index_name,
5831
+ columns: row.columns,
5832
+ unique: row.is_unique
5833
+ }));
5834
+ }
5835
+ async mapForeignKeysResult(_querier, _tableName, results) {
5836
+ return results.map((row)=>({
5837
+ name: row.constraint_name,
5838
+ columns: row.columns,
5839
+ referencedTable: row.referenced_table,
5840
+ referencedColumns: row.referenced_columns,
5841
+ onDelete: this.normalizeReferentialAction(row.delete_rule),
5842
+ onUpdate: this.normalizeReferentialAction(row.update_rule)
5843
+ }));
5844
+ }
5845
+ mapPrimaryKeyResult(results) {
5846
+ if (results.length === 0) {
5847
+ return undefined;
5848
+ }
5849
+ return results.map((r)=>r.column_name);
5850
+ }
5851
+ // ============================================================================
5852
+ // PostgreSQL-specific helpers
5853
+ // ============================================================================
5854
+ normalizeType(dataType, udtName) {
5855
+ // Handle user-defined types and arrays
5856
+ if (dataType === 'USER-DEFINED') {
5857
+ return udtName.toUpperCase();
5858
+ }
5859
+ if (dataType === 'ARRAY') {
5860
+ return `${udtName.replace(/^_/, '').toUpperCase()}[]`;
5861
+ }
5862
+ return dataType.toUpperCase();
5863
+ }
5864
+ parseDefaultValue(defaultValue) {
5865
+ if (!defaultValue) {
5866
+ return undefined;
5867
+ }
5868
+ // Remove type casting (e.g., ::text, ::character varying, ::text[])
5869
+ const cleaned = defaultValue.replace(/::[a-z_]+(\s+[a-z_]+)?(\[\])?/gi, '').trim();
5870
+ if (cleaned.startsWith("'") && cleaned.endsWith("'")) {
5871
+ return cleaned.slice(1, -1);
5872
+ }
5873
+ if (cleaned === 'true' || cleaned === 'false') {
5874
+ return cleaned === 'true';
5875
+ }
5876
+ if (cleaned === 'NULL') {
5877
+ return null;
5878
+ }
5879
+ if (/^-?\d+$/.test(cleaned)) {
5880
+ return Number.parseInt(cleaned, 10);
5881
+ }
5882
+ if (/^-?\d+\.\d+$/.test(cleaned)) {
5883
+ return Number.parseFloat(cleaned);
5884
+ }
5885
+ // Return cleaned value for functions like CURRENT_TIMESTAMP, nextval(), etc.
5886
+ return cleaned;
5887
+ }
5888
+ isAutoIncrement(columnDefault, isIdentity) {
5889
+ // PostgreSQL identity columns (GENERATED ... AS IDENTITY)
5890
+ if (isIdentity === 'YES') {
5891
+ return true;
5892
+ }
5893
+ // Serial/bigserial columns use nextval()
5894
+ return columnDefault?.includes('nextval(') ?? false;
5895
+ }
5896
+ }
5897
+
5898
+ /**
5899
+ * SQLite schema introspector
5900
+ */ class SqliteSchemaIntrospector extends AbstractSqlSchemaIntrospector {
5901
+ constructor(pool){
5902
+ super(pool.dialect), this.pool = pool;
5903
+ }
5904
+ // ============================================================================
5905
+ // SQL Queries (dialect-specific)
5906
+ // ============================================================================
5907
+ getTableNamesQuery() {
5908
+ return /*sql*/ `
5909
+ SELECT name
5910
+ FROM sqlite_master
5911
+ WHERE type = 'table'
5912
+ AND name NOT LIKE 'sqlite_%'
5913
+ ORDER BY name
5914
+ `;
5915
+ }
5916
+ tableExistsQuery() {
5917
+ return /*sql*/ `
5918
+ SELECT COUNT(*) as count
5919
+ FROM sqlite_master
5920
+ WHERE type = 'table'
5921
+ AND name = ?
5922
+ `;
5923
+ }
5924
+ parseTableExistsResult(results) {
5925
+ const row = results[0];
5926
+ if (row?.count !== undefined) {
5927
+ return (this.toNumber(row.count) ?? 0) > 0;
5928
+ }
5929
+ return false;
5930
+ }
5931
+ // SQLite uses PRAGMA which doesn't use parameterized queries in the same way
5932
+ getColumnsQuery(tableName) {
5933
+ return `PRAGMA table_info(${this.escapeId(tableName)})`;
5934
+ }
5935
+ getIndexesQuery(tableName) {
5936
+ return `PRAGMA index_list(${this.escapeId(tableName)})`;
5937
+ }
5938
+ getForeignKeysQuery(tableName) {
5939
+ return `PRAGMA foreign_key_list(${this.escapeId(tableName)})`;
5940
+ }
5941
+ getPrimaryKeyQuery(tableName) {
5942
+ return `PRAGMA table_info(${this.escapeId(tableName)})`;
5943
+ }
5944
+ getColumnsParams(_tableName) {
5945
+ return [];
5946
+ }
5947
+ getIndexesParams(_tableName) {
5948
+ return [];
5949
+ }
5950
+ getForeignKeysParams(_tableName) {
5951
+ return [];
5952
+ }
5953
+ getPrimaryKeyParams(_tableName) {
5954
+ return [];
5955
+ }
5956
+ // ============================================================================
5957
+ // Row Mapping (dialect-specific)
5958
+ // ============================================================================
5959
+ mapTableNameRow(row) {
5960
+ return row.name;
5961
+ }
5962
+ async mapColumnsResult(querier, tableName, results) {
5963
+ // Get unique columns from indexes
5964
+ const uniqueColumns = await this.getUniqueColumns(querier, tableName);
5965
+ return results.map((row)=>({
5966
+ name: row.name,
5967
+ type: this.normalizeType(row.type),
5968
+ nullable: row.notnull === 0,
5969
+ defaultValue: this.parseDefaultValue(row.dflt_value),
5970
+ isPrimaryKey: row.pk > 0,
5971
+ isAutoIncrement: row.pk > 0 && row.type.toUpperCase() === 'INTEGER',
5972
+ isUnique: uniqueColumns.has(row.name),
5973
+ length: this.extractLength(row.type),
5974
+ precision: undefined,
5975
+ scale: undefined,
5976
+ comment: undefined
5977
+ }));
5978
+ }
5979
+ async mapIndexesResult(querier, _tableName, results) {
5980
+ const indexSchemas = [];
5981
+ for (const index of results){
5982
+ const columns = await querier.all(`PRAGMA index_info(${this.escapeId(index.name)})`);
5983
+ // Include user-created indexes ('c') and multi-column unique constraints ('u')
5984
+ // Skip primary key indexes ('pk') and single-column unique constraints
5985
+ const isUserCreated = index.origin === 'c';
5986
+ const isCompositeUnique = index.origin === 'u' && columns.length > 1;
5987
+ if (isUserCreated || isCompositeUnique) {
5988
+ indexSchemas.push({
5989
+ name: index.name,
5990
+ columns: columns.map((c)=>c.name),
5991
+ unique: Boolean(index.unique)
5992
+ });
5993
+ }
5994
+ }
5995
+ return indexSchemas;
5996
+ }
5997
+ async mapForeignKeysResult(_querier, tableName, results) {
5998
+ // Group by id to handle composite foreign keys
5999
+ const grouped = new Map();
6000
+ for (const row of results){
6001
+ const id = row.id;
6002
+ const existing = grouped.get(id) ?? [];
6003
+ existing.push(row);
6004
+ grouped.set(id, existing);
6005
+ }
6006
+ return Array.from(grouped.entries()).map(([id, rows])=>{
6007
+ const first = rows[0];
6008
+ return {
6009
+ name: `fk_${tableName}_${id}`,
6010
+ columns: rows.map((r)=>r.from),
6011
+ referencedTable: first.table,
6012
+ referencedColumns: rows.map((r)=>r.to),
6013
+ onDelete: this.normalizeReferentialAction(first.on_delete),
6014
+ onUpdate: this.normalizeReferentialAction(first.on_update)
6015
+ };
6016
+ });
6017
+ }
6018
+ mapPrimaryKeyResult(results) {
6019
+ const pkColumns = results.filter((r)=>r.pk > 0).sort((a, b)=>a.pk - b.pk);
6020
+ if (pkColumns.length === 0) {
6021
+ return undefined;
6022
+ }
6023
+ return pkColumns.map((r)=>r.name);
6024
+ }
6025
+ // ============================================================================
6026
+ // SQLite-specific helpers
6027
+ // ============================================================================
6028
+ async getUniqueColumns(querier, tableName) {
6029
+ const results = await querier.all(`PRAGMA index_list(${this.escapeId(tableName)})`);
6030
+ const uniqueColumns = new Set();
6031
+ for (const index of results){
6032
+ if (index.unique) {
6033
+ const indexInfo = await querier.all(`PRAGMA index_info(${this.escapeId(index.name)})`);
6034
+ // Only single-column unique constraints
6035
+ if (indexInfo.length === 1) {
6036
+ uniqueColumns.add(indexInfo[0].name);
6037
+ }
6038
+ }
6039
+ }
6040
+ return uniqueColumns;
6041
+ }
6042
+ normalizeType(type) {
6043
+ // Extract base type without length/precision
6044
+ const match = type.match(/^([A-Za-z]+)/);
6045
+ return match ? match[1].toUpperCase() : type.toUpperCase();
6046
+ }
6047
+ extractLength(type) {
6048
+ const match = type.match(/\((\d+)\)/);
6049
+ return match ? Number.parseInt(match[1], 10) : undefined;
6050
+ }
6051
+ parseDefaultValue(defaultValue) {
6052
+ if (defaultValue === null) {
6053
+ return undefined;
6054
+ }
6055
+ if (defaultValue === 'NULL') {
6056
+ return null;
6057
+ }
6058
+ if (defaultValue === 'CURRENT_TIMESTAMP' || defaultValue === 'CURRENT_DATE' || defaultValue === 'CURRENT_TIME') {
6059
+ return defaultValue;
6060
+ }
6061
+ if (/^'.*'$/.test(defaultValue)) {
6062
+ return defaultValue.slice(1, -1);
6063
+ }
6064
+ if (/^-?\d+$/.test(defaultValue)) {
6065
+ return Number.parseInt(defaultValue, 10);
6066
+ }
6067
+ if (typeof defaultValue !== 'string') {
6068
+ return defaultValue;
6069
+ }
6070
+ if (/^-?\d+\.\d+$/.test(defaultValue)) {
6071
+ return Number.parseFloat(defaultValue);
6072
+ }
6073
+ const upper = defaultValue.toUpperCase();
6074
+ if (upper === 'TRUE') return 1;
6075
+ if (upper === 'FALSE') return 0;
6076
+ return defaultValue;
6077
+ }
6078
+ }
6079
+
6080
+ /**
6081
+ * Schema AST Module
6082
+ *
6083
+ * Provides a unified graph representation of database schema for:
6084
+ * - Schema diffing and migration generation
6085
+ * - Entity code generation from database
6086
+ * - Drift detection
6087
+ * - Smart relation inference
6088
+ */ // Canonical type utilities
6089
+ /**
6090
+ * Introspect the database and build a SchemaAST from it.
6091
+ *
6092
+ * @param introspector - The schema introspector to use
6093
+ * @returns The SchemaAST representing the database schema
6094
+ */ async function introspectSchema(introspector) {
6095
+ return introspector.introspect();
6096
+ }
6097
+
6098
+ /**
6099
+ * Async factory for schema generators. Use this for MongoDB so the optional peer
6100
+ * `mongodb` is only loaded when this path runs. SQL dialects delegate to {@link createSchemaGenerator}.
6101
+ */ async function createSchemaGeneratorAsync(dialect, namingStrategy, defaultForeignKeyAction) {
6102
+ if (dialect.dialectName === 'mongodb') {
6103
+ const { MongoSchemaGenerator } = await import('./mongoSchemaGenerator-BT2_u1wI.js');
6104
+ return new MongoSchemaGenerator(namingStrategy, defaultForeignKeyAction);
6105
+ }
6106
+ return createSchemaGenerator(dialect, namingStrategy, defaultForeignKeyAction);
6107
+ }
6108
+
6109
+ /**
6110
+ * Stores migration state in a database table.
6111
+ * Uses the querier's dialect for escaping and placeholders.
6112
+ */ class DatabaseMigrationStorage {
6113
+ constructor(pool, options = {}){
6114
+ this.pool = pool;
6115
+ this.storageInitialized = false;
6116
+ this.tableName = options.tableName ?? 'uql_migrations';
6117
+ }
6118
+ async ensureStorage() {
6119
+ if (this.storageInitialized) {
6120
+ return;
6121
+ }
6122
+ const querier = await acquireQuerierForMigrations(this.pool);
6123
+ if (!isSqlQuerier(querier)) {
6124
+ await querier.release();
6125
+ throw new Error('DatabaseMigrationStorage requires a SQL-based querier');
6126
+ }
6127
+ try {
6128
+ await this.createTableIfNotExists(querier);
6129
+ this.storageInitialized = true;
6130
+ } finally{
6131
+ await querier.release();
6132
+ }
6133
+ }
6134
+ async createTableIfNotExists(querier) {
6135
+ const { dialect } = querier;
6136
+ const sql = `
6137
+ CREATE TABLE IF NOT EXISTS ${dialect.escapeId(this.tableName)} (
6138
+ ${dialect.escapeId('name')} VARCHAR(255) PRIMARY KEY,
6139
+ ${dialect.escapeId('executed_at')} TIMESTAMP DEFAULT CURRENT_TIMESTAMP
6140
+ )
6141
+ `;
6142
+ await querier.run(sql);
6143
+ }
6144
+ async executed() {
6145
+ await this.ensureStorage();
6146
+ const querier = await acquireQuerierForMigrations(this.pool);
6147
+ if (!isSqlQuerier(querier)) {
6148
+ await querier.release();
6149
+ throw new Error('DatabaseMigrationStorage requires a SQL-based querier');
6150
+ }
6151
+ try {
6152
+ const { dialect } = querier;
6153
+ const sql = `SELECT ${dialect.escapeId('name')} FROM ${dialect.escapeId(this.tableName)} ORDER BY ${dialect.escapeId('name')} ASC`;
6154
+ const results = await querier.all(sql);
6155
+ return results.map((r)=>r.name);
6156
+ } finally{
6157
+ await querier.release();
6158
+ }
6159
+ }
6160
+ /**
6161
+ * Log a migration as executed - uses provided querier (within transaction)
6162
+ */ async logWithQuerier(querier, migrationName) {
6163
+ await this.ensureStorage();
6164
+ const { dialect } = querier;
6165
+ const sql = `INSERT INTO ${dialect.escapeId(this.tableName)} (${dialect.escapeId('name')}) VALUES (${dialect.placeholder(1)})`;
6166
+ await querier.run(sql, [
6167
+ migrationName
6168
+ ]);
6169
+ }
6170
+ /**
6171
+ * Unlog a migration - uses provided querier (within transaction)
6172
+ */ async unlogWithQuerier(querier, migrationName) {
6173
+ await this.ensureStorage();
6174
+ const { dialect } = querier;
6175
+ const sql = `DELETE FROM ${dialect.escapeId(this.tableName)} WHERE ${dialect.escapeId('name')} = ${dialect.placeholder(1)}`;
6176
+ await querier.run(sql, [
6177
+ migrationName
6178
+ ]);
6179
+ }
6180
+ }
6181
+
6182
+ /**
6183
+ * Main class for managing database migrations
6184
+ */ class Migrator {
6185
+ get logger() {
6186
+ return this._logger;
6187
+ }
6188
+ set logger(value) {
6189
+ this._logger = new LoggerWrapper$1(value);
6190
+ }
6191
+ get entities() {
6192
+ return this._entities ?? getEntities();
6193
+ }
6194
+ constructor(pool, options = {}){
6195
+ this.pool = pool;
6196
+ this.dialectName = pool.dialect.dialectName ?? 'postgres';
6197
+ this._namingStrategy = options.namingStrategy;
6198
+ this.storage = options.storage ?? new DatabaseMigrationStorage(pool, {
6199
+ tableName: options.tableName
6200
+ });
6201
+ this.migrationsPath = options.migrationsPath ?? './migrations';
6202
+ this._logger = new LoggerWrapper$1(options.logger, options.slowQuery);
6203
+ this._entities = options.entities;
6204
+ this.schemaIntrospector = this.createIntrospector();
6205
+ this.schemaGenerator = options.schemaGenerator ?? (this.dialectName === 'mongodb' ? undefined : this.createGenerator(options.namingStrategy));
6206
+ }
6207
+ /** Loads MongoDB schema generator on first use; SQL generators are set in the constructor (or via {@link setSchemaGenerator}). */ async ensureSchemaGenerator() {
6208
+ if (this.schemaGenerator || this.dialectName !== 'mongodb') {
6209
+ return;
6210
+ }
6211
+ if (!this._mongoSchemaLoadPromise) {
6212
+ this._mongoSchemaLoadPromise = createSchemaGeneratorAsync(this.pool.dialect, this._namingStrategy).then((gen)=>{
6213
+ if (gen) {
6214
+ this.schemaGenerator = gen;
6215
+ }
6216
+ });
6217
+ }
6218
+ await this._mongoSchemaLoadPromise;
6219
+ }
6220
+ /**
6221
+ * Set the schema generator for DDL operations
6222
+ */ setSchemaGenerator(generator) {
6223
+ this.schemaGenerator = generator;
6224
+ }
6225
+ createIntrospector() {
6226
+ const d = this.dialectName;
6227
+ if (!isKnownMigratorDialect(d)) {
6228
+ return undefined;
6229
+ }
6230
+ switch(d){
6231
+ case 'postgres':
6232
+ case 'cockroachdb':
6233
+ return new PostgresSchemaIntrospector(this.pool);
6234
+ case 'mysql':
6235
+ case 'mariadb':
6236
+ return new MysqlSchemaIntrospector(this.pool);
6237
+ case 'sqlite':
6238
+ return new SqliteSchemaIntrospector(this.pool);
6239
+ case 'mongodb':
6240
+ return new MongoSchemaIntrospector(this.pool);
6241
+ default:
6242
+ return undefined;
6243
+ }
6244
+ }
6245
+ createGenerator(namingStrategy) {
6246
+ if (!isKnownMigratorDialect(this.dialectName)) {
6247
+ return undefined;
6248
+ }
6249
+ return createSchemaGenerator(this.pool.dialect);
6250
+ }
6251
+ /**
6252
+ * Get all discovered migrations from the migrations directory
6253
+ */ async getMigrations() {
6254
+ const files = await this.getMigrationFiles();
6255
+ const migrations = [];
6256
+ for (const file of files){
6257
+ const migration = await this.loadMigration(file);
6258
+ if (migration) {
6259
+ migrations.push(migration);
6260
+ }
6261
+ }
6262
+ // Sort by name (which typically includes timestamp)
6263
+ return migrations.sort((a, b)=>a.name.localeCompare(b.name));
6264
+ }
6265
+ /**
6266
+ * Get list of pending migrations (not yet executed)
6267
+ */ async pending() {
6268
+ const [migrations, executed] = await Promise.all([
6269
+ this.getMigrations(),
6270
+ this.storage.executed()
6271
+ ]);
6272
+ const executedSet = new Set(executed);
6273
+ return migrations.filter((m)=>!executedSet.has(m.name));
6274
+ }
6275
+ /**
6276
+ * Get list of executed migrations
6277
+ */ async executed() {
6278
+ return this.storage.executed();
6279
+ }
6280
+ /**
6281
+ * Run all pending migrations
6282
+ */ async up(options = {}) {
6283
+ const pendingMigrations = await this.pending();
6284
+ const results = [];
6285
+ let migrationsToRun = pendingMigrations;
6286
+ if (options.to) {
6287
+ const toIndex = migrationsToRun.findIndex((m)=>m.name === options.to);
6288
+ if (toIndex === -1) {
6289
+ throw new Error(`Migration '${options.to}' not found`);
6290
+ }
6291
+ migrationsToRun = migrationsToRun.slice(0, toIndex + 1);
6292
+ }
6293
+ if (options.step !== undefined) {
6294
+ migrationsToRun = migrationsToRun.slice(0, options.step);
6295
+ }
6296
+ for (const migration of migrationsToRun){
6297
+ const result = await this.runMigration(migration, 'up');
6298
+ results.push(result);
6299
+ if (!result.success) {
6300
+ break; // Stop on first failure
6301
+ }
6302
+ }
6303
+ return results;
6304
+ }
6305
+ /**
6306
+ * Rollback migrations
6307
+ */ async down(options = {}) {
6308
+ const [migrations, executed] = await Promise.all([
6309
+ this.getMigrations(),
6310
+ this.storage.executed()
6311
+ ]);
6312
+ const executedSet = new Set(executed);
6313
+ const executedMigrations = migrations.filter((m)=>executedSet.has(m.name)).reverse(); // Rollback in reverse order
6314
+ const results = [];
6315
+ let migrationsToRun = executedMigrations;
6316
+ if (options.to) {
6317
+ const toIndex = migrationsToRun.findIndex((m)=>m.name === options.to);
6318
+ if (toIndex === -1) {
6319
+ throw new Error(`Migration '${options.to}' not found`);
6320
+ }
6321
+ migrationsToRun = migrationsToRun.slice(0, toIndex + 1);
6322
+ }
6323
+ if (options.step !== undefined) {
6324
+ migrationsToRun = migrationsToRun.slice(0, options.step);
6325
+ }
6326
+ for (const migration of migrationsToRun){
6327
+ const result = await this.runMigration(migration, 'down');
6328
+ results.push(result);
6329
+ if (!result.success) {
6330
+ break; // Stop on first failure
6331
+ }
6332
+ }
6333
+ return results;
6334
+ }
6335
+ /**
6336
+ * Run a single migration within a transaction
6337
+ */ async runMigration(migration, direction) {
6338
+ const startTime = Date.now();
6339
+ const querier = await acquireQuerierForMigrations(this.pool);
6340
+ if (!isSqlQuerier(querier)) {
6341
+ await querier.release();
6342
+ throw new Error('Migrator requires a SQL-based querier');
6343
+ }
6344
+ try {
6345
+ this.logger.logMigration(`${direction === 'up' ? 'Running' : 'Reverting'} migration: ${migration.name}`);
6346
+ await querier.beginTransaction();
6347
+ if (direction === 'up') {
6348
+ await migration.up(querier);
6349
+ // Log within the same transaction
6350
+ await this.storage.logWithQuerier(querier, migration.name);
6351
+ } else {
6352
+ await migration.down(querier);
6353
+ // Unlog within the same transaction
6354
+ await this.storage.unlogWithQuerier(querier, migration.name);
6355
+ }
6356
+ await querier.commitTransaction();
6357
+ const duration = Date.now() - startTime;
6358
+ this.logger.logMigration(`Migration ${migration.name} ${direction === 'up' ? 'applied' : 'reverted'} in ${duration}ms`);
6359
+ return {
6360
+ name: migration.name,
6361
+ direction,
6362
+ duration,
6363
+ success: true
6364
+ };
6365
+ } catch (error) {
6366
+ await querier.rollbackTransaction();
6367
+ const duration = Date.now() - startTime;
6368
+ this.logger.logError(`Migration ${migration.name} failed: ${error.message}`, error);
6369
+ return {
6370
+ name: migration.name,
6371
+ direction,
6372
+ duration,
6373
+ success: false,
6374
+ error: error
6375
+ };
6376
+ } finally{
6377
+ await querier.release();
6378
+ }
6379
+ }
6380
+ /**
6381
+ * Generate a new migration file
6382
+ */ async generate(name) {
6383
+ const timestamp = this.getTimestamp();
6384
+ const fileName = `${timestamp}_${this.slugify(name)}.ts`;
6385
+ const filePath = join(this.migrationsPath, fileName);
6386
+ const content = buildSqlQuerierMigrationModule({
6387
+ migrationName: name,
6388
+ createdAt: new Date(),
6389
+ upInner: EMPTY_MANUAL_MIGRATION_UP_INNER,
6390
+ downInner: EMPTY_MANUAL_MIGRATION_DOWN_INNER
6391
+ });
6392
+ await mkdir(this.migrationsPath, {
6393
+ recursive: true
6394
+ });
6395
+ await writeFile(filePath, content, 'utf-8');
6396
+ this.logger.logInfo(`Created migration: ${filePath}`);
6397
+ return filePath;
6398
+ }
6399
+ /**
6400
+ * Generate a migration based on entity schema differences
6401
+ */ async generateFromEntities(name) {
6402
+ await this.ensureSchemaGenerator();
6403
+ if (!this.schemaGenerator) {
6404
+ throw new Error('Schema generator not set. Call setSchemaGenerator() first.');
6405
+ }
6406
+ const diffs = await this.getDiffs();
6407
+ const upStatements = [];
6408
+ const downStatements = [];
6409
+ for (const diff of diffs){
6410
+ if (diff.type === 'create') {
6411
+ const entity = await this.findEntityForTable(diff.tableName);
6412
+ if (entity) {
6413
+ upStatements.push(...this.schemaGenerator.generateCreateTable(entity));
6414
+ downStatements.push(this.schemaGenerator.generateDropTable(entity));
6415
+ }
6416
+ } else if (diff.type === 'alter') {
6417
+ const alterStatements = this.schemaGenerator.generateAlterTable(diff);
6418
+ upStatements.push(...alterStatements);
6419
+ const alterDownStatements = this.schemaGenerator.generateAlterTableDown(diff);
6420
+ downStatements.push(...alterDownStatements);
6421
+ }
6422
+ }
6423
+ if (upStatements.length === 0) {
6424
+ this.logger.logInfo('No schema changes detected.');
6425
+ return '';
6426
+ }
6427
+ const timestamp = this.getTimestamp();
6428
+ const fileName = `${timestamp}_${this.slugify(name)}.ts`;
6429
+ const filePath = join(this.migrationsPath, fileName);
6430
+ const down = [
6431
+ ...downStatements
6432
+ ].reverse();
6433
+ const content = buildSqlQuerierMigrationModule({
6434
+ migrationName: name,
6435
+ createdAt: new Date(),
6436
+ docExtraLines: [
6437
+ 'Generated from entity definitions'
6438
+ ],
6439
+ upInner: emitSqlRunCalls(upStatements),
6440
+ downInner: emitSqlRunCalls(down)
6441
+ });
6442
+ await mkdir(this.migrationsPath, {
6443
+ recursive: true
6444
+ });
6445
+ await writeFile(filePath, content, 'utf-8');
6446
+ this.logger.logInfo(`Created migration from entities: ${filePath}`);
6447
+ return filePath;
6448
+ }
6449
+ /**
6450
+ * Get all schema differences between entities and database
6451
+ */ async getDiffs() {
6452
+ await this.ensureSchemaGenerator();
6453
+ if (!this.schemaGenerator || !this.schemaIntrospector) {
6454
+ throw new Error('Schema generator and introspector must be set');
6455
+ }
6456
+ const ast = await introspectSchema(this.schemaIntrospector);
6457
+ const diffs = [];
6458
+ for (const entity of this.entities){
6459
+ const meta = getMeta$1(entity);
6460
+ const tableName = this.schemaGenerator.resolveTableName(entity, meta);
6461
+ const currentTable = ast.getTable(tableName);
6462
+ const diff = this.schemaGenerator.diffSchema(entity, currentTable);
6463
+ if (diff) {
6464
+ diffs.push(diff);
6465
+ }
6466
+ }
6467
+ return diffs;
6468
+ }
6469
+ async findEntityForTable(tableName) {
6470
+ await this.ensureSchemaGenerator();
6471
+ if (!this.schemaGenerator) {
6472
+ return undefined;
6473
+ }
6474
+ for (const entity of this.entities){
6475
+ const meta = getMeta$1(entity);
6476
+ const name = this.schemaGenerator.resolveTableName(entity, meta);
6477
+ if (name === tableName) {
6478
+ return entity;
6479
+ }
6480
+ }
6481
+ return undefined;
6482
+ }
6483
+ /**
6484
+ * Sync schema directly (for development only - not for production!)
6485
+ */ async sync(options = {}) {
6486
+ if (options.force) {
6487
+ return this.syncForce();
6488
+ }
6489
+ return this.autoSync({
6490
+ safe: true
6491
+ });
6492
+ }
6493
+ /**
6494
+ * Drops and recreates all tables (Development only!)
6495
+ */ async syncForce() {
6496
+ await this.ensureSchemaGenerator();
6497
+ if (!this.schemaGenerator) {
6498
+ throw new Error('Schema generator not set. Call setSchemaGenerator() first.');
6499
+ }
6500
+ const querier = await acquireQuerierForMigrations(this.pool);
6501
+ if (!isSqlQuerier(querier)) {
6502
+ await querier.release();
6503
+ throw new Error('Migrator requires a SQL-based querier');
6504
+ }
6505
+ try {
6506
+ await querier.beginTransaction();
6507
+ // Drop all tables first (in reverse order for foreign keys)
6508
+ for (const entity of [
6509
+ ...this.entities
6510
+ ].reverse()){
6511
+ const dropSql = this.schemaGenerator.generateDropTable(entity);
6512
+ this.logger.logSchema(`Executing: ${dropSql}`);
6513
+ await querier.run(dropSql);
6514
+ }
6515
+ // Create all tables
6516
+ for (const entity of this.entities){
6517
+ const createStmts = this.schemaGenerator.generateCreateTable(entity);
6518
+ for (const createSql of createStmts){
6519
+ this.logger.logSchema(`Executing: ${createSql}`);
6520
+ await querier.run(createSql);
6521
+ }
6522
+ }
6523
+ await querier.commitTransaction();
6524
+ this.logger.logSchema('Schema sync (force) completed');
6525
+ } catch (error) {
6526
+ await querier.rollbackTransaction();
6527
+ throw error;
6528
+ } finally{
6529
+ await querier.release();
6530
+ }
6531
+ }
6532
+ /**
6533
+ * Safely synchronizes the schema by only adding missing tables and columns.
6534
+ */ async autoSync(options = {}) {
6535
+ await this.ensureSchemaGenerator();
6536
+ if (!this.schemaGenerator || !this.schemaIntrospector) {
6537
+ throw new Error('Schema generator and introspector must be set');
6538
+ }
6539
+ const diffs = await this.getDiffs();
6540
+ const statements = [];
6541
+ for (const diff of diffs){
6542
+ if (diff.type === 'create') {
6543
+ const entity = await this.findEntityForTable(diff.tableName);
6544
+ if (entity) {
6545
+ statements.push(...this.schemaGenerator.generateCreateTable(entity));
6546
+ }
6547
+ } else if (diff.type === 'alter') {
6548
+ const filteredDiff = this.filterDiff(diff, options);
6549
+ const alterStatements = this.schemaGenerator.generateAlterTable(filteredDiff);
6550
+ statements.push(...alterStatements);
6551
+ }
6552
+ }
6553
+ if (statements.length === 0) {
6554
+ if (options.logging) this.logger.logSchema('Schema is already in sync.');
6555
+ return;
6556
+ }
6557
+ await this.executeSyncStatements(statements, options);
6558
+ }
6559
+ filterDiff(diff, options) {
6560
+ const filteredDiff = {
6561
+ ...diff
6562
+ };
6563
+ if (options.safe !== false) {
6564
+ // In safe mode, we only allow additions (creating tables/columns)
6565
+ // We block drops and alterations to prevent accidental data loss
6566
+ if (filteredDiff.columnsToDrop?.length) {
6567
+ this.logger.logSkippedMigration(`[AutoSync] Skipped dropping ${filteredDiff.columnsToDrop.length} columns in table '${diff.tableName}': ${filteredDiff.columnsToDrop.join(', ')} (safe mode active)`);
6568
+ delete filteredDiff.columnsToDrop;
6569
+ }
6570
+ if (filteredDiff.columnsToAlter?.length) {
6571
+ this.logger.logSkippedMigration(`[AutoSync] Skipped altering ${filteredDiff.columnsToAlter.length} columns in table '${diff.tableName}': ${filteredDiff.columnsToAlter.map((c)=>c.to.name).join(', ')} (safe mode active). Use a migration or { safe: false } to apply.`);
6572
+ delete filteredDiff.columnsToAlter;
6573
+ }
6574
+ delete filteredDiff.indexesToDrop;
6575
+ delete filteredDiff.foreignKeysToDrop;
6576
+ }
6577
+ if (!options.drop && filteredDiff.columnsToDrop?.length) {
6578
+ this.logger.logSkippedMigration(`[AutoSync] Skipped dropping ${filteredDiff.columnsToDrop.length} columns in table '${diff.tableName}' (drop: false). Use { drop: true } to apply.`);
6579
+ delete filteredDiff.columnsToDrop;
6580
+ }
6581
+ return filteredDiff;
6582
+ }
6583
+ async executeSyncStatements(statements, options) {
6584
+ const querier = await acquireQuerierForMigrations(this.pool);
6585
+ try {
6586
+ if (this.dialectName === 'mongodb') {
6587
+ await this.executeMongoSyncStatements(statements, options, querier);
6588
+ } else {
6589
+ await this.executeSqlSyncStatements(statements, options, querier);
6590
+ }
6591
+ if (options.logging) this.logger.logSchema('Schema synchronization completed');
6592
+ } catch (error) {
6593
+ if (this.dialectName !== 'mongodb' && isSqlQuerier(querier)) {
6594
+ await querier.rollbackTransaction();
6595
+ }
6596
+ throw error;
6597
+ } finally{
6598
+ await querier.release();
6599
+ }
6600
+ }
6601
+ async executeMongoSyncStatements(statements, options, querier) {
6602
+ const db = querier.db;
6603
+ for (const stmt of statements){
6604
+ const cmd = JSON.parse(stmt);
6605
+ if (options.logging) this.logger.logSchema(`Executing MongoDB: ${stmt}`);
6606
+ const collectionName = cmd.name || cmd.collection;
6607
+ if (!collectionName) {
6608
+ throw new Error(`MongoDB command missing collection name: ${stmt}`);
6609
+ }
6610
+ const collection = db.collection(collectionName);
6611
+ if (cmd.action === 'createCollection') {
6612
+ await db.createCollection(cmd.name);
6613
+ if (cmd.indexes?.length) {
6614
+ for (const idx of cmd.indexes){
6615
+ const key = Object.fromEntries(idx.columns.map((c)=>[
6616
+ c,
6617
+ 1
6618
+ ]));
6619
+ await collection.createIndex(key, {
6620
+ unique: idx.unique,
6621
+ name: idx.name
6622
+ });
6623
+ }
6624
+ }
6625
+ } else if (cmd.action === 'dropCollection') {
6626
+ await collection.drop();
6627
+ } else if (cmd.action === 'createIndex') {
6628
+ await collection.createIndex(cmd.key, cmd.options);
6629
+ } else if (cmd.action === 'dropIndex') {
6630
+ await collection.dropIndex(cmd.name);
6631
+ }
6632
+ }
6633
+ }
6634
+ async executeSqlSyncStatements(statements, options, querier) {
6635
+ if (!isSqlQuerier(querier)) {
6636
+ throw new Error('Migrator requires a SQL-based querier for this dialect');
6637
+ }
6638
+ await querier.beginTransaction();
6639
+ for (const sql of statements){
6640
+ if (options.logging) this.logger.logSchema(`Executing: ${sql}`);
6641
+ await querier.run(sql);
6642
+ }
6643
+ await querier.commitTransaction();
6644
+ }
6645
+ /**
6646
+ * Get migration status
6647
+ */ async status() {
6648
+ const [pending, executed] = await Promise.all([
6649
+ this.pending().then((m)=>m.map((x)=>x.name)),
6650
+ this.executed()
6651
+ ]);
6652
+ return {
6653
+ pending,
6654
+ executed
6655
+ };
6656
+ }
6657
+ /**
6658
+ * Get migration files from the migrations directory
6659
+ */ async getMigrationFiles() {
6660
+ try {
6661
+ const files = await readdir(this.migrationsPath);
6662
+ return files.filter((f)=>/\.(ts|js|mjs)$/.test(f)).filter((f)=>!f.endsWith('.d.ts')).sort();
6663
+ } catch (error) {
6664
+ if (error.code === 'ENOENT') {
6665
+ return [];
6666
+ }
6667
+ throw error;
6668
+ }
6669
+ }
6670
+ /**
6671
+ * Load a migration from a file
6672
+ */ async loadMigration(fileName) {
6673
+ const filePath = join(this.migrationsPath, fileName);
6674
+ const fileUrl = pathToFileURL(filePath).href;
6675
+ try {
6676
+ const module = await import(fileUrl);
6677
+ const migration = module.default ?? module;
6678
+ if (this.isMigration(migration)) {
6679
+ return {
6680
+ name: this.getMigrationName(fileName),
6681
+ up: migration.up.bind(migration),
6682
+ down: migration.down.bind(migration)
6683
+ };
6684
+ }
6685
+ this.logger.logWarn(`Warning: ${fileName} is not a valid migration`);
6686
+ return undefined;
6687
+ } catch (error) {
6688
+ this.logger.logError(`Error loading migration ${fileName}: ${error.message}`, error);
6689
+ return undefined;
6690
+ }
6691
+ }
6692
+ /**
6693
+ * Check if an object is a valid migration
6694
+ */ isMigration(obj) {
6695
+ return typeof obj === 'object' && obj !== undefined && obj !== null && typeof obj.up === 'function' && typeof obj.down === 'function';
6696
+ }
6697
+ /**
6698
+ * Extract migration name from filename
6699
+ */ getMigrationName(fileName) {
6700
+ return basename(fileName, extname(fileName));
6701
+ }
6702
+ /**
6703
+ * Generate timestamp string for migration names
6704
+ */ getTimestamp() {
6705
+ const now = new Date();
6706
+ return [
6707
+ now.getFullYear(),
6708
+ String(now.getMonth() + 1).padStart(2, '0'),
6709
+ String(now.getDate()).padStart(2, '0'),
6710
+ String(now.getHours()).padStart(2, '0'),
6711
+ String(now.getMinutes()).padStart(2, '0'),
6712
+ String(now.getSeconds()).padStart(2, '0')
6713
+ ].join('');
6714
+ }
6715
+ /**
6716
+ * Convert a string to a slug for filenames
6717
+ */ slugify(text) {
6718
+ return text.toLowerCase().replace(/[^a-z0-9]+/g, '_').replace(/^_+|_+$/g, '');
6719
+ }
6720
+ }
6721
+ /**
6722
+ * Helper function to define a migration with proper typing
6723
+ */ function defineMigration(migration) {
6724
+ return migration;
6725
+ }
6726
+ /**
6727
+ * Define a migration using the type-safe builder API.
6728
+ *
6729
+ * @example
6730
+ * ```ts
6731
+ * export default defineBuilderMigration({
6732
+ * async up(m) {
6733
+ * await m.createTable('users', (table) => {
6734
+ * table.id();
6735
+ * table.string('email', 255).unique();
6736
+ * table.timestamps();
6737
+ * });
6738
+ * },
6739
+ * async down(m) {
6740
+ * await m.dropTable('users');
6741
+ * }
6742
+ * });
6743
+ * ```
6744
+ */ function defineBuilderMigration(migration) {
6745
+ return migration;
6746
+ }
6747
+
6748
+ /**
6749
+ * Stores migration state in a JSON file.
6750
+ * Useful for development or environments without a database.
6751
+ */ class JsonMigrationStorage {
6752
+ constructor(filePath = './migrations/.uql-migrations.json'){
6753
+ this.executedMigrations = [];
6754
+ this.filePath = filePath;
6755
+ }
6756
+ async ensureStorage() {
6757
+ const content = await fs.readFile(this.filePath, 'utf-8').catch(async (error)=>{
6758
+ if (error.code === 'ENOENT') {
6759
+ const initial = '[]';
6760
+ await fs.writeFile(this.filePath, initial, 'utf-8');
6761
+ return initial;
6762
+ }
6763
+ throw error;
6764
+ });
6765
+ this.executedMigrations = JSON.parse(content);
6766
+ }
6767
+ async executed() {
6768
+ await this.ensureStorage();
6769
+ return this.executedMigrations;
6770
+ }
6771
+ async logWithQuerier(_querier, migrationName) {
6772
+ await this.ensureStorage();
6773
+ if (!this.executedMigrations.includes(migrationName)) {
6774
+ this.executedMigrations.push(migrationName);
6775
+ await this.save();
6776
+ }
6777
+ }
6778
+ async unlogWithQuerier(_querier, migrationName) {
6779
+ await this.ensureStorage();
6780
+ this.executedMigrations = this.executedMigrations.filter((m)=>m !== migrationName);
6781
+ await this.save();
6782
+ }
6783
+ async save() {
6784
+ await fs.writeFile(this.filePath, JSON.stringify(this.executedMigrations, null, 2), 'utf-8');
6785
+ }
6786
+ }
6787
+
6788
+ /**
6789
+ * Service for synchronizing schemas between entities and database.
6790
+ */ class SchemaSync {
6791
+ constructor(options){
6792
+ this.options = options;
6793
+ }
6794
+ /**
6795
+ * Execute schema synchronization.
6796
+ */ async sync() {
6797
+ const direction = this.options.direction ?? 'bidirectional';
6798
+ switch(direction){
6799
+ case 'entity-to-db':
6800
+ return this.syncEntityToDb();
6801
+ case 'db-to-entity':
6802
+ return this.syncDbToEntity();
6803
+ case 'bidirectional':
6804
+ return this.syncBidirectional();
6805
+ }
6806
+ }
6807
+ /**
6808
+ * Sync from entities to database (push).
6809
+ */ async syncEntityToDb() {
6810
+ const entityAST = this.buildEntityAST();
6811
+ const dbAST = await this.buildDatabaseAST();
6812
+ const differ = new SchemaASTDiffer();
6813
+ const diff = differ.diff(entityAST, dbAST);
6814
+ // In safe mode, filter out destructive changes
6815
+ const safeDiff = this.options.safe ? this.filterDestructiveChanges(diff) : diff;
6816
+ return {
6817
+ direction: 'entity-to-db',
6818
+ success: true,
6819
+ dbChanges: safeDiff,
6820
+ entityChanges: undefined,
6821
+ conflicts: [],
6822
+ summary: this.formatSummary('entity-to-db', safeDiff),
6823
+ details: {
6824
+ db: this.getDiffCounts(safeDiff),
6825
+ entity: {
6826
+ created: 0,
6827
+ dropped: 0,
6828
+ altered: 0
6829
+ }
6830
+ }
6831
+ };
6832
+ }
6833
+ /**
6834
+ * Sync from database to entities (pull).
6835
+ */ async syncDbToEntity() {
6836
+ const entityAST = this.buildEntityAST();
6837
+ const dbAST = await this.buildDatabaseAST();
6838
+ const differ = new SchemaASTDiffer();
6839
+ // Diff in opposite direction: DB is source, entity is target
6840
+ const diff = differ.diff(dbAST, entityAST);
6841
+ // Apply safe mode if enabled
6842
+ const safeDiff = this.options.safe ? this.filterDestructiveChanges(diff) : diff;
6843
+ return {
6844
+ direction: 'db-to-entity',
6845
+ success: true,
6846
+ dbChanges: undefined,
6847
+ entityChanges: safeDiff,
6848
+ conflicts: [],
6849
+ summary: this.formatSummary('db-to-entity', safeDiff),
6850
+ details: {
6851
+ db: {
6852
+ created: 0,
6853
+ dropped: 0,
6854
+ altered: 0
6855
+ },
6856
+ entity: this.getDiffCounts(safeDiff)
6857
+ }
6858
+ };
6859
+ }
6860
+ /**
6861
+ * Bidirectional sync with conflict detection.
6862
+ */ async syncBidirectional() {
6863
+ const entityAST = this.buildEntityAST();
6864
+ const dbAST = await this.buildDatabaseAST();
6865
+ const differ = new SchemaASTDiffer();
6866
+ // Get both directions
6867
+ const entityToDb = differ.diff(entityAST, dbAST);
6868
+ const dbToEntity = differ.diff(dbAST, entityAST);
6869
+ // Detect conflicts (changes in both directions for same elements)
6870
+ const conflicts = this.detectConflicts(entityToDb, dbToEntity);
6871
+ // Filter out conflicting changes
6872
+ let safeEntityToDb = this.filterConflictingChanges(entityToDb, conflicts);
6873
+ let safeDbToEntity = this.filterConflictingChanges(dbToEntity, conflicts);
6874
+ // Apply safe mode if enabled
6875
+ if (this.options.safe) {
6876
+ safeEntityToDb = this.filterDestructiveChanges(safeEntityToDb);
6877
+ safeDbToEntity = this.filterDestructiveChanges(safeDbToEntity);
6878
+ }
6879
+ return {
6880
+ direction: 'bidirectional',
6881
+ success: conflicts.length === 0,
6882
+ dbChanges: safeEntityToDb,
6883
+ entityChanges: safeDbToEntity,
6884
+ conflicts,
6885
+ summary: this.formatBidirectionalSummary(safeEntityToDb, safeDbToEntity, conflicts),
6886
+ details: {
6887
+ db: this.getDiffCounts(safeEntityToDb),
6888
+ entity: this.getDiffCounts(safeDbToEntity)
6889
+ }
6890
+ };
6891
+ }
6892
+ /**
6893
+ * Build SchemaAST from entities.
6894
+ */ buildEntityAST() {
6895
+ const builder = new SchemaASTBuilder();
6896
+ return builder.fromEntities(this.options.entities);
6897
+ }
6898
+ /**
6899
+ * Build SchemaAST from database.
6900
+ */ async buildDatabaseAST() {
6901
+ return this.options.introspector.introspect();
6902
+ }
6903
+ /**
6904
+ * Filter destructive changes for safe mode.
6905
+ */ filterDestructiveChanges(diff) {
6906
+ return {
6907
+ ...diff,
6908
+ tablesToDrop: [],
6909
+ columnDiffs: diff.columnDiffs.filter((d)=>d.type !== 'drop'),
6910
+ indexDiffs: diff.indexDiffs.filter((d)=>d.type !== 'drop'),
6911
+ relationshipDiffs: diff.relationshipDiffs.filter((d)=>d.type !== 'drop')
6912
+ };
6913
+ }
6914
+ /**
6915
+ * Detect conflicts between bidirectional changes.
6916
+ */ detectConflicts(entityToDb, dbToEntity) {
6917
+ const conflicts = [];
6918
+ // Find column alterations that exist in both directions (type conflicts)
6919
+ const entityColAlters = new Map(entityToDb.columnDiffs.filter((d)=>d.type === 'alter').map((d)=>[
6920
+ `${d.table}.${d.column}`,
6921
+ d
6922
+ ]));
6923
+ for (const dbColDiff of dbToEntity.columnDiffs.filter((d)=>d.type === 'alter')){
6924
+ const key = `${dbColDiff.table}.${dbColDiff.column}`;
6925
+ const entityColDiff = entityColAlters.get(key);
6926
+ if (entityColDiff) {
6927
+ // Both sides want to alter the same column - conflict
6928
+ conflicts.push({
6929
+ type: 'type_mismatch',
6930
+ table: dbColDiff.table,
6931
+ column: dbColDiff.column,
6932
+ entityValue: entityColDiff.expected?.type,
6933
+ dbValue: dbColDiff.expected?.type,
6934
+ suggestion: `Column has different types. Entity: ${this.formatType(entityColDiff.expected?.type)}, DB: ${this.formatType(dbColDiff.expected?.type)}`
6935
+ });
6936
+ }
6937
+ }
6938
+ return conflicts;
6939
+ }
6940
+ /**
6941
+ * Filter out conflicting changes.
6942
+ */ filterConflictingChanges(diff, conflicts) {
6943
+ const conflictKeys = new Set(conflicts.map((c)=>`${c.table}.${c.column ?? ''}`));
6944
+ return {
6945
+ ...diff,
6946
+ columnDiffs: diff.columnDiffs.filter((d)=>!conflictKeys.has(`${d.table}.${d.column}`)),
6947
+ tablesToAlter: diff.tablesToAlter.filter((t)=>!conflictKeys.has(`${t.name}.`))
6948
+ };
6949
+ }
6950
+ /**
6951
+ * Get counts of changes from a diff.
6952
+ */ getDiffCounts(diff) {
6953
+ return {
6954
+ created: diff.tablesToCreate.length + diff.columnDiffs.filter((d)=>d.type === 'add').length,
6955
+ dropped: diff.tablesToDrop.length + diff.columnDiffs.filter((d)=>d.type === 'drop').length,
6956
+ altered: diff.columnDiffs.filter((d)=>d.type === 'alter').length
6957
+ };
6958
+ }
6959
+ /**
6960
+ * Format summary for single-direction sync.
6961
+ */ formatSummary(direction, diff) {
6962
+ const lines = [];
6963
+ if (direction === 'entity-to-db') {
6964
+ lines.push('Entity → Database Changes:');
6965
+ } else {
6966
+ lines.push('Database → Entity Changes:');
6967
+ }
6968
+ if (diff.tablesToCreate.length > 0) {
6969
+ lines.push(` + ${diff.tablesToCreate.length} table(s) to create`);
6970
+ }
6971
+ if (diff.tablesToDrop.length > 0) {
6972
+ lines.push(` - ${diff.tablesToDrop.length} table(s) to drop`);
6973
+ }
6974
+ if (diff.columnDiffs.length > 0) {
6975
+ const adds = diff.columnDiffs.filter((d)=>d.type === 'add').length;
6976
+ const drops = diff.columnDiffs.filter((d)=>d.type === 'drop').length;
6977
+ const alters = diff.columnDiffs.filter((d)=>d.type === 'alter').length;
6978
+ if (adds) lines.push(` + ${adds} column(s) to add`);
6979
+ if (drops) lines.push(` - ${drops} column(s) to drop`);
6980
+ if (alters) lines.push(` ~ ${alters} column(s) to alter`);
6981
+ }
6982
+ if (diff.indexDiffs.length > 0) {
6983
+ lines.push(` ${diff.indexDiffs.length} index change(s)`);
6984
+ }
6985
+ if (!diff.hasDifferences) {
6986
+ lines.push(' Schema is already in sync.');
6987
+ }
6988
+ return lines.join('\n');
6989
+ }
6990
+ /**
6991
+ * Format summary for bidirectional sync.
6992
+ */ formatBidirectionalSummary(entityToDb, dbToEntity, conflicts) {
6993
+ const lines = [];
6994
+ lines.push('Bidirectional Sync Report');
6995
+ lines.push('========================\n');
6996
+ if (conflicts.length > 0) {
6997
+ lines.push(`⚠️ ${conflicts.length} conflict(s) require manual resolution:\n`);
6998
+ for (const conflict of conflicts){
6999
+ lines.push(` • ${conflict.table}.${conflict.column ?? ''}: ${conflict.suggestion}`);
7000
+ }
7001
+ lines.push('');
7002
+ }
7003
+ if (entityToDb.hasDifferences) {
7004
+ lines.push('Entity → Database:');
7005
+ lines.push(this.formatSummary('entity-to-db', entityToDb).split('\n').slice(1).join('\n'));
7006
+ lines.push('');
7007
+ }
7008
+ if (dbToEntity.hasDifferences) {
7009
+ lines.push('Database → Entity:');
7010
+ lines.push(this.formatSummary('db-to-entity', dbToEntity).split('\n').slice(1).join('\n'));
7011
+ }
7012
+ if (!entityToDb.hasDifferences && !dbToEntity.hasDifferences && conflicts.length === 0) {
7013
+ lines.push('✓ Schema is in sync.');
7014
+ }
7015
+ return lines.join('\n');
7016
+ }
7017
+ /**
7018
+ * Format type for display.
7019
+ */ formatType(type) {
7020
+ if (!type?.category) return 'unknown';
7021
+ return type.length ? `${type.category}(${type.length})` : type.category;
7022
+ }
7023
+ }
7024
+ /**
7025
+ * Create a SchemaSync instance.
7026
+ */ function createSchemaSync(options) {
7027
+ return new SchemaSync(options);
7028
+ }
7029
+
7030
+ export { AbstractSqlSchemaIntrospector, ColumnBuilder, DatabaseMigrationStorage, DriftDetector, EMPTY_MANUAL_MIGRATION_DOWN_INNER, EMPTY_MANUAL_MIGRATION_UP_INNER, EntityCodeGenerator, EntityMerger, JsonMigrationStorage, MariadbSchemaIntrospector, MigrationBuilder, MigrationCodeGenerator, Migrator, MongoSchemaIntrospector, MysqlSchemaIntrospector, OperationRecorder, PostgresSchemaIntrospector, SchemaSync, SmartRelationDetector, SqlExpression, SqlSchemaGenerator, SqliteSchemaIntrospector, TableBuilder, acquireQuerierForMigrations, assertCliConfig, buildSqlQuerierMigrationModule, createDriftDetector, createDryRunBuilder, createEntityCodeGenerator, createEntityMerger, createMigrationCodeGenerator, createRelationDetector, createSchemaGenerator, createSchemaGeneratorAsync, createSchemaSync, defineBuilderMigration, defineMigration, detectDrift, emitSqlRunCall, emitSqlRunCalls, formatDefaultValue, loadConfig, t };
7031
+ //# sourceMappingURL=uql-browser.min.js.map