@uql/core 1.0.12 → 3.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (464) hide show
  1. package/CHANGELOG.md +254 -0
  2. package/LICENSE.md +2 -2
  3. package/dist/browser/http/bus.d.ts +3 -0
  4. package/dist/browser/http/bus.js +14 -0
  5. package/dist/browser/http/http.d.ts +6 -0
  6. package/dist/browser/http/http.js +45 -0
  7. package/dist/browser/http/index.d.ts +2 -0
  8. package/dist/browser/http/index.js +3 -0
  9. package/dist/browser/index.d.ts +4 -0
  10. package/dist/browser/index.js +5 -0
  11. package/dist/browser/options.d.ts +4 -0
  12. package/dist/browser/options.js +14 -0
  13. package/dist/browser/querier/genericClientRepository.d.ts +17 -0
  14. package/dist/browser/querier/genericClientRepository.js +39 -0
  15. package/dist/browser/querier/httpQuerier.d.ts +20 -0
  16. package/dist/browser/querier/httpQuerier.js +71 -0
  17. package/dist/browser/querier/index.d.ts +3 -0
  18. package/dist/browser/querier/index.js +4 -0
  19. package/dist/browser/querier/querier.util.d.ts +2 -0
  20. package/dist/browser/querier/querier.util.js +17 -0
  21. package/dist/browser/type/clientQuerier.d.ts +16 -0
  22. package/dist/browser/type/clientQuerier.js +2 -0
  23. package/dist/browser/type/clientQuerierPool.d.ts +4 -0
  24. package/dist/browser/type/clientQuerierPool.js +2 -0
  25. package/dist/browser/type/clientRepository.d.ts +13 -0
  26. package/dist/browser/type/clientRepository.js +2 -0
  27. package/dist/browser/type/index.d.ts +4 -0
  28. package/dist/browser/type/index.js +5 -0
  29. package/dist/browser/type/request.d.ts +28 -0
  30. package/dist/browser/type/request.js +2 -0
  31. package/dist/browser/uql-browser.min.js +2150 -0
  32. package/dist/browser/uql-browser.min.js.map +1 -0
  33. package/dist/dialect/abstractDialect.d.ts +16 -0
  34. package/dist/dialect/abstractDialect.js +28 -0
  35. package/dist/dialect/abstractSqlDialect.d.ts +47 -0
  36. package/dist/dialect/abstractSqlDialect.js +650 -0
  37. package/dist/dialect/index.d.ts +3 -0
  38. package/dist/dialect/index.js +4 -0
  39. package/dist/dialect/queryContext.d.ts +48 -0
  40. package/dist/dialect/queryContext.js +65 -0
  41. package/{entity → dist/entity}/decorator/definition.d.ts +3 -3
  42. package/dist/entity/decorator/definition.js +214 -0
  43. package/{entity → dist/entity}/decorator/entity.d.ts +1 -1
  44. package/dist/entity/decorator/entity.js +7 -0
  45. package/{entity → dist/entity}/decorator/field.d.ts +1 -1
  46. package/dist/entity/decorator/field.js +8 -0
  47. package/{entity → dist/entity}/decorator/id.d.ts +1 -1
  48. package/dist/entity/decorator/id.js +8 -0
  49. package/dist/entity/decorator/index.d.ts +5 -0
  50. package/dist/entity/decorator/index.js +6 -0
  51. package/{entity → dist/entity}/decorator/relation.d.ts +1 -1
  52. package/dist/entity/decorator/relation.js +20 -0
  53. package/dist/entity/index.d.ts +1 -0
  54. package/dist/entity/index.js +2 -0
  55. package/dist/express/index.d.ts +2 -0
  56. package/dist/express/index.js +3 -0
  57. package/dist/express/querierMiddleware.d.ts +26 -0
  58. package/dist/express/querierMiddleware.js +190 -0
  59. package/dist/express/query.util.d.ts +2 -0
  60. package/dist/express/query.util.js +19 -0
  61. package/dist/index.d.ts +9 -0
  62. package/dist/index.js +10 -0
  63. package/dist/maria/index.d.ts +3 -0
  64. package/dist/maria/index.js +4 -0
  65. package/dist/maria/mariaDialect.d.ts +8 -0
  66. package/dist/maria/mariaDialect.js +38 -0
  67. package/dist/maria/mariaQuerierPool.test.d.ts +5 -0
  68. package/dist/maria/mariaQuerierPool.test.js +19 -0
  69. package/dist/maria/mariadbQuerier.d.ts +17 -0
  70. package/dist/maria/mariadbQuerier.js +39 -0
  71. package/dist/maria/mariadbQuerier.test.d.ts +4 -0
  72. package/dist/maria/mariadbQuerier.test.js +19 -0
  73. package/dist/maria/mariadbQuerierPool.d.ts +10 -0
  74. package/dist/maria/mariadbQuerierPool.js +17 -0
  75. package/dist/migrate/cli.d.ts +2 -0
  76. package/dist/migrate/cli.js +254 -0
  77. package/dist/migrate/generator/index.d.ts +4 -0
  78. package/dist/migrate/generator/index.js +5 -0
  79. package/dist/migrate/generator/mongoSchemaGenerator.d.ts +12 -0
  80. package/dist/migrate/generator/mongoSchemaGenerator.js +100 -0
  81. package/dist/migrate/generator/mysqlSchemaGenerator.d.ts +14 -0
  82. package/dist/migrate/generator/mysqlSchemaGenerator.js +81 -0
  83. package/dist/migrate/generator/postgresSchemaGenerator.d.ts +18 -0
  84. package/dist/migrate/generator/postgresSchemaGenerator.js +111 -0
  85. package/dist/migrate/generator/sqliteSchemaGenerator.d.ts +14 -0
  86. package/dist/migrate/generator/sqliteSchemaGenerator.js +68 -0
  87. package/dist/migrate/index.d.ts +12 -0
  88. package/dist/migrate/index.js +17 -0
  89. package/dist/migrate/introspection/index.d.ts +4 -0
  90. package/dist/migrate/introspection/index.js +5 -0
  91. package/dist/migrate/introspection/mongoIntrospector.d.ts +8 -0
  92. package/dist/migrate/introspection/mongoIntrospector.js +46 -0
  93. package/dist/migrate/introspection/mysqlIntrospector.d.ts +25 -0
  94. package/dist/migrate/introspection/mysqlIntrospector.js +220 -0
  95. package/dist/migrate/introspection/postgresIntrospector.d.ts +21 -0
  96. package/dist/migrate/introspection/postgresIntrospector.js +269 -0
  97. package/dist/migrate/introspection/sqliteIntrospector.d.ts +23 -0
  98. package/dist/migrate/introspection/sqliteIntrospector.js +212 -0
  99. package/dist/migrate/migrator-mongo.test.d.ts +1 -0
  100. package/dist/migrate/migrator-mongo.test.js +54 -0
  101. package/dist/migrate/migrator.d.ts +133 -0
  102. package/dist/migrate/migrator.js +600 -0
  103. package/dist/migrate/migrator.test.d.ts +1 -0
  104. package/dist/migrate/migrator.test.js +106 -0
  105. package/dist/migrate/schemaGenerator.d.ts +78 -0
  106. package/dist/migrate/schemaGenerator.js +363 -0
  107. package/dist/migrate/storage/databaseStorage.d.ts +24 -0
  108. package/dist/migrate/storage/databaseStorage.js +77 -0
  109. package/dist/migrate/storage/index.d.ts +2 -0
  110. package/dist/migrate/storage/index.js +3 -0
  111. package/dist/migrate/storage/jsonStorage.d.ts +15 -0
  112. package/dist/migrate/storage/jsonStorage.js +51 -0
  113. package/dist/migrate/type.d.ts +1 -0
  114. package/dist/migrate/type.js +2 -0
  115. package/dist/mongo/index.d.ts +3 -0
  116. package/dist/mongo/index.js +4 -0
  117. package/dist/mongo/mongoDialect.d.ts +34 -0
  118. package/dist/mongo/mongoDialect.js +163 -0
  119. package/dist/mongo/mongodbQuerier.d.ts +28 -0
  120. package/dist/mongo/mongodbQuerier.js +204 -0
  121. package/dist/mongo/mongodbQuerier.test.d.ts +1 -0
  122. package/dist/mongo/mongodbQuerier.test.js +36 -0
  123. package/dist/mongo/mongodbQuerierPool.d.ts +10 -0
  124. package/dist/mongo/mongodbQuerierPool.js +20 -0
  125. package/dist/mongo/mongodbQuerierPool.test.d.ts +1 -0
  126. package/dist/mongo/mongodbQuerierPool.test.js +21 -0
  127. package/dist/mysql/index.d.ts +3 -0
  128. package/dist/mysql/index.js +4 -0
  129. package/dist/mysql/mysql2Querier.d.ts +17 -0
  130. package/dist/mysql/mysql2Querier.js +43 -0
  131. package/dist/mysql/mysql2Querier.test.d.ts +4 -0
  132. package/dist/mysql/mysql2Querier.test.js +16 -0
  133. package/dist/mysql/mysql2QuerierPool.d.ts +10 -0
  134. package/dist/mysql/mysql2QuerierPool.js +17 -0
  135. package/dist/mysql/mysql2QuerierPool.test.d.ts +5 -0
  136. package/dist/mysql/mysql2QuerierPool.test.js +16 -0
  137. package/dist/mysql/mysqlDialect.d.ts +5 -0
  138. package/dist/mysql/mysqlDialect.js +15 -0
  139. package/dist/namingStrategy/defaultNamingStrategy.d.ts +9 -0
  140. package/dist/namingStrategy/defaultNamingStrategy.js +15 -0
  141. package/dist/namingStrategy/index.d.ts +2 -0
  142. package/dist/namingStrategy/index.js +3 -0
  143. package/dist/namingStrategy/snakeCaseNamingStrategy.d.ts +8 -0
  144. package/dist/namingStrategy/snakeCaseNamingStrategy.js +14 -0
  145. package/{options.d.ts → dist/options.d.ts} +1 -1
  146. package/dist/options.js +14 -0
  147. package/dist/package.json +131 -0
  148. package/dist/postgres/index.d.ts +3 -0
  149. package/dist/postgres/index.js +4 -0
  150. package/dist/postgres/pgQuerier.d.ts +17 -0
  151. package/dist/postgres/pgQuerier.js +39 -0
  152. package/dist/postgres/pgQuerier.test.d.ts +4 -0
  153. package/dist/postgres/pgQuerier.test.js +20 -0
  154. package/dist/postgres/pgQuerierPool.d.ts +10 -0
  155. package/dist/postgres/pgQuerierPool.js +17 -0
  156. package/dist/postgres/pgQuerierPool.test.d.ts +5 -0
  157. package/dist/postgres/pgQuerierPool.test.js +23 -0
  158. package/dist/postgres/postgresDialect.d.ts +13 -0
  159. package/dist/postgres/postgresDialect.js +110 -0
  160. package/dist/querier/abstractQuerier-test.d.ts +45 -0
  161. package/dist/querier/abstractQuerier-test.js +461 -0
  162. package/dist/querier/abstractQuerier.d.ts +50 -0
  163. package/dist/querier/abstractQuerier.js +278 -0
  164. package/dist/querier/abstractQuerierPool-test.d.ts +9 -0
  165. package/dist/querier/abstractQuerierPool-test.js +18 -0
  166. package/dist/querier/abstractQuerierPool.d.ts +14 -0
  167. package/dist/querier/abstractQuerierPool.js +9 -0
  168. package/dist/querier/abstractSqlQuerier-test.d.ts +9 -0
  169. package/dist/querier/abstractSqlQuerier-test.js +16 -0
  170. package/dist/querier/abstractSqlQuerier.d.ts +28 -0
  171. package/dist/querier/abstractSqlQuerier.js +133 -0
  172. package/dist/querier/decorator/index.d.ts +3 -0
  173. package/dist/querier/decorator/index.js +4 -0
  174. package/dist/querier/decorator/injectQuerier.d.ts +3 -0
  175. package/dist/querier/decorator/injectQuerier.js +33 -0
  176. package/dist/querier/decorator/serialized.d.ts +6 -0
  177. package/dist/querier/decorator/serialized.js +14 -0
  178. package/{querier → dist/querier}/decorator/transactional.d.ts +1 -1
  179. package/dist/querier/decorator/transactional.js +48 -0
  180. package/dist/querier/index.d.ts +4 -0
  181. package/dist/querier/index.js +5 -0
  182. package/dist/repository/genericRepository.d.ts +20 -0
  183. package/dist/repository/genericRepository.js +51 -0
  184. package/dist/repository/index.d.ts +1 -0
  185. package/dist/repository/index.js +2 -0
  186. package/dist/sqlite/index.d.ts +3 -0
  187. package/dist/sqlite/index.js +4 -0
  188. package/dist/sqlite/sqliteDialect.d.ts +10 -0
  189. package/dist/sqlite/sqliteDialect.js +48 -0
  190. package/dist/sqlite/sqliteQuerier.d.ts +15 -0
  191. package/dist/sqlite/sqliteQuerier.js +33 -0
  192. package/dist/sqlite/sqliteQuerier.test.d.ts +5 -0
  193. package/dist/sqlite/sqliteQuerier.test.js +19 -0
  194. package/dist/sqlite/sqliteQuerierPool.d.ts +14 -0
  195. package/dist/sqlite/sqliteQuerierPool.js +34 -0
  196. package/dist/sqlite/sqliteQuerierPool.test.d.ts +5 -0
  197. package/dist/sqlite/sqliteQuerierPool.test.js +10 -0
  198. package/dist/test/entityMock.d.ts +164 -0
  199. package/dist/test/entityMock.js +554 -0
  200. package/dist/test/index.d.ts +3 -0
  201. package/dist/test/index.js +4 -0
  202. package/dist/test/it.util.d.ts +4 -0
  203. package/dist/test/it.util.js +55 -0
  204. package/dist/test/spec.util.d.ts +14 -0
  205. package/dist/test/spec.util.js +50 -0
  206. package/{type → dist/type}/entity.d.ts +97 -4
  207. package/dist/type/entity.js +5 -0
  208. package/dist/type/index.d.ts +9 -0
  209. package/dist/type/index.js +10 -0
  210. package/dist/type/migration.d.ts +213 -0
  211. package/dist/type/migration.js +2 -0
  212. package/dist/type/namingStrategy.d.ts +17 -0
  213. package/dist/type/namingStrategy.js +2 -0
  214. package/dist/type/querier.d.ts +96 -0
  215. package/dist/type/querier.js +11 -0
  216. package/{type → dist/type}/querierPool.d.ts +7 -3
  217. package/dist/type/querierPool.js +2 -0
  218. package/{type → dist/type}/query.d.ts +170 -108
  219. package/dist/type/query.js +9 -0
  220. package/{type → dist/type}/repository.d.ts +42 -35
  221. package/dist/type/repository.js +2 -0
  222. package/{type → dist/type}/universalQuerier.d.ts +50 -28
  223. package/dist/type/universalQuerier.js +2 -0
  224. package/dist/type/utility.d.ts +13 -0
  225. package/dist/type/utility.js +2 -0
  226. package/dist/util/dialect.util.d.ts +12 -0
  227. package/dist/util/dialect.util.js +93 -0
  228. package/dist/util/index.d.ts +5 -0
  229. package/dist/util/index.js +6 -0
  230. package/dist/util/object.util.d.ts +7 -0
  231. package/dist/util/object.util.js +19 -0
  232. package/dist/util/raw.d.ts +8 -0
  233. package/dist/util/raw.js +11 -0
  234. package/dist/util/sql.util.d.ts +13 -0
  235. package/dist/util/sql.util.js +78 -0
  236. package/{util → dist/util}/string.util.d.ts +1 -0
  237. package/dist/util/string.util.js +34 -0
  238. package/package.json +85 -17
  239. package/src/@types/index.d.ts +1 -0
  240. package/src/@types/jest.d.ts +6 -0
  241. package/src/browser/http/bus.spec.ts +22 -0
  242. package/src/browser/http/bus.ts +17 -0
  243. package/src/browser/http/http.spec.ts +70 -0
  244. package/src/browser/http/http.ts +55 -0
  245. package/src/browser/http/index.ts +2 -0
  246. package/src/browser/index.ts +4 -0
  247. package/src/browser/options.spec.ts +37 -0
  248. package/src/browser/options.ts +18 -0
  249. package/src/browser/querier/genericClientRepository.spec.ts +105 -0
  250. package/src/browser/querier/genericClientRepository.ts +49 -0
  251. package/src/browser/querier/httpQuerier.ts +82 -0
  252. package/src/browser/querier/index.ts +3 -0
  253. package/src/browser/querier/querier.util.spec.ts +35 -0
  254. package/src/browser/querier/querier.util.ts +18 -0
  255. package/src/browser/type/clientQuerier.ts +45 -0
  256. package/src/browser/type/clientQuerierPool.ts +5 -0
  257. package/src/browser/type/clientRepository.ts +22 -0
  258. package/src/browser/type/index.ts +4 -0
  259. package/src/browser/type/request.ts +25 -0
  260. package/src/dialect/abstractDialect.ts +28 -0
  261. package/src/dialect/abstractSqlDialect-spec.ts +1309 -0
  262. package/src/dialect/abstractSqlDialect.ts +805 -0
  263. package/src/dialect/index.ts +3 -0
  264. package/src/dialect/namingStrategy.spec.ts +52 -0
  265. package/src/dialect/queryContext.ts +69 -0
  266. package/src/entity/decorator/definition.spec.ts +736 -0
  267. package/src/entity/decorator/definition.ts +265 -0
  268. package/src/entity/decorator/entity.ts +8 -0
  269. package/src/entity/decorator/field.ts +9 -0
  270. package/src/entity/decorator/id.ts +9 -0
  271. package/src/entity/decorator/index.ts +5 -0
  272. package/src/entity/decorator/relation.spec.ts +41 -0
  273. package/src/entity/decorator/relation.ts +34 -0
  274. package/src/entity/index.ts +1 -0
  275. package/src/express/@types/express.d.ts +8 -0
  276. package/src/express/@types/index.d.ts +1 -0
  277. package/src/express/index.ts +2 -0
  278. package/src/express/querierMiddleware.ts +217 -0
  279. package/src/express/query.util.spec.ts +40 -0
  280. package/src/express/query.util.ts +21 -0
  281. package/src/index.ts +9 -0
  282. package/src/maria/index.ts +3 -0
  283. package/src/maria/mariaDialect.spec.ts +207 -0
  284. package/src/maria/mariaDialect.ts +42 -0
  285. package/src/maria/mariaQuerierPool.test.ts +23 -0
  286. package/src/maria/mariadbQuerier.test.ts +23 -0
  287. package/src/maria/mariadbQuerier.ts +45 -0
  288. package/src/maria/mariadbQuerierPool.ts +21 -0
  289. package/src/migrate/cli.ts +301 -0
  290. package/src/migrate/generator/index.ts +4 -0
  291. package/src/migrate/generator/mongoSchemaGenerator.spec.ts +112 -0
  292. package/src/migrate/generator/mongoSchemaGenerator.ts +115 -0
  293. package/src/migrate/generator/mysqlSchemaGenerator.spec.ts +34 -0
  294. package/src/migrate/generator/mysqlSchemaGenerator.ts +92 -0
  295. package/src/migrate/generator/postgresSchemaGenerator.spec.ts +44 -0
  296. package/src/migrate/generator/postgresSchemaGenerator.ts +127 -0
  297. package/src/migrate/generator/sqliteSchemaGenerator.spec.ts +33 -0
  298. package/src/migrate/generator/sqliteSchemaGenerator.ts +81 -0
  299. package/src/migrate/index.ts +41 -0
  300. package/src/migrate/introspection/index.ts +4 -0
  301. package/src/migrate/introspection/mongoIntrospector.spec.ts +75 -0
  302. package/src/migrate/introspection/mongoIntrospector.ts +47 -0
  303. package/src/migrate/introspection/mysqlIntrospector.spec.ts +113 -0
  304. package/src/migrate/introspection/mysqlIntrospector.ts +278 -0
  305. package/src/migrate/introspection/postgresIntrospector.spec.ts +112 -0
  306. package/src/migrate/introspection/postgresIntrospector.ts +329 -0
  307. package/src/migrate/introspection/sqliteIntrospector.spec.ts +112 -0
  308. package/src/migrate/introspection/sqliteIntrospector.ts +296 -0
  309. package/src/migrate/migrator-mongo.test.ts +54 -0
  310. package/src/migrate/migrator.spec.ts +255 -0
  311. package/src/migrate/migrator.test.ts +94 -0
  312. package/src/migrate/migrator.ts +719 -0
  313. package/src/migrate/namingStrategy.spec.ts +22 -0
  314. package/src/migrate/schemaGenerator-advanced.spec.ts +138 -0
  315. package/src/migrate/schemaGenerator.spec.ts +190 -0
  316. package/src/migrate/schemaGenerator.ts +478 -0
  317. package/src/migrate/storage/databaseStorage.spec.ts +69 -0
  318. package/src/migrate/storage/databaseStorage.ts +100 -0
  319. package/src/migrate/storage/index.ts +2 -0
  320. package/src/migrate/storage/jsonStorage.ts +58 -0
  321. package/src/migrate/type.ts +1 -0
  322. package/src/mongo/index.ts +3 -0
  323. package/src/mongo/mongoDialect.spec.ts +251 -0
  324. package/src/mongo/mongoDialect.ts +238 -0
  325. package/src/mongo/mongodbQuerier.test.ts +45 -0
  326. package/src/mongo/mongodbQuerier.ts +256 -0
  327. package/src/mongo/mongodbQuerierPool.test.ts +25 -0
  328. package/src/mongo/mongodbQuerierPool.ts +24 -0
  329. package/src/mysql/index.ts +3 -0
  330. package/src/mysql/mysql2Querier.test.ts +20 -0
  331. package/src/mysql/mysql2Querier.ts +49 -0
  332. package/src/mysql/mysql2QuerierPool.test.ts +20 -0
  333. package/src/mysql/mysql2QuerierPool.ts +21 -0
  334. package/src/mysql/mysqlDialect.spec.ts +20 -0
  335. package/src/mysql/mysqlDialect.ts +16 -0
  336. package/src/namingStrategy/defaultNamingStrategy.ts +18 -0
  337. package/src/namingStrategy/index.spec.ts +36 -0
  338. package/src/namingStrategy/index.ts +2 -0
  339. package/src/namingStrategy/snakeCaseNamingStrategy.ts +15 -0
  340. package/src/options.spec.ts +41 -0
  341. package/src/options.ts +18 -0
  342. package/src/postgres/index.ts +3 -0
  343. package/src/postgres/manual-types.d.ts +4 -0
  344. package/src/postgres/pgQuerier.test.ts +25 -0
  345. package/src/postgres/pgQuerier.ts +45 -0
  346. package/src/postgres/pgQuerierPool.test.ts +28 -0
  347. package/src/postgres/pgQuerierPool.ts +21 -0
  348. package/src/postgres/postgresDialect.spec.ts +428 -0
  349. package/src/postgres/postgresDialect.ts +144 -0
  350. package/src/querier/abstractQuerier-test.ts +584 -0
  351. package/src/querier/abstractQuerier.ts +353 -0
  352. package/src/querier/abstractQuerierPool-test.ts +20 -0
  353. package/src/querier/abstractQuerierPool.ts +18 -0
  354. package/src/querier/abstractSqlQuerier-spec.ts +979 -0
  355. package/src/querier/abstractSqlQuerier-test.ts +21 -0
  356. package/src/querier/abstractSqlQuerier.ts +138 -0
  357. package/src/querier/decorator/index.ts +3 -0
  358. package/src/querier/decorator/injectQuerier.spec.ts +74 -0
  359. package/src/querier/decorator/injectQuerier.ts +45 -0
  360. package/src/querier/decorator/serialized.spec.ts +98 -0
  361. package/src/querier/decorator/serialized.ts +13 -0
  362. package/src/querier/decorator/transactional.spec.ts +240 -0
  363. package/src/querier/decorator/transactional.ts +56 -0
  364. package/src/querier/index.ts +4 -0
  365. package/src/repository/genericRepository.spec.ts +111 -0
  366. package/src/repository/genericRepository.ts +74 -0
  367. package/src/repository/index.ts +1 -0
  368. package/src/sqlite/index.ts +3 -0
  369. package/src/sqlite/manual-types.d.ts +4 -0
  370. package/src/sqlite/sqliteDialect.spec.ts +155 -0
  371. package/src/sqlite/sqliteDialect.ts +76 -0
  372. package/src/sqlite/sqliteQuerier.spec.ts +36 -0
  373. package/src/sqlite/sqliteQuerier.test.ts +21 -0
  374. package/src/sqlite/sqliteQuerier.ts +37 -0
  375. package/src/sqlite/sqliteQuerierPool.test.ts +12 -0
  376. package/src/sqlite/sqliteQuerierPool.ts +38 -0
  377. package/src/test/entityMock.ts +375 -0
  378. package/src/test/index.ts +3 -0
  379. package/src/test/it.util.ts +69 -0
  380. package/src/test/spec.util.ts +57 -0
  381. package/src/type/entity.ts +218 -0
  382. package/src/type/index.ts +9 -0
  383. package/src/type/migration.ts +241 -0
  384. package/src/type/namingStrategy.ts +17 -0
  385. package/src/type/querier.ts +143 -0
  386. package/src/type/querierPool.ts +26 -0
  387. package/src/type/query.ts +506 -0
  388. package/src/type/repository.ts +142 -0
  389. package/src/type/universalQuerier.ts +133 -0
  390. package/src/type/utility.ts +21 -0
  391. package/src/util/dialect.util-extra.spec.ts +96 -0
  392. package/src/util/dialect.util.spec.ts +23 -0
  393. package/src/util/dialect.util.ts +134 -0
  394. package/src/util/index.ts +5 -0
  395. package/src/util/object.util.spec.ts +29 -0
  396. package/src/util/object.util.ts +27 -0
  397. package/src/util/raw.ts +11 -0
  398. package/src/util/sql.util-extra.spec.ts +17 -0
  399. package/src/util/sql.util.spec.ts +208 -0
  400. package/src/util/sql.util.ts +104 -0
  401. package/src/util/string.util.spec.ts +46 -0
  402. package/src/util/string.util.ts +35 -0
  403. package/tsconfig.build.json +5 -0
  404. package/tsconfig.json +8 -0
  405. package/README.md +0 -177
  406. package/dialect/abstractSqlDialect.d.ts +0 -30
  407. package/dialect/abstractSqlDialect.js +0 -365
  408. package/dialect/index.d.ts +0 -4
  409. package/dialect/index.js +0 -8
  410. package/dialect/mysqlDialect.d.ts +0 -6
  411. package/dialect/mysqlDialect.js +0 -21
  412. package/dialect/postgresDialect.d.ts +0 -8
  413. package/dialect/postgresDialect.js +0 -44
  414. package/dialect/sqliteDialect.d.ts +0 -4
  415. package/dialect/sqliteDialect.js +0 -11
  416. package/entity/decorator/definition.js +0 -223
  417. package/entity/decorator/entity.js +0 -11
  418. package/entity/decorator/field.js +0 -12
  419. package/entity/decorator/id.js +0 -12
  420. package/entity/decorator/index.d.ts +0 -5
  421. package/entity/decorator/index.js +0 -12
  422. package/entity/decorator/relation.js +0 -27
  423. package/entity/index.d.ts +0 -1
  424. package/entity/index.js +0 -5
  425. package/index.d.ts +0 -1
  426. package/index.js +0 -5
  427. package/options.js +0 -20
  428. package/querier/abstractQuerier.d.ts +0 -30
  429. package/querier/abstractQuerier.js +0 -230
  430. package/querier/abstractSqlQuerier.d.ts +0 -27
  431. package/querier/abstractSqlQuerier.js +0 -88
  432. package/querier/decorator/index.d.ts +0 -2
  433. package/querier/decorator/index.js +0 -6
  434. package/querier/decorator/injectQuerier.d.ts +0 -3
  435. package/querier/decorator/injectQuerier.js +0 -39
  436. package/querier/decorator/transactional.js +0 -52
  437. package/querier/index.d.ts +0 -3
  438. package/querier/index.js +0 -7
  439. package/repository/genericRepository.d.ts +0 -19
  440. package/repository/genericRepository.js +0 -52
  441. package/repository/index.d.ts +0 -1
  442. package/repository/index.js +0 -5
  443. package/type/entity.js +0 -5
  444. package/type/index.d.ts +0 -7
  445. package/type/index.js +0 -11
  446. package/type/querier.d.ts +0 -53
  447. package/type/querier.js +0 -3
  448. package/type/querierPool.js +0 -3
  449. package/type/query.js +0 -13
  450. package/type/repository.js +0 -3
  451. package/type/universalQuerier.js +0 -3
  452. package/type/utility.d.ts +0 -12
  453. package/type/utility.js +0 -3
  454. package/util/dialect.util.d.ts +0 -17
  455. package/util/dialect.util.js +0 -114
  456. package/util/index.d.ts +0 -5
  457. package/util/index.js +0 -9
  458. package/util/object.util.d.ts +0 -3
  459. package/util/object.util.js +0 -22
  460. package/util/raw.d.ts +0 -2
  461. package/util/raw.js +0 -9
  462. package/util/sql.util.d.ts +0 -2
  463. package/util/sql.util.js +0 -55
  464. package/util/string.util.js +0 -20
