@uql/core 3.1.1 → 3.1.3

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 (599) hide show
  1. package/CHANGELOG.md +136 -185
  2. package/{dist/README.md → README.md} +22 -27
  3. package/dist/browser/cc-BEf4wTUm.js +535 -0
  4. package/dist/browser/cc-BEf4wTUm.js.map +1 -0
  5. package/dist/browser/http/bus.d.ts +1 -0
  6. package/dist/browser/http/bus.d.ts.map +1 -0
  7. package/dist/browser/http/bus.js +1 -1
  8. package/dist/browser/http/bus.js.map +1 -0
  9. package/dist/browser/http/http.d.ts +1 -0
  10. package/dist/browser/http/http.d.ts.map +1 -0
  11. package/dist/browser/http/http.js +1 -1
  12. package/dist/browser/http/http.js.map +1 -0
  13. package/dist/browser/http/index.d.ts +1 -0
  14. package/dist/browser/http/index.d.ts.map +1 -0
  15. package/dist/browser/http/index.js +1 -1
  16. package/dist/browser/http/index.js.map +1 -0
  17. package/dist/browser/index.d.ts +1 -0
  18. package/dist/browser/index.d.ts.map +1 -0
  19. package/dist/browser/index.js +1 -1
  20. package/dist/browser/index.js.map +1 -0
  21. package/dist/browser/options.d.ts +1 -0
  22. package/dist/browser/options.d.ts.map +1 -0
  23. package/dist/browser/options.js +1 -1
  24. package/dist/browser/options.js.map +1 -0
  25. package/dist/browser/querier/genericClientRepository.d.ts +1 -0
  26. package/dist/browser/querier/genericClientRepository.d.ts.map +1 -0
  27. package/dist/browser/querier/genericClientRepository.js +1 -1
  28. package/dist/browser/querier/genericClientRepository.js.map +1 -0
  29. package/dist/browser/querier/httpQuerier.d.ts +1 -0
  30. package/dist/browser/querier/httpQuerier.d.ts.map +1 -0
  31. package/dist/browser/querier/httpQuerier.js +1 -1
  32. package/dist/browser/querier/httpQuerier.js.map +1 -0
  33. package/dist/browser/querier/index.d.ts +1 -0
  34. package/dist/browser/querier/index.d.ts.map +1 -0
  35. package/dist/browser/querier/index.js +1 -1
  36. package/dist/browser/querier/index.js.map +1 -0
  37. package/dist/browser/querier/querier.util.d.ts +1 -0
  38. package/dist/browser/querier/querier.util.d.ts.map +1 -0
  39. package/dist/browser/querier/querier.util.js +1 -1
  40. package/dist/browser/querier/querier.util.js.map +1 -0
  41. package/dist/browser/type/clientQuerier.d.ts +1 -0
  42. package/dist/browser/type/clientQuerier.d.ts.map +1 -0
  43. package/dist/browser/type/clientQuerier.js +1 -1
  44. package/dist/browser/type/clientQuerier.js.map +1 -0
  45. package/dist/browser/type/clientQuerierPool.d.ts +1 -0
  46. package/dist/browser/type/clientQuerierPool.d.ts.map +1 -0
  47. package/dist/browser/type/clientQuerierPool.js +1 -1
  48. package/dist/browser/type/clientQuerierPool.js.map +1 -0
  49. package/dist/browser/type/clientRepository.d.ts +1 -0
  50. package/dist/browser/type/clientRepository.d.ts.map +1 -0
  51. package/dist/browser/type/clientRepository.js +1 -1
  52. package/dist/browser/type/clientRepository.js.map +1 -0
  53. package/dist/browser/type/index.d.ts +1 -0
  54. package/dist/browser/type/index.d.ts.map +1 -0
  55. package/dist/browser/type/index.js +1 -1
  56. package/dist/browser/type/index.js.map +1 -0
  57. package/dist/browser/type/request.d.ts +1 -0
  58. package/dist/browser/type/request.d.ts.map +1 -0
  59. package/dist/browser/type/request.js +1 -1
  60. package/dist/browser/type/request.js.map +1 -0
  61. package/dist/dialect/abstractDialect.d.ts +1 -0
  62. package/dist/dialect/abstractDialect.d.ts.map +1 -0
  63. package/dist/dialect/abstractDialect.js +1 -1
  64. package/dist/dialect/abstractDialect.js.map +1 -0
  65. package/dist/dialect/abstractSqlDialect.d.ts +1 -0
  66. package/dist/dialect/abstractSqlDialect.d.ts.map +1 -0
  67. package/dist/dialect/abstractSqlDialect.js +1 -1
  68. package/dist/dialect/abstractSqlDialect.js.map +1 -0
  69. package/dist/dialect/index.d.ts +1 -0
  70. package/dist/dialect/index.d.ts.map +1 -0
  71. package/dist/dialect/index.js +1 -1
  72. package/dist/dialect/index.js.map +1 -0
  73. package/dist/dialect/queryContext.d.ts +1 -0
  74. package/dist/dialect/queryContext.d.ts.map +1 -0
  75. package/dist/dialect/queryContext.js +1 -1
  76. package/dist/dialect/queryContext.js.map +1 -0
  77. package/dist/entity/decorator/definition.d.ts +1 -0
  78. package/dist/entity/decorator/definition.d.ts.map +1 -0
  79. package/dist/entity/decorator/definition.js +1 -2
  80. package/dist/entity/decorator/definition.js.map +1 -0
  81. package/dist/entity/decorator/entity.d.ts +1 -0
  82. package/dist/entity/decorator/entity.d.ts.map +1 -0
  83. package/dist/entity/decorator/entity.js +1 -1
  84. package/dist/entity/decorator/entity.js.map +1 -0
  85. package/dist/entity/decorator/field.d.ts +1 -0
  86. package/dist/entity/decorator/field.d.ts.map +1 -0
  87. package/dist/entity/decorator/field.js +1 -1
  88. package/dist/entity/decorator/field.js.map +1 -0
  89. package/dist/entity/decorator/id.d.ts +1 -0
  90. package/dist/entity/decorator/id.d.ts.map +1 -0
  91. package/dist/entity/decorator/id.js +1 -1
  92. package/dist/entity/decorator/id.js.map +1 -0
  93. package/dist/entity/decorator/index.d.ts +1 -0
  94. package/dist/entity/decorator/index.d.ts.map +1 -0
  95. package/dist/entity/decorator/index.js +1 -1
  96. package/dist/entity/decorator/index.js.map +1 -0
  97. package/dist/entity/decorator/relation.d.ts +1 -0
  98. package/dist/entity/decorator/relation.d.ts.map +1 -0
  99. package/dist/entity/decorator/relation.js +1 -1
  100. package/dist/entity/decorator/relation.js.map +1 -0
  101. package/dist/entity/index.d.ts +1 -0
  102. package/dist/entity/index.d.ts.map +1 -0
  103. package/dist/entity/index.js +1 -1
  104. package/dist/entity/index.js.map +1 -0
  105. package/dist/express/index.d.ts +1 -0
  106. package/dist/express/index.d.ts.map +1 -0
  107. package/dist/express/index.js +1 -1
  108. package/dist/express/index.js.map +1 -0
  109. package/dist/express/querierMiddleware.d.ts +1 -0
  110. package/dist/express/querierMiddleware.d.ts.map +1 -0
  111. package/dist/express/querierMiddleware.js +1 -1
  112. package/dist/express/querierMiddleware.js.map +1 -0
  113. package/dist/express/query.util.d.ts +1 -0
  114. package/dist/express/query.util.d.ts.map +1 -0
  115. package/dist/express/query.util.js +1 -1
  116. package/dist/express/query.util.js.map +1 -0
  117. package/dist/index.d.ts +1 -1
  118. package/dist/index.d.ts.map +1 -0
  119. package/dist/index.js +1 -2
  120. package/dist/index.js.map +1 -0
  121. package/dist/maria/index.d.ts +1 -0
  122. package/dist/maria/index.d.ts.map +1 -0
  123. package/dist/maria/index.js +1 -1
  124. package/dist/maria/index.js.map +1 -0
  125. package/dist/maria/mariaDialect.d.ts +1 -0
  126. package/dist/maria/mariaDialect.d.ts.map +1 -0
  127. package/dist/maria/mariaDialect.js +1 -1
  128. package/dist/maria/mariaDialect.js.map +1 -0
  129. package/dist/maria/mariadbQuerier.d.ts +1 -0
  130. package/dist/maria/mariadbQuerier.d.ts.map +1 -0
  131. package/dist/maria/mariadbQuerier.js +1 -1
  132. package/dist/maria/mariadbQuerier.js.map +1 -0
  133. package/dist/maria/mariadbQuerierPool.d.ts +1 -0
  134. package/dist/maria/mariadbQuerierPool.d.ts.map +1 -0
  135. package/dist/maria/mariadbQuerierPool.js +1 -1
  136. package/dist/maria/mariadbQuerierPool.js.map +1 -0
  137. package/dist/migrate/cli.d.ts +1 -0
  138. package/dist/migrate/cli.d.ts.map +1 -0
  139. package/dist/migrate/cli.js +3 -3
  140. package/dist/migrate/cli.js.map +1 -0
  141. package/dist/migrate/generator/index.d.ts +1 -0
  142. package/dist/migrate/generator/index.d.ts.map +1 -0
  143. package/dist/migrate/generator/index.js +1 -1
  144. package/dist/migrate/generator/index.js.map +1 -0
  145. package/dist/migrate/generator/mongoSchemaGenerator.d.ts +1 -0
  146. package/dist/migrate/generator/mongoSchemaGenerator.d.ts.map +1 -0
  147. package/dist/migrate/generator/mongoSchemaGenerator.js +1 -1
  148. package/dist/migrate/generator/mongoSchemaGenerator.js.map +1 -0
  149. package/dist/migrate/generator/mysqlSchemaGenerator.d.ts +1 -0
  150. package/dist/migrate/generator/mysqlSchemaGenerator.d.ts.map +1 -0
  151. package/dist/migrate/generator/mysqlSchemaGenerator.js +1 -1
  152. package/dist/migrate/generator/mysqlSchemaGenerator.js.map +1 -0
  153. package/dist/migrate/generator/postgresSchemaGenerator.d.ts +1 -0
  154. package/dist/migrate/generator/postgresSchemaGenerator.d.ts.map +1 -0
  155. package/dist/migrate/generator/postgresSchemaGenerator.js +1 -1
  156. package/dist/migrate/generator/postgresSchemaGenerator.js.map +1 -0
  157. package/dist/migrate/generator/sqliteSchemaGenerator.d.ts +1 -0
  158. package/dist/migrate/generator/sqliteSchemaGenerator.d.ts.map +1 -0
  159. package/dist/migrate/generator/sqliteSchemaGenerator.js +1 -1
  160. package/dist/migrate/generator/sqliteSchemaGenerator.js.map +1 -0
  161. package/dist/migrate/index.d.ts +1 -0
  162. package/dist/migrate/index.d.ts.map +1 -0
  163. package/dist/migrate/index.js +1 -1
  164. package/dist/migrate/index.js.map +1 -0
  165. package/dist/migrate/introspection/index.d.ts +1 -0
  166. package/dist/migrate/introspection/index.d.ts.map +1 -0
  167. package/dist/migrate/introspection/index.js +1 -1
  168. package/dist/migrate/introspection/index.js.map +1 -0
  169. package/dist/migrate/introspection/mongoIntrospector.d.ts +1 -0
  170. package/dist/migrate/introspection/mongoIntrospector.d.ts.map +1 -0
  171. package/dist/migrate/introspection/mongoIntrospector.js +1 -1
  172. package/dist/migrate/introspection/mongoIntrospector.js.map +1 -0
  173. package/dist/migrate/introspection/mysqlIntrospector.d.ts +1 -0
  174. package/dist/migrate/introspection/mysqlIntrospector.d.ts.map +1 -0
  175. package/dist/migrate/introspection/mysqlIntrospector.js +1 -1
  176. package/dist/migrate/introspection/mysqlIntrospector.js.map +1 -0
  177. package/dist/migrate/introspection/postgresIntrospector.d.ts +1 -0
  178. package/dist/migrate/introspection/postgresIntrospector.d.ts.map +1 -0
  179. package/dist/migrate/introspection/postgresIntrospector.js +1 -1
  180. package/dist/migrate/introspection/postgresIntrospector.js.map +1 -0
  181. package/dist/migrate/introspection/sqliteIntrospector.d.ts +1 -0
  182. package/dist/migrate/introspection/sqliteIntrospector.d.ts.map +1 -0
  183. package/dist/migrate/introspection/sqliteIntrospector.js +1 -1
  184. package/dist/migrate/introspection/sqliteIntrospector.js.map +1 -0
  185. package/dist/migrate/migrator.d.ts +1 -0
  186. package/dist/migrate/migrator.d.ts.map +1 -0
  187. package/dist/migrate/migrator.js +1 -1
  188. package/dist/migrate/migrator.js.map +1 -0
  189. package/dist/migrate/schemaGenerator.d.ts +1 -0
  190. package/dist/migrate/schemaGenerator.d.ts.map +1 -0
  191. package/dist/migrate/schemaGenerator.js +1 -1
  192. package/dist/migrate/schemaGenerator.js.map +1 -0
  193. package/dist/migrate/storage/databaseStorage.d.ts +1 -0
  194. package/dist/migrate/storage/databaseStorage.d.ts.map +1 -0
  195. package/dist/migrate/storage/databaseStorage.js +1 -1
  196. package/dist/migrate/storage/databaseStorage.js.map +1 -0
  197. package/dist/migrate/storage/index.d.ts +1 -0
  198. package/dist/migrate/storage/index.d.ts.map +1 -0
  199. package/dist/migrate/storage/index.js +1 -1
  200. package/dist/migrate/storage/index.js.map +1 -0
  201. package/dist/migrate/storage/jsonStorage.d.ts +1 -0
  202. package/dist/migrate/storage/jsonStorage.d.ts.map +1 -0
  203. package/dist/migrate/storage/jsonStorage.js +1 -1
  204. package/dist/migrate/storage/jsonStorage.js.map +1 -0
  205. package/dist/migrate/type.d.ts +1 -0
  206. package/dist/migrate/type.d.ts.map +1 -0
  207. package/dist/migrate/type.js +1 -1
  208. package/dist/migrate/type.js.map +1 -0
  209. package/dist/mongo/index.d.ts +1 -0
  210. package/dist/mongo/index.d.ts.map +1 -0
  211. package/dist/mongo/index.js +1 -1
  212. package/dist/mongo/index.js.map +1 -0
  213. package/dist/mongo/mongoDialect.d.ts +1 -0
  214. package/dist/mongo/mongoDialect.d.ts.map +1 -0
  215. package/dist/mongo/mongoDialect.js +1 -1
  216. package/dist/mongo/mongoDialect.js.map +1 -0
  217. package/dist/mongo/mongodbQuerier.d.ts +1 -0
  218. package/dist/mongo/mongodbQuerier.d.ts.map +1 -0
  219. package/dist/mongo/mongodbQuerier.js +1 -1
  220. package/dist/mongo/mongodbQuerier.js.map +1 -0
  221. package/dist/mongo/mongodbQuerierPool.d.ts +1 -0
  222. package/dist/mongo/mongodbQuerierPool.d.ts.map +1 -0
  223. package/dist/mongo/mongodbQuerierPool.js +1 -1
  224. package/dist/mongo/mongodbQuerierPool.js.map +1 -0
  225. package/dist/mysql/index.d.ts +1 -0
  226. package/dist/mysql/index.d.ts.map +1 -0
  227. package/dist/mysql/index.js +1 -1
  228. package/dist/mysql/index.js.map +1 -0
  229. package/dist/mysql/mysql2Querier.d.ts +1 -0
  230. package/dist/mysql/mysql2Querier.d.ts.map +1 -0
  231. package/dist/mysql/mysql2Querier.js +1 -1
  232. package/dist/mysql/mysql2Querier.js.map +1 -0
  233. package/dist/mysql/mysql2QuerierPool.d.ts +1 -0
  234. package/dist/mysql/mysql2QuerierPool.d.ts.map +1 -0
  235. package/dist/mysql/mysql2QuerierPool.js +1 -1
  236. package/dist/mysql/mysql2QuerierPool.js.map +1 -0
  237. package/dist/mysql/mysqlDialect.d.ts +1 -0
  238. package/dist/mysql/mysqlDialect.d.ts.map +1 -0
  239. package/dist/mysql/mysqlDialect.js +1 -1
  240. package/dist/mysql/mysqlDialect.js.map +1 -0
  241. package/dist/namingStrategy/defaultNamingStrategy.d.ts +1 -0
  242. package/dist/namingStrategy/defaultNamingStrategy.d.ts.map +1 -0
  243. package/dist/namingStrategy/defaultNamingStrategy.js +1 -1
  244. package/dist/namingStrategy/defaultNamingStrategy.js.map +1 -0
  245. package/dist/namingStrategy/index.d.ts +1 -0
  246. package/dist/namingStrategy/index.d.ts.map +1 -0
  247. package/dist/namingStrategy/index.js +1 -1
  248. package/dist/namingStrategy/index.js.map +1 -0
  249. package/dist/namingStrategy/snakeCaseNamingStrategy.d.ts +1 -0
  250. package/dist/namingStrategy/snakeCaseNamingStrategy.d.ts.map +1 -0
  251. package/dist/namingStrategy/snakeCaseNamingStrategy.js +1 -1
  252. package/dist/namingStrategy/snakeCaseNamingStrategy.js.map +1 -0
  253. package/dist/options.d.ts +1 -0
  254. package/dist/options.d.ts.map +1 -0
  255. package/dist/options.js +1 -1
  256. package/dist/options.js.map +1 -0
  257. package/dist/postgres/index.d.ts +1 -0
  258. package/dist/postgres/index.d.ts.map +1 -0
  259. package/dist/postgres/index.js +1 -1
  260. package/dist/postgres/index.js.map +1 -0
  261. package/dist/postgres/pgQuerier.d.ts +1 -0
  262. package/dist/postgres/pgQuerier.d.ts.map +1 -0
  263. package/dist/postgres/pgQuerier.js +1 -1
  264. package/dist/postgres/pgQuerier.js.map +1 -0
  265. package/dist/postgres/pgQuerierPool.d.ts +1 -0
  266. package/dist/postgres/pgQuerierPool.d.ts.map +1 -0
  267. package/dist/postgres/pgQuerierPool.js +1 -1
  268. package/dist/postgres/pgQuerierPool.js.map +1 -0
  269. package/dist/postgres/postgresDialect.d.ts +1 -0
  270. package/dist/postgres/postgresDialect.d.ts.map +1 -0
  271. package/dist/postgres/postgresDialect.js +1 -1
  272. package/dist/postgres/postgresDialect.js.map +1 -0
  273. package/dist/querier/abstractQuerier.d.ts +1 -0
  274. package/dist/querier/abstractQuerier.d.ts.map +1 -0
  275. package/dist/querier/abstractQuerier.js +1 -1
  276. package/dist/querier/abstractQuerier.js.map +1 -0
  277. package/dist/querier/abstractQuerierPool.d.ts +1 -0
  278. package/dist/querier/abstractQuerierPool.d.ts.map +1 -0
  279. package/dist/querier/abstractQuerierPool.js +1 -1
  280. package/dist/querier/abstractQuerierPool.js.map +1 -0
  281. package/dist/querier/abstractSqlQuerier.d.ts +1 -0
  282. package/dist/querier/abstractSqlQuerier.d.ts.map +1 -0
  283. package/dist/querier/abstractSqlQuerier.js +1 -1
  284. package/dist/querier/abstractSqlQuerier.js.map +1 -0
  285. package/dist/querier/decorator/index.d.ts +1 -0
  286. package/dist/querier/decorator/index.d.ts.map +1 -0
  287. package/dist/querier/decorator/index.js +1 -1
  288. package/dist/querier/decorator/index.js.map +1 -0
  289. package/dist/querier/decorator/injectQuerier.d.ts +1 -0
  290. package/dist/querier/decorator/injectQuerier.d.ts.map +1 -0
  291. package/dist/querier/decorator/injectQuerier.js +1 -1
  292. package/dist/querier/decorator/injectQuerier.js.map +1 -0
  293. package/dist/querier/decorator/serialized.d.ts +1 -0
  294. package/dist/querier/decorator/serialized.d.ts.map +1 -0
  295. package/dist/querier/decorator/serialized.js +1 -1
  296. package/dist/querier/decorator/serialized.js.map +1 -0
  297. package/dist/querier/decorator/transactional.d.ts +1 -0
  298. package/dist/querier/decorator/transactional.d.ts.map +1 -0
  299. package/dist/querier/decorator/transactional.js +1 -1
  300. package/dist/querier/decorator/transactional.js.map +1 -0
  301. package/dist/querier/index.d.ts +1 -0
  302. package/dist/querier/index.d.ts.map +1 -0
  303. package/dist/querier/index.js +1 -1
  304. package/dist/querier/index.js.map +1 -0
  305. package/dist/repository/genericRepository.d.ts +1 -0
  306. package/dist/repository/genericRepository.d.ts.map +1 -0
  307. package/dist/repository/genericRepository.js +1 -1
  308. package/dist/repository/genericRepository.js.map +1 -0
  309. package/dist/repository/index.d.ts +1 -0
  310. package/dist/repository/index.d.ts.map +1 -0
  311. package/dist/repository/index.js +1 -1
  312. package/dist/repository/index.js.map +1 -0
  313. package/dist/sqlite/index.d.ts +1 -0
  314. package/dist/sqlite/index.d.ts.map +1 -0
  315. package/dist/sqlite/index.js +1 -1
  316. package/dist/sqlite/index.js.map +1 -0
  317. package/dist/sqlite/sqliteDialect.d.ts +1 -0
  318. package/dist/sqlite/sqliteDialect.d.ts.map +1 -0
  319. package/dist/sqlite/sqliteDialect.js +1 -1
  320. package/dist/sqlite/sqliteDialect.js.map +1 -0
  321. package/dist/sqlite/sqliteQuerier.d.ts +1 -0
  322. package/dist/sqlite/sqliteQuerier.d.ts.map +1 -0
  323. package/dist/sqlite/sqliteQuerier.js +1 -1
  324. package/dist/sqlite/sqliteQuerier.js.map +1 -0
  325. package/dist/sqlite/sqliteQuerierPool.d.ts +1 -0
  326. package/dist/sqlite/sqliteQuerierPool.d.ts.map +1 -0
  327. package/dist/sqlite/sqliteQuerierPool.js +1 -1
  328. package/dist/sqlite/sqliteQuerierPool.js.map +1 -0
  329. package/dist/type/entity.d.ts +1 -0
  330. package/dist/type/entity.d.ts.map +1 -0
  331. package/dist/type/entity.js +1 -1
  332. package/dist/type/entity.js.map +1 -0
  333. package/dist/type/index.d.ts +1 -0
  334. package/dist/type/index.d.ts.map +1 -0
  335. package/dist/type/index.js +1 -1
  336. package/dist/type/index.js.map +1 -0
  337. package/dist/type/migration.d.ts +1 -0
  338. package/dist/type/migration.d.ts.map +1 -0
  339. package/dist/type/migration.js +1 -1
  340. package/dist/type/migration.js.map +1 -0
  341. package/dist/type/namingStrategy.d.ts +1 -0
  342. package/dist/type/namingStrategy.d.ts.map +1 -0
  343. package/dist/type/namingStrategy.js +1 -1
  344. package/dist/type/namingStrategy.js.map +1 -0
  345. package/dist/type/querier.d.ts +1 -0
  346. package/dist/type/querier.d.ts.map +1 -0
  347. package/dist/type/querier.js +1 -1
  348. package/dist/type/querier.js.map +1 -0
  349. package/dist/type/querierPool.d.ts +1 -0
  350. package/dist/type/querierPool.d.ts.map +1 -0
  351. package/dist/type/querierPool.js +1 -1
  352. package/dist/type/querierPool.js.map +1 -0
  353. package/dist/type/query.d.ts +1 -0
  354. package/dist/type/query.d.ts.map +1 -0
  355. package/dist/type/query.js +1 -1
  356. package/dist/type/query.js.map +1 -0
  357. package/dist/type/repository.d.ts +1 -0
  358. package/dist/type/repository.d.ts.map +1 -0
  359. package/dist/type/repository.js +1 -1
  360. package/dist/type/repository.js.map +1 -0
  361. package/dist/type/universalQuerier.d.ts +1 -0
  362. package/dist/type/universalQuerier.d.ts.map +1 -0
  363. package/dist/type/universalQuerier.js +1 -1
  364. package/dist/type/universalQuerier.js.map +1 -0
  365. package/dist/type/utility.d.ts +1 -0
  366. package/dist/type/utility.d.ts.map +1 -0
  367. package/dist/type/utility.js +1 -1
  368. package/dist/type/utility.js.map +1 -0
  369. package/dist/util/dialect.util.d.ts +1 -0
  370. package/dist/util/dialect.util.d.ts.map +1 -0
  371. package/dist/util/dialect.util.js +1 -1
  372. package/dist/util/dialect.util.js.map +1 -0
  373. package/dist/util/index.d.ts +1 -0
  374. package/dist/util/index.d.ts.map +1 -0
  375. package/dist/util/index.js +1 -1
  376. package/dist/util/index.js.map +1 -0
  377. package/dist/util/object.util.d.ts +1 -0
  378. package/dist/util/object.util.d.ts.map +1 -0
  379. package/dist/util/object.util.js +1 -1
  380. package/dist/util/object.util.js.map +1 -0
  381. package/dist/util/raw.d.ts +1 -0
  382. package/dist/util/raw.d.ts.map +1 -0
  383. package/dist/util/raw.js +1 -1
  384. package/dist/util/raw.js.map +1 -0
  385. package/dist/util/sql.util.d.ts +1 -0
  386. package/dist/util/sql.util.d.ts.map +1 -0
  387. package/dist/util/sql.util.js +1 -1
  388. package/dist/util/sql.util.js.map +1 -0
  389. package/dist/util/string.util.d.ts +1 -0
  390. package/dist/util/string.util.d.ts.map +1 -0
  391. package/dist/util/string.util.js +1 -1
  392. package/dist/util/string.util.js.map +1 -0
  393. package/package.json +32 -26
  394. package/dist/CHANGELOG.md +0 -186
  395. package/dist/maria/mariaQuerierPool.test.d.ts +0 -5
  396. package/dist/maria/mariaQuerierPool.test.js +0 -19
  397. package/dist/maria/mariadbQuerier.test.d.ts +0 -4
  398. package/dist/maria/mariadbQuerier.test.js +0 -19
  399. package/dist/migrate/migrator-mongo.test.d.ts +0 -1
  400. package/dist/migrate/migrator-mongo.test.js +0 -54
  401. package/dist/migrate/migrator.test.d.ts +0 -1
  402. package/dist/migrate/migrator.test.js +0 -106
  403. package/dist/mongo/mongodbQuerier.test.d.ts +0 -1
  404. package/dist/mongo/mongodbQuerier.test.js +0 -36
  405. package/dist/mongo/mongodbQuerierPool.test.d.ts +0 -1
  406. package/dist/mongo/mongodbQuerierPool.test.js +0 -21
  407. package/dist/mysql/mysql2Querier.test.d.ts +0 -4
  408. package/dist/mysql/mysql2Querier.test.js +0 -16
  409. package/dist/mysql/mysql2QuerierPool.test.d.ts +0 -5
  410. package/dist/mysql/mysql2QuerierPool.test.js +0 -16
  411. package/dist/package.json +0 -131
  412. package/dist/postgres/pgQuerier.test.d.ts +0 -4
  413. package/dist/postgres/pgQuerier.test.js +0 -20
  414. package/dist/postgres/pgQuerierPool.test.d.ts +0 -5
  415. package/dist/postgres/pgQuerierPool.test.js +0 -23
  416. package/dist/querier/abstractQuerier-test.d.ts +0 -45
  417. package/dist/querier/abstractQuerier-test.js +0 -461
  418. package/dist/querier/abstractQuerierPool-test.d.ts +0 -9
  419. package/dist/querier/abstractQuerierPool-test.js +0 -18
  420. package/dist/querier/abstractSqlQuerier-test.d.ts +0 -9
  421. package/dist/querier/abstractSqlQuerier-test.js +0 -16
  422. package/dist/sqlite/sqliteQuerier.test.d.ts +0 -5
  423. package/dist/sqlite/sqliteQuerier.test.js +0 -19
  424. package/dist/sqlite/sqliteQuerierPool.test.d.ts +0 -5
  425. package/dist/sqlite/sqliteQuerierPool.test.js +0 -10
  426. package/dist/test/entityMock.d.ts +0 -164
  427. package/dist/test/entityMock.js +0 -554
  428. package/dist/test/index.d.ts +0 -3
  429. package/dist/test/index.js +0 -4
  430. package/dist/test/it.util.d.ts +0 -4
  431. package/dist/test/it.util.js +0 -55
  432. package/dist/test/spec.util.d.ts +0 -14
  433. package/dist/test/spec.util.js +0 -50
  434. package/src/@types/index.d.ts +0 -1
  435. package/src/@types/jest.d.ts +0 -6
  436. package/src/browser/http/bus.spec.ts +0 -22
  437. package/src/browser/http/bus.ts +0 -17
  438. package/src/browser/http/http.spec.ts +0 -70
  439. package/src/browser/http/http.ts +0 -55
  440. package/src/browser/http/index.ts +0 -2
  441. package/src/browser/index.ts +0 -4
  442. package/src/browser/options.spec.ts +0 -37
  443. package/src/browser/options.ts +0 -18
  444. package/src/browser/querier/genericClientRepository.spec.ts +0 -105
  445. package/src/browser/querier/genericClientRepository.ts +0 -49
  446. package/src/browser/querier/httpQuerier.ts +0 -82
  447. package/src/browser/querier/index.ts +0 -3
  448. package/src/browser/querier/querier.util.spec.ts +0 -35
  449. package/src/browser/querier/querier.util.ts +0 -18
  450. package/src/browser/type/clientQuerier.ts +0 -45
  451. package/src/browser/type/clientQuerierPool.ts +0 -5
  452. package/src/browser/type/clientRepository.ts +0 -22
  453. package/src/browser/type/index.ts +0 -4
  454. package/src/browser/type/request.ts +0 -25
  455. package/src/dialect/abstractDialect.ts +0 -28
  456. package/src/dialect/abstractSqlDialect-spec.ts +0 -1309
  457. package/src/dialect/abstractSqlDialect.ts +0 -805
  458. package/src/dialect/index.ts +0 -3
  459. package/src/dialect/namingStrategy.spec.ts +0 -52
  460. package/src/dialect/queryContext.ts +0 -69
  461. package/src/entity/decorator/definition.spec.ts +0 -736
  462. package/src/entity/decorator/definition.ts +0 -265
  463. package/src/entity/decorator/entity.ts +0 -8
  464. package/src/entity/decorator/field.ts +0 -9
  465. package/src/entity/decorator/id.ts +0 -9
  466. package/src/entity/decorator/index.ts +0 -5
  467. package/src/entity/decorator/relation.spec.ts +0 -41
  468. package/src/entity/decorator/relation.ts +0 -34
  469. package/src/entity/index.ts +0 -1
  470. package/src/express/@types/express.d.ts +0 -8
  471. package/src/express/@types/index.d.ts +0 -1
  472. package/src/express/index.ts +0 -2
  473. package/src/express/querierMiddleware.ts +0 -217
  474. package/src/express/query.util.spec.ts +0 -40
  475. package/src/express/query.util.ts +0 -21
  476. package/src/index.ts +0 -9
  477. package/src/maria/index.ts +0 -3
  478. package/src/maria/mariaDialect.spec.ts +0 -207
  479. package/src/maria/mariaDialect.ts +0 -42
  480. package/src/maria/mariaQuerierPool.test.ts +0 -23
  481. package/src/maria/mariadbQuerier.test.ts +0 -23
  482. package/src/maria/mariadbQuerier.ts +0 -45
  483. package/src/maria/mariadbQuerierPool.ts +0 -21
  484. package/src/migrate/cli.ts +0 -301
  485. package/src/migrate/generator/index.ts +0 -4
  486. package/src/migrate/generator/mongoSchemaGenerator.spec.ts +0 -112
  487. package/src/migrate/generator/mongoSchemaGenerator.ts +0 -115
  488. package/src/migrate/generator/mysqlSchemaGenerator.spec.ts +0 -34
  489. package/src/migrate/generator/mysqlSchemaGenerator.ts +0 -92
  490. package/src/migrate/generator/postgresSchemaGenerator.spec.ts +0 -44
  491. package/src/migrate/generator/postgresSchemaGenerator.ts +0 -127
  492. package/src/migrate/generator/sqliteSchemaGenerator.spec.ts +0 -33
  493. package/src/migrate/generator/sqliteSchemaGenerator.ts +0 -81
  494. package/src/migrate/index.ts +0 -41
  495. package/src/migrate/introspection/index.ts +0 -4
  496. package/src/migrate/introspection/mongoIntrospector.spec.ts +0 -75
  497. package/src/migrate/introspection/mongoIntrospector.ts +0 -47
  498. package/src/migrate/introspection/mysqlIntrospector.spec.ts +0 -113
  499. package/src/migrate/introspection/mysqlIntrospector.ts +0 -278
  500. package/src/migrate/introspection/postgresIntrospector.spec.ts +0 -112
  501. package/src/migrate/introspection/postgresIntrospector.ts +0 -329
  502. package/src/migrate/introspection/sqliteIntrospector.spec.ts +0 -112
  503. package/src/migrate/introspection/sqliteIntrospector.ts +0 -296
  504. package/src/migrate/migrator-mongo.test.ts +0 -54
  505. package/src/migrate/migrator.spec.ts +0 -255
  506. package/src/migrate/migrator.test.ts +0 -94
  507. package/src/migrate/migrator.ts +0 -719
  508. package/src/migrate/namingStrategy.spec.ts +0 -22
  509. package/src/migrate/schemaGenerator-advanced.spec.ts +0 -138
  510. package/src/migrate/schemaGenerator.spec.ts +0 -190
  511. package/src/migrate/schemaGenerator.ts +0 -478
  512. package/src/migrate/storage/databaseStorage.spec.ts +0 -69
  513. package/src/migrate/storage/databaseStorage.ts +0 -100
  514. package/src/migrate/storage/index.ts +0 -2
  515. package/src/migrate/storage/jsonStorage.ts +0 -58
  516. package/src/migrate/type.ts +0 -1
  517. package/src/mongo/index.ts +0 -3
  518. package/src/mongo/mongoDialect.spec.ts +0 -251
  519. package/src/mongo/mongoDialect.ts +0 -238
  520. package/src/mongo/mongodbQuerier.test.ts +0 -45
  521. package/src/mongo/mongodbQuerier.ts +0 -256
  522. package/src/mongo/mongodbQuerierPool.test.ts +0 -25
  523. package/src/mongo/mongodbQuerierPool.ts +0 -24
  524. package/src/mysql/index.ts +0 -3
  525. package/src/mysql/mysql2Querier.test.ts +0 -20
  526. package/src/mysql/mysql2Querier.ts +0 -49
  527. package/src/mysql/mysql2QuerierPool.test.ts +0 -20
  528. package/src/mysql/mysql2QuerierPool.ts +0 -21
  529. package/src/mysql/mysqlDialect.spec.ts +0 -20
  530. package/src/mysql/mysqlDialect.ts +0 -16
  531. package/src/namingStrategy/defaultNamingStrategy.ts +0 -18
  532. package/src/namingStrategy/index.spec.ts +0 -36
  533. package/src/namingStrategy/index.ts +0 -2
  534. package/src/namingStrategy/snakeCaseNamingStrategy.ts +0 -15
  535. package/src/options.spec.ts +0 -41
  536. package/src/options.ts +0 -18
  537. package/src/postgres/index.ts +0 -3
  538. package/src/postgres/manual-types.d.ts +0 -4
  539. package/src/postgres/pgQuerier.test.ts +0 -25
  540. package/src/postgres/pgQuerier.ts +0 -45
  541. package/src/postgres/pgQuerierPool.test.ts +0 -28
  542. package/src/postgres/pgQuerierPool.ts +0 -21
  543. package/src/postgres/postgresDialect.spec.ts +0 -428
  544. package/src/postgres/postgresDialect.ts +0 -144
  545. package/src/querier/abstractQuerier-test.ts +0 -584
  546. package/src/querier/abstractQuerier.ts +0 -353
  547. package/src/querier/abstractQuerierPool-test.ts +0 -20
  548. package/src/querier/abstractQuerierPool.ts +0 -18
  549. package/src/querier/abstractSqlQuerier-spec.ts +0 -979
  550. package/src/querier/abstractSqlQuerier-test.ts +0 -21
  551. package/src/querier/abstractSqlQuerier.ts +0 -138
  552. package/src/querier/decorator/index.ts +0 -3
  553. package/src/querier/decorator/injectQuerier.spec.ts +0 -74
  554. package/src/querier/decorator/injectQuerier.ts +0 -45
  555. package/src/querier/decorator/serialized.spec.ts +0 -98
  556. package/src/querier/decorator/serialized.ts +0 -13
  557. package/src/querier/decorator/transactional.spec.ts +0 -240
  558. package/src/querier/decorator/transactional.ts +0 -56
  559. package/src/querier/index.ts +0 -4
  560. package/src/repository/genericRepository.spec.ts +0 -111
  561. package/src/repository/genericRepository.ts +0 -74
  562. package/src/repository/index.ts +0 -1
  563. package/src/sqlite/index.ts +0 -3
  564. package/src/sqlite/manual-types.d.ts +0 -4
  565. package/src/sqlite/sqliteDialect.spec.ts +0 -155
  566. package/src/sqlite/sqliteDialect.ts +0 -76
  567. package/src/sqlite/sqliteQuerier.spec.ts +0 -36
  568. package/src/sqlite/sqliteQuerier.test.ts +0 -21
  569. package/src/sqlite/sqliteQuerier.ts +0 -37
  570. package/src/sqlite/sqliteQuerierPool.test.ts +0 -12
  571. package/src/sqlite/sqliteQuerierPool.ts +0 -38
  572. package/src/test/entityMock.ts +0 -375
  573. package/src/test/index.ts +0 -3
  574. package/src/test/it.util.ts +0 -69
  575. package/src/test/spec.util.ts +0 -57
  576. package/src/type/entity.ts +0 -218
  577. package/src/type/index.ts +0 -9
  578. package/src/type/migration.ts +0 -241
  579. package/src/type/namingStrategy.ts +0 -17
  580. package/src/type/querier.ts +0 -143
  581. package/src/type/querierPool.ts +0 -26
  582. package/src/type/query.ts +0 -506
  583. package/src/type/repository.ts +0 -142
  584. package/src/type/universalQuerier.ts +0 -133
  585. package/src/type/utility.ts +0 -21
  586. package/src/util/dialect.util-extra.spec.ts +0 -96
  587. package/src/util/dialect.util.spec.ts +0 -23
  588. package/src/util/dialect.util.ts +0 -134
  589. package/src/util/index.ts +0 -5
  590. package/src/util/object.util.spec.ts +0 -29
  591. package/src/util/object.util.ts +0 -27
  592. package/src/util/raw.ts +0 -11
  593. package/src/util/sql.util-extra.spec.ts +0 -17
  594. package/src/util/sql.util.spec.ts +0 -208
  595. package/src/util/sql.util.ts +0 -104
  596. package/src/util/string.util.spec.ts +0 -46
  597. package/src/util/string.util.ts +0 -35
  598. package/tsconfig.build.json +0 -5
  599. package/tsconfig.json +0 -8
