@uql/core 1.0.12 → 3.0.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 (466) hide show
  1. package/CHANGELOG.md +243 -0
  2. package/LICENSE.md +2 -2
  3. package/dist/CHANGELOG.md +186 -0
  4. package/dist/README.md +413 -0
  5. package/dist/browser/http/bus.d.ts +3 -0
  6. package/dist/browser/http/bus.js +14 -0
  7. package/dist/browser/http/http.d.ts +6 -0
  8. package/dist/browser/http/http.js +45 -0
  9. package/dist/browser/http/index.d.ts +2 -0
  10. package/dist/browser/http/index.js +3 -0
  11. package/dist/browser/index.d.ts +4 -0
  12. package/dist/browser/index.js +5 -0
  13. package/dist/browser/options.d.ts +4 -0
  14. package/dist/browser/options.js +14 -0
  15. package/dist/browser/querier/genericClientRepository.d.ts +17 -0
  16. package/dist/browser/querier/genericClientRepository.js +39 -0
  17. package/dist/browser/querier/httpQuerier.d.ts +20 -0
  18. package/dist/browser/querier/httpQuerier.js +71 -0
  19. package/dist/browser/querier/index.d.ts +3 -0
  20. package/dist/browser/querier/index.js +4 -0
  21. package/dist/browser/querier/querier.util.d.ts +2 -0
  22. package/dist/browser/querier/querier.util.js +17 -0
  23. package/dist/browser/type/clientQuerier.d.ts +16 -0
  24. package/dist/browser/type/clientQuerier.js +2 -0
  25. package/dist/browser/type/clientQuerierPool.d.ts +4 -0
  26. package/dist/browser/type/clientQuerierPool.js +2 -0
  27. package/dist/browser/type/clientRepository.d.ts +13 -0
  28. package/dist/browser/type/clientRepository.js +2 -0
  29. package/dist/browser/type/index.d.ts +4 -0
  30. package/dist/browser/type/index.js +5 -0
  31. package/dist/browser/type/request.d.ts +28 -0
  32. package/dist/browser/type/request.js +2 -0
  33. package/dist/browser/uql-browser.min.js +2150 -0
  34. package/dist/browser/uql-browser.min.js.map +1 -0
  35. package/dist/dialect/abstractDialect.d.ts +16 -0
  36. package/dist/dialect/abstractDialect.js +28 -0
  37. package/dist/dialect/abstractSqlDialect.d.ts +47 -0
  38. package/dist/dialect/abstractSqlDialect.js +650 -0
  39. package/dist/dialect/index.d.ts +3 -0
  40. package/dist/dialect/index.js +4 -0
  41. package/dist/dialect/queryContext.d.ts +48 -0
  42. package/dist/dialect/queryContext.js +65 -0
  43. package/{entity → dist/entity}/decorator/definition.d.ts +3 -3
  44. package/dist/entity/decorator/definition.js +214 -0
  45. package/{entity → dist/entity}/decorator/entity.d.ts +1 -1
  46. package/dist/entity/decorator/entity.js +7 -0
  47. package/{entity → dist/entity}/decorator/field.d.ts +1 -1
  48. package/dist/entity/decorator/field.js +8 -0
  49. package/{entity → dist/entity}/decorator/id.d.ts +1 -1
  50. package/dist/entity/decorator/id.js +8 -0
  51. package/dist/entity/decorator/index.d.ts +5 -0
  52. package/dist/entity/decorator/index.js +6 -0
  53. package/{entity → dist/entity}/decorator/relation.d.ts +1 -1
  54. package/dist/entity/decorator/relation.js +20 -0
  55. package/dist/entity/index.d.ts +1 -0
  56. package/dist/entity/index.js +2 -0
  57. package/dist/express/index.d.ts +2 -0
  58. package/dist/express/index.js +3 -0
  59. package/dist/express/querierMiddleware.d.ts +26 -0
  60. package/dist/express/querierMiddleware.js +190 -0
  61. package/dist/express/query.util.d.ts +2 -0
  62. package/dist/express/query.util.js +19 -0
  63. package/dist/index.d.ts +9 -0
  64. package/dist/index.js +10 -0
  65. package/dist/maria/index.d.ts +3 -0
  66. package/dist/maria/index.js +4 -0
  67. package/dist/maria/mariaDialect.d.ts +8 -0
  68. package/dist/maria/mariaDialect.js +38 -0
  69. package/dist/maria/mariaQuerierPool.test.d.ts +5 -0
  70. package/dist/maria/mariaQuerierPool.test.js +19 -0
  71. package/dist/maria/mariadbQuerier.d.ts +17 -0
  72. package/dist/maria/mariadbQuerier.js +39 -0
  73. package/dist/maria/mariadbQuerier.test.d.ts +4 -0
  74. package/dist/maria/mariadbQuerier.test.js +19 -0
  75. package/dist/maria/mariadbQuerierPool.d.ts +10 -0
  76. package/dist/maria/mariadbQuerierPool.js +17 -0
  77. package/dist/migrate/cli.d.ts +2 -0
  78. package/dist/migrate/cli.js +254 -0
  79. package/dist/migrate/generator/index.d.ts +4 -0
  80. package/dist/migrate/generator/index.js +5 -0
  81. package/dist/migrate/generator/mongoSchemaGenerator.d.ts +12 -0
  82. package/dist/migrate/generator/mongoSchemaGenerator.js +100 -0
  83. package/dist/migrate/generator/mysqlSchemaGenerator.d.ts +14 -0
  84. package/dist/migrate/generator/mysqlSchemaGenerator.js +81 -0
  85. package/dist/migrate/generator/postgresSchemaGenerator.d.ts +18 -0
  86. package/dist/migrate/generator/postgresSchemaGenerator.js +111 -0
  87. package/dist/migrate/generator/sqliteSchemaGenerator.d.ts +14 -0
  88. package/dist/migrate/generator/sqliteSchemaGenerator.js +68 -0
  89. package/dist/migrate/index.d.ts +12 -0
  90. package/dist/migrate/index.js +17 -0
  91. package/dist/migrate/introspection/index.d.ts +4 -0
  92. package/dist/migrate/introspection/index.js +5 -0
  93. package/dist/migrate/introspection/mongoIntrospector.d.ts +8 -0
  94. package/dist/migrate/introspection/mongoIntrospector.js +46 -0
  95. package/dist/migrate/introspection/mysqlIntrospector.d.ts +25 -0
  96. package/dist/migrate/introspection/mysqlIntrospector.js +220 -0
  97. package/dist/migrate/introspection/postgresIntrospector.d.ts +21 -0
  98. package/dist/migrate/introspection/postgresIntrospector.js +269 -0
  99. package/dist/migrate/introspection/sqliteIntrospector.d.ts +23 -0
  100. package/dist/migrate/introspection/sqliteIntrospector.js +212 -0
  101. package/dist/migrate/migrator-mongo.test.d.ts +1 -0
  102. package/dist/migrate/migrator-mongo.test.js +54 -0
  103. package/dist/migrate/migrator.d.ts +133 -0
  104. package/dist/migrate/migrator.js +600 -0
  105. package/dist/migrate/migrator.test.d.ts +1 -0
  106. package/dist/migrate/migrator.test.js +106 -0
  107. package/dist/migrate/schemaGenerator.d.ts +78 -0
  108. package/dist/migrate/schemaGenerator.js +363 -0
  109. package/dist/migrate/storage/databaseStorage.d.ts +24 -0
  110. package/dist/migrate/storage/databaseStorage.js +77 -0
  111. package/dist/migrate/storage/index.d.ts +2 -0
  112. package/dist/migrate/storage/index.js +3 -0
  113. package/dist/migrate/storage/jsonStorage.d.ts +15 -0
  114. package/dist/migrate/storage/jsonStorage.js +51 -0
  115. package/dist/migrate/type.d.ts +1 -0
  116. package/dist/migrate/type.js +2 -0
  117. package/dist/mongo/index.d.ts +3 -0
  118. package/dist/mongo/index.js +4 -0
  119. package/dist/mongo/mongoDialect.d.ts +34 -0
  120. package/dist/mongo/mongoDialect.js +163 -0
  121. package/dist/mongo/mongodbQuerier.d.ts +28 -0
  122. package/dist/mongo/mongodbQuerier.js +204 -0
  123. package/dist/mongo/mongodbQuerier.test.d.ts +1 -0
  124. package/dist/mongo/mongodbQuerier.test.js +36 -0
  125. package/dist/mongo/mongodbQuerierPool.d.ts +10 -0
  126. package/dist/mongo/mongodbQuerierPool.js +20 -0
  127. package/dist/mongo/mongodbQuerierPool.test.d.ts +1 -0
  128. package/dist/mongo/mongodbQuerierPool.test.js +21 -0
  129. package/dist/mysql/index.d.ts +3 -0
  130. package/dist/mysql/index.js +4 -0
  131. package/dist/mysql/mysql2Querier.d.ts +17 -0
  132. package/dist/mysql/mysql2Querier.js +43 -0
  133. package/dist/mysql/mysql2Querier.test.d.ts +4 -0
  134. package/dist/mysql/mysql2Querier.test.js +16 -0
  135. package/dist/mysql/mysql2QuerierPool.d.ts +10 -0
  136. package/dist/mysql/mysql2QuerierPool.js +17 -0
  137. package/dist/mysql/mysql2QuerierPool.test.d.ts +5 -0
  138. package/dist/mysql/mysql2QuerierPool.test.js +16 -0
  139. package/dist/mysql/mysqlDialect.d.ts +5 -0
  140. package/dist/mysql/mysqlDialect.js +15 -0
  141. package/dist/namingStrategy/defaultNamingStrategy.d.ts +9 -0
  142. package/dist/namingStrategy/defaultNamingStrategy.js +15 -0
  143. package/dist/namingStrategy/index.d.ts +2 -0
  144. package/dist/namingStrategy/index.js +3 -0
  145. package/dist/namingStrategy/snakeCaseNamingStrategy.d.ts +8 -0
  146. package/dist/namingStrategy/snakeCaseNamingStrategy.js +14 -0
  147. package/{options.d.ts → dist/options.d.ts} +1 -1
  148. package/dist/options.js +14 -0
  149. package/dist/package.json +131 -0
  150. package/dist/postgres/index.d.ts +3 -0
  151. package/dist/postgres/index.js +4 -0
  152. package/dist/postgres/pgQuerier.d.ts +17 -0
  153. package/dist/postgres/pgQuerier.js +39 -0
  154. package/dist/postgres/pgQuerier.test.d.ts +4 -0
  155. package/dist/postgres/pgQuerier.test.js +20 -0
  156. package/dist/postgres/pgQuerierPool.d.ts +10 -0
  157. package/dist/postgres/pgQuerierPool.js +17 -0
  158. package/dist/postgres/pgQuerierPool.test.d.ts +5 -0
  159. package/dist/postgres/pgQuerierPool.test.js +23 -0
  160. package/dist/postgres/postgresDialect.d.ts +13 -0
  161. package/dist/postgres/postgresDialect.js +110 -0
  162. package/dist/querier/abstractQuerier-test.d.ts +45 -0
  163. package/dist/querier/abstractQuerier-test.js +461 -0
  164. package/dist/querier/abstractQuerier.d.ts +50 -0
  165. package/dist/querier/abstractQuerier.js +278 -0
  166. package/dist/querier/abstractQuerierPool-test.d.ts +9 -0
  167. package/dist/querier/abstractQuerierPool-test.js +18 -0
  168. package/dist/querier/abstractQuerierPool.d.ts +14 -0
  169. package/dist/querier/abstractQuerierPool.js +9 -0
  170. package/dist/querier/abstractSqlQuerier-test.d.ts +9 -0
  171. package/dist/querier/abstractSqlQuerier-test.js +16 -0
  172. package/dist/querier/abstractSqlQuerier.d.ts +28 -0
  173. package/dist/querier/abstractSqlQuerier.js +133 -0
  174. package/dist/querier/decorator/index.d.ts +3 -0
  175. package/dist/querier/decorator/index.js +4 -0
  176. package/dist/querier/decorator/injectQuerier.d.ts +3 -0
  177. package/dist/querier/decorator/injectQuerier.js +33 -0
  178. package/dist/querier/decorator/serialized.d.ts +6 -0
  179. package/dist/querier/decorator/serialized.js +14 -0
  180. package/{querier → dist/querier}/decorator/transactional.d.ts +1 -1
  181. package/dist/querier/decorator/transactional.js +48 -0
  182. package/dist/querier/index.d.ts +4 -0
  183. package/dist/querier/index.js +5 -0
  184. package/dist/repository/genericRepository.d.ts +20 -0
  185. package/dist/repository/genericRepository.js +51 -0
  186. package/dist/repository/index.d.ts +1 -0
  187. package/dist/repository/index.js +2 -0
  188. package/dist/sqlite/index.d.ts +3 -0
  189. package/dist/sqlite/index.js +4 -0
  190. package/dist/sqlite/sqliteDialect.d.ts +10 -0
  191. package/dist/sqlite/sqliteDialect.js +48 -0
  192. package/dist/sqlite/sqliteQuerier.d.ts +15 -0
  193. package/dist/sqlite/sqliteQuerier.js +33 -0
  194. package/dist/sqlite/sqliteQuerier.test.d.ts +5 -0
  195. package/dist/sqlite/sqliteQuerier.test.js +19 -0
  196. package/dist/sqlite/sqliteQuerierPool.d.ts +14 -0
  197. package/dist/sqlite/sqliteQuerierPool.js +34 -0
  198. package/dist/sqlite/sqliteQuerierPool.test.d.ts +5 -0
  199. package/dist/sqlite/sqliteQuerierPool.test.js +10 -0
  200. package/dist/test/entityMock.d.ts +164 -0
  201. package/dist/test/entityMock.js +554 -0
  202. package/dist/test/index.d.ts +3 -0
  203. package/dist/test/index.js +4 -0
  204. package/dist/test/it.util.d.ts +4 -0
  205. package/dist/test/it.util.js +55 -0
  206. package/dist/test/spec.util.d.ts +14 -0
  207. package/dist/test/spec.util.js +50 -0
  208. package/{type → dist/type}/entity.d.ts +97 -4
  209. package/dist/type/entity.js +5 -0
  210. package/dist/type/index.d.ts +9 -0
  211. package/dist/type/index.js +10 -0
  212. package/dist/type/migration.d.ts +213 -0
  213. package/dist/type/migration.js +2 -0
  214. package/dist/type/namingStrategy.d.ts +17 -0
  215. package/dist/type/namingStrategy.js +2 -0
  216. package/dist/type/querier.d.ts +96 -0
  217. package/dist/type/querier.js +11 -0
  218. package/{type → dist/type}/querierPool.d.ts +7 -3
  219. package/dist/type/querierPool.js +2 -0
  220. package/{type → dist/type}/query.d.ts +170 -108
  221. package/dist/type/query.js +9 -0
  222. package/{type → dist/type}/repository.d.ts +42 -35
  223. package/dist/type/repository.js +2 -0
  224. package/{type → dist/type}/universalQuerier.d.ts +50 -28
  225. package/dist/type/universalQuerier.js +2 -0
  226. package/dist/type/utility.d.ts +13 -0
  227. package/dist/type/utility.js +2 -0
  228. package/dist/util/dialect.util.d.ts +12 -0
  229. package/dist/util/dialect.util.js +93 -0
  230. package/dist/util/index.d.ts +5 -0
  231. package/dist/util/index.js +6 -0
  232. package/dist/util/object.util.d.ts +7 -0
  233. package/dist/util/object.util.js +19 -0
  234. package/dist/util/raw.d.ts +8 -0
  235. package/dist/util/raw.js +11 -0
  236. package/dist/util/sql.util.d.ts +13 -0
  237. package/dist/util/sql.util.js +78 -0
  238. package/{util → dist/util}/string.util.d.ts +1 -0
  239. package/dist/util/string.util.js +34 -0
  240. package/package.json +84 -16
  241. package/src/@types/index.d.ts +1 -0
  242. package/src/@types/jest.d.ts +6 -0
  243. package/src/browser/http/bus.spec.ts +22 -0
  244. package/src/browser/http/bus.ts +17 -0
  245. package/src/browser/http/http.spec.ts +70 -0
  246. package/src/browser/http/http.ts +55 -0
  247. package/src/browser/http/index.ts +2 -0
  248. package/src/browser/index.ts +4 -0
  249. package/src/browser/options.spec.ts +37 -0
  250. package/src/browser/options.ts +18 -0
  251. package/src/browser/querier/genericClientRepository.spec.ts +105 -0
  252. package/src/browser/querier/genericClientRepository.ts +49 -0
  253. package/src/browser/querier/httpQuerier.ts +82 -0
  254. package/src/browser/querier/index.ts +3 -0
  255. package/src/browser/querier/querier.util.spec.ts +35 -0
  256. package/src/browser/querier/querier.util.ts +18 -0
  257. package/src/browser/type/clientQuerier.ts +45 -0
  258. package/src/browser/type/clientQuerierPool.ts +5 -0
  259. package/src/browser/type/clientRepository.ts +22 -0
  260. package/src/browser/type/index.ts +4 -0
  261. package/src/browser/type/request.ts +25 -0
  262. package/src/dialect/abstractDialect.ts +28 -0
  263. package/src/dialect/abstractSqlDialect-spec.ts +1309 -0
  264. package/src/dialect/abstractSqlDialect.ts +805 -0
  265. package/src/dialect/index.ts +3 -0
  266. package/src/dialect/namingStrategy.spec.ts +52 -0
  267. package/src/dialect/queryContext.ts +69 -0
  268. package/src/entity/decorator/definition.spec.ts +736 -0
  269. package/src/entity/decorator/definition.ts +265 -0
  270. package/src/entity/decorator/entity.ts +8 -0
  271. package/src/entity/decorator/field.ts +9 -0
  272. package/src/entity/decorator/id.ts +9 -0
  273. package/src/entity/decorator/index.ts +5 -0
  274. package/src/entity/decorator/relation.spec.ts +41 -0
  275. package/src/entity/decorator/relation.ts +34 -0
  276. package/src/entity/index.ts +1 -0
  277. package/src/express/@types/express.d.ts +8 -0
  278. package/src/express/@types/index.d.ts +1 -0
  279. package/src/express/index.ts +2 -0
  280. package/src/express/querierMiddleware.ts +217 -0
  281. package/src/express/query.util.spec.ts +40 -0
  282. package/src/express/query.util.ts +21 -0
  283. package/src/index.ts +9 -0
  284. package/src/maria/index.ts +3 -0
  285. package/src/maria/mariaDialect.spec.ts +207 -0
  286. package/src/maria/mariaDialect.ts +42 -0
  287. package/src/maria/mariaQuerierPool.test.ts +23 -0
  288. package/src/maria/mariadbQuerier.test.ts +23 -0
  289. package/src/maria/mariadbQuerier.ts +45 -0
  290. package/src/maria/mariadbQuerierPool.ts +21 -0
  291. package/src/migrate/cli.ts +301 -0
  292. package/src/migrate/generator/index.ts +4 -0
  293. package/src/migrate/generator/mongoSchemaGenerator.spec.ts +112 -0
  294. package/src/migrate/generator/mongoSchemaGenerator.ts +115 -0
  295. package/src/migrate/generator/mysqlSchemaGenerator.spec.ts +34 -0
  296. package/src/migrate/generator/mysqlSchemaGenerator.ts +92 -0
  297. package/src/migrate/generator/postgresSchemaGenerator.spec.ts +44 -0
  298. package/src/migrate/generator/postgresSchemaGenerator.ts +127 -0
  299. package/src/migrate/generator/sqliteSchemaGenerator.spec.ts +33 -0
  300. package/src/migrate/generator/sqliteSchemaGenerator.ts +81 -0
  301. package/src/migrate/index.ts +41 -0
  302. package/src/migrate/introspection/index.ts +4 -0
  303. package/src/migrate/introspection/mongoIntrospector.spec.ts +75 -0
  304. package/src/migrate/introspection/mongoIntrospector.ts +47 -0
  305. package/src/migrate/introspection/mysqlIntrospector.spec.ts +113 -0
  306. package/src/migrate/introspection/mysqlIntrospector.ts +278 -0
  307. package/src/migrate/introspection/postgresIntrospector.spec.ts +112 -0
  308. package/src/migrate/introspection/postgresIntrospector.ts +329 -0
  309. package/src/migrate/introspection/sqliteIntrospector.spec.ts +112 -0
  310. package/src/migrate/introspection/sqliteIntrospector.ts +296 -0
  311. package/src/migrate/migrator-mongo.test.ts +54 -0
  312. package/src/migrate/migrator.spec.ts +255 -0
  313. package/src/migrate/migrator.test.ts +94 -0
  314. package/src/migrate/migrator.ts +719 -0
  315. package/src/migrate/namingStrategy.spec.ts +22 -0
  316. package/src/migrate/schemaGenerator-advanced.spec.ts +138 -0
  317. package/src/migrate/schemaGenerator.spec.ts +190 -0
  318. package/src/migrate/schemaGenerator.ts +478 -0
  319. package/src/migrate/storage/databaseStorage.spec.ts +69 -0
  320. package/src/migrate/storage/databaseStorage.ts +100 -0
  321. package/src/migrate/storage/index.ts +2 -0
  322. package/src/migrate/storage/jsonStorage.ts +58 -0
  323. package/src/migrate/type.ts +1 -0
  324. package/src/mongo/index.ts +3 -0
  325. package/src/mongo/mongoDialect.spec.ts +251 -0
  326. package/src/mongo/mongoDialect.ts +238 -0
  327. package/src/mongo/mongodbQuerier.test.ts +45 -0
  328. package/src/mongo/mongodbQuerier.ts +256 -0
  329. package/src/mongo/mongodbQuerierPool.test.ts +25 -0
  330. package/src/mongo/mongodbQuerierPool.ts +24 -0
  331. package/src/mysql/index.ts +3 -0
  332. package/src/mysql/mysql2Querier.test.ts +20 -0
  333. package/src/mysql/mysql2Querier.ts +49 -0
  334. package/src/mysql/mysql2QuerierPool.test.ts +20 -0
  335. package/src/mysql/mysql2QuerierPool.ts +21 -0
  336. package/src/mysql/mysqlDialect.spec.ts +20 -0
  337. package/src/mysql/mysqlDialect.ts +16 -0
  338. package/src/namingStrategy/defaultNamingStrategy.ts +18 -0
  339. package/src/namingStrategy/index.spec.ts +36 -0
  340. package/src/namingStrategy/index.ts +2 -0
  341. package/src/namingStrategy/snakeCaseNamingStrategy.ts +15 -0
  342. package/src/options.spec.ts +41 -0
  343. package/src/options.ts +18 -0
  344. package/src/postgres/index.ts +3 -0
  345. package/src/postgres/manual-types.d.ts +4 -0
  346. package/src/postgres/pgQuerier.test.ts +25 -0
  347. package/src/postgres/pgQuerier.ts +45 -0
  348. package/src/postgres/pgQuerierPool.test.ts +28 -0
  349. package/src/postgres/pgQuerierPool.ts +21 -0
  350. package/src/postgres/postgresDialect.spec.ts +428 -0
  351. package/src/postgres/postgresDialect.ts +144 -0
  352. package/src/querier/abstractQuerier-test.ts +584 -0
  353. package/src/querier/abstractQuerier.ts +353 -0
  354. package/src/querier/abstractQuerierPool-test.ts +20 -0
  355. package/src/querier/abstractQuerierPool.ts +18 -0
  356. package/src/querier/abstractSqlQuerier-spec.ts +979 -0
  357. package/src/querier/abstractSqlQuerier-test.ts +21 -0
  358. package/src/querier/abstractSqlQuerier.ts +138 -0
  359. package/src/querier/decorator/index.ts +3 -0
  360. package/src/querier/decorator/injectQuerier.spec.ts +74 -0
  361. package/src/querier/decorator/injectQuerier.ts +45 -0
  362. package/src/querier/decorator/serialized.spec.ts +98 -0
  363. package/src/querier/decorator/serialized.ts +13 -0
  364. package/src/querier/decorator/transactional.spec.ts +240 -0
  365. package/src/querier/decorator/transactional.ts +56 -0
  366. package/src/querier/index.ts +4 -0
  367. package/src/repository/genericRepository.spec.ts +111 -0
  368. package/src/repository/genericRepository.ts +74 -0
  369. package/src/repository/index.ts +1 -0
  370. package/src/sqlite/index.ts +3 -0
  371. package/src/sqlite/manual-types.d.ts +4 -0
  372. package/src/sqlite/sqliteDialect.spec.ts +155 -0
  373. package/src/sqlite/sqliteDialect.ts +76 -0
  374. package/src/sqlite/sqliteQuerier.spec.ts +36 -0
  375. package/src/sqlite/sqliteQuerier.test.ts +21 -0
  376. package/src/sqlite/sqliteQuerier.ts +37 -0
  377. package/src/sqlite/sqliteQuerierPool.test.ts +12 -0
  378. package/src/sqlite/sqliteQuerierPool.ts +38 -0
  379. package/src/test/entityMock.ts +375 -0
  380. package/src/test/index.ts +3 -0
  381. package/src/test/it.util.ts +69 -0
  382. package/src/test/spec.util.ts +57 -0
  383. package/src/type/entity.ts +218 -0
  384. package/src/type/index.ts +9 -0
  385. package/src/type/migration.ts +241 -0
  386. package/src/type/namingStrategy.ts +17 -0
  387. package/src/type/querier.ts +143 -0
  388. package/src/type/querierPool.ts +26 -0
  389. package/src/type/query.ts +506 -0
  390. package/src/type/repository.ts +142 -0
  391. package/src/type/universalQuerier.ts +133 -0
  392. package/src/type/utility.ts +21 -0
  393. package/src/util/dialect.util-extra.spec.ts +96 -0
  394. package/src/util/dialect.util.spec.ts +23 -0
  395. package/src/util/dialect.util.ts +134 -0
  396. package/src/util/index.ts +5 -0
  397. package/src/util/object.util.spec.ts +29 -0
  398. package/src/util/object.util.ts +27 -0
  399. package/src/util/raw.ts +11 -0
  400. package/src/util/sql.util-extra.spec.ts +17 -0
  401. package/src/util/sql.util.spec.ts +208 -0
  402. package/src/util/sql.util.ts +104 -0
  403. package/src/util/string.util.spec.ts +46 -0
  404. package/src/util/string.util.ts +35 -0
  405. package/tsconfig.build.json +5 -0
  406. package/tsconfig.json +8 -0
  407. package/README.md +0 -177
  408. package/dialect/abstractSqlDialect.d.ts +0 -30
  409. package/dialect/abstractSqlDialect.js +0 -365
  410. package/dialect/index.d.ts +0 -4
  411. package/dialect/index.js +0 -8
  412. package/dialect/mysqlDialect.d.ts +0 -6
  413. package/dialect/mysqlDialect.js +0 -21
  414. package/dialect/postgresDialect.d.ts +0 -8
  415. package/dialect/postgresDialect.js +0 -44
  416. package/dialect/sqliteDialect.d.ts +0 -4
  417. package/dialect/sqliteDialect.js +0 -11
  418. package/entity/decorator/definition.js +0 -223
  419. package/entity/decorator/entity.js +0 -11
  420. package/entity/decorator/field.js +0 -12
  421. package/entity/decorator/id.js +0 -12
  422. package/entity/decorator/index.d.ts +0 -5
  423. package/entity/decorator/index.js +0 -12
  424. package/entity/decorator/relation.js +0 -27
  425. package/entity/index.d.ts +0 -1
  426. package/entity/index.js +0 -5
  427. package/index.d.ts +0 -1
  428. package/index.js +0 -5
  429. package/options.js +0 -20
  430. package/querier/abstractQuerier.d.ts +0 -30
  431. package/querier/abstractQuerier.js +0 -230
  432. package/querier/abstractSqlQuerier.d.ts +0 -27
  433. package/querier/abstractSqlQuerier.js +0 -88
  434. package/querier/decorator/index.d.ts +0 -2
  435. package/querier/decorator/index.js +0 -6
  436. package/querier/decorator/injectQuerier.d.ts +0 -3
  437. package/querier/decorator/injectQuerier.js +0 -39
  438. package/querier/decorator/transactional.js +0 -52
  439. package/querier/index.d.ts +0 -3
  440. package/querier/index.js +0 -7
  441. package/repository/genericRepository.d.ts +0 -19
  442. package/repository/genericRepository.js +0 -52
  443. package/repository/index.d.ts +0 -1
  444. package/repository/index.js +0 -5
  445. package/type/entity.js +0 -5
  446. package/type/index.d.ts +0 -7
  447. package/type/index.js +0 -11
  448. package/type/querier.d.ts +0 -53
  449. package/type/querier.js +0 -3
  450. package/type/querierPool.js +0 -3
  451. package/type/query.js +0 -13
  452. package/type/repository.js +0 -3
  453. package/type/universalQuerier.js +0 -3
  454. package/type/utility.d.ts +0 -12
  455. package/type/utility.js +0 -3
  456. package/util/dialect.util.d.ts +0 -17
  457. package/util/dialect.util.js +0 -114
  458. package/util/index.d.ts +0 -5
  459. package/util/index.js +0 -9
  460. package/util/object.util.d.ts +0 -3
  461. package/util/object.util.js +0 -22
  462. package/util/raw.d.ts +0 -2
  463. package/util/raw.js +0 -9
  464. package/util/sql.util.d.ts +0 -2
  465. package/util/sql.util.js +0 -55
  466. package/util/string.util.js +0 -20