@@ -0,0 +1,14 @@
1
+ /// <reference types="bun-types" resolution-mode="require"/>
2
+ import { afterAll, afterEach, beforeAll, beforeEach } from 'bun:test';
3
+ export declare function createSpec<T extends Spec>(spec: T): void;
4
+ declare const hooks: {
5
+ readonly beforeAll: typeof beforeAll;
6
+ readonly beforeEach: typeof beforeEach;
7
+ readonly afterEach: typeof afterEach;
8
+ readonly afterAll: typeof afterAll;
9
+ };
10
+ type SpecHooks = Partial<typeof hooks>;
11
+ export type Spec = SpecHooks & {
12
+ readonly [k: string]: (() => void | Promise<void>) | any;
13
+ };
14
+ export {};
@@ -0,0 +1,50 @@
1
+ import { afterAll, afterEach, beforeAll, beforeEach, describe, it } from 'bun:test';
2
+ export function createSpec(spec) {
3
+ const proto = Object.getPrototypeOf(spec);
4
+ let describeFn;
5
+ const specName = proto.constructor.name;
6
+ if (specName.startsWith('fff')) {
7
+ describeFn = describe.only;
8
+ }
9
+ else if (specName.startsWith('xxx')) {
10
+ describeFn = describe.skip;
11
+ }
12
+ else {
13
+ describeFn = describe;
14
+ }
15
+ describeFn(specName, () => createTestCases(spec));
16
+ }
17
+ function createTestCases(spec) {
18
+ let proto = Object.getPrototypeOf(spec);
19
+ const processedMethodsMap = {};
20
+ while (proto.constructor !== Object) {
21
+ for (const key of Object.getOwnPropertyNames(proto)) {
22
+ const isProcessed = processedMethodsMap[key];
23
+ processedMethodsMap[key] = true;
24
+ if (isProcessed || key === 'constructor' || typeof spec[key] !== 'function') {
25
+ continue;
26
+ }
27
+ const callback = spec[key].bind(spec);
28
+ if (hooks[key]) {
29
+ hooks[key](callback);
30
+ }
31
+ else if (key.startsWith('should')) {
32
+ it(key, callback);
33
+ }
34
+ else if (key.startsWith('fffShould')) {
35
+ it.only(key, callback);
36
+ }
37
+ else if (key.startsWith('xxxShould')) {
38
+ it.skip(key, callback);
39
+ }
40
+ }
41
+ proto = Object.getPrototypeOf(proto);
42
+ }
43
+ }
44
+ const hooks = {
45
+ beforeAll,
46
+ beforeEach,
47
+ afterEach,
48
+ afterAll,
49
+ };
50
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BlYy51dGlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Rlc3Qvc3BlYy51dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUVwRixNQUFNLFVBQVUsVUFBVSxDQUFpQixJQUFPO0lBQ2hELE1BQU0sS0FBSyxHQUF3QixNQUFNLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQy9ELElBQUksVUFBMkIsQ0FBQztJQUNoQyxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQztJQUV4QyxJQUFJLFFBQVEsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUMvQixVQUFVLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQztJQUM3QixDQUFDO1NBQU0sSUFBSSxRQUFRLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDdEMsVUFBVSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUM7SUFDN0IsQ0FBQztTQUFNLENBQUM7UUFDTixVQUFVLEdBQUcsUUFBUSxDQUFDO0lBQ3hCLENBQUM7SUFFRCxVQUFVLENBQUMsUUFBUSxFQUFFLEdBQUcsRUFBRSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3BELENBQUM7QUFFRCxTQUFTLGVBQWUsQ0FBQyxJQUFZO0lBQ25DLElBQUksS0FBSyxHQUF3QixNQUFNLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBRTdELE1BQU0sbUJBQW1CLEdBQTBCLEVBQUUsQ0FBQztJQUV0RCxPQUFPLEtBQUssQ0FBQyxXQUFXLEtBQUssTUFBTSxFQUFFLENBQUM7UUFDcEMsS0FBSyxNQUFNLEdBQUcsSUFBSSxNQUFNLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNwRCxNQUFNLFdBQVcsR0FBRyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUM3QyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7WUFDaEMsSUFBSSxXQUFXLElBQUksR0FBRyxLQUFLLGFBQWEsSUFBSSxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxVQUFVLEVBQUUsQ0FBQztnQkFDNUUsU0FBUztZQUNYLENBQUM7WUFDRCxNQUFNLFFBQVEsR0FBK0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNsRSxJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUNmLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUN2QixDQUFDO2lCQUFNLElBQUksR0FBRyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO2dCQUNwQyxFQUFFLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBQ3BCLENBQUM7aUJBQU0sSUFBSSxHQUFHLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7Z0JBQ3ZDLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBQ3pCLENBQUM7aUJBQU0sSUFBSSxHQUFHLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7Z0JBQ3ZDLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBQ3pCLENBQUM7UUFDSCxDQUFDO1FBQ0QsS0FBSyxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdkMsQ0FBQztBQUNILENBQUM7QUFFRCxNQUFNLEtBQUssR0FBRztJQUNaLFNBQVM7SUFDVCxVQUFVO0lBQ1YsU0FBUztJQUNULFFBQVE7Q0FDQSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYWZ0ZXJBbGwsIGFmdGVyRWFjaCwgYmVmb3JlQWxsLCBiZWZvcmVFYWNoLCBkZXNjcmliZSwgaXQgfSBmcm9tICdidW46dGVzdCc7XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVTcGVjPFQgZXh0ZW5kcyBTcGVjPihzcGVjOiBUKSB7XG4gIGNvbnN0IHByb3RvOiBGdW5jdGlvbkNvbnN0cnVjdG9yID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHNwZWMpO1xuICBsZXQgZGVzY3JpYmVGbjogdHlwZW9mIGRlc2NyaWJlO1xuICBjb25zdCBzcGVjTmFtZSA9IHByb3RvLmNvbnN0cnVjdG9yLm5hbWU7XG5cbiAgaWYgKHNwZWNOYW1lLnN0YXJ0c1dpdGgoJ2ZmZicpKSB7XG4gICAgZGVzY3JpYmVGbiA9IGRlc2NyaWJlLm9ubHk7XG4gIH0gZWxzZSBpZiAoc3BlY05hbWUuc3RhcnRzV2l0aCgneHh4JykpIHtcbiAgICBkZXNjcmliZUZuID0gZGVzY3JpYmUuc2tpcDtcbiAgfSBlbHNlIHtcbiAgICBkZXNjcmliZUZuID0gZGVzY3JpYmU7XG4gIH1cblxuICBkZXNjcmliZUZuKHNwZWNOYW1lLCAoKSA9PiBjcmVhdGVUZXN0Q2FzZXMoc3BlYykpO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVUZXN0Q2FzZXMoc3BlYzogb2JqZWN0KSB7XG4gIGxldCBwcm90bzogRnVuY3Rpb25Db25zdHJ1Y3RvciA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihzcGVjKTtcblxuICBjb25zdCBwcm9jZXNzZWRNZXRob2RzTWFwOiB7IFtrOiBzdHJpbmddOiB0cnVlIH0gPSB7fTtcblxuICB3aGlsZSAocHJvdG8uY29uc3RydWN0b3IgIT09IE9iamVjdCkge1xuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHByb3RvKSkge1xuICAgICAgY29uc3QgaXNQcm9jZXNzZWQgPSBwcm9jZXNzZWRNZXRob2RzTWFwW2tleV07XG4gICAgICBwcm9jZXNzZWRNZXRob2RzTWFwW2tleV0gPSB0cnVlO1xuICAgICAgaWYgKGlzUHJvY2Vzc2VkIHx8IGtleSA9PT0gJ2NvbnN0cnVjdG9yJyB8fCB0eXBlb2Ygc3BlY1trZXldICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgY29uc3QgY2FsbGJhY2s6ICgpID0+IHZvaWQgfCBQcm9taXNlPHZvaWQ+ID0gc3BlY1trZXldLmJpbmQoc3BlYyk7XG4gICAgICBpZiAoaG9va3Nba2V5XSkge1xuICAgICAgICBob29rc1trZXldKGNhbGxiYWNrKTtcbiAgICAgIH0gZWxzZSBpZiAoa2V5LnN0YXJ0c1dpdGgoJ3Nob3VsZCcpKSB7XG4gICAgICAgIGl0KGtleSwgY2FsbGJhY2spO1xuICAgICAgfSBlbHNlIGlmIChrZXkuc3RhcnRzV2l0aCgnZmZmU2hvdWxkJykpIHtcbiAgICAgICAgaXQub25seShrZXksIGNhbGxiYWNrKTtcbiAgICAgIH0gZWxzZSBpZiAoa2V5LnN0YXJ0c1dpdGgoJ3h4eFNob3VsZCcpKSB7XG4gICAgICAgIGl0LnNraXAoa2V5LCBjYWxsYmFjayk7XG4gICAgICB9XG4gICAgfVxuICAgIHByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHByb3RvKTtcbiAgfVxufVxuXG5jb25zdCBob29rcyA9IHtcbiAgYmVmb3JlQWxsLFxuICBiZWZvcmVFYWNoLFxuICBhZnRlckVhY2gsXG4gIGFmdGVyQWxsLFxufSBhcyBjb25zdDtcblxudHlwZSBTcGVjSG9va3MgPSBQYXJ0aWFsPHR5cGVvZiBob29rcz47XG5cbmV4cG9ydCB0eXBlIFNwZWMgPSBTcGVjSG9va3MgJiB7XG4gIHJlYWRvbmx5IFtrOiBzdHJpbmddOiAoKCkgPT4gdm9pZCB8IFByb21pc2U8dm9pZD4pIHwgYW55O1xufTtcbiJdfQ==
@@ -1,36 +1,114 @@
1
- import { QueryRaw } from './query';
2
- import { Scalar, Type } from './utility';
1
+ import type { QueryRaw } from './query.js';
2
+ import type { Scalar, Type } from './utility.js';
3
+ /**
4
+ * Allow to customize the name of the property that identifies an entity
5
+ */
3
6
  export declare const idKey: unique symbol;