@@ -1,719 +0,0 @@
1
- import { readdir } from 'node:fs/promises';
2
- import { basename, extname, join } from 'node:path';
3
- import { pathToFileURL } from 'node:url';
4
- import { getEntities, getMeta } from '../entity/index.js';
5
- import type {
6
- Dialect,
7
- Migration,
8
- MigrationDefinition,
9
- MigrationResult,
10
- MigrationStorage,
11
- MigratorOptions,
12
- MongoQuerier,
13
- NamingStrategy,
14
- Querier,
15
- QuerierPool,
16
- SchemaDiff,
17
- SchemaGenerator,
18
- SchemaIntrospector,
19
- Type,
20
- } from '../type/index.js';
21
- import { isSqlQuerier } from '../type/index.js';
22
- import {
23
- MariadbSchemaGenerator,
24
- MongoSchemaGenerator,
25
- MysqlSchemaGenerator,
26
- PostgresSchemaGenerator,
27
- SqliteSchemaGenerator,
28
- } from './generator/index.js';
29
- import {
30
- MariadbSchemaIntrospector,
31
- MongoSchemaIntrospector,
32
- MysqlSchemaIntrospector,
33
- PostgresSchemaIntrospector,
34
- SqliteSchemaIntrospector,
35
- } from './introspection/index.js';
36
- import { DatabaseMigrationStorage } from './storage/databaseStorage.js';
37
-
38
- /**
39
- * Main class for managing database migrations
40
- */
41
- export class Migrator {
42
- private readonly storage: MigrationStorage;
43
- private readonly migrationsPath: string;
44
- private readonly logger: (message: string) => void;
45
- private readonly entities: Type<unknown>[];
46
- private readonly dialect: Dialect;
47
- private schemaGenerator?: SchemaGenerator;
48
- public schemaIntrospector?: SchemaIntrospector;
49
-
50
- constructor(
51
- private readonly querierPool: QuerierPool,
52
- options: MigratorOptions = {},
53
- ) {
54
- this.dialect = options.dialect ?? querierPool.dialect ?? 'postgres';
55
- this.storage =
56
- options.storage ??
57
- new DatabaseMigrationStorage(querierPool, {
58
- tableName: options.tableName,
59
- });
60
- this.migrationsPath = options.migrationsPath ?? './migrations';
61
- this.logger = options.logger ?? (() => {});
62
- this.entities = options.entities ?? [];
63
- this.schemaIntrospector = this.createIntrospector();
64
- this.schemaGenerator = options.schemaGenerator ?? this.createGenerator(options.namingStrategy);
65
- }
66
-
67
- /**
68
- * Set the schema generator for DDL operations
69
- */
70
- setSchemaGenerator(generator: SchemaGenerator): void {
71
- this.schemaGenerator = generator;
72
- }
73
-
74
- private createIntrospector(): SchemaIntrospector | undefined {
75
- switch (this.dialect) {
76
- case 'postgres':
77
- return new PostgresSchemaIntrospector(this.querierPool);
78
- case 'mysql':
79
- return new MysqlSchemaIntrospector(this.querierPool);
80
- case 'mariadb':
81
- return new MariadbSchemaIntrospector(this.querierPool);
82
- case 'sqlite':
83
- return new SqliteSchemaIntrospector(this.querierPool);
84
- case 'mongodb':
85
- return new MongoSchemaIntrospector(this.querierPool);
86
- default:
87
- return undefined;
88
- }
89
- }
90
-
91
- private createGenerator(namingStrategy?: NamingStrategy): SchemaGenerator | undefined {
92
- switch (this.dialect) {
93
- case 'postgres':
94
- return new PostgresSchemaGenerator(namingStrategy);
95
- case 'mysql':
96
- return new MysqlSchemaGenerator(namingStrategy);
97
- case 'mariadb':
98
- return new MariadbSchemaGenerator(namingStrategy);
99
- case 'sqlite':
100
- return new SqliteSchemaGenerator(namingStrategy);
101
- case 'mongodb':
102
- return new MongoSchemaGenerator(namingStrategy);
103
- default:
104
- return undefined;
105
- }
106
- }
107
-
108
- /**
109
- * Get the SQL dialect
110
- */
111
- getDialect(): Dialect {
112
- return this.dialect;
113
- }
114
-
115
- /**
116
- * Get all discovered migrations from the migrations directory
117
- */
118
- async getMigrations(): Promise<Migration[]> {
119
- const files = await this.getMigrationFiles();
120
- const migrations: Migration[] = [];
121
-
122
- for (const file of files) {
123
- const migration = await this.loadMigration(file);
124
- if (migration) {
125
- migrations.push(migration);
126
- }
127
- }
128
-
129
- // Sort by name (which typically includes timestamp)
130
- return migrations.sort((a: any, b: any) => a.name.localeCompare(b.name));
131
- }
132
-
133
- /**
134
- * Get list of pending migrations (not yet executed)
135
- */
136
- async pending(): Promise<Migration[]> {
137
- const [migrations, executed] = await Promise.all([this.getMigrations(), this.storage.executed()]);
138
-
139
- const executedSet = new Set(executed);
140
- return migrations.filter((m: any) => !executedSet.has(m.name));
141
- }
142
-
143
- /**
144
- * Get list of executed migrations
145
- */
146
- async executed(): Promise<string[]> {
147
- return this.storage.executed();
148
- }
149
-
150
- /**
151
- * Run all pending migrations
152
- */
153
- async up(options: { to?: string; step?: number } = {}): Promise<MigrationResult[]> {
154
- const pendingMigrations = await this.pending();
155
- const results: MigrationResult[] = [];
156
-
157
- let migrationsToRun = pendingMigrations;
158
-
159
- if (options.to) {
160
- const toIndex = migrationsToRun.findIndex((m: any) => m.name === options.to);
161
- if (toIndex === -1) {
162
- throw new Error(`Migration '${options.to}' not found`);
163
- }
164
- migrationsToRun = migrationsToRun.slice(0, toIndex + 1);
165
- }
166
-
167
- if (options.step !== undefined) {
168
- migrationsToRun = migrationsToRun.slice(0, options.step);
169
- }
170
-
171
- for (const migration of migrationsToRun) {
172
- const result = await this.runMigration(migration, 'up');
173
- results.push(result);
174
-
175
- if (!result.success) {
176
- break; // Stop on first failure
177
- }
178
- }
179
-
180
- return results;
181
- }
182
-
183
- /**
184
- * Rollback migrations
185
- */
186
- async down(options: { to?: string; step?: number } = {}): Promise<MigrationResult[]> {
187
- const [migrations, executed] = await Promise.all([this.getMigrations(), this.storage.executed()]);
188
-
189
- const executedSet = new Set(executed);
190
- const executedMigrations = migrations.filter((m: any) => executedSet.has(m.name)).reverse(); // Rollback in reverse order
191
-
192
- const results: MigrationResult[] = [];
193
- let migrationsToRun = executedMigrations;
194
-
195
- if (options.to) {
196
- const toIndex = migrationsToRun.findIndex((m: any) => m.name === options.to);
197
- if (toIndex === -1) {
198
- throw new Error(`Migration '${options.to}' not found`);
199
- }
200
- migrationsToRun = migrationsToRun.slice(0, toIndex + 1);
201
- }
202
-
203
- if (options.step !== undefined) {
204
- migrationsToRun = migrationsToRun.slice(0, options.step);
205
- }
206
-
207
- for (const migration of migrationsToRun) {
208
- const result = await this.runMigration(migration, 'down');
209
- results.push(result);
210
-
211
- if (!result.success) {
212
- break; // Stop on first failure
213
- }
214
- }
215
-
216
- return results;
217
- }
218
-
219
- /**
220
- * Run a single migration within a transaction
221
- */
222
- private async runMigration(migration: Migration, direction: 'up' | 'down'): Promise<MigrationResult> {
223
- const startTime = Date.now();
224
- const querier = await this.querierPool.getQuerier();
225
-
226
- if (!isSqlQuerier(querier)) {
227
- await querier.release();
228
- throw new Error('Migrator requires a SQL-based querier');
229
- }
230
-
231
- try {
232
- this.logger(`${direction === 'up' ? 'Running' : 'Reverting'} migration: ${migration.name}`);
233
-
234
- await querier.beginTransaction();
235
-
236
- if (direction === 'up') {
237
- await migration.up(querier);
238
- // Log within the same transaction
239
- await this.storage.logWithQuerier(querier, migration.name);
240
- } else {
241
- await migration.down(querier);
242
- // Unlog within the same transaction
243
- await this.storage.unlogWithQuerier(querier, migration.name);
244
- }
245
-
246
- await querier.commitTransaction();
247
-
248
- const duration = Date.now() - startTime;
249
- this.logger(`Migration ${migration.name} ${direction === 'up' ? 'applied' : 'reverted'} in ${duration}ms`);
250
-
251
- return {
252
- name: migration.name,
253
- direction,
254
- duration,
255
- success: true,
256
- };
257
- } catch (error) {
258
- await querier.rollbackTransaction();
259
-
260
- const duration = Date.now() - startTime;
261
- this.logger(`Migration ${migration.name} failed: ${(error as Error).message}`);
262
-
263
- return {
264
- name: migration.name,
265
- direction,
266
- duration,
267
- success: false,
268
- error: error as Error,
269
- };
270
- } finally {
271
- await querier.release();
272
- }
273
- }
274
-
275
- /**
276
- * Generate a new migration file
277
- */
278
- async generate(name: string): Promise<string> {
279
- const timestamp = this.getTimestamp();
280
- const fileName = `${timestamp}_${this.slugify(name)}.ts`;
281
- const filePath = join(this.migrationsPath, fileName);
282
-
283
- const content = this.generateMigrationContent(name);
284
-
285
- const { writeFile, mkdir } = await import('node:fs/promises');
286
- await mkdir(this.migrationsPath, { recursive: true });
287
- await writeFile(filePath, content, 'utf-8');
288
-
289
- this.logger(`Created migration: ${filePath}`);
290
- return filePath;
291
- }
292
-
293
- /**
294
- * Generate a migration based on entity schema differences
295
- */
296
- async generateFromEntities(name: string): Promise<string> {
297
- if (!this.schemaGenerator) {
298
- throw new Error('Schema generator not set. Call setSchemaGenerator() first.');
299
- }
300
-
301
- const diffs = await this.getDiffs();
302
- const upStatements: string[] = [];
303
- const downStatements: string[] = [];
304
-
305
- for (const diff of diffs) {
306
- if (diff.type === 'create') {
307
- const entity = this.findEntityForTable(diff.tableName);
308
- if (entity) {
309
- upStatements.push(this.schemaGenerator.generateCreateTable(entity));
310
- downStatements.push(this.schemaGenerator.generateDropTable(entity));
311
- }
312
- } else if (diff.type === 'alter') {
313
- const alterStatements = this.schemaGenerator.generateAlterTable(diff);
314
- upStatements.push(...alterStatements);
315
-
316
- const alterDownStatements = this.schemaGenerator.generateAlterTableDown(diff);
317
- downStatements.push(...alterDownStatements);
318
- }
319
- }
320
-
321
- if (upStatements.length === 0) {
322
- this.logger('No schema changes detected.');
323
- return '';
324
- }
325
-
326
- const timestamp = this.getTimestamp();
327
- const fileName = `${timestamp}_${this.slugify(name)}.ts`;
328
- const filePath = join(this.migrationsPath, fileName);
329
-
330
- const content = this.generateMigrationContentWithStatements(name, upStatements, downStatements.reverse());
331
-
332
- const { writeFile, mkdir } = await import('node:fs/promises');
333
- await mkdir(this.migrationsPath, { recursive: true });
334
- await writeFile(filePath, content, 'utf-8');
335
-
336
- this.logger(`Created migration from entities: ${filePath}`);
337
- return filePath;
338
- }
339
-
340
- /**
341
- * Get all schema differences between entities and database
342
- */
343
- async getDiffs(): Promise<SchemaDiff[]> {
344
- if (!this.schemaGenerator || !this.schemaIntrospector) {
345
- throw new Error('Schema generator and introspector must be set');
346
- }
347
-
348
- const entities = this.entities.length > 0 ? this.entities : getEntities();
349
- const diffs: SchemaDiff[] = [];
350
-
351
- for (const entity of entities) {
352
- const meta = getMeta(entity);
353
- const tableName = this.schemaGenerator.resolveTableName(entity, meta);
354
- const currentSchema = await this.schemaIntrospector.getTableSchema(tableName);
355
- const diff = this.schemaGenerator.diffSchema(entity, currentSchema);
356
- if (diff) {
357
- diffs.push(diff);
358
- }
359
- }
360
-
361
- return diffs;
362
- }
363
-
364
- private findEntityForTable(tableName: string): Type<unknown> | undefined {
365
- const entities = this.entities.length > 0 ? this.entities : getEntities();
366
- for (const entity of entities) {
367
- const meta = getMeta(entity);
368
- const name = this.schemaGenerator.resolveTableName(entity, meta);
369
- if (name === tableName) {
370
- return entity;
371
- }
372
- }
373
- return undefined;
374
- }
375
-
376
- /**
377
- * Sync schema directly (for development only - not for production!)
378
- */
379
- async sync(options: { force?: boolean } = {}): Promise<void> {
380
- if (options.force) {
381
- return this.syncForce();
382
- }
383
- return this.autoSync({ safe: true });
384
- }
385
-
386
- /**
387
- * Drops and recreates all tables (Development only!)
388
- */
389
- public async syncForce(): Promise<void> {
390
- if (!this.schemaGenerator) {
391
- throw new Error('Schema generator not set. Call setSchemaGenerator() first.');
392
- }
393
-
394
- const entities = this.entities.length > 0 ? this.entities : getEntities();
395
- const querier = await this.querierPool.getQuerier();
396
-
397
- if (!isSqlQuerier(querier)) {
398
- await querier.release();
399
- throw new Error('Migrator requires a SQL-based querier');
400
- }
401
-
402
- try {
403
- await querier.beginTransaction();
404
-
405
- // Drop all tables first (in reverse order for foreign keys)
406
- for (const entity of [...entities].reverse()) {
407
- const dropSql = this.schemaGenerator.generateDropTable(entity);
408
- this.logger(`Executing: ${dropSql}`);
409
- await querier.run(dropSql);
410
- }
411
-
412
- // Create all tables
413
- for (const entity of entities) {
414
- const createSql = this.schemaGenerator.generateCreateTable(entity);
415
- this.logger(`Executing: ${createSql}`);
416
- await querier.run(createSql);
417
- }
418
-
419
- await querier.commitTransaction();
420
- this.logger('Schema sync (force) completed');
421
- } catch (error) {
422
- await querier.rollbackTransaction();
423
- throw error;
424
- } finally {
425
- await querier.release();
426
- }
427
- }
428
-
429
- /**
430
- * Safely synchronizes the schema by only adding missing tables and columns.
431
- */
432
- async autoSync(options: { safe?: boolean; drop?: boolean; logging?: boolean } = {}): Promise<void> {
433
- if (!this.schemaGenerator || !this.schemaIntrospector) {
434
- throw new Error('Schema generator and introspector must be set');
435
- }
436
-
437
- const diffs = await this.getDiffs();
438
- const statements: string[] = [];
439
-
440
- for (const diff of diffs) {
441
- if (diff.type === 'create') {
442
- const entity = this.findEntityForTable(diff.tableName);
443
- if (entity) {
444
- statements.push(this.schemaGenerator.generateCreateTable(entity));
445
- }
446
- } else if (diff.type === 'alter') {
447
- const filteredDiff = this.filterDiff(diff, options);
448
- const alterStatements = this.schemaGenerator.generateAlterTable(filteredDiff);
449
- statements.push(...alterStatements);
450
- }
451
- }
452
-
453
- if (statements.length === 0) {
454
- if (options.logging) this.logger('Schema is already in sync.');
455
- return;
456
- }
457
-
458
- await this.executeSyncStatements(statements, options);
459
- }
460
-
461
- private filterDiff(diff: SchemaDiff, options: { safe?: boolean; drop?: boolean }): SchemaDiff {
462
- const filteredDiff = { ...diff } as { -readonly [K in keyof SchemaDiff]: SchemaDiff[K] };
463
- if (options.safe !== false) {
464
- // In safe mode, we only allow additions
465
- delete filteredDiff.columnsToDrop;
466
- delete filteredDiff.indexesToDrop;
467
- delete filteredDiff.foreignKeysToDrop;
468
- }
469
- if (!options.drop) {
470
- delete filteredDiff.columnsToDrop;
471
- }
472
- return filteredDiff;
473
- }
474
-
475
- private async executeSyncStatements(statements: string[], options: { logging?: boolean }): Promise<void> {
476
- const querier = await this.querierPool.getQuerier();
477
- try {
478
- if (this.dialect === 'mongodb') {
479
- await this.executeMongoSyncStatements(statements, options, querier as MongoQuerier);
480
- } else {
481
- await this.executeSqlSyncStatements(statements, options, querier);
482
- }
483
- if (options.logging) this.logger('Schema synchronization completed');
484
- } catch (error) {
485
- if (this.dialect !== 'mongodb' && isSqlQuerier(querier)) {
486
- await querier.rollbackTransaction();
487
- }
488
- throw error;
489
- } finally {
490
- await querier.release();
491
- }
492
- }
493
-
494
- private async executeMongoSyncStatements(
495
- statements: string[],
496
- options: { logging?: boolean },
497
- querier: MongoQuerier,
498
- ): Promise<void> {
499
- const db = querier.db;
500
- for (const stmt of statements) {
501
- const cmd = JSON.parse(stmt) as {
502
- action: string;
503
- name?: string;
504
- collection?: string;
505
- indexes?: { name: string; columns: string[]; unique?: boolean }[];
506
- key?: Record<string, number>;
507
- options?: any;
508
- };
509
- if (options.logging) this.logger(`Executing MongoDB: ${stmt}`);
510
-
511
- const collectionName = cmd.name || cmd.collection;
512
- if (!collectionName) {
513
- throw new Error(`MongoDB command missing collection name: ${stmt}`);
514
- }
515
- const collection = db.collection(collectionName);
516
-
517
- if (cmd.action === 'createCollection') {
518
- await db.createCollection(cmd.name);
519
- if (cmd.indexes?.length) {
520
- for (const idx of cmd.indexes) {
521
- const key = Object.fromEntries(idx.columns.map((c: string) => [c, 1]));
522
- await collection.createIndex(key, { unique: idx.unique, name: idx.name });
523
- }
524
- }
525
- } else if (cmd.action === 'dropCollection') {
526
- await collection.drop();
527
- } else if (cmd.action === 'createIndex') {
528
- await collection.createIndex(cmd.key, cmd.options);
529
- } else if (cmd.action === 'dropIndex') {
530
- await collection.dropIndex(cmd.name);
531
- }
532
- }
533
- }
534
-
535
- private async executeSqlSyncStatements(
536
- statements: string[],
537
- options: { logging?: boolean },
538
- querier: Querier,
539
- ): Promise<void> {
540
- if (!isSqlQuerier(querier)) {
541
- throw new Error('Migrator requires a SQL-based querier for this dialect');
542
- }
543
- await querier.beginTransaction();
544
- for (const sql of statements) {
545
- if (options.logging) this.logger(`Executing: ${sql}`);
546
- await querier.run(sql);
547
- }
548
- await querier.commitTransaction();
549
- }
550
-
551
- /**
552
- * Get migration status
553
- */
554
- async status(): Promise<{ pending: string[]; executed: string[] }> {
555
- const [pending, executed] = await Promise.all([this.pending().then((m) => m.map((x) => x.name)), this.executed()]);
556
-
557
- return { pending, executed };
558
- }
559
-
560
- /**
561
- * Get migration files from the migrations directory
562
- */
563
- private async getMigrationFiles(): Promise<string[]> {
564
- try {
565
- const files = await readdir(this.migrationsPath);
566
- return files
567
- .filter((f) => /\.(ts|js|mjs)$/.test(f))
568
- .filter((f) => !f.endsWith('.d.ts'))
569
- .sort();
570
- } catch (error) {
571
- if ((error as NodeJS.ErrnoException).code === 'ENOENT') {
572
- return [];
573
- }
574
- throw error;
575
- }
576
- }
577
-
578
- /**
579
- * Load a migration from a file
580
- */
581
- private async loadMigration(fileName: string): Promise<Migration | undefined> {
582
- const filePath = join(this.migrationsPath, fileName);
583
- const fileUrl = pathToFileURL(filePath).href;
584
-
585
- try {
586
- const module = await import(fileUrl);
587
- const migration = module.default ?? module;
588
-
589
- if (this.isMigration(migration)) {
590
- return {
591
- name: this.getMigrationName(fileName),
592
- up: migration.up.bind(migration),
593
- down: migration.down.bind(migration),
594
- };
595
- }
596
-
597
- this.logger(`Warning: ${fileName} is not a valid migration`);
598
- return undefined;
599
- } catch (error) {
600
- this.logger(`Error loading migration ${fileName}: ${(error as Error).message}`);
601
- return undefined;
602
- }
603
- }
604
-
605
- /**
606
- * Check if an object is a valid migration
607
- */
608
- private isMigration(obj: unknown): obj is MigrationDefinition {
609
- return (
610
- typeof obj === 'object' &&
611
- obj !== undefined &&
612
- obj !== null &&
613
- typeof (obj as MigrationDefinition).up === 'function' &&
614
- typeof (obj as MigrationDefinition).down === 'function'
615
- );
616
- }
617
-
618
- /**
619
- * Extract migration name from filename
620
- */
621
- private getMigrationName(fileName: string): string {
622
- return basename(fileName, extname(fileName));
623
- }
624
-
625
- /**
626
- * Generate timestamp string for migration names
627
- */
628
- private getTimestamp(): string {
629
- const now = new Date();
630
- return [
631
- now.getFullYear(),
632
- String(now.getMonth() + 1).padStart(2, '0'),
633
- String(now.getDate()).padStart(2, '0'),
634
- String(now.getHours()).padStart(2, '0'),
635
- String(now.getMinutes()).padStart(2, '0'),
636
- String(now.getSeconds()).padStart(2, '0'),
637
- ].join('');
638
- }
639
-
640
- /**
641
- * Convert a string to a slug for filenames
642
- */
643
- private slugify(text: string): string {
644
- return text
645
- .toLowerCase()
646
- .replace(/[^a-z0-9]+/g, '_')
647
- .replace(/^_+|_+$/g, '');
648
- }
649
-
650
- /**
651
- * Generate migration file content
652
- */
653
- private generateMigrationContent(name: string): string {
654
- return /*ts*/ `import type { SqlQuerier } from '@uql/migrate';
655
-
656
- /**
657
- * Migration: ${name}
658
- * Created: ${new Date().toISOString()}
659
- */
660
- export default {
661
- async up(querier: SqlQuerier): Promise<void> {
662
- // Add your migration logic here
663
- // Example:
664
- // await querier.run(\`
665
- // CREATE TABLE "users" (
666
- // "id" SERIAL PRIMARY KEY,
667
- // "name" VARCHAR(255) NOT NULL,
668
- // "email" VARCHAR(255) UNIQUE NOT NULL,
669
- // "createdAt" TIMESTAMP DEFAULT CURRENT_TIMESTAMP
670
- // )
671
- // \`);
672
- },
673
-
674
- async down(querier: SqlQuerier): Promise<void> {
675
- // Add your rollback logic here
676
- // Example:
677
- // await querier.run(\`DROP TABLE IF EXISTS "users"\`);
678
- },
679
- };
680
- `;
681
- }
682
-
683
- /**
684
- * Generate migration file content with SQL statements
685
- */
686
- private generateMigrationContentWithStatements(
687
- name: string,
688
- upStatements: string[],
689
- downStatements: string[],
690
- ): string {
691
- const upSql = upStatements.map((s) => /*ts*/ ` await querier.run(\`${s}\`);`).join('\n');
692
- const downSql = downStatements.map((s) => /*ts*/ ` await querier.run(\`${s}\`);`).join('\n');
693
-
694
- return /*ts*/ `import type { SqlQuerier } from '@uql/migrate';
695
-
696
- /**
697
- * Migration: ${name}
698
- * Created: ${new Date().toISOString()}
699
- * Generated from entity definitions
700
- */
701
- export default {
702
- async up(querier: SqlQuerier): Promise<void> {
703
- ${upSql}
704
- },
705
-
706
- async down(querier: SqlQuerier): Promise<void> {
707
- ${downSql}
708
- },
709
- };
710
- `;
711
- }
712
- }
713
-
714
- /**
715
- * Helper function to define a migration with proper typing
716
- */
717
- export function defineMigration(migration: MigrationDefinition): MigrationDefinition {
718
- return migration;
719
- }