@@ -0,0 +1,254 @@
1
+ #!/usr/bin/env node
2
+ import { resolve } from 'node:path';
3
+ import { pathToFileURL } from 'node:url';
4
+ import { MongoSchemaGenerator } from './generator/mongoSchemaGenerator.js';
5
+ import { MysqlSchemaGenerator } from './generator/mysqlSchemaGenerator.js';
6
+ import { PostgresSchemaGenerator } from './generator/postgresSchemaGenerator.js';
7
+ import { SqliteSchemaGenerator } from './generator/sqliteSchemaGenerator.js';
8
+ import { Migrator } from './migrator.js';
9
+ async function loadConfig() {
10
+ const configPaths = ['uql.config.ts', 'uql.config.js', 'uql.config.mjs', '.uqlrc.ts', '.uqlrc.js'];
11
+ for (const configPath of configPaths) {
12
+ try {
13
+ const fullPath = resolve(process.cwd(), configPath);
14
+ const fileUrl = pathToFileURL(fullPath).href;
15
+ const module = await import(fileUrl);
16
+ return module.default ?? module;
17
+ }
18
+ catch {
19
+ // Config file not found, try next one
20
+ }
21
+ }
22
+ throw new Error('Could not find uql configuration file. ' + 'Create a uql.config.ts or uql.config.js file in your project root.');
23
+ }
24
+ function getSchemaGenerator(dialect, namingStrategy) {
25
+ switch (dialect) {
26
+ case 'postgres':
27
+ return new PostgresSchemaGenerator(namingStrategy);
28
+ case 'mysql':
29
+ case 'mariadb':
30
+ return new MysqlSchemaGenerator(namingStrategy);
31
+ case 'sqlite':
32
+ return new SqliteSchemaGenerator(namingStrategy);
33
+ case 'mongodb':
34
+ return new MongoSchemaGenerator(namingStrategy);
35
+ default:
36
+ throw new TypeError(`Unknown dialect: ${dialect}`);
37
+ }
38
+ }
39
+ async function main() {
40
+ const args = process.argv.slice(2);
41
+ const command = args[0];
42
+ if (!command || command === '--help' || command === '-h') {
43
+ printHelp();
44
+ return;
45
+ }
46
+ try {
47
+ const config = await loadConfig();
48
+ if (!config.querierPool) {
49
+ throw new Error('querierPool is required in configuration');
50
+ }
51
+ const dialect = config.dialect ?? 'postgres';
52
+ const options = {
53
+ migrationsPath: config.migrationsPath ?? './migrations',
54
+ tableName: config.tableName,
55
+ logger: console.log,
56
+ entities: config.entities,
57
+ dialect,
58
+ namingStrategy: config.namingStrategy,
59
+ };
60
+ const migrator = new Migrator(config.querierPool, options);
61
+ migrator.setSchemaGenerator(getSchemaGenerator(dialect, config.namingStrategy));
62
+ switch (command) {
63
+ case 'up':
64
+ await runUp(migrator, args.slice(1));
65
+ break;
66
+ case 'down':
67
+ await runDown(migrator, args.slice(1));
68
+ break;
69
+ case 'status':
70
+ await runStatus(migrator);
71
+ break;
72
+ case 'generate':
73
+ case 'create':
74
+ await runGenerate(migrator, args.slice(1));
75
+ break;
76
+ case 'generate:entities':
77
+ case 'generate-entities':
78
+ await runGenerateFromEntities(migrator, args.slice(1));
79
+ break;
80
+ case 'sync':
81
+ await runSync(migrator, args.slice(1));
82
+ break;
83
+ case 'pending':
84
+ await runPending(migrator);
85
+ break;
86
+ default:
87
+ console.error(`Unknown command: ${command}`);
88
+ printHelp();
89
+ process.exit(1);
90
+ }
91
+ // Close the connection pool
92
+ const pool = config.querierPool;
93
+ if (pool.end) {
94
+ await pool.end();
95
+ }
96
+ }
97
+ catch (error) {
98
+ console.error('Error:', error.message);
99
+ process.exit(1);
100
+ }
101
+ }
102
+ async function runUp(migrator, args) {
103
+ const options = {};
104
+ for (let i = 0; i < args.length; i++) {
105
+ if (args[i] === '--to' && args[i + 1]) {
106
+ options.to = args[++i];
107
+ }
108
+ else if (args[i] === '--step' && args[i + 1]) {
109
+ options.step = Number.parseInt(args[++i], 10);
110
+ }
111
+ }
112
+ const results = await migrator.up(options);
113
+ if (results.length === 0) {
114
+ console.log('No pending migrations.');
115
+ return;
116
+ }
117
+ const successful = results.filter((r) => r.success).length;
118
+ const failed = results.filter((r) => !r.success).length;
119
+ console.log(`\nMigrations complete: ${successful} successful, ${failed} failed`);
120
+ if (failed > 0) {
121
+ process.exit(1);
122
+ }
123
+ }
124
+ async function runDown(migrator, args) {
125
+ const options = { step: 1 }; // Default to 1 step
126
+ for (let i = 0; i < args.length; i++) {
127
+ if (args[i] === '--to' && args[i + 1]) {
128
+ options.to = args[++i];
129
+ delete options.step;
130
+ }
131
+ else if (args[i] === '--step' && args[i + 1]) {
132
+ options.step = Number.parseInt(args[++i], 10);
133
+ }
134
+ else if (args[i] === '--all') {
135
+ delete options.step;
136
+ }
137
+ }
138
+ const results = await migrator.down(options);
139
+ if (results.length === 0) {
140
+ console.log('No migrations to rollback.');
141
+ return;
142
+ }
143
+ const successful = results.filter((r) => r.success).length;
144
+ const failed = results.filter((r) => !r.success).length;
145
+ console.log(`\nRollback complete: ${successful} successful, ${failed} failed`);
146
+ if (failed > 0) {
147
+ process.exit(1);
148
+ }
149
+ }
150
+ async function runStatus(migrator) {
151
+ const status = await migrator.status();
152
+ console.log('\n=== Migration Status ===\n');
153
+ console.log('Executed migrations:');
154
+ if (status.executed.length === 0) {
155
+ console.log(' (none)');
156
+ }
157
+ else {
158
+ for (const name of status.executed) {
159
+ console.log(` ✓ ${name}`);
160
+ }
161
+ }
162
+ console.log('\nPending migrations:');
163
+ if (status.pending.length === 0) {
164
+ console.log(' (none)');
165
+ }
166
+ else {
167
+ for (const name of status.pending) {
168
+ console.log(` ○ ${name}`);
169
+ }
170
+ }
171
+ console.log('');
172
+ }
173
+ async function runPending(migrator) {
174
+ const pending = await migrator.pending();
175
+ if (pending.length === 0) {
176
+ console.log('No pending migrations.');
177
+ return;
178
+ }
179
+ console.log('Pending migrations:');
180
+ for (const migration of pending) {
181
+ console.log(` ○ ${migration.name}`);
182
+ }
183
+ }
184
+ async function runGenerate(migrator, args) {
185
+ const name = args.join('_') || 'migration';
186
+ const filePath = await migrator.generate(name);
187
+ console.log(`\nCreated migration: ${filePath}`);
188
+ }
189
+ async function runGenerateFromEntities(migrator, args) {
190
+ const name = args.join('_') || 'schema';
191
+ const filePath = await migrator.generateFromEntities(name);
192
+ console.log(`\nCreated migration from entities: ${filePath}`);
193
+ }
194
+ async function runSync(migrator, args) {
195
+ const force = args.includes('--force');
196
+ if (force) {
197
+ console.log('\n⚠️ WARNING: This will drop and recreate all tables!');
198
+ console.log(' All data will be lost. This should only be used in development.\n');
199
+ }
200
+ await migrator.sync({ force });
201
+ console.log('\nSchema sync completed.');
202
+ }
203
+ function printHelp() {
204
+ console.log(`
205
+ @uql/migrate - Database migration tool for uql ORM
206
+
207
+ Usage: @uql/migrate <command> [options]
208
+
209
+ Commands:
210
+ up Run all pending migrations
211
+ --to <name> Run migrations up to and including <name>
212
+ --step <n> Run only <n> migrations
213
+
214
+ down Rollback the last migration
215
+ --to <name> Rollback to (and including) migration <name>
216
+ --step <n> Rollback <n> migrations (default: 1)
217
+ --all Rollback all migrations
218
+
219
+ status Show migration status
220
+
221
+ pending Show pending migrations
222
+
223
+ generate <name> Create a new empty migration file
224
+ create <name> Alias for generate
225
+
226
+ generate:entities Generate migration from entity definitions
227
+ <name> Optional name for the migration
228
+
229
+ sync Sync schema directly (development only!)
230
+ --force Drop and recreate all tables
231
+
232
+ Configuration:
233
+ Create a uql.config.ts or uql.config.js file in your project root:
234
+
235
+ export default {
236
+ querierPool: new PgQuerierPool({ ... }),
237
+ migrationsPath: './migrations',
238
+ tableName: 'uql_migrations',
239
+ dialect: 'postgres', // 'postgres' | 'mysql' | 'mariadb' | 'sqlite'
240
+ entities: [User, Post, ...],
241
+ };
242
+
243
+ Examples:
244
+ @uql/migrate up
245
+ @uql/migrate up --step 1
246
+ @uql/migrate down
247
+ @uql/migrate down --step 3
248
+ @uql/migrate status
249
+ @uql/migrate generate add_users_table
250
+ @uql/migrate generate:entities initial_schema
251
+ `);
252
+ }
253
+ main().catch(console.error);
254
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL21pZ3JhdGUvY2xpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFFQSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFFekMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDM0UsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDM0UsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDakYsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDN0UsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQVd6QyxLQUFLLFVBQVUsVUFBVTtJQUN2QixNQUFNLFdBQVcsR0FBRyxDQUFDLGVBQWUsRUFBRSxlQUFlLEVBQUUsZ0JBQWdCLEVBQUUsV0FBVyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBRW5HLEtBQUssTUFBTSxVQUFVLElBQUksV0FBVyxFQUFFLENBQUM7UUFDckMsSUFBSSxDQUFDO1lBQ0gsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxVQUFVLENBQUMsQ0FBQztZQUNwRCxNQUFNLE9BQU8sR0FBRyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQzdDLE1BQU0sTUFBTSxHQUFHLE1BQU0sTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3JDLE9BQU8sTUFBTSxDQUFDLE9BQU8sSUFBSSxNQUFNLENBQUM7UUFDbEMsQ0FBQztRQUFDLE1BQU0sQ0FBQztZQUNQLHNDQUFzQztRQUN4QyxDQUFDO0lBQ0gsQ0FBQztJQUVELE1BQU0sSUFBSSxLQUFLLENBQ2IseUNBQXlDLEdBQUcsb0VBQW9FLENBQ2pILENB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QUFDLENBQUM7UUFDdEUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxzRUFBc0UsQ0FBQyxDQUFDO0lBQ3RGLENBQUM7SUFFRCxNQUFNLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQy9CLE9BQU8sQ0FBQyxHQUFHLENBQUMsMEJBQTBCLENBQUMsQ0FBQztBQUMxQyxDQUFDO0FBRUQsU0FBUyxTQUFTO0lBQ2hCLE9BQU8sQ0FBQyxHQUFHLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBK0NiLENBQUMsQ0FBQztBQUNILENBQUM7QUFFRCxJQUFJLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiIyEvdXNyL2Jpbi9lbnYgbm9kZVxuXG5pbXBvcnQgeyByZXNvbHZlIH0gZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCB7IHBhdGhUb0ZpbGVVUkwgfSBmcm9tICdub2RlOnVybCc7XG5pbXBvcnQgdHlwZSB7IERpYWxlY3QsIE1pZ3JhdG9yT3B0aW9ucywgTmFtaW5nU3RyYXRlZ3ksIFF1ZXJpZXJQb29sIH0gZnJvbSAnLi4vdHlwZS9pbmRleC5qcyc7XG5pbXBvcnQgeyBNb25nb1NjaGVtYUdlbmVyYXRvciB9IGZyb20gJy4vZ2VuZXJhdG9yL21vbmdvU2NoZW1hR2VuZXJhdG9yLmpzJztcbmltcG9ydCB7IE15c3FsU2NoZW1hR2VuZXJhdG9yIH0gZnJvbSAnLi9nZW5lcmF0b3IvbXlzcWxTY2hlbWFHZW5lcmF0b3IuanMnO1xuaW1wb3J0IHsgUG9zdGdyZXNTY2hlbWFHZW5lcmF0b3IgfSBmcm9tICcuL2dlbmVyYXRvci9wb3N0Z3Jlc1NjaGVtYUdlbmVyYXRvci5qcyc7XG5pbXBvcnQgeyBTcWxpdGVTY2hlbWFHZW5lcmF0b3IgfSBmcm9tICcuL2dlbmVyYXRvci9zcWxpdGVTY2hlbWFHZW5lcmF0b3IuanMnO1xuaW1wb3J0IHsgTWlncmF0b3IgfSBmcm9tICcuL21pZ3JhdG9yLmpzJztcblxuaW50ZXJmYWNlIENsaUNvbmZpZyB7XG4gIHF1ZXJpZXJQb29sPzogUXVlcmllclBvb2w7XG4gIG1pZ3JhdGlvbnNQYXRoPzogc3RyaW5nO1xuICB0YWJsZU5hbWU/OiBzdHJpbmc7XG4gIGRpYWxlY3Q/OiBEaWFsZWN0O1xuICBlbnRpdGllcz86IHVua25vd25bXTtcbiAgbmFtaW5nU3RyYXRlZ3k/OiBOYW1pbmdTdHJhdGVneTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gbG9hZENvbmZpZygpOiBQcm9taXNlPENsaUNvbmZpZz4ge1xuICBjb25zdCBjb25maWdQYXRocyA9IFsndXFsLmNvbmZpZy50cycsICd1cWwuY29uZmlnLmpzJywgJ3VxbC5jb25maWcubWpzJywgJy51cWxyYy50cycsICcudXFscmMuanMnXTtcblxuICBmb3IgKGNvbnN0IGNvbmZpZ1BhdGggb2YgY29uZmlnUGF0aHMpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgZnVsbFBhdGggPSByZXNvbHZlKHByb2Nlc3MuY3dkKCksIGNvbmZpZ1BhdGgpO1xuICAgICAgY29uc3QgZmlsZVVybCA9IHBhdGhUb0ZpbGVVUkwoZnVsbFBhdGgpLmhyZWY7XG4gICAgICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoZmlsZVVybCk7XG4gICAgICByZXR1cm4gbW9kdWxlLmRlZmF1bHQgPz8gbW9kdWxlO1xuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gQ29uZmlnIGZpbGUgbm90IGZvdW5kLCB0cnkgbmV4dCBvbmVcbiAgICB9XG4gIH1cblxuICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgJ0NvdWxkIG5vdCBmaW5kIHVxbCBjb25maWd1cmF0aW9uIGZpbGUuICcgKyAnQ3JlYXRlIGEgdXFsLmNvbmZpZy50cyBvciB1cWwuY29uZmlnLmpzIGZpbGUgaW4geW91ciBwcm9qZWN0IHJvb3QuJyxcbiAgKTtcbn1cblxuZnVuY3Rpb24gZ2V0U2NoZW1hR2VuZXJhdG9yKGRpYWxlY3Q6IERpYWxlY3QsIG5hbWluZ1N0cmF0ZWd5PzogTmFtaW5nU3RyYXRlZ3kpIHtcbiAgc3dpdGNoIChkaWFsZWN0KSB7XG4gICAgY2FzZSAncG9zdGdyZXMnOlxuICAgICAgcmV0dXJuIG5ldyBQb3N0Z3Jlc1NjaGVtYUdlbmVyYXRvcihuYW1pbmdTdHJhdGVneSk7XG4gICAgY2FzZSAnbXlzcWwnOlxuICAgIGNhc2UgJ21hcmlhZGInOlxuICAgICAgcmV0dXJuIG5ldyBNeXNxbFNjaGVtYUdlbmVyYXRvcihuYW1pbmdTdHJhdGVneSk7XG4gICAgY2FzZSAnc3FsaXRlJzpcbiAgICAgIHJldHVybiBuZXcgU3FsaXRlU2NoZW1hR2VuZXJhdG9yKG5hbWluZ1N0cmF0ZWd5KTtcbiAgICBjYXNlICdtb25nb2RiJzpcbiAgICAgIHJldHVybiBuZXcgTW9uZ29TY2hlbWFHZW5lcmF0b3IobmFtaW5nU3RyYXRlZ3kpO1xuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBVbmtub3duIGRpYWxlY3Q6ICR7ZGlhbGVjdH1gKTtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBtYWluKCkge1xuICBjb25zdCBhcmdzID0gcHJvY2Vzcy5hcmd2LnNsaWNlKDIpO1xuICBjb25zdCBjb21tYW5kID0gYXJnc1swXTtcblxuICBpZiAoIWNvbW1hbmQgfHwgY29tbWFuZCA9PT0gJy0taGVscCcgfHwgY29tbWFuZCA9PT0gJy1oJykge1xuICAgIHByaW50SGVscCgpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHRyeSB7XG4gICAgY29uc3QgY29uZmlnID0gYXdhaXQgbG9hZENvbmZpZygpO1xuXG4gICAgaWYgKCFjb25maWcucXVlcmllclBvb2wpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcigncXVlcmllclBvb2wgaXMgcmVxdWlyZWQgaW4gY29uZmlndXJhdGlvbicpO1xuICAgIH1cblxuICAgIGNvbnN0IGRpYWxlY3QgPSBjb25maWcuZGlhbGVjdCA/PyAncG9zdGdyZXMnO1xuXG4gICAgY29uc3Qgb3B0aW9uczogTWlncmF0b3JPcHRpb25zICYgeyBkaWFsZWN0OiBEaWFsZWN0IH0gPSB7XG4gICAgICBtaWdyYXRpb25zUGF0aDogY29uZmlnLm1pZ3JhdGlvbnNQYXRoID8/ICcuL21pZ3JhdGlvbnMnLFxuICAgICAgdGFibGVOYW1lOiBjb25maWcudGFibGVOYW1lLFxuICAgICAgbG9nZ2VyOiBjb25zb2xlLmxvZyxcbiAgICAgIGVudGl0aWVzOiBjb25maWcuZW50aXRpZXMgYXMgTWlncmF0b3JPcHRpb25zWydlbnRpdGllcyddLFxuICAgICAgZGlhbGVjdCxcbiAgICAgIG5hbWluZ1N0cmF0ZWd5OiBjb25maWcubmFtaW5nU3RyYXRlZ3ksXG4gICAgfTtcblxuICAgIGNvbnN0IG1pZ3JhdG9yID0gbmV3IE1pZ3JhdG9yKGNvbmZpZy5xdWVyaWVyUG9vbCwgb3B0aW9ucyk7XG4gICAgbWlncmF0b3Iuc2V0U2NoZW1hR2VuZXJhdG9yKGdldFNjaGVtYUdlbmVyYXRvcihkaWFsZWN0LCBjb25maWcubmFtaW5nU3RyYXRlZ3kpKTtcblxuICAgIHN3aXRjaCAoY29tbWFuZCkge1xuICAgICAgY2FzZSAndXAnOlxuICAgICAgICBhd2FpdCBydW5VcChtaWdyYXRvciwgYXJncy5zbGljZSgxKSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnZG93bic6XG4gICAgICAgIGF3YWl0IHJ1bkRvd24obWlncmF0b3IsIGFyZ3Muc2xpY2UoMSkpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3N0YXR1cyc6XG4gICAgICAgIGF3YWl0IHJ1blN0YXR1cyhtaWdyYXRvcik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnZ2VuZXJhdGUnOlxuICAgICAgY2FzZSAnY3JlYXRlJzpcbiAgICAgICAgYXdhaXQgcnVuR2VuZXJhdGUobWlncmF0b3IsIGFyZ3Muc2xpY2UoMSkpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2dlbmVyYXRlOmVudGl0aWVzJzpcbiAgICAgIGNhc2UgJ2dlbmVyYXRlLWVudGl0aWVzJzpcbiAgICAgICAgYXdhaXQgcnVuR2VuZXJhdGVGcm9tRW50aXRpZXMobWlncmF0b3IsIGFyZ3Muc2xpY2UoMSkpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3N5bmMnOlxuICAgICAgICBhd2FpdCBydW5TeW5jKG1pZ3JhdG9yLCBhcmdzLnNsaWNlKDEpKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdwZW5kaW5nJzpcbiAgICAgICAgYXdhaXQgcnVuUGVuZGluZyhtaWdyYXRvcik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgY29uc29sZS5lcnJvcihgVW5rbm93biBjb21tYW5kOiAke2NvbW1hbmR9YCk7XG4gICAgICAgIHByaW50SGVscCgpO1xuICAgICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgfVxuXG4gICAgLy8gQ2xvc2UgdGhlIGNvbm5lY3Rpb24gcG9vbFxuICAgIGNvbnN0IHBvb2wgPSBjb25maWcucXVlcmllclBvb2wgYXMgeyBlbmQ/OiAoKSA9PiBQcm9taXNlPHZvaWQ+IH07XG4gICAgaWYgKHBvb2wuZW5kKSB7XG4gICAgICBhd2FpdCBwb29sLmVuZCgpO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjb25zb2xlLmVycm9yKCdFcnJvcjonLCAoZXJyb3IgYXMgRXJyb3IpLm1lc3NhZ2UpO1xuICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBydW5VcChtaWdyYXRvcjogTWlncmF0b3IsIGFyZ3M6IHN0cmluZ1tdKSB7XG4gIGNvbnN0IG9wdGlvbnM6IHsgdG8/OiBzdHJpbmc7IHN0ZXA/OiBudW1iZXIgfSA9IHt9O1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7IGkrKykge1xuICAgIGlmIChhcmdzW2ldID09PSAnLS10bycgJiYgYXJnc1tpICsgMV0pIHtcbiAgICAgIG9wdGlvbnMudG8gPSBhcmdzWysraV07XG4gICAgfSBlbHNlIGlmIChhcmdzW2ldID09PSAnLS1zdGVwJyAmJiBhcmdzW2kgKyAxXSkge1xuICAgICAgb3B0aW9ucy5zdGVwID0gTnVtYmVyLnBhcnNlSW50KGFyZ3NbKytpXSwgMTApO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHJlc3VsdHMgPSBhd2FpdCBtaWdyYXRvci51cChvcHRpb25zKTtcblxuICBpZiAocmVzdWx0cy5sZW5ndGggPT09IDApIHtcbiAgICBjb25zb2xlLmxvZygnTm8gcGVuZGluZyBtaWdyYXRpb25zLicpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHN1Y2Nlc3NmdWwgPSByZXN1bHRzLmZpbHRlcigocjogYW55KSA9PiByLnN1Y2Nlc3MpLmxlbmd0aDtcbiAgY29uc3QgZmFpbGVkID0gcmVzdWx0cy5maWx0ZXIoKHI6IGFueSkgPT4gIXIuc3VjY2VzcykubGVuZ3RoO1xuXG4gIGNvbnNvbGUubG9nKGBcXG5NaWdyYXRpb25zIGNvbXBsZXRlOiAke3N1Y2Nlc3NmdWx9IHN1Y2Nlc3NmdWwsICR7ZmFpbGVkfSBmYWlsZWRgKTtcblxuICBpZiAoZmFpbGVkID4gMCkge1xuICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBydW5Eb3duKG1pZ3JhdG9yOiBNaWdyYXRvciwgYXJnczogc3RyaW5nW10pIHtcbiAgY29uc3Qgb3B0aW9uczogeyB0bz86IHN0cmluZzsgc3RlcD86IG51bWJlciB9ID0geyBzdGVwOiAxIH07IC8vIERlZmF1bHQgdG8gMSBzdGVwXG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKGFyZ3NbaV0gPT09ICctLXRvJyAmJiBhcmdzW2kgKyAxXSkge1xuICAgICAgb3B0aW9ucy50byA9IGFyZ3NbKytpXTtcbiAgICAgIGRlbGV0ZSBvcHRpb25zLnN0ZXA7XG4gICAgfSBlbHNlIGlmIChhcmdzW2ldID09PSAnLS1zdGVwJyAmJiBhcmdzW2kgKyAxXSkge1xuICAgICAgb3B0aW9ucy5zdGVwID0gTnVtYmVyLnBhcnNlSW50KGFyZ3NbKytpXSwgMTApO1xuICAgIH0gZWxzZSBpZiAoYXJnc1tpXSA9PT0gJy0tYWxsJykge1xuICAgICAgZGVsZXRlIG9wdGlvbnMuc3RlcDtcbiAgICB9XG4gIH1cblxuICBjb25zdCByZXN1bHRzID0gYXdhaXQgbWlncmF0b3IuZG93bihvcHRpb25zKTtcblxuICBpZiAocmVzdWx0cy5sZW5ndGggPT09IDApIHtcbiAgICBjb25zb2xlLmxvZygnTm8gbWlncmF0aW9ucyB0byByb2xsYmFjay4nKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBzdWNjZXNzZnVsID0gcmVzdWx0cy5maWx0ZXIoKHI6IGFueSkgPT4gci5zdWNjZXNzKS5sZW5ndGg7XG4gIGNvbnN0IGZhaWxlZCA9IHJlc3VsdHMuZmlsdGVyKChyOiBhbnkpID0+ICFyLnN1Y2Nlc3MpLmxlbmd0aDtcblxuICBjb25zb2xlLmxvZyhgXFxuUm9sbGJhY2sgY29tcGxldGU6ICR7c3VjY2Vzc2Z1bH0gc3VjY2Vzc2Z1bCwgJHtmYWlsZWR9IGZhaWxlZGApO1xuXG4gIGlmIChmYWlsZWQgPiAwKSB7XG4gICAgcHJvY2Vzcy5leGl0KDEpO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJ1blN0YXR1cyhtaWdyYXRvcjogTWlncmF0b3IpIHtcbiAgY29uc3Qgc3RhdHVzID0gYXdhaXQgbWlncmF0b3Iuc3RhdHVzKCk7XG5cbiAgY29uc29sZS5sb2coJ1xcbj09PSBNaWdyYXRpb24gU3RhdHVzID09PVxcbicpO1xuXG4gIGNvbnNvbGUubG9nKCdFeGVjdXRlZCBtaWdyYXRpb25zOicpO1xuICBpZiAoc3RhdHVzLmV4ZWN1dGVkLmxlbmd0aCA9PT0gMCkge1xuICAgIGNvbnNvbGUubG9nKCcgIChub25lKScpO1xuICB9IGVsc2Uge1xuICAgIGZvciAoY29uc3QgbmFtZSBvZiBzdGF0dXMuZXhlY3V0ZWQpIHtcbiAgICAgIGNvbnNvbGUubG9nKGAgIOKckyAke25hbWV9YCk7XG4gICAgfVxuICB9XG5cbiAgY29uc29sZS5sb2coJ1xcblBlbmRpbmcgbWlncmF0aW9uczonKTtcbiAgaWYgKHN0YXR1cy5wZW5kaW5nLmxlbmd0aCA9PT0gMCkge1xuICAgIGNvbnNvbGUubG9nKCcgIChub25lKScpO1xuICB9IGVsc2Uge1xuICAgIGZvciAoY29uc3QgbmFtZSBvZiBzdGF0dXMucGVuZGluZykge1xuICAgICAgY29uc29sZS5sb2coYCAg4peLICR7bmFtZX1gKTtcbiAgICB9XG4gIH1cblxuICBjb25zb2xlLmxvZygnJyk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJ1blBlbmRpbmcobWlncmF0b3I6IE1pZ3JhdG9yKSB7XG4gIGNvbnN0IHBlbmRpbmcgPSBhd2FpdCBtaWdyYXRvci5wZW5kaW5nKCk7XG5cbiAgaWYgKHBlbmRpbmcubGVuZ3RoID09PSAwKSB7XG4gICAgY29uc29sZS5sb2coJ05vIHBlbmRpbmcgbWlncmF0aW9ucy4nKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zb2xlLmxvZygnUGVuZGluZyBtaWdyYXRpb25zOicpO1xuICBmb3IgKGNvbnN0IG1pZ3JhdGlvbiBvZiBwZW5kaW5nKSB7XG4gICAgY29uc29sZS5sb2coYCAg4peLICR7bWlncmF0aW9uLm5hbWV9YCk7XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gcnVuR2VuZXJhdGUobWlncmF0b3I6IE1pZ3JhdG9yLCBhcmdzOiBzdHJpbmdbXSkge1xuICBjb25zdCBuYW1lID0gYXJncy5qb2luKCdfJykgfHwgJ21pZ3JhdGlvbic7XG4gIGNvbnN0IGZpbGVQYXRoID0gYXdhaXQgbWlncmF0b3IuZ2VuZXJhdGUobmFtZSk7XG4gIGNvbnNvbGUubG9nKGBcXG5DcmVhdGVkIG1pZ3JhdGlvbjogJHtmaWxlUGF0aH1gKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcnVuR2VuZXJhdGVGcm9tRW50aXRpZXMobWlncmF0b3I6IE1pZ3JhdG9yLCBhcmdzOiBzdHJpbmdbXSkge1xuICBjb25zdCBuYW1lID0gYXJncy5qb2luKCdfJykgfHwgJ3NjaGVtYSc7XG4gIGNvbnN0IGZpbGVQYXRoID0gYXdhaXQgbWlncmF0b3IuZ2VuZXJhdGVGcm9tRW50aXRpZXMobmFtZSk7XG4gIGNvbnNvbGUubG9nKGBcXG5DcmVhdGVkIG1pZ3JhdGlvbiBmcm9tIGVudGl0aWVzOiAke2ZpbGVQYXRofWApO1xufVxuXG5hc3luYyBmdW5jdGlvbiBydW5TeW5jKG1pZ3JhdG9yOiBNaWdyYXRvciwgYXJnczogc3RyaW5nW10pIHtcbiAgY29uc3QgZm9yY2UgPSBhcmdzLmluY2x1ZGVzKCctLWZvcmNlJyk7XG5cbiAgaWYgKGZvcmNlKSB7XG4gICAgY29uc29sZS5sb2coJ1xcbuKaoO+4jyAgV0FSTklORzogVGhpcyB3aWxsIGRyb3AgYW5kIHJlY3JlYXRlIGFsbCB0YWJsZXMhJyk7XG4gICAgY29uc29sZS5sb2coJyAgIEFsbCBkYXRhIHdpbGwgYmUgbG9zdC4gVGhpcyBzaG91bGQgb25seSBiZSB1c2VkIGluIGRldmVsb3BtZW50LlxcbicpO1xuICB9XG5cbiAgYXdhaXQgbWlncmF0b3Iuc3luYyh7IGZvcmNlIH0pO1xuICBjb25zb2xlLmxvZygnXFxuU2NoZW1hIHN5bmMgY29tcGxldGVkLicpO1xufVxuXG5mdW5jdGlvbiBwcmludEhlbHAoKSB7XG4gIGNvbnNvbGUubG9nKGBcbkB1cWwvbWlncmF0ZSAtIERhdGFiYXNlIG1pZ3JhdGlvbiB0b29sIGZvciB1cWwgT1JNXG5cblVzYWdlOiBAdXFsL21pZ3JhdGUgPGNvbW1hbmQ+IFtvcHRpb25zXVxuXG5Db21tYW5kczpcbiAgdXAgICAgICAgICAgICAgICAgICAgIFJ1biBhbGwgcGVuZGluZyBtaWdyYXRpb25zXG4gICAgLS10byA8bmFtZT4gICAgICAgICBSdW4gbWlncmF0aW9ucyB1cCB0byBhbmQgaW5jbHVkaW5nIDxuYW1lPlxuICAgIC0tc3RlcCA8bj4gICAgICAgICAgUnVuIG9ubHkgPG4+IG1pZ3JhdGlvbnNcblxuICBkb3duICAgICAgICAgICAgICAgICAgUm9sbGJhY2sgdGhlIGxhc3QgbWlncmF0aW9uXG4gICAgLS10byA8bmFtZT4gICAgICAgICBSb2xsYmFjayB0byAoYW5kIGluY2x1ZGluZykgbWlncmF0aW9uIDxuYW1lPlxuICAgIC0tc3RlcCA8bj4gICAgICAgICAgUm9sbGJhY2sgPG4+IG1pZ3JhdGlvbnMgKGRlZmF1bHQ6IDEpXG4gICAgLS1hbGwgICAgICAgICAgICAgICBSb2xsYmFjayBhbGwgbWlncmF0aW9uc1xuXG4gIHN0YXR1cyAgICAgICAgICAgICAgICBTaG93IG1pZ3JhdGlvbiBzdGF0dXNcblxuICBwZW5kaW5nICAgICAgICAgICAgICAgU2hvdyBwZW5kaW5nIG1pZ3JhdGlvbnNcblxuICBnZW5lcmF0ZSA8bmFtZT4gICAgICAgQ3JlYXRlIGEgbmV3IGVtcHR5IG1pZ3JhdGlvbiBmaWxlXG4gIGNyZWF0ZSA8bmFtZT4gICAgICAgICBBbGlhcyBmb3IgZ2VuZXJhdGVcblxuICBnZW5lcmF0ZTplbnRpdGllcyAgICAgR2VuZXJhdGUgbWlncmF0aW9uIGZyb20gZW50aXR5IGRlZmluaXRpb25zXG4gICAgPG5hbWU+ICAgICAgICAgICAgICBPcHRpb25hbCBuYW1lIGZvciB0aGUgbWlncmF0aW9uXG5cbiAgc3luYyAgICAgICAgICAgICAgICAgIFN5bmMgc2NoZW1hIGRpcmVjdGx5IChkZXZlbG9wbWVudCBvbmx5ISlcbiAgICAtLWZvcmNlICAgICAgICAgICAgIERyb3AgYW5kIHJlY3JlYXRlIGFsbCB0YWJsZXNcblxuQ29uZmlndXJhdGlvbjpcbiAgQ3JlYXRlIGEgdXFsLmNvbmZpZy50cyBvciB1cWwuY29uZmlnLmpzIGZpbGUgaW4geW91ciBwcm9qZWN0IHJvb3Q6XG5cbiAgZXhwb3J0IGRlZmF1bHQge1xuICAgIHF1ZXJpZXJQb29sOiBuZXcgUGdRdWVyaWVyUG9vbCh7IC4uLiB9KSxcbiAgICBtaWdyYXRpb25zUGF0aDogJy4vbWlncmF0aW9ucycsXG4gICAgdGFibGVOYW1lOiAndXFsX21pZ3JhdGlvbnMnLFxuICAgIGRpYWxlY3Q6ICdwb3N0Z3JlcycsIC8vICdwb3N0Z3JlcycgfCAnbXlzcWwnIHwgJ21hcmlhZGInIHwgJ3NxbGl0ZSdcbiAgICBlbnRpdGllczogW1VzZXIsIFBvc3QsIC4uLl0sXG4gIH07XG5cbkV4YW1wbGVzOlxuICBAdXFsL21pZ3JhdGUgdXBcbiAgQHVxbC9taWdyYXRlIHVwIC0tc3RlcCAxXG4gIEB1cWwvbWlncmF0ZSBkb3duXG4gIEB1cWwvbWlncmF0ZSBkb3duIC0tc3RlcCAzXG4gIEB1cWwvbWlncmF0ZSBzdGF0dXNcbiAgQHVxbC9taWdyYXRlIGdlbmVyYXRlIGFkZF91c2Vyc190YWJsZVxuICBAdXFsL21pZ3JhdGUgZ2VuZXJhdGU6ZW50aXRpZXMgaW5pdGlhbF9zY2hlbWFcbmApO1xufVxuXG5tYWluKCkuY2F0Y2goY29uc29sZS5lcnJvcik7XG4iXX0=
@@ -0,0 +1,4 @@
1
+ export * from './mongoSchemaGenerator.js';
2
+ export { MysqlSchemaGenerator, MysqlSchemaGenerator as MariadbSchemaGenerator } from './mysqlSchemaGenerator.js';
3
+ export * from './postgresSchemaGenerator.js';
4
+ export * from './sqliteSchemaGenerator.js';
@@ -0,0 +1,5 @@
1
+ export * from './mongoSchemaGenerator.js';
2
+ export { MysqlSchemaGenerator, MysqlSchemaGenerator as MariadbSchemaGenerator } from './mysqlSchemaGenerator.js';
3
+ export * from './postgresSchemaGenerator.js';
4
+ export * from './sqliteSchemaGenerator.js';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbWlncmF0ZS9nZW5lcmF0b3IvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYywyQkFBMkIsQ0FBQztBQUMxQyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsb0JBQW9CLElBQUksc0JBQXNCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNqSCxjQUFjLDhCQUE4QixDQUFDO0FBQzdDLGNBQWMsNEJBQTRCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL21vbmdvU2NoZW1hR2VuZXJhdG9yLmpzJztcbmV4cG9ydCB7IE15c3FsU2NoZW1hR2VuZXJhdG9yLCBNeXNxbFNjaGVtYUdlbmVyYXRvciBhcyBNYXJpYWRiU2NoZW1hR2VuZXJhdG9yIH0gZnJvbSAnLi9teXNxbFNjaGVtYUdlbmVyYXRvci5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3Bvc3RncmVzU2NoZW1hR2VuZXJhdG9yLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vc3FsaXRlU2NoZW1hR2VuZXJhdG9yLmpzJztcbiJdfQ==
@@ -0,0 +1,12 @@
1
+ import { AbstractDialect } from '../../dialect/index.js';
2
+ import type { IndexSchema, SchemaDiff, SchemaGenerator, TableSchema, Type } from '../../type/index.js';
3
+ export declare class MongoSchemaGenerator extends AbstractDialect implements SchemaGenerator {
4
+ generateCreateTable<E>(entity: Type<E>): string;
5
+ generateDropTable<E>(entity: Type<E>): string;
6
+ generateAlterTable(diff: SchemaDiff): string[];
7
+ generateAlterTableDown(diff: SchemaDiff): string[];
8
+ generateCreateIndex(tableName: string, index: IndexSchema): string;
9
+ generateDropIndex(tableName: string, indexName: string): string;
10
+ getSqlType(): string;
11
+ diffSchema<E>(entity: Type<E>, currentSchema: TableSchema | undefined): SchemaDiff | undefined;
12
+ }
@@ -0,0 +1,100 @@
1
+ import { AbstractDialect } from '../../dialect/index.js';
2
+ import { getMeta } from '../../entity/index.js';
3
+ export class MongoSchemaGenerator extends AbstractDialect {
4
+ generateCreateTable(entity) {
5
+ const meta = getMeta(entity);
6
+ const collectionName = this.resolveTableName(entity, meta);
7
+ const indexes = [];
8
+ for (const key in meta.fields) {
9
+ const field = meta.fields[key];
10
+ if (field.index) {
11
+ const columnName = this.resolveColumnName(key, field);
12
+ const indexName = typeof field.index === 'string' ? field.index : `idx_${collectionName}_${columnName}`;
13
+ indexes.push({
14
+ name: indexName,
15
+ columns: [columnName],
16
+ unique: !!field.unique,
17
+ });
18
+ }
19
+ }
20
+ return JSON.stringify({ action: 'createCollection', name: collectionName, indexes });
21
+ }
22
+ generateDropTable(entity) {
23
+ const meta = getMeta(entity);
24
+ const collectionName = this.resolveTableName(entity, meta);
25
+ return JSON.stringify({ action: 'dropCollection', name: collectionName });
26
+ }
27
+ generateAlterTable(diff) {
28
+ const statements = [];
29
+ if (diff.indexesToAdd?.length) {
30
+ for (const index of diff.indexesToAdd) {
31
+ statements.push(this.generateCreateIndex(diff.tableName, index));
32
+ }
33
+ }
34
+ return statements;
35
+ }
36
+ generateAlterTableDown(diff) {
37
+ const statements = [];
38
+ if (diff.indexesToAdd?.length) {
39
+ for (const index of diff.indexesToAdd) {
40
+ statements.push(this.generateDropIndex(diff.tableName, index.name));
41
+ }
42
+ }
43
+ return statements;
44
+ }
45
+ generateCreateIndex(tableName, index) {
46
+ const key = {};
47
+ for (const col of index.columns) {
48
+ key[col] = 1;
49
+ }
50
+ return JSON.stringify({
51
+ action: 'createIndex',
52
+ collection: tableName,
53
+ name: index.name,
54
+ key,
55
+ options: { unique: index.unique, name: index.name },
56
+ });
57
+ }
58
+ generateDropIndex(tableName, indexName) {
59
+ return JSON.stringify({
60
+ action: 'dropIndex',
61
+ collection: tableName,
62
+ name: indexName,
63
+ });
64
+ }
65
+ getSqlType() {
66
+ return '';
67
+ }
68
+ diffSchema(entity, currentSchema) {
69
+ const meta = getMeta(entity);
70
+ const collectionName = this.resolveTableName(entity, meta);
71
+ if (!currentSchema) {
72
+ return { tableName: collectionName, type: 'create' };
73
+ }
74
+ const indexesToAdd = [];
75
+ const existingIndexes = new Set(currentSchema.indexes?.map((i) => i.name) ?? []);
76
+ for (const key in meta.fields) {
77
+ const field = meta.fields[key];
78
+ if (field.index) {
79
+ const columnName = this.resolveColumnName(key, field);
80
+ const indexName = typeof field.index === 'string' ? field.index : `idx_${collectionName}_${columnName}`;
81
+ if (!existingIndexes.has(indexName)) {
82
+ indexesToAdd.push({
83
+ name: indexName,
84
+ columns: [columnName],
85
+ unique: !!field.unique,
86
+ });
87
+ }
88
+ }
89
+ }
90
+ if (indexesToAdd.length === 0) {
91
+ return undefined;
92
+ }
93
+ return {
94
+ tableName: collectionName,
95
+ type: 'alter',
96
+ indexesToAdd,
97
+ };
98
+ }
99
+ }
100
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9uZ29TY2hlbWFHZW5lcmF0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbWlncmF0ZS9nZW5lcmF0b3IvbW9uZ29TY2hlbWFHZW5lcmF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUdoRCxNQUFNLE9BQU8sb0JBQXFCLFNBQVEsZUFBZTtJQUN2RCxtQkFBbUIsQ0FBSSxNQUFlO1FBQ3BDLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM3QixNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzNELE1BQU0sT0FBTyxHQUFrQixFQUFFLENBQUM7UUFFbEMsS0FBSyxNQUFNLEdBQUcsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDOUIsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUMvQixJQUFJLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDaEIsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFDdEQsTUFBTSxTQUFTLEdBQUcsT0FBTyxLQUFLLENBQUMsS0FBSyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsT0FBTyxjQUFjLElBQUksVUFBVSxFQUFFLENBQUM7Z0JBQ3hHLE9BQU8sQ0FBQyxJQUFJLENBQUM7b0JBQ1gsSUFBSSxFQUFFLFNBQVM7b0JBQ2YsT0FBTyxFQUFFLENBQUMsVUFBVSxDQUFDO29CQUNyQixNQUFNLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFN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dXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFic3RyYWN0RGlhbGVjdCB9IGZyb20gJy4uLy4uL2RpYWxlY3QvaW5kZXguanMnO1xuaW1wb3J0IHsgZ2V0TWV0YSB9IGZyb20gJy4uLy4uL2VudGl0eS9pbmRleC5qcyc7XG5pbXBvcnQgdHlwZSB7IEluZGV4U2NoZW1hLCBTY2hlbWFEaWZmLCBTY2hlbWFHZW5lcmF0b3IsIFRhYmxlU2NoZW1hLCBUeXBlIH0gZnJvbSAnLi4vLi4vdHlwZS9pbmRleC5qcyc7XG5cbmV4cG9ydCBjbGFzcyBNb25nb1NjaGVtYUdlbmVyYXRvciBleHRlbmRzIEFic3RyYWN0RGlhbGVjdCBpbXBsZW1lbnRzIFNjaGVtYUdlbmVyYXRvciB7XG4gIGdlbmVyYXRlQ3JlYXRlVGFibGU8RT4oZW50aXR5OiBUeXBlPEU+KTogc3RyaW5nIHtcbiAgICBjb25zdCBtZXRhID0gZ2V0TWV0YShlbnRpdHkpO1xuICAgIGNvbnN0IGNvbGxlY3Rpb25OYW1lID0gdGhpcy5yZXNvbHZlVGFibGVOYW1lKGVudGl0eSwgbWV0YSk7XG4gICAgY29uc3QgaW5kZXhlczogSW5kZXhTY2hlbWFbXSA9IFtdO1xuXG4gICAgZm9yIChjb25zdCBrZXkgaW4gbWV0YS5maWVsZHMpIHtcbiAgICAgIGNvbnN0IGZpZWxkID0gbWV0YS5maWVsZHNba2V5XTtcbiAgICAgIGlmIChmaWVsZC5pbmRleCkge1xuICAgICAgICBjb25zdCBjb2x1bW5OYW1lID0gdGhpcy5yZXNvbHZlQ29sdW1uTmFtZShrZXksIGZpZWxkKTtcbiAgICAgICAgY29uc3QgaW5kZXhOYW1lID0gdHlwZW9mIGZpZWxkLmluZGV4ID09PSAnc3RyaW5nJyA/IGZpZWxkLmluZGV4IDogYGlkeF8ke2NvbGxlY3Rpb25OYW1lfV8ke2NvbHVtbk5hbWV9YDtcbiAgICAgICAgaW5kZXhlcy5wdXNoKHtcbiAgICAgICAgICBuYW1lOiBpbmRleE5hbWUsXG4gICAgICAgICAgY29sdW1uczogW2NvbHVtbk5hbWVdLFxuICAgICAgICAgIHVuaXF1ZTogISFmaWVsZC51bmlxdWUsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh7IGFjdGlvbjogJ2NyZWF0ZUNvbGxlY3Rpb24nLCBuYW1lOiBjb2xsZWN0aW9uTmFtZSwgaW5kZXhlcyB9KTtcbiAgfVxuXG4gIGdlbmVyYXRlRHJvcFRhYmxlPEU+KGVudGl0eTogVHlwZTxFPik6IHN0cmluZyB7XG4gICAgY29uc3QgbWV0YSA9IGdldE1ldGEoZW50aXR5KTtcbiAgICBjb25zdCBjb2xsZWN0aW9uTmFtZSA9IHRoaXMucmVzb2x2ZVRhYmxlTmFtZShlbnRpdHksIG1ldGEpO1xuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh7IGFjdGlvbjogJ2Ryb3BDb2xsZWN0aW9uJywgbmFtZTogY29sbGVjdGlvbk5hbWUgfSk7XG4gIH1cblxuICBnZW5lcmF0ZUFsdGVyVGFibGUoZGlmZjogU2NoZW1hRGlmZik6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBzdGF0ZW1lbnRzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGlmIChkaWZmLmluZGV4ZXNUb0FkZD8ubGVuZ3RoKSB7XG4gICAgICBmb3IgKGNvbnN0IGluZGV4IG9mIGRpZmYuaW5kZXhlc1RvQWRkKSB7XG4gICAgICAgIHN0YXRlbWVudHMucHVzaCh0aGlzLmdlbmVyYXRlQ3JlYXRlSW5kZXgoZGlmZi50YWJsZU5hbWUsIGluZGV4KSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBzdGF0ZW1lbnRzO1xuICB9XG5cbiAgZ2VuZXJhdGVBbHRlclRhYmxlRG93bihkaWZmOiBTY2hlbWFEaWZmKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IHN0YXRlbWVudHM6IHN0cmluZ1tdID0gW107XG4gICAgaWYgKGRpZmYuaW5kZXhlc1RvQWRkPy5sZW5ndGgpIHtcbiAgICAgIGZvciAoY29uc3QgaW5kZXggb2YgZGlmZi5pbmRleGVzVG9BZGQpIHtcbiAgICAgICAgc3RhdGVtZW50cy5wdXNoKHRoaXMuZ2VuZXJhdGVEcm9wSW5kZXgoZGlmZi50YWJsZU5hbWUsIGluZGV4Lm5hbWUpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHN0YXRlbWVudHM7XG4gIH1cblxuICBnZW5lcmF0ZUNyZWF0ZUluZGV4KHRhYmxlTmFtZTogc3RyaW5nLCBpbmRleDogSW5kZXhTY2hlbWEpOiBzdHJpbmcge1xuICAgIGNvbnN0IGtleTogUmVjb3JkPHN0cmluZywgbnVtYmVyPiA9IHt9O1xuICAgIGZvciAoY29uc3QgY29sIG9mIGluZGV4LmNvbHVtbnMpIHtcbiAgICAgIGtleVtjb2xdID0gMTtcbiAgICB9XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHtcbiAgICAgIGFjdGlvbjogJ2NyZWF0ZUluZGV4JyxcbiAgICAgIGNvbGxlY3Rpb246IHRhYmxlTmFtZSxcbiAgICAgIG5hbWU6IGluZGV4Lm5hbWUsXG4gICAgICBrZXksXG4gICAgICBvcHRpb25zOiB7IHVuaXF1ZTogaW5kZXgudW5pcXVlLCBuYW1lOiBpbmRleC5uYW1lIH0sXG4gICAgfSk7XG4gIH1cblxuICBnZW5lcmF0ZURyb3BJbmRleCh0YWJsZU5hbWU6IHN0cmluZywgaW5kZXhOYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICBhY3Rpb246ICdkcm9wSW5kZXgnLFxuICAgICAgY29sbGVjdGlvbjogdGFibGVOYW1lLFxuICAgICAgbmFtZTogaW5kZXhOYW1lLFxuICAgIH0pO1xuICB9XG5cbiAgZ2V0U3FsVHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIGRpZmZTY2hlbWE8RT4oZW50aXR5OiBUeXBlPEU+LCBjdXJyZW50U2NoZW1hOiBUYWJsZVNjaGVtYSB8IHVuZGVmaW5lZCk6IFNjaGVtYURpZmYgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IG1ldGEgPSBnZXRNZXRhKGVudGl0eSk7XG4gICAgY29uc3QgY29sbGVjdGlvbk5hbWUgPSB0aGlzLnJlc29sdmVUYWJsZU5hbWUoZW50aXR5LCBtZXRhKTtcblxuICAgIGlmICghY3VycmVudFNjaGVtYSkge1xuICAgICAgcmV0dXJuIHsgdGFibGVOYW1lOiBjb2xsZWN0aW9uTmFtZSwgdHlwZTogJ2NyZWF0ZScgfTtcbiAgICB9XG5cbiAgICBjb25zdCBpbmRleGVzVG9BZGQ6IEluZGV4U2NoZW1hW10gPSBbXTtcbiAgICBjb25zdCBleGlzdGluZ0luZGV4ZXMgPSBuZXcgU2V0KGN1cnJlbnRTY2hlbWEuaW5kZXhlcz8ubWFwKChpOiBJbmRleFNjaGVtYSkgPT4gaS5uYW1lKSA/PyBbXSk7XG5cbiAgICBmb3IgKGNvbnN0IGtleSBpbiBtZXRhLmZpZWxkcykge1xuICAgICAgY29uc3QgZmllbGQgPSBtZXRhLmZpZWxkc1trZXldO1xuICAgICAgaWYgKGZpZWxkLmluZGV4KSB7XG4gICAgICAgIGNvbnN0IGNvbHVtbk5hbWUgPSB0aGlzLnJlc29sdmVDb2x1bW5OYW1lKGtleSwgZmllbGQpO1xuICAgICAgICBjb25zdCBpbmRleE5hbWUgPSB0eXBlb2YgZmllbGQuaW5kZXggPT09ICdzdHJpbmcnID8gZmllbGQuaW5kZXggOiBgaWR4XyR7Y29sbGVjdGlvbk5hbWV9XyR7Y29sdW1uTmFtZX1gO1xuICAgICAgICBpZiAoIWV4aXN0aW5nSW5kZXhlcy5oYXMoaW5kZXhOYW1lKSkge1xuICAgICAgICAgIGluZGV4ZXNUb0FkZC5wdXNoKHtcbiAgICAgICAgICAgIG5hbWU6IGluZGV4TmFtZSxcbiAgICAgICAgICAgIGNvbHVtbnM6IFtjb2x1bW5OYW1lXSxcbiAgICAgICAgICAgIHVuaXF1ZTogISFmaWVsZC51bmlxdWUsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaW5kZXhlc1RvQWRkLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgdGFibGVOYW1lOiBjb2xsZWN0aW9uTmFtZSxcbiAgICAgIHR5cGU6ICdhbHRlcicsXG4gICAgICBpbmRleGVzVG9BZGQsXG4gICAgfTtcbiAgfVxufVxuIl19
@@ -0,0 +1,14 @@
1
+ import type { ColumnSchema, ColumnType, FieldOptions } from '../../type/index.js';
2
+ import { AbstractSchemaGenerator } from '../schemaGenerator.js';
3
+ /**
4
+ * MySQL/MariaDB-specific schema generator
5
+ */
6
+ export declare class MysqlSchemaGenerator extends AbstractSchemaGenerator {
7
+ protected readonly serialPrimaryKeyType = "INT AUTO_INCREMENT PRIMARY KEY";
8
+ mapColumnType(columnType: ColumnType, field: FieldOptions): string;
9
+ getBooleanType(): string;
10
+ generateAlterColumnStatements(tableName: string, column: ColumnSchema, newDefinition: string): string[];
11
+ generateColumnComment(tableName: string, columnName: string, comment: string): string;
12
+ getTableOptions<E>(): string;
13
+ generateDropIndex(tableName: string, indexName: string): string;
14
+ }
@@ -0,0 +1,81 @@
1
+ import { AbstractSchemaGenerator } from '../schemaGenerator.js';
2
+ /**
3
+ * MySQL/MariaDB-specific schema generator
4
+ */
5
+ export class MysqlSchemaGenerator extends AbstractSchemaGenerator {
6
+ serialPrimaryKeyType = 'INT AUTO_INCREMENT PRIMARY KEY';
7
+ mapColumnType(columnType, field) {
8
+ switch (columnType) {
9
+ case 'int':
10
+ return 'INT';
11
+ case 'smallint':
12
+ return 'SMALLINT';
13
+ case 'bigint':
14
+ return 'BIGINT';
15
+ case 'float':
16
+ return 'FLOAT';
17
+ case 'double':
18
+ case 'real':
19
+ return 'DOUBLE';
20
+ case 'decimal':
21
+ case 'numeric':
22
+ if (field.precision !== undefined) {
23
+ if (field.scale !== undefined) {
24
+ return `DECIMAL(${field.precision}, ${field.scale})`;
25
+ }
26
+ return `DECIMAL(${field.precision})`;
27
+ }
28
+ return 'DECIMAL(10, 2)';
29
+ case 'boolean':
30
+ return 'TINYINT(1)';
31
+ case 'char':
32
+ return `CHAR(${field.length ?? 1})`;
33
+ case 'varchar':
34
+ return `VARCHAR(${field.length ?? 255})`;
35
+ case 'text':
36
+ return 'TEXT';
37
+ case 'uuid':
38
+ return 'CHAR(36)';
39
+ case 'date':
40
+ return 'DATE';
41
+ case 'time':
42
+ return 'TIME';
43
+ case 'timestamp':
44
+ case 'timestamptz':
45
+ return 'TIMESTAMP';
46
+ case 'json':
47
+ case 'jsonb':
48
+ return 'JSON';
49
+ case 'blob':
50
+ case 'bytea':
51
+ return 'BLOB';
52
+ case 'vector':
53
+ // MySQL doesn't have native vector support, use JSON
54
+ return 'JSON';
55
+ case 'serial':
56
+ return 'INT AUTO_INCREMENT';
57
+ case 'bigserial':
58
+ return 'BIGINT AUTO_INCREMENT';
59
+ default:
60
+ return 'TEXT';
61
+ }
62
+ }
63
+ getBooleanType() {
64
+ return 'TINYINT(1)';
65
+ }
66
+ generateAlterColumnStatements(tableName, column, newDefinition) {
67
+ return [`ALTER TABLE ${this.escapeId(tableName)} MODIFY COLUMN ${newDefinition};`];
68
+ }
69
+ generateColumnComment(tableName, columnName, comment) {
70
+ const escapedComment = comment.replace(/'/g, "''");
71
+ return ` COMMENT '${escapedComment}'`;
72
+ }
73
+ getTableOptions() {
74
+ return ' ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci';
75
+ }
76
+ generateDropIndex(tableName, indexName) {
77
+ // MySQL requires table name in DROP INDEX
78
+ return `DROP INDEX ${this.escapeId(indexName)} ON ${this.escapeId(tableName)};`;
79
+ }
80
+ }
81
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXlzcWxTY2hlbWFHZW5lcmF0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbWlncmF0ZS9nZW5lcmF0b3IvbXlzcWxTY2hlbWFHZW5lcmF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFaEU7O0dBRUc7QUFDSCxNQUFNLE9BQU8sb0JBQXFCLFNBQVEsdUJBQXVCO0lBQzVDLG9CQUFvQixHQUFHLGdDQUFnQyxDQUFDO0lBRTNELGFBQWEsQ0FBQyxVQUFzQixFQUFFLEtBQW1CO1FBQ3ZFLFFBQVEsVUFBVSxFQUFFLENBQUM7WUFDbkIsS0FBSyxLQUFLO2dCQUNSLE9BQU8sS0FBSyxDQUFDO1lBQ2YsS0FBSyxVQUFVO2dCQUNiLE9BQU8sVUFBVSxDQUFDO1lBQ3BCLEtBQUssUUFBUTtnQkFDWCxPQUFPLFFBQVEsQ0FBQztZQUNsQixLQUFLLE9BQU87Z0JBQ1YsT0FBTyxPQUFPLENBQUM7WUFDakIsS0FBSyxRQUFRLENBQUM7WUFDZCxLQUFLLE1BQU07Z0JBQ1QsT0FBTyxRQUFRLENBQUM7WUFDbEIsS0FBSyxTQUFTLENBQUM7WUFDZixLQUFLLFNBQVM7Z0JBQ1osSUFBSSxLQUFLLENBQUMsU0FBUyxLQUFLLFNBQVMsRUFBRSxDQUFDO29CQUNsQyxJQUFJLEtBQUssQ0FBQyxLQUFLLEtBQUssU0FBUyxFQUFFLENBQUM7d0JBQzlCLE9BQU8sV0FBVyxLQUFLLENBQUMsU0FBUyxLQUFLLEtBQUssQ0FBQyxLQUFLLEdBQUcsQ0FBQztvQkFDdkQsQ0FBQztvQkFDRCxPQUFPLFdBQVcsS0FBSyxDQUFDLFNBQVMsR0FBRyxDQUFDO2dCQUN2QyxDQUFDO2dCQUNELE9BQU8sZ0JBQWdCLENBQUM7WUFDMUIsS0FBSyxTQUFTO2dCQUNaLE9BQU8sWUFBWSxDQUFDO1lBQ3RCLEtBQUssTUFBTTtnQkFDVCxPQUFPLFFBQVEsS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQztZQUN0QyxLQUFLLFNBQVM7Z0JBQ1osT0FBTyxXQUFXLEtBQUssQ0FBQyxNQUFNLElBQUksR0FBRyxHQUFHLENBQUM7WUFDM0MsS0FBSyxNQUFNO2dCQUNULE9BQU8sTUFBTSxDQUFDO1lBQ2hCLEtBQUssTUFBTTtnQkFDVCxPQUFPLFVBQVUsQ0FBQztZQUNwQixLQUFLLE1BQU07Z0JBQ1QsT0FBTyxNQUFNLENBQUM7WUFDaEIsS0FBSyxNQUFNO2dCQUNULE9BQU8sTUFBTSxDQUFDO1lBQ2hCLEtBQUssV0FBVyxDQUFDO1lBQ2pCLEtBQUssYUFBYTtnQkFDaEIsT0FBTyxXQUFXLENBQUM7WUFDckIsS0FBSyxNQUFNLENBQUM7WUFDWixLQUFLLE9BQU87Z0JBQ1YsT0FBTyxNQUFNLENBQUM7WUFDaEIsS0FBSyxNQUFNLENBQUM7WUFDWixLQUFLLE9BQU87Z0JBQ1YsT0FBTyxNQUFNLENBQUM7WUFDaEIsS0FBSyxRQUFRO2dCQUNYLHFEQUFxRDtnQkFDckQsT0FBTyxNQUFNLENBQUM7WUFDaEIsS0FBSyxRQUFRO2dCQUNYLE9BQU8sb0JBQW9CLENBQUM7WUFDOUIsS0FBSyxXQUFXO2dCQUNkLE9BQU8sdUJBQXVCLENBQUM7WUFDakM7Z0JBQ0UsT0FBTyxNQUFNLENBQUM7UUFDbEIsQ0FBQztJQUNILENBQUM7SUFFZSxjQUFjO1FBQzVCLE9BQU8sWUFBWSxDQUFDO0lBQ3RCLENBQUM7SUFFZSw2QkFBNkIsQ0FDM0MsU0FBaUIsRUFDakIsTUFBb0IsRUFDcEIsYUFBcUI7UUFFckIsT0FBTyxDQUFDLGVBQWUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsa0JBQWtCLGFBQWEsR0FBRyxDQUFDLENBQUM7SUFDckYsQ0FBQztJQUVlLHFCQUFxQixDQUFDLFNBQWlCLEVBQUUsVUFBa0IsRUFBRSxPQUFlO1FBQzFGLE1BQU0sY0FBYyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ25ELE9BQU8sYUFBYSxjQUFjLEdBQUcsQ0FBQztJQUN4QyxDQUFDO0lBRVEsZUFBZTtRQUN0QixPQUFPLG1FQUFtRSxDQUFDO0lBQzdFLENBQUM7SUFFUSxpQkFBaUIsQ0FBQyxTQUFpQixFQUFFLFNBQWlCO1FBQzdELDBDQUEwQztRQUMxQyxPQUFPLGNBQWMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUM7SUFDbEYsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBDb2x1bW5TY2hlbWEsIENvbHVtblR5cGUsIEZpZWxkT3B0aW9ucyB9IGZyb20gJy4uLy4uL3R5cGUvaW5kZXguanMnO1xuaW1wb3J0IHsgQWJzdHJhY3RTY2hlbWFHZW5lcmF0b3IgfSBmcm9tICcuLi9zY2hlbWFHZW5lcmF0b3IuanMnO1xuXG4vKipcbiAqIE15U1FML01hcmlhREItc3BlY2lmaWMgc2NoZW1hIGdlbmVyYXRvclxuICovXG5leHBvcnQgY2xhc3MgTXlzcWxTY2hlbWFHZW5lcmF0b3IgZXh0ZW5kcyBBYnN0cmFjdFNjaGVtYUdlbmVyYXRvciB7XG4gIHByb3RlY3RlZCByZWFkb25seSBzZXJpYWxQcmltYXJ5S2V5VHlwZSA9ICdJTlQgQVVUT19JTkNSRU1FTlQgUFJJTUFSWSBLRVknO1xuXG4gIHB1YmxpYyBvdmVycmlkZSBtYXBDb2x1bW5UeXBlKGNvbHVtblR5cGU6IENvbHVtblR5cGUsIGZpZWxkOiBGaWVsZE9wdGlvbnMpOiBzdHJpbmcge1xuICAgIHN3aXRjaCAoY29sdW1uVHlwZSkge1xuICAgICAgY2FzZSAnaW50JzpcbiAgICAgICAgcmV0dXJuICdJTlQnO1xuICAgICAgY2FzZSAnc21hbGxpbnQnOlxuICAgICAgICByZXR1cm4gJ1NNQUxMSU5UJztcbiAgICAgIGNhc2UgJ2JpZ2ludCc6XG4gICAgICAgIHJldHVybiAnQklHSU5UJztcbiAgICAgIGNhc2UgJ2Zsb2F0JzpcbiAgICAgICAgcmV0dXJuICdGTE9BVCc7XG4gICAgICBjYXNlICdkb3VibGUnOlxuICAgICAgY2FzZSAncmVhbCc6XG4gICAgICAgIHJldHVybiAnRE9VQkxFJztcbiAgICAgIGNhc2UgJ2RlY2ltYWwnOlxuICAgICAgY2FzZSAnbnVtZXJpYyc6XG4gICAgICAgIGlmIChmaWVsZC5wcmVjaXNpb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGlmIChmaWVsZC5zY2FsZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gYERFQ0lNQUwoJHtmaWVsZC5wcmVjaXNpb259LCAke2ZpZWxkLnNjYWxlfSlgO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gYERFQ0lNQUwoJHtmaWVsZC5wcmVjaXNpb259KWA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICdERUNJTUFMKDEwLCAyKSc7XG4gICAgICBjYXNlICdib29sZWFuJzpcbiAgICAgICAgcmV0dXJuICdUSU5ZSU5UKDEpJztcbiAgICAgIGNhc2UgJ2NoYXInOlxuICAgICAgICByZXR1cm4gYENIQVIoJHtmaWVsZC5sZW5ndGggPz8gMX0pYDtcbiAgICAgIGNhc2UgJ3ZhcmNoYXInOlxuICAgICAgICByZXR1cm4gYFZBUkNIQVIoJHtmaWVsZC5sZW5ndGggPz8gMjU1fSlgO1xuICAgICAgY2FzZSAndGV4dCc6XG4gICAgICAgIHJldHVybiAnVEVYVCc7XG4gICAgICBjYXNlICd1dWlkJzpcbiAgICAgICAgcmV0dXJuICdDSEFSKDM2KSc7XG4gICAgICBjYXNlICdkYXRlJzpcbiAgICAgICAgcmV0dXJuICdEQVRFJztcbiAgICAgIGNhc2UgJ3RpbWUnOlxuICAgICAgICByZXR1cm4gJ1RJTUUnO1xuICAgICAgY2FzZSAndGltZXN0YW1wJzpcbiAgICAgIGNhc2UgJ3RpbWVzdGFtcHR6JzpcbiAgICAgICAgcmV0dXJuICdUSU1FU1RBTVAnO1xuICAgICAgY2FzZSAnanNvbic6XG4gICAgICBjYXNlICdqc29uYic6XG4gICAgICAgIHJldHVybiAnSlNPTic7XG4gICAgICBjYXNlICdibG9iJzpcbiAgICAgIGNhc2UgJ2J5dGVhJzpcbiAgICAgICAgcmV0dXJuICdCTE9CJztcbiAgICAgIGNhc2UgJ3ZlY3Rvcic6XG4gICAgICAgIC8vIE15U1FMIGRvZXNuJ3QgaGF2ZSBuYXRpdmUgdmVjdG9yIHN1cHBvcnQsIHVzZSBKU09OXG4gICAgICAgIHJldHVybiAnSlNPTic7XG4gICAgICBjYXNlICdzZXJpYWwnOlxuICAgICAgICByZXR1cm4gJ0lOVCBBVVRPX0lOQ1JFTUVOVCc7XG4gICAgICBjYXNlICdiaWdzZXJpYWwnOlxuICAgICAgICByZXR1cm4gJ0JJR0lOVCBBVVRPX0lOQ1JFTUVOVCc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJ1RFWFQnO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBvdmVycmlkZSBnZXRCb29sZWFuVHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiAnVElOWUlOVCgxKSc7XG4gIH1cblxuICBwdWJsaWMgb3ZlcnJpZGUgZ2VuZXJhdGVBbHRlckNvbHVtblN0YXRlbWVudHMoXG4gICAgdGFibGVOYW1lOiBzdHJpbmcsXG4gICAgY29sdW1uOiBDb2x1bW5TY2hlbWEsXG4gICAgbmV3RGVmaW5pdGlvbjogc3RyaW5nLFxuICApOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIFtgQUxURVIgVEFCTEUgJHt0aGlzLmVzY2FwZUlkKHRhYmxlTmFtZSl9IE1PRElGWSBDT0xVTU4gJHtuZXdEZWZpbml0aW9ufTtgXTtcbiAgfVxuXG4gIHB1YmxpYyBvdmVycmlkZSBnZW5lcmF0ZUNvbHVtbkNvbW1lbnQodGFibGVOYW1lOiBzdHJpbmcsIGNvbHVtbk5hbWU6IHN0cmluZywgY29tbWVudDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBlc2NhcGVkQ29tbWVudCA9IGNvbW1lbnQucmVwbGFjZSgvJy9nLCBcIicnXCIpO1xuICAgIHJldHVybiBgIENPTU1FTlQgJyR7ZXNjYXBlZENvbW1lbnR9J2A7XG4gIH1cblxuICBvdmVycmlkZSBnZXRUYWJsZU9wdGlvbnM8RT4oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gJyBFTkdJTkU9SW5ub0RCIERFRkFVTFQgQ0hBUlNFVD11dGY4bWI0IENPTExBVEU9dXRmOG1iNF91bmljb2RlX2NpJztcbiAgfVxuXG4gIG92ZXJyaWRlIGdlbmVyYXRlRHJvcEluZGV4KHRhYmxlTmFtZTogc3RyaW5nLCBpbmRleE5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgLy8gTXlTUUwgcmVxdWlyZXMgdGFibGUgbmFtZSBpbiBEUk9QIElOREVYXG4gICAgcmV0dXJuIGBEUk9QIElOREVYICR7dGhpcy5lc2NhcGVJZChpbmRleE5hbWUpfSBPTiAke3RoaXMuZXNjYXBlSWQodGFibGVOYW1lKX07YDtcbiAgfVxufVxuIl19
@@ -0,0 +1,18 @@
1
+ import type { ColumnSchema, ColumnType, FieldOptions, NamingStrategy } from '../../type/index.js';
2
+ import { AbstractSchemaGenerator } from '../schemaGenerator.js';
3
+ /**
4
+ * PostgreSQL-specific schema generator
5
+ */
6
+ export declare class PostgresSchemaGenerator extends AbstractSchemaGenerator {
7
+ protected readonly serialPrimaryKeyType = "SERIAL PRIMARY KEY";
8
+ constructor(namingStrategy?: NamingStrategy);
9
+ mapColumnType(columnType: ColumnType, field: FieldOptions): string;
10
+ getBooleanType(): string;
11
+ generateAlterColumnStatements(tableName: string, column: ColumnSchema, newDefinition: string): string[];
12
+ generateColumnComment(tableName: string, columnName: string, comment: string): string;
13
+ /**
14
+ * Generate COMMENT ON COLUMN statement for PostgreSQL
15
+ */
16
+ generateColumnCommentStatement(tableName: string, columnName: string, comment: string): string;
17
+ generateDropIndex(tableName: string, indexName: string): string;
18
+ }