7
+ /**
8
+ * Infers the key names of an entity
9
+ */
4
10
  export type Key<E> = keyof E & string;
11
+ /**
12
+ * Infers the field names of an entity
13
+ */
5
14
  export type FieldKey<E> = {
6
15
  readonly [K in keyof E]: E[K] extends Scalar ? K : never;
7
16
  }[Key<E>];
17
+ /**
18
+ * Infers the relation names of an entity
19
+ */
8
20
  export type RelationKey<E> = {
9
21
  readonly [K in keyof E]: E[K] extends Scalar ? never : K;
10
22
  }[Key<E>];
23
+ /**
24
+ * Infers the field values of an entity
25
+ */
11
26
  export type FieldValue<E> = E[FieldKey<E>];
27
+ /**
28
+ * Infers the name of the key identifier on an entity
29
+ */
12
30
  export type IdKey<E> = E extends {
13
31
  [idKey]?: infer K;
14
32
  } ? K & FieldKey<E> : E extends {
15
33
  _id?: unknown;
16
34
  } ? '_id' & FieldKey<E> : E extends {
17
35
  id?: unknown;
18
- } ? 'id' & FieldKey<E> : FieldKey<E>;
36
+ } ? 'id' & FieldKey<E> : E extends {
37
+ uuid?: unknown;
38
+ } ? 'uuid' & FieldKey<E> : FieldKey<E>;
39
+ /**
40
+ * Infers the value of the key identifier on an entity
41
+ */
19
42
  export type IdValue<E> = E[IdKey<E>];
43
+ /**
44
+ * Infers the values of the relations on an entity
45
+ */
20
46
  export type RelationValue<E> = E[RelationKey<E>];
47
+ /**
48
+ * Configurable options for an entity
49
+ */
21
50
  export type EntityOptions = {
22
51
  readonly name?: string;
23
52
  readonly softDelete?: boolean;
24
53
  };
54
+ /**
55
+ * SQL column types supported by uql migrations
56
+ */
57
+ export type ColumnType = 'int' | 'smallint' | 'bigint' | 'float' | 'double' | 'decimal' | 'numeric' | 'real' | 'boolean' | 'char' | 'varchar' | 'text' | 'uuid' | 'date' | 'time' | 'timestamp' | 'timestamptz' | 'json' | 'jsonb' | 'blob' | 'bytea' | 'vector' | 'serial' | 'bigserial';
58
+ /**
59
+ * Configurable options for a field
60
+ */
25
61
  export type FieldOptions = {
26
62
  readonly name?: string;
27
63
  readonly isId?: true;
28
64
  readonly type?: any;
29
65
  readonly reference?: EntityGetter;
30
66
  readonly virtual?: QueryRaw;
67
+ readonly updatable?: boolean;
68
+ readonly eager?: boolean;
31
69
  readonly onInsert?: OnFieldCallback;
32
70
  readonly onUpdate?: OnFieldCallback;
33
71
  readonly onDelete?: OnFieldCallback;
72
+ /**
73
+ * SQL column type for migrations. If not specified, inferred from TypeScript type.
74
+ */
75
+ readonly columnType?: ColumnType;
76
+ /**
77
+ * Column length (e.g., VARCHAR(100)). Defaults to 255 for varchar.
78
+ */
79
+ readonly length?: number;
80
+ /**
81
+ * Precision for decimal/numeric types.
82
+ */
83
+ readonly precision?: number;
84
+ /**
85
+ * Scale for decimal/numeric types.
86
+ */
87
+ readonly scale?: number;
88
+ /**
89
+ * Whether the column allows NULL values. Defaults to true except for ID fields.
90
+ */
91
+ readonly nullable?: boolean;
92
+ /**
93
+ * Whether the column has a UNIQUE constraint.
94
+ */
95
+ readonly unique?: boolean;
96
+ /**
97
+ * Default value for the column.
98
+ */
99
+ readonly defaultValue?: Scalar | null;
100
+ /**
101
+ * Whether the column is auto-incrementing (for integer IDs).
102
+ */
103
+ readonly autoIncrement?: boolean;
104
+ /**
105
+ * Index configuration. true for simple index, string for named index.
106
+ */
107
+ readonly index?: boolean | string;
108
+ /**
109
+ * Column comment/description for database documentation.
110
+ */
111
+ readonly comment?: string;
34
112
  };
35
113
  export type OnFieldCallback = Scalar | QueryRaw | (() => Scalar | QueryRaw);
36
114
  export type EntityGetter<E = any> = () => Type<E>;
@@ -58,8 +136,22 @@ export type RelationMappedBy<E> = Key<E> | RelationKeyMapper<E>;
58
136
  export type RelationCardinality = '11' | 'm1' | '1m' | 'mm';
59
137
  export type RelationOneToOneOptions<E> = RelationOptionsOwner<E> | RelationOptionsInverseSide<E>;
60
138
  export type RelationOneToManyOptions<E> = RelationOptionsInverseSide<E> | RelationOptionsThroughOwner<E>;
61
- export type RelationManyToOneOptions<E> = RelationOptionsOwner<E> | RelationOptionsInverseSide<E>;
139
+ export type RelationManyToOneOptions<E> = RelationOptionsOwner<E>;
62
140
  export type RelationManyToManyOptions<E> = RelationOptionsThroughOwner<E> | RelationOptionsInverseSide<E>;
141
+ /**
142
+ * Wrapper type for relation type definitions in entities.
143
+ * Used to circumvent ESM modules circular dependency issue caused by reflection metadata saving the type of the property.
144
+ *
145
+ * Usage example:
146
+ * @Entity()
147
+ * export default class User {
148
+ *
149
+ * @OneToOne(() => Profile, profile => profile.user)
150
+ * profile: Relation<Profile>;
151
+ *
152
+ * }
153
+ */
154
+ export type Relation<T> = T;
63
155
  export type EntityMeta<E> = {
64
156
  readonly entity: Type<E>;
65
157
  name?: string;
@@ -73,4 +165,5 @@ export type EntityMeta<E> = {
73
165
  };
74
166
  processed?: boolean;
75
167
  };
168
+ export type Primitive = string | number | symbol;
76
169
  export {};
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Allow to customize the name of the property that identifies an entity
3
+ */
4
+ export const idKey = Symbol('idKey');
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3R5cGUvZW50aXR5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgUXVlcnlSYXcgfSBmcm9tICcuL3F1ZXJ5LmpzJztcbmltcG9ydCB0eXBlIHsgU2NhbGFyLCBUeXBlIH0gZnJvbSAnLi91dGlsaXR5LmpzJztcblxuLyoqXG4gKiBBbGxvdyB0byBjdXN0b21pemUgdGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5IHRoYXQgaWRlbnRpZmllcyBhbiBlbnRpdHlcbiAqL1xuZXhwb3J0IGNvbnN0IGlkS2V5ID0gU3ltYm9sKCdpZEtleScpO1xuXG4vKipcbiAqIEluZmVycyB0aGUga2V5IG5hbWVzIG9mIGFuIGVudGl0eVxuICovXG5leHBvcnQgdHlwZSBLZXk8RT4gPSBrZXlvZiBFICYgc3RyaW5nO1xuXG4vKipcbiAqIEluZmVycyB0aGUgZmllbGQgbmFtZXMgb2YgYW4gZW50aXR5XG4gKi9cbmV4cG9ydCB0eXBlIEZpZWxkS2V5PEU+ID0ge1xuICByZWFkb25seSBbSyBpbiBrZXlvZiBFXTogRVtLXSBleHRlbmRzIFNjYWxhciA/IEsgOiBuZXZlcjtcbn1bS2V5PEU+XTtcblxuLyoqXG4gKiBJbmZlcnMgdGhlIHJlbGF0aW9uIG5hbWVzIG9mIGFuIGVudGl0eVxuICovXG5leHBvcnQgdHlwZSBSZWxhdGlvbktleTxFPiA9IHtcbiAgcmVhZG9ubHkgW0sgaW4ga2V5b2YgRV06IEVbS10gZXh0ZW5kcyBTY2FsYXIgPyBuZXZlciA6IEs7XG59W0tleTxFPl07XG5cbi8qKlxuICogSW5mZXJzIHRoZSBmaWVsZCB2YWx1ZXMgb2YgYW4gZW50aXR5XG4gKi9cbmV4cG9ydCB0eXBlIEZpZWxkVmFsdWU8RT4gPSBFW0ZpZWxkS2V5PEU+XTtcblxuLyoqXG4gKiBJbmZlcnMgdGhlIG5hbWUgb2YgdGhlIGtleSBpZGVudGlmaWVyIG9uIGFuIGVudGl0eVxuICovXG5leHBvcnQgdHlwZSBJZEtleTxFPiA9IEUgZXh0ZW5kcyB7IFtpZEtleV0/OiBpbmZlciBLIH1cbiAgPyBLICYgRmllbGRLZXk8RT5cbiAgOiBFIGV4dGVuZHMgeyBfaWQ/OiB1bmtub3duIH1cbiAgICA/ICdfaWQnICYgRmllbGRLZXk8RT5cbiAgICA6IEUgZXh0ZW5kcyB7IGlkPzogdW5rbm93biB9XG4gICAgICA/ICdpZCcgJiBGaWVsZEtleTxFPlxuICAgICAgOiBFIGV4dGVuZHMgeyB1dWlkPzogdW5rbm93biB9XG4gICAgICAgID8gJ3V1aWQnICYgRmllbGRLZXk8RT5cbiAgICAgICAgOiBGaWVsZEtleTxFPjtcblxuLyoqXG4gKiBJbmZlcnMgdGhlIHZhbHVlIG9mIHRoZSBrZXkgaWRlbnRpZmllciBvbiBhbiBlbnRpdHlcbiAqL1xuZXhwb3J0IHR5cGUgSWRWYWx1ZTxFPiA9IEVbSWRLZXk8RT5dO1xuXG4vKipcbiAqIEluZmVycyB0aGUgdmFsdWVzIG9mIHRoZSByZWxhdGlvbnMgb24gYW4gZW50aXR5XG4gKi9cbmV4cG9ydCB0eXBlIFJlbGF0aW9uVmFsdWU8RT4gPSBFW1JlbGF0aW9uS2V5PEU+XTtcblxuLyoqXG4gKiBDb25maWd1cmFibGUgb3B0aW9ucyBmb3IgYW4gZW50aXR5XG4gKi9cbmV4cG9ydCB0eXBlIEVudGl0eU9wdGlvbnMgPSB7XG4gIHJlYWRvbmx5IG5hbWU/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHNvZnREZWxldGU/OiBib29sZWFuO1xufTtcblxuLyoqXG4gKiBTUUwgY29sdW1uIHR5cGVzIHN1cHBvcnRlZCBieSB1cWwgbWlncmF0aW9uc1xuICovXG5leHBvcnQgdHlwZSBDb2x1bW5UeXBlID1cbiAgfCAnaW50J1xuICB8ICdzbWFsbGludCdcbiAgfCAnYmlnaW50J1xuICB8ICdmbG9hdCdcbiAgfCAnZG91YmxlJ1xuICB8ICdkZWNpbWFsJ1xuICB8ICdudW1lcmljJ1xuICB8ICdyZWFsJ1xuICB8ICdib29sZWFuJ1xuICB8ICdjaGFyJ1xuICB8ICd2YXJjaGFyJ1xuICB8ICd0ZXh0J1xuICB8ICd1dWlkJ1xuICB8ICdkYXRlJ1xuICB8ICd0aW1lJ1xuICB8ICd0aW1lc3RhbXAnXG4gIHwgJ3RpbWVzdGFtcHR6J1xuICB8ICdqc29uJ1xuICB8ICdqc29uYidcbiAgfCAnYmxvYidcbiAgfCAnYnl0ZWEnXG4gIHwgJ3ZlY3RvcidcbiAgfCAnc2VyaWFsJ1xuICB8ICdiaWdzZXJpYWwnO1xuXG4vKipcbiAqIENvbmZpZ3VyYWJsZSBvcHRpb25zIGZvciBhIGZpZWxkXG4gKi9cbmV4cG9ydCB0eXBlIEZpZWxkT3B0aW9ucyA9IHtcbiAgcmVhZG9ubHkgbmFtZT86IHN0cmluZztcbiAgcmVhZG9ubHkgaXNJZD86IHRydWU7XG4gIHJlYWRvbmx5IHR5cGU/OiBhbnk7XG4gIHJlYWRvbmx5IHJlZmVyZW5jZT86IEVudGl0eUdldHRlcjtcbiAgcmVhZG9ubHkgdmlydHVhbD86IFF1ZXJ5UmF3O1xuICByZWFkb25seSB1cGRhdGFibGU/OiBib29sZWFuO1xuICByZWFkb25seSBlYWdlcj86IGJvb2xlYW47XG4gIHJlYWRvbmx5IG9uSW5zZXJ0PzogT25GaWVsZENhbGxiYWNrO1xuICByZWFkb25seSBvblVwZGF0ZT86IE9uRmllbGRDYWxsYmFjaztcbiAgcmVhZG9ubHkgb25EZWxldGU/OiBPbkZpZWxkQ2FsbGJhY2s7XG5cbiAgLy8gU2NoZW1hL21pZ3JhdGlvbiBwcm9wZXJ0aWVzXG4gIC8qKlxuICAgKiBTUUwgY29sdW1uIHR5cGUgZm9yIG1pZ3JhdGlvbnMuIElmIG5vdCBzcGVjaWZpZWQsIGluZmVycmVkIGZyb20gVHlwZVNjcmlwdCB0eXBlLlxuICAgKi9cbiAgcmVhZG9ubHkgY29sdW1uVHlwZT86IENvbHVtblR5cGU7XG4gIC8qKlxuICAgKiBDb2x1bW4gbGVuZ3RoIChlLmcuLCBWQVJDSEFSKDEwMCkpLiBEZWZhdWx0cyB0byAyNTUgZm9yIHZhcmNoYXIuXG4gICAqL1xuICByZWFkb25seSBsZW5ndGg/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBQcmVjaXNpb24gZm9yIGRlY2ltYWwvbnVtZXJpYyB0eXBlcy5cbiAgICovXG4gIHJlYWRvbmx5IHByZWNpc2lvbj86IG51bWJlcjtcbiAgLyoqXG4gICAqIFNjYWxlIGZvciBkZWNpbWFsL251bWVyaWMgdHlwZXMuXG4gICAqL1xuICByZWFkb25seSBzY2FsZT86IG51bWJlcjtcbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIGNvbHVtbiBhbGxvd3MgTlVMTCB2YWx1ZXMuIERlZmF1bHRzIHRvIHRydWUgZXhjZXB0IGZvciBJRCBmaWVsZHMuXG4gICAqL1xuICByZWFkb25seSBudWxsYWJsZT86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBjb2x1bW4gaGFzIGEgVU5JUVVFIGNvbnN0cmFpbnQuXG4gICAqL1xuICByZWFkb25seSB1bmlxdWU/OiBib29sZWFuO1xuICAvKipcbiAgICogRGVmYXVsdCB2YWx1ZSBmb3IgdGhlIGNvbHVtbi5cbiAgICovXG4gIHJlYWRvbmx5IGRlZmF1bHRWYWx1ZT86IFNjYWxhciB8IG51bGw7XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBjb2x1bW4gaXMgYXV0by1pbmNyZW1lbnRpbmcgKGZvciBpbnRlZ2VyIElEcykuXG4gICAqL1xuICByZWFkb25seSBhdXRvSW5jcmVtZW50PzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEluZGV4IGNvbmZpZ3VyYXRpb24uIHRydWUgZm9yIHNpbXBsZSBpbmRleCwgc3RyaW5nIGZvciBuYW1lZCBpbmRleC5cbiAgICovXG4gIHJlYWRvbmx5IGluZGV4PzogYm9vbGVhbiB8IHN0cmluZztcbiAgLyoqXG4gICAqIENvbHVtbiBjb21tZW50L2Rlc2NyaXB0aW9uIGZvciBkYXRhYmFzZSBkb2N1bWVudGF0aW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgY29tbWVudD86IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIE9uRmllbGRDYWxsYmFjayA9IFNjYWxhciB8IFF1ZXJ5UmF3IHwgKCgpID0+IFNjYWxhciB8IFF1ZXJ5UmF3KTtcblxuZXhwb3J0IHR5cGUgRW50aXR5R2V0dGVyPEUgPSBhbnk+ID0gKCkgPT4gVHlwZTxFPjtcblxuZXhwb3J0IHR5cGUgQ2FzY2FkZVR5cGUgPSAncGVyc2lzdCcgfCAnZGVsZXRlJztcblxuZXhwb3J0IHR5cGUgUmVsYXRpb25PcHRpb25zPEUgPSBhbnk+ID0ge1xuICBlbnRpdHk/OiBFbnRpdHlHZXR0ZXI8RT47XG4gIGNhcmRpbmFsaXR5OiBSZWxhdGlvbkNhcmRpbmFsaXR5O1xuICByZWFkb25seSBjYXNjYWRlPzogYm9vbGVhbiB8IENhc2NhZGVUeXBlO1xuICBtYXBwZWRCeT86IFJlbGF0aW9uTWFwcGVkQnk8RT47XG4gIHRocm91Z2g/OiBFbnRpdHlHZXR0ZXI8UmVsYXRpb25WYWx1ZTxFPj47XG4gIHJlZmVyZW5jZXM/OiBSZWxhdGlvblJlZmVyZW5jZXM7XG59O1xudHlwZSBSZWxhdGlvbk9wdGlvbnNPd25lcjxFPiA9IFBpY2s8UmVsYXRpb25PcHRpb25zPEU+LCAnZW50aXR5JyB8ICdyZWZlcmVuY2VzJyB8ICdjYXNjYWRlJz47XG50eXBlIFJlbGF0aW9uT3B0aW9uc0ludmVyc2VTaWRlPEU+ID0gUmVxdWlyZWQ8UGljazxSZWxhdGlvbk9wdGlvbnM8RT4sICdlbnRpdHknIHwgJ21hcHBlZEJ5Jz4+ICZcbiAgUGljazxSZWxhdGlvbk9wdGlvbnM8RT4sICdjYXNjYWRlJz47XG50eXBlIFJlbGF0aW9uT3B0aW9uc1Rocm91Z2hPd25lcjxFPiA9IFJlcXVpcmVkPFBpY2s8UmVsYXRpb25PcHRpb25zPEU+LCAnZW50aXR5Jz4+ICZcbiAgUGljazxSZWxhdGlvbk9wdGlvbnM8RT4sICd0aHJvdWdoJyB8ICdyZWZlcmVuY2VzJyB8ICdjYXNjYWRlJz47XG5cbmV4cG9ydCB0eXBlIFJlbGF0aW9uS2V5TWFwPEU+ID0geyByZWFkb25seSBbSyBpbiBrZXlvZiBFXTogSyB9O1xuXG5leHBvcnQgdHlwZSBSZWxhdGlvbktleU1hcHBlcjxFPiA9IChrZXlNYXA6IFJlbGF0aW9uS2V5TWFwPEU+KSA9PiBLZXk8RT47XG5cbmV4cG9ydCB0eXBlIFJlbGF0aW9uUmVmZXJlbmNlcyA9IHsgcmVhZG9ubHkgbG9jYWw6IHN0cmluZzsgcmVhZG9ubHkgZm9yZWlnbjogc3RyaW5nIH1bXTtcblxuZXhwb3J0IHR5cGUgUmVsYXRpb25NYXBwZWRCeTxFPiA9IEtleTxFPiB8IFJlbGF0aW9uS2V5TWFwcGVyPEU+O1xuXG5leHBvcnQgdHlwZSBSZWxhdGlvbkNhcmRpbmFsaXR5ID0gJzExJyB8ICdtMScgfCAnMW0nIHwgJ21tJztcblxuZXhwb3J0IHR5cGUgUmVsYXRpb25PbmVUb09uZU9wdGlvbnM8RT4gPSBSZWxhdGlvbk9wdGlvbnNPd25lcjxFPiB8IFJlbGF0aW9uT3B0aW9uc0ludmVyc2VTaWRlPEU+O1xuXG5leHBvcnQgdHlwZSBSZWxhdGlvbk9uZVRvTWFueU9wdGlvbnM8RT4gPSBSZWxhdGlvbk9wdGlvbnNJbnZlcnNlU2lkZTxFPiB8IFJlbGF0aW9uT3B0aW9uc1Rocm91Z2hPd25lcjxFPjtcblxuZXhwb3J0IHR5cGUgUmVsYXRpb25NYW55VG9PbmVPcHRpb25zPEU+ID0gUmVsYXRpb25PcHRpb25zT3duZXI8RT47XG5cbmV4cG9ydCB0eXBlIFJlbGF0aW9uTWFueVRvTWFueU9wdGlvbnM8RT4gPSBSZWxhdGlvbk9wdGlvbnNUaHJvdWdoT3duZXI8RT4gfCBSZWxhdGlvbk9wdGlvbnNJbnZlcnNlU2lkZTxFPjtcblxuLyoqXG4gKiBXcmFwcGVyIHR5cGUgZm9yIHJlbGF0aW9uIHR5cGUgZGVmaW5pdGlvbnMgaW4gZW50aXRpZXMuXG4gKiBVc2VkIHRvIGNpcmN1bXZlbnQgRVNNIG1vZHVsZXMgY2lyY3VsYXIgZGVwZW5kZW5jeSBpc3N1ZSBjYXVzZWQgYnkgcmVmbGVjdGlvbiBtZXRhZGF0YSBzYXZpbmcgdGhlIHR5cGUgb2YgdGhlIHByb3BlcnR5LlxuICpcbiAqIFVzYWdlIGV4YW1wbGU6XG4gKiBARW50aXR5KClcbiAqIGV4cG9ydCBkZWZhdWx0IGNsYXNzIFVzZXIge1xuICpcbiAqICAgICBAT25lVG9PbmUoKCkgPT4gUHJvZmlsZSwgcHJvZmlsZSA9PiBwcm9maWxlLnVzZXIpXG4gKiAgICAgcHJvZmlsZTogUmVsYXRpb248UHJvZmlsZT47XG4gKlxuICogfVxuICovXG5leHBvcnQgdHlwZSBSZWxhdGlvbjxUPiA9IFQ7XG5cbmV4cG9ydCB0eXBlIEVudGl0eU1ldGE8RT4gPSB7XG4gIHJlYWRvbmx5IGVudGl0eTogVHlwZTxFPjtcbiAgbmFtZT86IHN0cmluZztcbiAgaWQ/OiBJZEtleTxFPjtcbiAgc29mdERlbGV0ZT86IEZpZWxkS2V5PEU+O1xuICBmaWVsZHM6IHtcbiAgICBbSyBpbiBGaWVsZEtleTxFPl0/OiBGaWVsZE9wdGlvbnM7XG4gIH07XG4gIHJlbGF0aW9uczoge1xuICAgIFtLIGluIFJlbGF0aW9uS2V5PEU+XT86IFJlbGF0aW9uT3B0aW9ucztcbiAgfTtcbiAgcHJvY2Vzc2VkPzogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCB0eXBlIFByaW1pdGl2ZSA9IHN0cmluZyB8IG51bWJlciB8IHN5bWJvbDtcbiJdfQ==
@@ -0,0 +1,9 @@
1
+ export * from './entity.js';
2
+ export * from './migration.js';
3
+ export * from './namingStrategy.js';
4
+ export * from './querier.js';
5
+ export * from './querierPool.js';
6
+ export * from './query.js';
7
+ export * from './repository.js';
8
+ export * from './universalQuerier.js';
9
+ export * from './utility.js';
@@ -0,0 +1,10 @@
1
+ export * from './entity.js';
2
+ export * from './migration.js';
3
+ export * from './namingStrategy.js';
4
+ export * from './querier.js';
5
+ export * from './querierPool.js';
6
+ export * from './query.js';
7
+ export * from './repository.js';
8
+ export * from './universalQuerier.js';
9
+ export * from './utility.js';
10
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHlwZS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLGFBQWEsQ0FBQztBQUM1QixjQUFjLGdCQUFnQixDQUFDO0FBQy9CLGNBQWMscUJBQXFCLENBQUM7QUFDcEMsY0FBYyxjQUFjLENBQUM7QUFDN0IsY0FBYyxrQkFBa0IsQ0FBQztBQUNqQyxjQUFjLFlBQVksQ0FBQztBQUMzQixjQUFjLGlCQUFpQixDQUFDO0FBQ2hDLGNBQWMsdUJBQXVCLENBQUM7QUFDdEMsY0FBYyxjQUFjLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2VudGl0eS5qcyc7XG5leHBvcnQgKiBmcm9tICcuL21pZ3JhdGlvbi5qcyc7XG5leHBvcnQgKiBmcm9tICcuL25hbWluZ1N0cmF0ZWd5LmpzJztcbmV4cG9ydCAqIGZyb20gJy4vcXVlcmllci5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3F1ZXJpZXJQb29sLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vcXVlcnkuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9yZXBvc2l0b3J5LmpzJztcbmV4cG9ydCAqIGZyb20gJy4vdW5pdmVyc2FsUXVlcmllci5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3V0aWxpdHkuanMnO1xuIl19
@@ -0,0 +1,213 @@
1
+ import type { Dialect, EntityMeta, FieldOptions, NamingStrategy, SqlQuerier, Type } from './index.js';
2
+ /**
3
+ * Defines a migration using a simple object literal
4
+ */
5
+ export interface MigrationDefinition {
6
+ readonly name?: string;
7
+ readonly up: (querier: SqlQuerier) => Promise<void>;
8
+ readonly down: (querier: SqlQuerier) => Promise<void>;
9
+ }
10
+ /**
11
+ * Represents a single database migration
12
+ */
13
+ export interface Migration extends MigrationDefinition {
14
+ /**
15
+ * Unique name/identifier for this migration (typically timestamp + description)
16
+ */
17
+ readonly name: string;
18
+ }
19
+ /**
20
+ * Storage backend for tracking which migrations have been executed
21
+ */
22
+ export interface MigrationStorage {
23
+ /**
24
+ * Get list of already executed migration names
25
+ */
26
+ executed(): Promise<string[]>;
27
+ /**
28
+ * Mark a migration as executed (called within migration transaction)
29
+ */
30
+ logWithQuerier(querier: SqlQuerier, migrationName: string): Promise<void>;
31
+ /**
32
+ * Remove a migration from the executed list (called within migration transaction)
33
+ */
34
+ unlogWithQuerier(querier: SqlQuerier, migrationName: string): Promise<void>;
35
+ /**
36
+ * Ensure the storage is initialized (e.g., create migrations table)
37
+ */
38
+ ensureStorage(): Promise<void>;
39
+ }
40
+ /**
41
+ * Configuration options for the Migrator
42
+ */
43
+ export interface MigratorOptions {
44
+ /**
45
+ * The database dialect. Defaults to 'postgres'.
46
+ */
47
+ readonly dialect?: Dialect;
48
+ /**
49
+ * Directory containing migration files. Defaults to './migrations'.
50
+ */
51
+ readonly migrationsPath?: string;
52
+ /**
53
+ * Custom storage implementation. Defaults to DatabaseMigrationStorage.
54
+ */
55
+ readonly storage?: MigrationStorage;
56
+ /**
57
+ * Table name for storing migration state. Defaults to 'uql_migrations'.
58
+ */
59
+ readonly tableName?: string;
60
+ /**
61
+ * Logger function for migration output
62
+ */
63
+ readonly logger?: (message: string) => void;
64
+ /**
65
+ * Entities to use for schema generation
66
+ */
67
+ readonly entities?: Type<unknown>[];
68
+ /**
69
+ * Naming strategy for database tables and columns
70
+ */
71
+ readonly namingStrategy?: NamingStrategy;
72
+ /**
73
+ * Custom schema generator for DDL operations.
74
+ * If not provided, it will be inferred from the dialect.
75
+ */
76
+ readonly schemaGenerator?: SchemaGenerator;
77
+ }
78
+ /**
79
+ * Result of a migration run
80
+ */
81
+ export interface MigrationResult {
82
+ readonly name: string;
83
+ readonly direction: 'up' | 'down';
84
+ readonly duration: number;
85
+ readonly success: boolean;
86
+ readonly error?: Error;
87
+ }
88
+ /**
89
+ * Represents a column in a database table schema
90
+ */
91
+ export interface ColumnSchema {
92
+ readonly name: string;
93
+ readonly type: string;
94
+ readonly nullable: boolean;
95
+ readonly defaultValue?: unknown;
96
+ readonly isPrimaryKey: boolean;
97
+ readonly isAutoIncrement: boolean;
98
+ readonly isUnique: boolean;
99
+ readonly length?: number;
100
+ readonly precision?: number;
101
+ readonly scale?: number;
102
+ readonly comment?: string;
103
+ }
104
+ /**
105
+ * Represents a database table schema
106
+ */
107
+ export interface TableSchema {
108
+ readonly name: string;
109
+ readonly columns: ColumnSchema[];
110
+ readonly primaryKey?: string[];
111
+ readonly indexes?: IndexSchema[];
112
+ readonly foreignKeys?: ForeignKeySchema[];
113
+ }
114
+ /**
115
+ * Represents an index in a database table
116
+ */
117
+ export interface IndexSchema {
118
+ readonly name: string;
119
+ readonly columns: string[];
120
+ readonly unique: boolean;
121
+ }
122
+ /**
123
+ * Represents a foreign key constraint
124
+ */
125
+ export interface ForeignKeySchema {
126
+ readonly name: string;
127
+ readonly columns: string[];
128
+ readonly referencedTable: string;
129
+ readonly referencedColumns: string[];
130
+ readonly onDelete?: 'CASCADE' | 'SET NULL' | 'RESTRICT' | 'NO ACTION';
131
+ readonly onUpdate?: 'CASCADE' | 'SET NULL' | 'RESTRICT' | 'NO ACTION';
132
+ }
133
+ /**
134
+ * Represents a difference between current and desired schema
135
+ */
136
+ export interface SchemaDiff {
137
+ readonly tableName: string;
138
+ readonly type: 'create' | 'alter' | 'drop';
139
+ readonly columnsToAdd?: ColumnSchema[];
140
+ readonly columnsToAlter?: {
141
+ from: ColumnSchema;
142
+ to: ColumnSchema;
143
+ }[];
144
+ readonly columnsToDrop?: string[];
145
+ readonly indexesToAdd?: IndexSchema[];
146
+ readonly indexesToDrop?: string[];
147
+ readonly foreignKeysToAdd?: ForeignKeySchema[];
148
+ readonly foreignKeysToDrop?: string[];
149
+ }
150
+ /**
151
+ * Interface for generating DDL statements from entity metadata
152
+ */
153
+ export interface SchemaGenerator {
154
+ /**
155
+ * Generate CREATE TABLE statement for an entity
156
+ */
157
+ generateCreateTable<E>(entity: Type<E>, options?: {
158
+ ifNotExists?: boolean;
159
+ }): string;
160
+ /**
161
+ * Generate DROP TABLE statement for an entity
162
+ */
163
+ generateDropTable<E>(entity: Type<E>): string;
164
+ /**
165
+ * Generate ALTER TABLE statements based on schema diff
166
+ */
167
+ generateAlterTable(diff: SchemaDiff): string[];
168
+ /**
169
+ * Generate rollback (down) statements for ALTER TABLE based on schema diff
170
+ */
171
+ generateAlterTableDown(diff: SchemaDiff): string[];
172
+ /**
173
+ * Generate CREATE INDEX statement
174
+ */
175
+ generateCreateIndex(tableName: string, index: IndexSchema): string;
176
+ /**
177
+ * Generate DROP INDEX statement
178
+ */
179
+ generateDropIndex(tableName: string, indexName: string): string;
180
+ /**
181
+ * Get the SQL type for a field based on its options
182
+ */
183
+ getSqlType(fieldOptions: FieldOptions, fieldType?: unknown): string;
184
+ /**
185
+ * Compare two schemas and return the differences
186
+ */
187
+ diffSchema<E>(entity: Type<E>, currentSchema: TableSchema | undefined): SchemaDiff | undefined;
188
+ /**
189
+ * Resolve table name using entity and naming strategy
190
+ */
191
+ resolveTableName<E>(entity: Type<E>, meta: EntityMeta<E>): string;
192
+ /**
193
+ * Resolve column name using field options and naming strategy
194
+ */
195
+ resolveColumnName(key: string, field: FieldOptions): string;
196
+ }
197
+ /**
198
+ * Interface for introspecting the current database schema
199
+ */
200
+ export interface SchemaIntrospector {
201
+ /**
202
+ * Get the schema of a specific table
203
+ */
204
+ getTableSchema(tableName: string): Promise<TableSchema | undefined>;
205
+ /**
206
+ * Get all table names in the database
207
+ */
208
+ getTableNames(): Promise<string[]>;
209
+ /**
210
+ * Check if a table exists
211
+ */
212
+ tableExists(tableName: string): Promise<boolean>;
213
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWlncmF0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3R5cGUvbWlncmF0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IERpYWxlY3QsIEVudGl0eU1ldGEsIEZpZWxkT3B0aW9ucywgTmFtaW5nU3RyYXRlZ3ksIFNxbFF1ZXJpZXIsIFR5cGUgfSBmcm9tICcuL2luZGV4LmpzJztcblxuLyoqXG4gKiBEZWZpbmVzIGEgbWlncmF0aW9uIHVzaW5nIGEgc2ltcGxlIG9iamVjdCBsaXRlcmFsXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWlncmF0aW9uRGVmaW5pdGlvbiB7XG4gIHJlYWRvbmx5IG5hbWU/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHVwOiAocXVlcmllcjogU3FsUXVlcmllcikgPT4gUHJvbWlzZTx2b2lkPjtcbiAgcmVhZG9ubHkgZG93bjogKHF1ZXJpZXI6IFNxbFF1ZXJpZXIpID0+IFByb21pc2U8dm9pZD47XG59XG5cbi8qKlxuICogUmVwcmVzZW50cyBhIHNpbmdsZSBkYXRhYmFzZSBtaWdyYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNaWdyYXRpb24gZXh0ZW5kcyBNaWdyYXRpb25EZWZpbml0aW9uIHtcbiAgLyoqXG4gICAqIFVuaXF1ZSBuYW1lL2lkZW50aWZpZXIgZm9yIHRoaXMgbWlncmF0aW9uICh0eXBpY2FsbHkgdGltZXN0YW1wICsgZGVzY3JpcHRpb24pXG4gICAqL1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG59XG5cbi8qKlxuICogU3RvcmFnZSBiYWNrZW5kIGZvciB0cmFja2luZyB3aGljaCBtaWdyYXRpb25zIGhhdmUgYmVlbiBleGVjdXRlZFxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1pZ3JhdGlvblN0b3JhZ2Uge1xuICAvKipcbiAgICogR2V0IGxpc3Qgb2YgYWxyZWFkeSBleGVjdXRlZCBtaWdyYXRpb24gbmFtZXNcbiAgICovXG4gIGV4ZWN1dGVkKCk6IFByb21pc2U8c3RyaW5nW10+O1xuXG4gIC8qKlxuICAgKiBNYXJrIGEgbWlncmF0aW9uIGFzIGV4ZWN1dGVkIChjYWxsZWQgd2l0aGluIG1pZ3JhdGlvbiB0cmFuc2FjdGlvbilcbiAgICovXG4gIGxvZ1dpdGhRdWVyaWVyKHF1ZXJpZXI6IFNxbFF1ZXJpZXIsIG1pZ3JhdGlvbk5hbWU6IHN0cmluZyk6IFByb21pc2U8dm9pZD47XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBhIG1pZ3JhdGlvbiBmcm9tIHRoZSBleGVjdXRlZCBsaXN0IChjYWxsZWQgd2l0aGluIG1pZ3JhdGlvbiB0cmFuc2FjdGlvbilcbiAgICovXG4gIHVubG9nV2l0aFF1ZXJpZXIocXVlcmllcjogU3FsUXVlcmllciwgbWlncmF0aW9uTmFtZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPjtcblxuICAvKipcbiAgICogRW5zdXJlIHRoZSBzdG9yYWdlIGlzIGluaXRpYWxpemVkIChlLmcuLCBjcmVhdGUgbWlncmF0aW9ucyB0YWJsZSlcbiAgICovXG4gIGVuc3VyZVN0b3JhZ2UoKTogUHJvbWlzZTx2b2lkPjtcbn1cblxuLyoqXG4gKiBDb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBNaWdyYXRvclxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1pZ3JhdG9yT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgZGF0YWJhc2UgZGlhbGVjdC4gRGVmYXVsdHMgdG8gJ3Bvc3RncmVzJy5cbiAgICovXG4gIHJlYWRvbmx5IGRpYWxlY3Q/OiBEaWFsZWN0O1xuXG4gIC8qKlxuICAgKiBEaXJlY3RvcnkgY29udGFpbmluZyBtaWdyYXRpb24gZmlsZXMuIERlZmF1bHRzIHRvICcuL21pZ3JhdGlvbnMnLlxuICAgKi9cbiAgcmVhZG9ubHkgbWlncmF0aW9uc1BhdGg/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEN1c3RvbSBzdG9yYWdlIGltcGxlbWVudGF0aW9uLiBEZWZhdWx0cyB0byBEYXRhYmFzZU1pZ3JhdGlvblN0b3JhZ2UuXG4gICAqL1xuICByZWFkb25seSBzdG9yYWdlPzogTWlncmF0aW9uU3RvcmFnZTtcblxuICAvKipcbiAgICogVGFibGUgbmFtZSBmb3Igc3RvcmluZyBtaWdyYXRpb24gc3RhdGUuIERlZmF1bHRzIHRvICd1cWxfbWlncmF0aW9ucycuXG4gICAqL1xuICByZWFkb25seSB0YWJsZU5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIExvZ2dlciBmdW5jdGlvbiBmb3IgbWlncmF0aW9uIG91dHB1dFxuICAgKi9cbiAgcmVhZG9ubHkgbG9nZ2VyPzogKG1lc3NhZ2U6IHN0cmluZykgPT4gdm9pZDtcblxuICAvKipcbiAgICogRW50aXRpZXMgdG8gdXNlIGZvciBzY2hlbWEgZ2VuZXJhdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgZW50aXRpZXM/OiBUeXBlPHVua25vd24+W107XG5cbiAgLyoqXG4gICAqIE5hbWluZyBzdHJhdGVneSBmb3IgZGF0YWJhc2UgdGFibGVzIGFuZCBjb2x1bW5zXG4gICAqL1xuICByZWFkb25seSBuYW1pbmdTdHJhdGVneT86IE5hbWluZ1N0cmF0ZWd5O1xuXG4gIC8qKlxuICAgKiBDdXN0b20gc2NoZW1hIGdlbmVyYXRvciBmb3IgRERMIG9wZXJhdGlvbnMuXG4gICAqIElmIG5vdCBwcm92aWRlZCwgaXQgd2lsbCBiZSBpbmZlcnJlZCBmcm9tIHRoZSBkaWFsZWN0LlxuICAgKi9cbiAgcmVhZG9ubHkgc2NoZW1hR2VuZXJhdG9yPzogU2NoZW1hR2VuZXJhdG9yO1xufVxuXG4vKipcbiAqIFJlc3VsdCBvZiBhIG1pZ3JhdGlvbiBydW5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNaWdyYXRpb25SZXN1bHQge1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGRpcmVjdGlvbjogJ3VwJyB8ICdkb3duJztcbiAgcmVhZG9ubHkgZHVyYXRpb246IG51bWJlcjtcbiAgcmVhZG9ubHkgc3VjY2VzczogYm9vbGVhbjtcbiAgcmVhZG9ubHkgZXJyb3I/OiBFcnJvcjtcbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgY29sdW1uIGluIGEgZGF0YWJhc2UgdGFibGUgc2NoZW1hXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29sdW1uU2NoZW1hIHtcbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuICByZWFkb25seSB0eXBlOiBzdHJpbmc7XG4gIHJlYWRvbmx5IG51bGxhYmxlOiBib29sZWFuO1xuICByZWFkb25seSBkZWZhdWx0VmFsdWU/OiB1bmtub3duO1xuICByZWFkb25seSBpc1ByaW1hcnlLZXk6IGJvb2xlYW47XG4gIHJlYWRvbmx5IGlzQXV0b0luY3JlbWVudDogYm9vbGVhbjtcbiAgcmVhZG9ubHkgaXNVbmlxdWU6IGJvb2xlYW47XG4gIHJlYWRvbmx5IGxlbmd0aD86IG51bWJlcjtcbiAgcmVhZG9ubHkgcHJlY2lzaW9uPzogbnVtYmVyO1xuICByZWFkb25seSBzY2FsZT86IG51bWJlcjtcbiAgcmVhZG9ubHkgY29tbWVudD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgZGF0YWJhc2UgdGFibGUgc2NoZW1hXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGFibGVTY2hlbWEge1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGNvbHVtbnM6IENvbHVtblNjaGVtYVtdO1xuICByZWFkb25seSBwcmltYXJ5S2V5Pzogc3RyaW5nW107XG4gIHJlYWRvbmx5IGluZGV4ZXM/OiBJbmRleFNjaGVtYVtdO1xuICByZWFkb25seSBmb3JlaWduS2V5cz86IEZvcmVpZ25LZXlTY2hlbWFbXTtcbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIGFuIGluZGV4IGluIGEgZGF0YWJhc2UgdGFibGVcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbmRleFNjaGVtYSB7XG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcbiAgcmVhZG9ubHkgY29sdW1uczogc3RyaW5nW107XG4gIHJlYWRvbmx5IHVuaXF1ZTogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgZm9yZWlnbiBrZXkgY29uc3RyYWludFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZvcmVpZ25LZXlTY2hlbWEge1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGNvbHVtbnM6IHN0cmluZ1tdO1xuICByZWFkb25seSByZWZlcmVuY2VkVGFibGU6IHN0cmluZztcbiAgcmVhZG9ubHkgcmVmZXJlbmNlZENvbHVtbnM6IHN0cmluZ1tdO1xuICByZWFkb25seSBvbkRlbGV0ZT86ICdDQVNDQURFJyB8ICdTRVQgTlVMTCcgfCAnUkVTVFJJQ1QnIHwgJ05PIEFDVElPTic7XG4gIHJlYWRvbmx5IG9uVXBkYXRlPzogJ0NBU0NBREUnIHwgJ1NFVCBOVUxMJyB8ICdSRVNUUklDVCcgfCAnTk8gQUNUSU9OJztcbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgZGlmZmVyZW5jZSBiZXR3ZWVuIGN1cnJlbnQgYW5kIGRlc2lyZWQgc2NoZW1hXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2NoZW1hRGlmZiB7XG4gIHJlYWRvbmx5IHRhYmxlTmFtZTogc3RyaW5nO1xuICByZWFkb25seSB0eXBlOiAnY3JlYXRlJyB8ICdhbHRlcicgfCAnZHJvcCc7XG4gIHJlYWRvbmx5IGNvbHVtbnNUb0FkZD86IENvbHVtblNjaGVtYVtdO1xuICByZWFkb25seSBjb2x1bW5zVG9BbHRlcj86IHsgZnJvbTogQ29sdW1uU2NoZW1hOyB0bzogQ29sdW1uU2NoZW1hIH1bXTtcbiAgcmVhZG9ubHkgY29sdW1uc1RvRHJvcD86IHN0cmluZ1tdO1xuICByZWFkb25seSBpbmRleGVzVG9BZGQ/OiBJbmRleFNjaGVtYVtdO1xuICByZWFkb25seSBpbmRleGVzVG9Ecm9wPzogc3RyaW5nW107XG4gIHJlYWRvbmx5IGZvcmVpZ25LZXlzVG9BZGQ/OiBGb3JlaWduS2V5U2NoZW1hW107XG4gIHJlYWRvbmx5IGZvcmVpZ25LZXlzVG9Ecm9wPzogc3RyaW5nW107XG59XG5cbi8qKlxuICogSW50ZXJmYWNlIGZvciBnZW5lcmF0aW5nIERETCBzdGF0ZW1lbnRzIGZyb20gZW50aXR5IG1ldGFkYXRhXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2NoZW1hR2VuZXJhdG9yIHtcbiAgLyoqXG4gICAqIEdlbmVyYXRlIENSRUFURSBUQUJMRSBzdGF0ZW1lbnQgZm9yIGFuIGVudGl0eVxuICAgKi9cbiAgZ2VuZXJhdGVDcmVhdGVUYWJsZTxFPihlbnRpdHk6IFR5cGU8RT4sIG9wdGlvbnM/OiB7IGlmTm90RXhpc3RzPzogYm9vbGVhbiB9KTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZSBEUk9QIFRBQkxFIHN0YXRlbWVudCBmb3IgYW4gZW50aXR5XG4gICAqL1xuICBnZW5lcmF0ZURyb3BUYWJsZTxFPihlbnRpdHk6IFR5cGU8RT4pOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlIEFMVEVSIFRBQkxFIHN0YXRlbWVudHMgYmFzZWQgb24gc2NoZW1hIGRpZmZcbiAgICovXG4gIGdlbmVyYXRlQWx0ZXJUYWJsZShkaWZmOiBTY2hlbWFEaWZmKTogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlIHJvbGxiYWNrIChkb3duKSBzdGF0ZW1lbnRzIGZvciBBTFRFUiBUQUJMRSBiYXNlZCBvbiBzY2hlbWEgZGlmZlxuICAgKi9cbiAgZ2VuZXJhdGVBbHRlclRhYmxlRG93bihkaWZmOiBTY2hlbWFEaWZmKTogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlIENSRUFURSBJTkRFWCBzdGF0ZW1lbnRcbiAgICovXG4gIGdlbmVyYXRlQ3JlYXRlSW5kZXgodGFibGVOYW1lOiBzdHJpbmcsIGluZGV4OiBJbmRleFNjaGVtYSk6IHN0cmluZztcblxuICAvKipcbiAgICogR2VuZXJhdGUgRFJPUCBJTkRFWCBzdGF0ZW1lbnRcbiAgICovXG4gIGdlbmVyYXRlRHJvcEluZGV4KHRhYmxlTmFtZTogc3RyaW5nLCBpbmRleE5hbWU6IHN0cmluZyk6IHN0cmluZztcblxuICAvKipcbiAgICogR2V0IHRoZSBTUUwgdHlwZSBmb3IgYSBmaWVsZCBiYXNlZCBvbiBpdHMgb3B0aW9uc1xuICAgKi9cbiAgZ2V0U3FsVHlwZShmaWVsZE9wdGlvbnM6IEZpZWxkT3B0aW9ucywgZmllbGRUeXBlPzogdW5rbm93bik6IHN0cmluZztcblxuICAvKipcbiAgICogQ29tcGFyZSB0d28gc2NoZW1hcyBhbmQgcmV0dXJuIHRoZSBkaWZmZXJlbmNlc1xuICAgKi9cbiAgZGlmZlNjaGVtYTxFPihlbnRpdHk6IFR5cGU8RT4sIGN1cnJlbnRTY2hlbWE6IFRhYmxlU2NoZW1hIHwgdW5kZWZpbmVkKTogU2NoZW1hRGlmZiB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogUmVzb2x2ZSB0YWJsZSBuYW1lIHVzaW5nIGVudGl0eSBhbmQgbmFtaW5nIHN0cmF0ZWd5XG4gICAqL1xuICByZXNvbHZlVGFibGVOYW1lPEU+KGVudGl0eTogVHlwZTxFPiwgbWV0YTogRW50aXR5TWV0YTxFPik6IHN0cmluZztcblxuICAvKipcbiAgICogUmVzb2x2ZSBjb2x1bW4gbmFtZSB1c2luZyBmaWVsZCBvcHRpb25zIGFuZCBuYW1pbmcgc3RyYXRlZ3lcbiAgICovXG4gIHJlc29sdmVDb2x1bW5OYW1lKGtleTogc3RyaW5nLCBmaWVsZDogRmllbGRPcHRpb25zKTogc3RyaW5nO1xufVxuXG4vKipcbiAqIEludGVyZmFjZSBmb3IgaW50cm9zcGVjdGluZyB0aGUgY3VycmVudCBkYXRhYmFzZSBzY2hlbWFcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTY2hlbWFJbnRyb3NwZWN0b3Ige1xuICAvKipcbiAgICogR2V0IHRoZSBzY2hlbWEgb2YgYSBzcGVjaWZpYyB0YWJsZVxuICAgKi9cbiAgZ2V0VGFibGVTY2hlbWEodGFibGVOYW1lOiBzdHJpbmcpOiBQcm9taXNlPFRhYmxlU2NoZW1hIHwgdW5kZWZpbmVkPjtcblxuICAvKipcbiAgICogR2V0IGFsbCB0YWJsZSBuYW1lcyBpbiB0aGUgZGF0YWJhc2VcbiAgICovXG4gIGdldFRhYmxlTmFtZXMoKTogUHJvbWlzZTxzdHJpbmdbXT47XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIGEgdGFibGUgZXhpc3RzXG4gICAqL1xuICB0YWJsZUV4aXN0cyh0YWJsZU5hbWU6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj47XG59XG4iXX0=
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Defines the naming strategy for database tables and columns.
3
+ */
4
+ export interface NamingStrategy {
5
+ /**
6
+ * Translates entity name to table name.
7
+ */
8
+ tableName(entityName: string): string;
9
+ /**
10
+ * Translates property name to column name.
11
+ */
12
+ columnName(propertyName: string): string;
13
+ /**
14
+ * Translates entity names to join table name (many-to-many).
15
+ */
16
+ joinTableName(sourceEntityName: string, targetEntityName: string, propertyName?: string): string;
17
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmFtaW5nU3RyYXRlZ3kuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHlwZS9uYW1pbmdTdHJhdGVneS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBEZWZpbmVzIHRoZSBuYW1pbmcgc3RyYXRlZ3kgZm9yIGRhdGFiYXNlIHRhYmxlcyBhbmQgY29sdW1ucy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBOYW1pbmdTdHJhdGVneSB7XG4gIC8qKlxuICAgKiBUcmFuc2xhdGVzIGVudGl0eSBuYW1lIHRvIHRhYmxlIG5hbWUuXG4gICAqL1xuICB0YWJsZU5hbWUoZW50aXR5TmFtZTogc3RyaW5nKTogc3RyaW5nO1xuICAvKipcbiAgICogVHJhbnNsYXRlcyBwcm9wZXJ0eSBuYW1lIHRvIGNvbHVtbiBuYW1lLlxuICAgKi9cbiAgY29sdW1uTmFtZShwcm9wZXJ0eU5hbWU6IHN0cmluZyk6IHN0cmluZztcbiAgLyoqXG4gICAqIFRyYW5zbGF0ZXMgZW50aXR5IG5hbWVzIHRvIGpvaW4gdGFibGUgbmFtZSAobWFueS10by1tYW55KS5cbiAgICovXG4gIGpvaW5UYWJsZU5hbWUoc291cmNlRW50aXR5TmFtZTogc3RyaW5nLCB0YXJnZXRFbnRpdHlOYW1lOiBzdHJpbmcsIHByb3BlcnR5TmFtZT86IHN0cmluZyk6IHN0cmluZztcbn1cbiJdfQ==
@@ -0,0 +1,96 @@
1
+ import type { Db } from 'mongodb';
2
+ import type { IdValue } from './entity.js';
3
+ import type { NamingStrategy } from './namingStrategy.js';
4
+ import type { Query, QueryConflictPaths, QueryOne, QueryOptions, QuerySearch, QueryUpdateResult, SqlQueryDialect } from './query.js';
5
+ import type { Repository } from './repository.js';
6
+ import type { UniversalQuerier } from './universalQuerier.js';
7
+ import type { Type } from './utility.js';
8
+ /**
9
+ * Isolation levels for transactions.
10
+ */
11
+ export type IsolationLevel = 'read uncommitted' | 'read committed' | 'repeteable read' | 'serializable';
12
+ /**
13
+ * Supported SQL dialect identifiers.
14
+ */
15
+ export type SqlDialect = 'postgres' | 'mysql' | 'mariadb' | 'sqlite';
16
+ export type Dialect = SqlDialect | 'mongodb';
17
+ export interface Querier extends UniversalQuerier {
18
+ findOneById<E>(entity: Type<E>, id: IdValue<E>, q?: QueryOne<E>): Promise<E>;
19
+ findOne<E>(entity: Type<E>, q: QueryOne<E>): Promise<E>;
20
+ findMany<E>(entity: Type<E>, q: Query<E>): Promise<E[]>;
21
+ findManyAndCount<E>(entity: Type<E>, q: Query<E>): Promise<[E[], number]>;
22
+ count<E>(entity: Type<E>, q: QuerySearch<E>): Promise<number>;
23
+ insertOne<E>(entity: Type<E>, payload: E): Promise<IdValue<E>>;
24
+ insertMany<E>(entity: Type<E>, payload: E[]): Promise<IdValue<E>[]>;
25
+ updateOneById<E>(entity: Type<E>, id: IdValue<E>, payload: E): Promise<number>;
26
+ updateMany<E>(entity: Type<E>, q: QuerySearch<E>, payload: E): Promise<number>;
27
+ upsertOne<E>(entity: Type<E>, conflictPaths: QueryConflictPaths<E>, payload: E): Promise<QueryUpdateResult>;
28
+ saveOne<E>(entity: Type<E>, payload: E): Promise<IdValue<E>>;
29
+ saveMany<E>(entity: Type<E>, payload: E[]): Promise<IdValue<E>[]>;
30
+ deleteOneById<E>(entity: Type<E>, id: IdValue<E>, opts?: QueryOptions): Promise<number>;
31
+ deleteMany<E>(entity: Type<E>, q: QuerySearch<E>, opts?: QueryOptions): Promise<number>;
32
+ getRepository<E>(entity: Type<E>): Repository<E>;
33
+ /**
34
+ * whether this querier is in a transaction or not.
35
+ */
36
+ readonly hasOpenTransaction: boolean;
37
+ /**
38
+ * run the given callback inside a transaction in this querier.
39
+ */
40
+ transaction<T>(callback: () => Promise<T>): Promise<T>;
41
+ /**
42
+ * starts a new transaction in this querier.
43
+ */
44
+ beginTransaction(): Promise<void>;
45
+ /**
46
+ * commits the currently active transaction in this querier.
47
+ */
48
+ commitTransaction(): Promise<void>;
49
+ /**
50
+ * aborts the currently active transaction in this querier.
51
+ */
52
+ rollbackTransaction(): Promise<void>;
53
+ /**
54
+ * release the querier to the pool.
55
+ */
56
+ release(): Promise<void>;
57
+ }
58
+ /**
59
+ * Extended querier interface for raw SQL execution.
60
+ * Implemented by AbstractSqlQuerier and all SQL-based queriers.
61
+ */
62
+ export interface SqlQuerier extends Querier {
63
+ /**
64
+ * The SQL dialect (provides escapeIdChar and other dialect-specific info)
65
+ */
66
+ readonly dialect: SqlQueryDialect;
67
+ /**
68
+ * Execute a raw SQL query and return results
69
+ */
70
+ all<T>(query: string, values?: unknown[]): Promise<T[]>;
71
+ /**
72
+ * Execute a raw SQL command (INSERT, UPDATE, DELETE, DDL)
73
+ */
74
+ run(query: string, values?: unknown[]): Promise<QueryUpdateResult>;
75
+ }
76
+ /**
77
+ * Type guard to check if a querier supports raw SQL execution
78
+ */
79
+ export declare function isSqlQuerier(querier: Querier): querier is SqlQuerier;
80
+ /**
81
+ * Extended querier interface for MongoDB execution.
82
+ */
83
+ export interface MongoQuerier extends Querier {
84
+ /**
85
+ * The MongoDB database instance.
86
+ */
87
+ readonly db: Db;
88
+ }
89
+ /**
90
+ * logger function to debug queries.
91
+ */
92
+ export type Logger = (message: unknown, ...args: unknown[]) => unknown;
93
+ export type ExtraOptions = {
94
+ readonly logger?: Logger;
95
+ readonly namingStrategy?: NamingStrategy;
96
+ };
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Type guard to check if a querier supports raw SQL execution
3
+ */
4
+ export function isSqlQuerier(querier) {
5
+ const q = querier;
6
+ return (typeof q.all === 'function' &&
7
+ typeof q.run === 'function' &&
8
+ q.dialect !== undefined &&
9
+ typeof q.dialect.escapeIdChar === 'string');
10
+ }
11
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcmllci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90eXBlL3F1ZXJpZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBK0dBOztHQUVHO0FBQ0gsTUFBTSxVQUFVLFlBQVksQ0FBQyxPQUFnQjtJQUMzQyxNQUFNLENBQUMsR0FBRyxPQUFxQixDQUFDO0lBQ2hDLE9BQU8sQ0FDTCxPQUFPLENBQUMsQ0FBQyxHQUFHLEtBQUssVUFBVTtRQUMzQixPQUFPLENBQUMsQ0FBQyxHQUFHLEtBQUssVUFBVTtRQUMzQixDQUFDLENBQUMsT0FBTyxLQUFLLFNBQVM7UUFDdkIsT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFDLFlBQVksS0FBSyxRQUFRLENBQzNDLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBEYiB9IGZyb20gJ21vbmdvZGInO1xuaW1wb3J0IHR5cGUgeyBJZFZhbHVlIH0gZnJvbSAnLi9lbnRpdHkuanMnO1xuaW1wb3J0IHR5cGUgeyBOYW1pbmdTdHJhdGVneSB9IGZyb20gJy4vbmFtaW5nU3RyYXRlZ3kuanMnO1xuaW1wb3J0IHR5cGUge1xuICBRdWVyeSxcbiAgUXVlcnlDb25mbGljdFBhdGhzLFxuICBRdWVyeU9uZSxcbiAgUXVlcnlPcHRpb25zLFxuICBRdWVyeVNlYXJjaCxcbiAgUXVlcnlVcGRhdGVSZXN1bHQsXG4gIFNxbFF1ZXJ5RGlhbGVjdCxcbn0gZnJvbSAnLi9xdWVyeS5qcyc7XG5pbXBvcnQgdHlwZSB7IFJlcG9zaXRvcnkgfSBmcm9tICcuL3JlcG9zaXRvcnkuanMnO1xuaW1wb3J0IHR5cGUgeyBVbml2ZXJzYWxRdWVyaWVyIH0gZnJvbSAnLi91bml2ZXJzYWxRdWVyaWVyLmpzJztcbmltcG9ydCB0eXBlIHsgVHlwZSB9IGZyb20gJy4vdXRpbGl0eS5qcyc7XG5cbi8qKlxuICogSXNvbGF0aW9uIGxldmVscyBmb3IgdHJhbnNhY3Rpb25zLlxuICovXG5leHBvcnQgdHlwZSBJc29sYXRpb25MZXZlbCA9ICdyZWFkIHVuY29tbWl0dGVkJyB8ICdyZWFkIGNvbW1pdHRlZCcgfCAncmVwZXRlYWJsZSByZWFkJyB8ICdzZXJpYWxpemFibGUnO1xuXG4vKipcbiAqIFN1cHBvcnRlZCBTUUwgZGlhbGVjdCBpZGVudGlmaWVycy5cbiAqL1xuZXhwb3J0IHR5cGUgU3FsRGlhbGVjdCA9ICdwb3N0Z3JlcycgfCAnbXlzcWwnIHwgJ21hcmlhZGInIHwgJ3NxbGl0ZSc7XG5cbmV4cG9ydCB0eXBlIERpYWxlY3QgPSBTcWxEaWFsZWN0IHwgJ21vbmdvZGInO1xuXG5leHBvcnQgaW50ZXJmYWNlIFF1ZXJpZXIgZXh0ZW5kcyBVbml2ZXJzYWxRdWVyaWVyIHtcbiAgZmluZE9uZUJ5SWQ8RT4oZW50aXR5OiBUeXBlPEU+LCBpZDogSWRWYWx1ZTxFPiwgcT86IFF1ZXJ5T25lPEU+KTogUHJvbWlzZTxFPjtcblxuICBmaW5kT25lPEU+KGVudGl0eTogVHlwZTxFPiwgcTogUXVlcnlPbmU8RT4pOiBQcm9taXNlPEU+O1xuXG4gIGZpbmRNYW55PEU+KGVudGl0eTogVHlwZTxFPiwgcTogUXVlcnk8RT4pOiBQcm9taXNlPEVbXT47XG5cbiAgZmluZE1hbnlBbmRDb3VudDxFPihlbnRpdHk6IFR5cGU8RT4sIHE6IFF1ZXJ5PEU+KTogUHJvbWlzZTxbRVtdLCBudW1iZXJdPjtcblxuICBjb3VudDxFPihlbnRpdHk6IFR5cGU8RT4sIHE6IFF1ZXJ5U2VhcmNoPEU+KTogUHJvbWlzZTxudW1iZXI+O1xuXG4gIGluc2VydE9uZTxFPihlbnRpdHk6IFR5cGU8RT4sIHBheWxvYWQ6IEUpOiBQcm9taXNlPElkVmFsdWU8RT4+O1xuXG4gIGluc2VydE1hbnk8RT4oZW50aXR5OiBUeXBlPEU+LCBwYXlsb2FkOiBFW10pOiBQcm9taXNlPElkVmFsdWU8RT5bXT47XG5cbiAgdXBkYXRlT25lQnlJZDxFPihlbnRpdHk6IFR5cGU8RT4sIGlkOiBJZFZhbHVlPEU+LCBwYXlsb2FkOiBFKTogUHJvbWlzZTxudW1iZXI+O1xuXG4gIHVwZGF0ZU1hbnk8RT4oZW50aXR5OiBUeXBlPEU+LCBxOiBRdWVyeVNlYXJjaDxFPiwgcGF5bG9hZDogRSk6IFByb21pc2U8bnVtYmVyPjtcblxuICB1cHNlcnRPbmU8RT4oZW50aXR5OiBUeXBlPEU+LCBjb25mbGljdFBhdGhzOiBRdWVyeUNvbmZsaWN0UGF0aHM8RT4sIHBheWxvYWQ6IEUpOiBQcm9taXNlPFF1ZXJ5VXBkYXRlUmVzdWx0PjtcblxuICBzYXZlT25lPEU+KGVudGl0eTogVHlwZTxFPiwgcGF5bG9hZDogRSk6IFByb21pc2U8SWRWYWx1ZTxFPj47XG5cbiAgc2F2ZU1hbnk8RT4oZW50aXR5OiBUeXBlPEU+LCBwYXlsb2FkOiBFW10pOiBQcm9taXNlPElkVmFsdWU8RT5bXT47XG5cbiAgZGVsZXRlT25lQnlJZDxFPihlbnRpdHk6IFR5cGU8RT4sIGlkOiBJZFZhbHVlPEU+LCBvcHRzPzogUXVlcnlPcHRpb25zKTogUHJvbWlzZTxudW1iZXI+O1xuXG4gIGRlbGV0ZU1hbnk8RT4oZW50aXR5OiBUeXBlPEU+LCBxOiBRdWVyeVNlYXJjaDxFPiwgb3B0cz86IFF1ZXJ5T3B0aW9ucyk6IFByb21pc2U8bnVtYmVyPjtcblxuICBnZXRSZXBvc2l0b3J5PEU+KGVudGl0eTogVHlwZTxFPik6IFJlcG9zaXRvcnk8RT47XG5cbiAgLyoqXG4gICAqIHdoZXRoZXIgdGhpcyBxdWVyaWVyIGlzIGluIGEgdHJhbnNhY3Rpb24gb3Igbm90LlxuICAgKi9cbiAgcmVhZG9ubHkgaGFzT3BlblRyYW5zYWN0aW9uOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBydW4gdGhlIGdpdmVuIGNhbGxiYWNrIGluc2lkZSBhIHRyYW5zYWN0aW9uIGluIHRoaXMgcXVlcmllci5cbiAgICovXG4gIHRyYW5zYWN0aW9uPFQ+KGNhbGxiYWNrOiAoKSA9PiBQcm9taXNlPFQ+KTogUHJvbWlzZTxUPjtcblxuICAvKipcbiAgICogc3RhcnRzIGEgbmV3IHRyYW5zYWN0aW9uIGluIHRoaXMgcXVlcmllci5cbiAgICovXG4gIGJlZ2luVHJhbnNhY3Rpb24oKTogUHJvbWlzZTx2b2lkPjtcblxuICAvKipcbiAgICogY29tbWl0cyB0aGUgY3VycmVudGx5IGFjdGl2ZSB0cmFuc2FjdGlvbiBpbiB0aGlzIHF1ZXJpZXIuXG4gICAqL1xuICBjb21taXRUcmFuc2FjdGlvbigpOiBQcm9taXNlPHZvaWQ+O1xuXG4gIC8qKlxuICAgKiBhYm9ydHMgdGhlIGN1cnJlbnRseSBhY3RpdmUgdHJhbnNhY3Rpb24gaW4gdGhpcyBxdWVyaWVyLlxuICAgKi9cbiAgcm9sbGJhY2tUcmFuc2FjdGlvbigpOiBQcm9taXNlPHZvaWQ+O1xuXG4gIC8qKlxuICAgKiByZWxlYXNlIHRoZSBxdWVyaWVyIHRvIHRoZSBwb29sLlxuICAgKi9cbiAgcmVsZWFzZSgpOiBQcm9taXNlPHZvaWQ+O1xufVxuXG4vKipcbiAqIEV4dGVuZGVkIHF1ZXJpZXIgaW50ZXJmYWNlIGZvciByYXcgU1FMIGV4ZWN1dGlvbi5cbiAqIEltcGxlbWVudGVkIGJ5IEFic3RyYWN0U3FsUXVlcmllciBhbmQgYWxsIFNRTC1iYXNlZCBxdWVyaWVycy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTcWxRdWVyaWVyIGV4dGVuZHMgUXVlcmllciB7XG4gIC8qKlxuICAgKiBUaGUgU1FMIGRpYWxlY3QgKHByb3ZpZGVzIGVzY2FwZUlkQ2hhciBhbmQgb3RoZXIgZGlhbGVjdC1zcGVjaWZpYyBpbmZvKVxuICAgKi9cbiAgcmVhZG9ubHkgZGlhbGVjdDogU3FsUXVlcnlEaWFsZWN0O1xuXG4gIC8qKlxuICAgKiBFeGVjdXRlIGEgcmF3IFNRTCBxdWVyeSBhbmQgcmV0dXJuIHJlc3VsdHNcbiAgICovXG4gIGFsbDxUPihxdWVyeTogc3RyaW5nLCB2YWx1ZXM/OiB1bmtub3duW10pOiBQcm9taXNlPFRbXT47XG5cbiAgLyoqXG4gICAqIEV4ZWN1dGUgYSByYXcgU1FMIGNvbW1hbmQgKElOU0VSVCwgVVBEQVRFLCBERUxFVEUsIERETClcbiAgICovXG4gIHJ1bihxdWVyeTogc3RyaW5nLCB2YWx1ZXM/OiB1bmtub3duW10pOiBQcm9taXNlPFF1ZXJ5VXBkYXRlUmVzdWx0Pjtcbn1cblxuLyoqXG4gKiBUeXBlIGd1YXJkIHRvIGNoZWNrIGlmIGEgcXVlcmllciBzdXBwb3J0cyByYXcgU1FMIGV4ZWN1dGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNTcWxRdWVyaWVyKHF1ZXJpZXI6IFF1ZXJpZXIpOiBxdWVyaWVyIGlzIFNxbFF1ZXJpZXIge1xuICBjb25zdCBxID0gcXVlcmllciBhcyBTcWxRdWVyaWVyO1xuICByZXR1cm4gKFxuICAgIHR5cGVvZiBxLmFsbCA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgIHR5cGVvZiBxLnJ1biA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgIHEuZGlhbGVjdCAhPT0gdW5kZWZpbmVkICYmXG4gICAgdHlwZW9mIHEuZGlhbGVjdC5lc2NhcGVJZENoYXIgPT09ICdzdHJpbmcnXG4gICk7XG59XG5cbi8qKlxuICogRXh0ZW5kZWQgcXVlcmllciBpbnRlcmZhY2UgZm9yIE1vbmdvREIgZXhlY3V0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1vbmdvUXVlcmllciBleHRlbmRzIFF1ZXJpZXIge1xuICAvKipcbiAgICogVGhlIE1vbmdvREIgZGF0YWJhc2UgaW5zdGFuY2UuXG4gICAqL1xuICByZWFkb25seSBkYjogRGI7XG59XG5cbi8qKlxuICogbG9nZ2VyIGZ1bmN0aW9uIHRvIGRlYnVnIHF1ZXJpZXMuXG4gKi9cbmV4cG9ydCB0eXBlIExvZ2dlciA9IChtZXNzYWdlOiB1bmtub3duLCAuLi5hcmdzOiB1bmtub3duW10pID0+IHVua25vd247XG5cbmV4cG9ydCB0eXBlIEV4dHJhT3B0aW9ucyA9IHtcbiAgcmVhZG9ubHkgbG9nZ2VyPzogTG9nZ2VyO1xuICByZWFkb25seSBuYW1pbmdTdHJhdGVneT86IE5hbWluZ1N0cmF0ZWd5O1xufTtcbiJdfQ==
@@ -1,12 +1,16 @@
1
- import { Querier, QuerierLogger } from './querier';
1
+ import type { Dialect, ExtraOptions, Querier } from './querier.js';
2
2
  /**
3
3
  * querier pool.
4
4
  */
5
5
  export type QuerierPool<Q extends Querier = Querier> = {
6
6
  /**
7
- * logger function to print debug messages.
7
+ * the database dialect.
8
8
  */
9
- logger?: QuerierLogger;
9
+ readonly dialect: Dialect;
10
+ /**
11
+ * extra options
12
+ */
13
+ readonly extra?: ExtraOptions;
10
14
  /**
11
15
  * get a querier from the pool.
12
16
  */