@dbml/cli 3.6.2 → 3.7.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 (295) hide show
  1. package/.babelrc +0 -0
  2. package/LICENSE +0 -0
  3. package/README.md +0 -0
  4. package/__test__/cli.test.js +7 -1
  5. package/__test__/db2dbml/mssql/dbml-error.log +467 -0
  6. package/__test__/db2dbml/mssql/expect-out-files/schema.dbml +190 -0
  7. package/__test__/db2dbml/mssql/options.json +8 -0
  8. package/__test__/db2dbml/mssql/schema.sql +296 -0
  9. package/__test__/db2dbml/mssql/stdout.txt +1 -0
  10. package/__test__/db2dbml/mysql/dbml-error.log +281 -0
  11. package/__test__/db2dbml/mysql/expect-out-files/schema.dbml +180 -0
  12. package/__test__/db2dbml/mysql/options.json +8 -0
  13. package/__test__/db2dbml/mysql/out-files/schema.dbml +180 -0
  14. package/__test__/db2dbml/mysql/schema.sql +141 -0
  15. package/__test__/db2dbml/mysql/stdout.txt +1 -0
  16. package/__test__/db2dbml/postgres/dbml-error.log +252 -0
  17. package/__test__/db2dbml/postgres/expect-out-files/schema.dbml +140 -0
  18. package/__test__/db2dbml/postgres/options.json +8 -0
  19. package/__test__/db2dbml/postgres/out-files/schema.dbml +140 -0
  20. package/__test__/db2dbml/postgres/schema.sql +156 -0
  21. package/__test__/db2dbml/postgres/stdout.txt +1 -0
  22. package/__test__/db2dbml_bin.js +5 -0
  23. package/__test__/dbml2sql/filename --mysql --out-file/dbml-error.log +0 -36
  24. package/__test__/dbml2sql/filename --mysql --out-file/expect-out-files/schema.sql +0 -0
  25. package/__test__/dbml2sql/filename --mysql --out-file/in-files/schema.dbml +0 -0
  26. package/__test__/dbml2sql/filename --mysql --out-file/options.json +0 -0
  27. package/__test__/dbml2sql/filename --mysql --out-file/out-files/schema.sql +1 -1
  28. package/__test__/dbml2sql/filename --mysql --out-file/stdout.txt +0 -0
  29. package/__test__/dbml2sql/filename --mysql stdout/dbml-error.log +0 -0
  30. package/__test__/dbml2sql/filename --mysql stdout/in-files/schema.dbml +0 -0
  31. package/__test__/dbml2sql/filename --mysql stdout/options.json +0 -0
  32. package/__test__/dbml2sql/filename --mysql stdout/stdout.txt +0 -0
  33. package/__test__/dbml2sql/filename --oracle --out-file/dbml-error.log +0 -0
  34. package/__test__/dbml2sql/filename --oracle --out-file/expect-out-files/schema.sql +0 -0
  35. package/__test__/dbml2sql/filename --oracle --out-file/in-files/schema.dbml +0 -0
  36. package/__test__/dbml2sql/filename --oracle --out-file/options.json +0 -0
  37. package/__test__/dbml2sql/filename --oracle --out-file/out-files/schema.sql +1 -1
  38. package/__test__/dbml2sql/filename --oracle --out-file/stdout.txt +0 -0
  39. package/__test__/dbml2sql/filename --oracle stdout/dbml-error.log +0 -0
  40. package/__test__/dbml2sql/filename --oracle stdout/in-files/schema.dbml +0 -0
  41. package/__test__/dbml2sql/filename --oracle stdout/options.json +0 -0
  42. package/__test__/dbml2sql/filename --oracle stdout/stdout.txt +0 -0
  43. package/__test__/dbml2sql/filename --out-file/dbml-error.log +0 -36
  44. package/__test__/dbml2sql/filename --out-file/expect-out-files/schema.sql +0 -0
  45. package/__test__/dbml2sql/filename --out-file/in-files/schema.dbml +0 -0
  46. package/__test__/dbml2sql/filename --out-file/options.json +0 -0
  47. package/__test__/dbml2sql/filename --out-file/out-files/schema.sql +1 -1
  48. package/__test__/dbml2sql/filename --out-file/stdout.txt +0 -0
  49. package/__test__/dbml2sql/filename --postgres --out-file/dbml-error.log +0 -24
  50. package/__test__/dbml2sql/filename --postgres --out-file/expect-out-files/schema.sql +0 -0
  51. package/__test__/dbml2sql/filename --postgres --out-file/in-files/schema.dbml +0 -0
  52. package/__test__/dbml2sql/filename --postgres --out-file/options.json +0 -0
  53. package/__test__/dbml2sql/filename --postgres --out-file/out-files/schema.sql +1 -1
  54. package/__test__/dbml2sql/filename --postgres --out-file/stdout.txt +0 -0
  55. package/__test__/dbml2sql/filename --postgres stdout/dbml-error.log +0 -0
  56. package/__test__/dbml2sql/filename --postgres stdout/in-files/schema.dbml +0 -0
  57. package/__test__/dbml2sql/filename --postgres stdout/options.json +0 -0
  58. package/__test__/dbml2sql/filename --postgres stdout/stdout.txt +0 -0
  59. package/__test__/dbml2sql/filename stdout/dbml-error.log +0 -0
  60. package/__test__/dbml2sql/filename stdout/in-files/schema.dbml +0 -0
  61. package/__test__/dbml2sql/filename stdout/options.json +0 -0
  62. package/__test__/dbml2sql/filename stdout/stdout.txt +0 -0
  63. package/__test__/dbml2sql/filenames --mysql --out-file/dbml-error.log +0 -24
  64. package/__test__/dbml2sql/filenames --mysql --out-file/expect-out-files/schema.sql +0 -0
  65. package/__test__/dbml2sql/filenames --mysql --out-file/in-files/business.dbml +0 -0
  66. package/__test__/dbml2sql/filenames --mysql --out-file/in-files/customer.dbml +0 -0
  67. package/__test__/dbml2sql/filenames --mysql --out-file/in-files/inventory.dbml +0 -0
  68. package/__test__/dbml2sql/filenames --mysql --out-file/options.json +0 -0
  69. package/__test__/dbml2sql/filenames --mysql --out-file/out-files/schema.sql +1 -1
  70. package/__test__/dbml2sql/filenames --mysql --out-file/stdout.txt +0 -0
  71. package/__test__/dbml2sql/filenames --mysql stdout/dbml-error.log +0 -0
  72. package/__test__/dbml2sql/filenames --mysql stdout/in-files/business.dbml +0 -0
  73. package/__test__/dbml2sql/filenames --mysql stdout/in-files/customer.dbml +0 -0
  74. package/__test__/dbml2sql/filenames --mysql stdout/in-files/inventory.dbml +0 -0
  75. package/__test__/dbml2sql/filenames --mysql stdout/options.json +0 -0
  76. package/__test__/dbml2sql/filenames --mysql stdout/stdout.txt +0 -0
  77. package/__test__/dbml2sql/filenames --oracle --out-file/dbml-error.log +0 -0
  78. package/__test__/dbml2sql/filenames --oracle --out-file/expect-out-files/schema.sql +0 -0
  79. package/__test__/dbml2sql/filenames --oracle --out-file/in-files/business.dbml +0 -0
  80. package/__test__/dbml2sql/filenames --oracle --out-file/in-files/customer.dbml +0 -0
  81. package/__test__/dbml2sql/filenames --oracle --out-file/in-files/inventory.dbml +0 -0
  82. package/__test__/dbml2sql/filenames --oracle --out-file/options.json +0 -0
  83. package/__test__/dbml2sql/filenames --oracle --out-file/out-files/schema.sql +1 -1
  84. package/__test__/dbml2sql/filenames --oracle --out-file/stdout.txt +0 -0
  85. package/__test__/dbml2sql/filenames --oracle stdout/dbml-error.log +0 -0
  86. package/__test__/dbml2sql/filenames --oracle stdout/in-files/business.dbml +0 -0
  87. package/__test__/dbml2sql/filenames --oracle stdout/in-files/customer.dbml +0 -0
  88. package/__test__/dbml2sql/filenames --oracle stdout/in-files/inventory.dbml +0 -0
  89. package/__test__/dbml2sql/filenames --oracle stdout/options.json +0 -0
  90. package/__test__/dbml2sql/filenames --oracle stdout/stdout.txt +0 -0
  91. package/__test__/dbml2sql/filenames --out-file/dbml-error.log +0 -24
  92. package/__test__/dbml2sql/filenames --out-file/expect-out-files/schema.sql +0 -0
  93. package/__test__/dbml2sql/filenames --out-file/in-files/business.dbml +0 -0
  94. package/__test__/dbml2sql/filenames --out-file/in-files/customer.dbml +0 -0
  95. package/__test__/dbml2sql/filenames --out-file/in-files/inventory.dbml +0 -0
  96. package/__test__/dbml2sql/filenames --out-file/options.json +0 -0
  97. package/__test__/dbml2sql/filenames --out-file/out-files/schema.sql +1 -1
  98. package/__test__/dbml2sql/filenames --out-file/stdout.txt +0 -0
  99. package/__test__/dbml2sql/filenames --postgres --out-file/dbml-error.log +0 -24
  100. package/__test__/dbml2sql/filenames --postgres --out-file/expect-out-files/schema.sql +0 -0
  101. package/__test__/dbml2sql/filenames --postgres --out-file/in-files/business.dbml +0 -0
  102. package/__test__/dbml2sql/filenames --postgres --out-file/in-files/customer.dbml +0 -0
  103. package/__test__/dbml2sql/filenames --postgres --out-file/in-files/inventory.dbml +0 -0
  104. package/__test__/dbml2sql/filenames --postgres --out-file/options.json +0 -0
  105. package/__test__/dbml2sql/filenames --postgres --out-file/out-files/schema.sql +1 -1
  106. package/__test__/dbml2sql/filenames --postgres --out-file/stdout.txt +0 -0
  107. package/__test__/dbml2sql/filenames --postgres stdout/dbml-error.log +0 -0
  108. package/__test__/dbml2sql/filenames --postgres stdout/in-files/business.dbml +0 -0
  109. package/__test__/dbml2sql/filenames --postgres stdout/in-files/customer.dbml +0 -0
  110. package/__test__/dbml2sql/filenames --postgres stdout/in-files/inventory.dbml +0 -0
  111. package/__test__/dbml2sql/filenames --postgres stdout/options.json +0 -0
  112. package/__test__/dbml2sql/filenames --postgres stdout/stdout.txt +0 -0
  113. package/__test__/dbml2sql/filenames stdout/dbml-error.log +0 -0
  114. package/__test__/dbml2sql/filenames stdout/in-files/business.dbml +0 -0
  115. package/__test__/dbml2sql/filenames stdout/in-files/customer.dbml +0 -0
  116. package/__test__/dbml2sql/filenames stdout/in-files/inventory.dbml +0 -0
  117. package/__test__/dbml2sql/filenames stdout/options.json +0 -0
  118. package/__test__/dbml2sql/filenames stdout/stdout.txt +0 -0
  119. package/__test__/dbml2sql/multiple_schema_mssql/dbml-error.log +0 -24
  120. package/__test__/dbml2sql/multiple_schema_mssql/expect-out-files/multiple_schema.out.sql +0 -0
  121. package/__test__/dbml2sql/multiple_schema_mssql/in-files/multiple_schema.in.dbml +0 -0
  122. package/__test__/dbml2sql/multiple_schema_mssql/options.json +0 -0
  123. package/__test__/dbml2sql/multiple_schema_mssql/out-files/multiple_schema.out.sql +1 -1
  124. package/__test__/dbml2sql/multiple_schema_mssql/stdout.txt +0 -0
  125. package/__test__/dbml2sql/multiple_schema_mysql/dbml-error.log +0 -24
  126. package/__test__/dbml2sql/multiple_schema_mysql/expect-out-files/multiple_schema.out.sql +0 -0
  127. package/__test__/dbml2sql/multiple_schema_mysql/in-files/multiple_schema.in.dbml +0 -0
  128. package/__test__/dbml2sql/multiple_schema_mysql/options.json +0 -0
  129. package/__test__/dbml2sql/multiple_schema_mysql/out-files/multiple_schema.out.sql +1 -1
  130. package/__test__/dbml2sql/multiple_schema_mysql/stdout.txt +0 -0
  131. package/__test__/dbml2sql/multiple_schema_oracle/dbml-error.log +0 -0
  132. package/__test__/dbml2sql/multiple_schema_oracle/expect-out-files/multiple_schema.out.sql +0 -0
  133. package/__test__/dbml2sql/multiple_schema_oracle/in-files/multiple_schema.in.dbml +0 -0
  134. package/__test__/dbml2sql/multiple_schema_oracle/options.json +0 -0
  135. package/__test__/dbml2sql/multiple_schema_oracle/out-files/multiple_schema.out.sql +1 -1
  136. package/__test__/dbml2sql/multiple_schema_oracle/stdout.txt +0 -0
  137. package/__test__/dbml2sql/multiple_schema_pg/dbml-error.log +0 -24
  138. package/__test__/dbml2sql/multiple_schema_pg/expect-out-files/multiple_schema.out.sql +0 -0
  139. package/__test__/dbml2sql/multiple_schema_pg/in-files/multiple_schema.in.dbml +0 -0
  140. package/__test__/dbml2sql/multiple_schema_pg/options.json +0 -0
  141. package/__test__/dbml2sql/multiple_schema_pg/out-files/multiple_schema.out.sql +1 -1
  142. package/__test__/dbml2sql/multiple_schema_pg/stdout.txt +0 -0
  143. package/__test__/dbml2sql/syntax-error/dbml-error.log +7 -2104
  144. package/__test__/dbml2sql/syntax-error/in-files/ecommerce.dbml +0 -0
  145. package/__test__/dbml2sql/syntax-error/options.json +0 -0
  146. package/__test__/dbml2sql/syntax-error/stdout.txt +0 -0
  147. package/__test__/dbml2sql_bin.js +0 -0
  148. package/__test__/sql2dbml/filename --mssql --out-file/dbml-error.log +0 -51
  149. package/__test__/sql2dbml/filename --mssql --out-file/expect-out-files/schema.dbml +0 -0
  150. package/__test__/sql2dbml/filename --mssql --out-file/in-files/schema.sql +0 -0
  151. package/__test__/sql2dbml/filename --mssql --out-file/options.json +0 -0
  152. package/__test__/sql2dbml/filename --mssql --out-file/out-files/schema.dbml +0 -0
  153. package/__test__/sql2dbml/filename --mssql --out-file/stdout.txt +0 -0
  154. package/__test__/sql2dbml/filename --mysql --out-file/dbml-error.log +0 -24
  155. package/__test__/sql2dbml/filename --mysql --out-file/expect-out-files/schema.dbml +0 -0
  156. package/__test__/sql2dbml/filename --mysql --out-file/in-files/schema.sql +0 -0
  157. package/__test__/sql2dbml/filename --mysql --out-file/options.json +0 -0
  158. package/__test__/sql2dbml/filename --mysql --out-file/out-files/schema.dbml +0 -0
  159. package/__test__/sql2dbml/filename --mysql --out-file/stdout.txt +0 -0
  160. package/__test__/sql2dbml/filename --mysql stdout/dbml-error.log +0 -0
  161. package/__test__/sql2dbml/filename --mysql stdout/in-files/schema.sql +0 -0
  162. package/__test__/sql2dbml/filename --mysql stdout/options.json +0 -0
  163. package/__test__/sql2dbml/filename --mysql stdout/stdout.txt +0 -0
  164. package/__test__/sql2dbml/filename --out-file/dbml-error.log +0 -24
  165. package/__test__/sql2dbml/filename --out-file/expect-out-files/schema.dbml +0 -0
  166. package/__test__/sql2dbml/filename --out-file/in-files/schema.sql +0 -0
  167. package/__test__/sql2dbml/filename --out-file/options.json +0 -0
  168. package/__test__/sql2dbml/filename --out-file/out-files/schema.dbml +0 -0
  169. package/__test__/sql2dbml/filename --out-file/stdout.txt +0 -0
  170. package/__test__/sql2dbml/filename --postgres --out-file/dbml-error.log +0 -24
  171. package/__test__/sql2dbml/filename --postgres --out-file/expect-out-files/schema.dbml +0 -0
  172. package/__test__/sql2dbml/filename --postgres --out-file/in-files/schema.sql +0 -0
  173. package/__test__/sql2dbml/filename --postgres --out-file/options.json +0 -0
  174. package/__test__/sql2dbml/filename --postgres --out-file/out-files/schema.dbml +0 -0
  175. package/__test__/sql2dbml/filename --postgres --out-file/stdout.txt +0 -0
  176. package/__test__/sql2dbml/filename --postgres stdout/dbml-error.log +0 -0
  177. package/__test__/sql2dbml/filename --postgres stdout/in-files/schema.sql +0 -0
  178. package/__test__/sql2dbml/filename --postgres stdout/options.json +0 -0
  179. package/__test__/sql2dbml/filename --postgres stdout/stdout.txt +0 -0
  180. package/__test__/sql2dbml/filename --snowflake stdout/dbml-error.log +0 -54
  181. package/__test__/sql2dbml/filename --snowflake stdout/in-files/schema.sql +0 -0
  182. package/__test__/sql2dbml/filename --snowflake stdout/options.json +0 -0
  183. package/__test__/sql2dbml/filename --snowflake stdout/stdout.txt +6 -6
  184. package/__test__/sql2dbml/filename stdout/dbml-error.log +0 -0
  185. package/__test__/sql2dbml/filename stdout/in-files/schema.sql +0 -0
  186. package/__test__/sql2dbml/filename stdout/options.json +0 -0
  187. package/__test__/sql2dbml/filename stdout/stdout.txt +0 -0
  188. package/__test__/sql2dbml/filenames --mysql --out-file/dbml-error.log +0 -24
  189. package/__test__/sql2dbml/filenames --mysql --out-file/expect-out-files/schema.dbml +0 -0
  190. package/__test__/sql2dbml/filenames --mysql --out-file/in-files/business.sql +0 -0
  191. package/__test__/sql2dbml/filenames --mysql --out-file/in-files/customer.sql +0 -0
  192. package/__test__/sql2dbml/filenames --mysql --out-file/in-files/inventory.sql +0 -0
  193. package/__test__/sql2dbml/filenames --mysql --out-file/options.json +0 -0
  194. package/__test__/sql2dbml/filenames --mysql --out-file/out-files/schema.dbml +0 -0
  195. package/__test__/sql2dbml/filenames --mysql --out-file/stdout.txt +0 -0
  196. package/__test__/sql2dbml/filenames --mysql stdout/dbml-error.log +0 -0
  197. package/__test__/sql2dbml/filenames --mysql stdout/in-files/business.sql +0 -0
  198. package/__test__/sql2dbml/filenames --mysql stdout/in-files/customer.sql +0 -0
  199. package/__test__/sql2dbml/filenames --mysql stdout/in-files/inventory.sql +0 -0
  200. package/__test__/sql2dbml/filenames --mysql stdout/options.json +0 -0
  201. package/__test__/sql2dbml/filenames --mysql stdout/stdout.txt +0 -0
  202. package/__test__/sql2dbml/filenames --out-file/dbml-error.log +0 -24
  203. package/__test__/sql2dbml/filenames --out-file/expect-out-files/schema.dbml +0 -0
  204. package/__test__/sql2dbml/filenames --out-file/in-files/business.sql +0 -0
  205. package/__test__/sql2dbml/filenames --out-file/in-files/customer.sql +0 -0
  206. package/__test__/sql2dbml/filenames --out-file/in-files/inventory.sql +0 -0
  207. package/__test__/sql2dbml/filenames --out-file/options.json +0 -0
  208. package/__test__/sql2dbml/filenames --out-file/out-files/schema.dbml +0 -0
  209. package/__test__/sql2dbml/filenames --out-file/stdout.txt +0 -0
  210. package/__test__/sql2dbml/filenames --postgres --out-file/dbml-error.log +0 -24
  211. package/__test__/sql2dbml/filenames --postgres --out-file/expect-out-files/schema.dbml +0 -0
  212. package/__test__/sql2dbml/filenames --postgres --out-file/in-files/business.sql +0 -0
  213. package/__test__/sql2dbml/filenames --postgres --out-file/in-files/customer.sql +0 -0
  214. package/__test__/sql2dbml/filenames --postgres --out-file/in-files/inventory.sql +0 -0
  215. package/__test__/sql2dbml/filenames --postgres --out-file/options.json +0 -0
  216. package/__test__/sql2dbml/filenames --postgres --out-file/out-files/schema.dbml +0 -0
  217. package/__test__/sql2dbml/filenames --postgres --out-file/stdout.txt +0 -0
  218. package/__test__/sql2dbml/filenames --postgres stdout/dbml-error.log +0 -0
  219. package/__test__/sql2dbml/filenames --postgres stdout/in-files/business.sql +0 -0
  220. package/__test__/sql2dbml/filenames --postgres stdout/in-files/customer.sql +0 -0
  221. package/__test__/sql2dbml/filenames --postgres stdout/in-files/inventory.sql +0 -0
  222. package/__test__/sql2dbml/filenames --postgres stdout/options.json +0 -0
  223. package/__test__/sql2dbml/filenames --postgres stdout/stdout.txt +0 -0
  224. package/__test__/sql2dbml/filenames stdout/dbml-error.log +0 -0
  225. package/__test__/sql2dbml/filenames stdout/in-files/business.sql +0 -0
  226. package/__test__/sql2dbml/filenames stdout/in-files/customer.sql +0 -0
  227. package/__test__/sql2dbml/filenames stdout/in-files/inventory.sql +0 -0
  228. package/__test__/sql2dbml/filenames stdout/options.json +0 -0
  229. package/__test__/sql2dbml/filenames stdout/stdout.txt +0 -0
  230. package/__test__/sql2dbml/multiple_schema_mssql/dbml-error.log +0 -121
  231. package/__test__/sql2dbml/multiple_schema_mssql/expect-out-files/multiple_schema.out.dbml +0 -0
  232. package/__test__/sql2dbml/multiple_schema_mssql/in-files/multiple_schema.in.sql +0 -0
  233. package/__test__/sql2dbml/multiple_schema_mssql/options.json +0 -0
  234. package/__test__/sql2dbml/multiple_schema_mssql/out-files/multiple_schema.out.dbml +0 -0
  235. package/__test__/sql2dbml/multiple_schema_mssql/stdout.txt +0 -0
  236. package/__test__/sql2dbml/multiple_schema_mysql/dbml-error.log +0 -104
  237. package/__test__/sql2dbml/multiple_schema_mysql/expect-out-files/multiple_schema.out.dbml +0 -0
  238. package/__test__/sql2dbml/multiple_schema_mysql/in-files/multiple_schema.in.sql +0 -0
  239. package/__test__/sql2dbml/multiple_schema_mysql/options.json +0 -0
  240. package/__test__/sql2dbml/multiple_schema_mysql/out-files/multiple_schema.out.dbml +0 -0
  241. package/__test__/sql2dbml/multiple_schema_mysql/stdout.txt +0 -0
  242. package/__test__/sql2dbml/multiple_schema_pg/dbml-error.log +0 -131
  243. package/__test__/sql2dbml/multiple_schema_pg/expect-out-files/multiple_schema.out.dbml +0 -0
  244. package/__test__/sql2dbml/multiple_schema_pg/in-files/multiple_schema.in.sql +0 -0
  245. package/__test__/sql2dbml/multiple_schema_pg/options.json +0 -0
  246. package/__test__/sql2dbml/multiple_schema_pg/out-files/multiple_schema.out.dbml +0 -0
  247. package/__test__/sql2dbml/multiple_schema_pg/stdout.txt +0 -0
  248. package/__test__/sql2dbml/syntax-error/dbml-error.log +7 -2077
  249. package/__test__/sql2dbml/syntax-error/in-files/business.sql +0 -0
  250. package/__test__/sql2dbml/syntax-error/options.json +0 -0
  251. package/__test__/sql2dbml/syntax-error/stdout.txt +0 -0
  252. package/__test__/sql2dbml/syntax-error-duplicate-endpoints --mssql/dbml-error.log +9 -27
  253. package/__test__/sql2dbml/syntax-error-duplicate-endpoints --mssql/in-files/schema.sql +0 -0
  254. package/__test__/sql2dbml/syntax-error-duplicate-endpoints --mssql/options.json +0 -0
  255. package/__test__/sql2dbml/syntax-error-duplicate-endpoints --mssql/stdout.txt +0 -0
  256. package/__test__/sql2dbml/syntax-error-duplicate-endpoints --mysql/dbml-error.log +7 -28
  257. package/__test__/sql2dbml/syntax-error-duplicate-endpoints --mysql/in-files/schema.sql +0 -0
  258. package/__test__/sql2dbml/syntax-error-duplicate-endpoints --mysql/options.json +0 -0
  259. package/__test__/sql2dbml/syntax-error-duplicate-endpoints --mysql/stdout.txt +0 -0
  260. package/__test__/sql2dbml_bin.js +0 -0
  261. package/bin/db2dbml.js +4 -0
  262. package/dbml-error.log +52 -279
  263. package/jestHelpers.js +0 -0
  264. package/lib/cli/config.js +0 -0
  265. package/lib/cli/connector.js +6 -7
  266. package/lib/cli/export.js +0 -0
  267. package/lib/cli/import.js +0 -0
  268. package/lib/cli/index.js +28 -0
  269. package/lib/cli/outputPlugins/outputConsolePlugin.js +0 -0
  270. package/lib/cli/outputPlugins/outputFilePlugin.js +0 -0
  271. package/lib/cli/utils.js +20 -0
  272. package/lib/cli/validatePlugins/validatePlugins.js +0 -0
  273. package/lib/connectors/Connector.js +19 -0
  274. package/lib/connectors/MssqlConnector.js +483 -0
  275. package/lib/connectors/PostgresConnector.js +450 -0
  276. package/lib/errors/domainError.js +0 -0
  277. package/lib/errors/index.js +0 -0
  278. package/lib/errors/syntaxError.js +0 -0
  279. package/lib/helpers/logger.js +0 -0
  280. package/lib/index.js +6 -0
  281. package/package.json +5 -4
  282. package/src/cli/config.js +0 -0
  283. package/src/cli/connector.js +31 -0
  284. package/src/cli/export.js +0 -0
  285. package/src/cli/import.js +0 -0
  286. package/src/cli/index.js +35 -0
  287. package/src/cli/outputPlugins/outputConsolePlugin.js +0 -0
  288. package/src/cli/outputPlugins/outputFilePlugin.js +0 -0
  289. package/src/cli/utils.js +23 -0
  290. package/src/cli/validatePlugins/validatePlugins.js +0 -0
  291. package/src/errors/domainError.js +0 -0
  292. package/src/errors/index.js +0 -0
  293. package/src/errors/syntaxError.js +0 -0
  294. package/src/helpers/logger.js +0 -0
  295. package/src/index.js +2 -1
@@ -0,0 +1,450 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.fetchSchemaJson = void 0;
7
+ var _pg = require("pg");
8
+ /* eslint-disable camelcase */
9
+
10
+ const connectPg = async connection => {
11
+ const client = new _pg.Client(connection);
12
+ // bearer:disable javascript_lang_logger
13
+ client.on('error', err => console.log('PG connection error:', err));
14
+ await client.connect();
15
+ return client;
16
+ };
17
+ const convertQueryBoolean = val => val === 'YES';
18
+ const getFieldType = (data_type, udt_name, character_maximum_length, numeric_precision, numeric_scale) => {
19
+ if (data_type === 'ARRAY') {
20
+ return `${udt_name.slice(1, udt_name.length)}[]`;
21
+ }
22
+ if (character_maximum_length) {
23
+ return `${udt_name}(${character_maximum_length})`;
24
+ }
25
+ if (numeric_precision && numeric_scale) {
26
+ return `${udt_name}(${numeric_precision},${numeric_scale})`;
27
+ }
28
+ return udt_name;
29
+ };
30
+ const getDbdefault = (data_type, column_default, default_type) => {
31
+ if (data_type === 'ARRAY') {
32
+ const values = column_default.slice(6, -1).split(',').map(value => {
33
+ return value.split('::')[0];
34
+ });
35
+ return {
36
+ type: default_type,
37
+ value: `ARRAY[${values.join(', ')}]`
38
+ };
39
+ }
40
+ if (default_type === 'string') {
41
+ const defaultValues = column_default.split('::')[0];
42
+ const isJson = data_type === 'json' || data_type === 'jsonb';
43
+ const type = isJson ? 'expression' : 'string';
44
+ return {
45
+ type,
46
+ value: defaultValues.slice(1, -1)
47
+ };
48
+ }
49
+ return {
50
+ type: default_type,
51
+ value: column_default
52
+ };
53
+ };
54
+ const generateField = row => {
55
+ const {
56
+ column_name,
57
+ data_type,
58
+ character_maximum_length,
59
+ numeric_precision,
60
+ numeric_scale,
61
+ udt_schema,
62
+ udt_name,
63
+ identity_increment,
64
+ is_nullable,
65
+ column_default,
66
+ default_type,
67
+ column_comment
68
+ } = row;
69
+ const dbdefault = column_default && default_type !== 'increment' ? getDbdefault(data_type, column_default, default_type) : null;
70
+ const fieldType = data_type === 'USER-DEFINED' ? {
71
+ type_name: udt_name,
72
+ schemaName: udt_schema
73
+ } : {
74
+ type_name: getFieldType(data_type, udt_name, character_maximum_length, numeric_precision, numeric_scale),
75
+ schemaname: null
76
+ };
77
+ return {
78
+ name: column_name,
79
+ type: fieldType,
80
+ dbdefault,
81
+ not_null: !convertQueryBoolean(is_nullable),
82
+ increment: !!identity_increment || default_type === 'increment',
83
+ note: column_comment ? {
84
+ value: column_comment
85
+ } : {
86
+ value: ''
87
+ }
88
+ };
89
+ };
90
+ const generateTablesAndFields = async client => {
91
+ const fields = {};
92
+ const tablesAndFieldsSql = `
93
+ WITH comments AS (
94
+ SELECT
95
+ pc.relname AS table_name,
96
+ pn.nspname AS table_schema,
97
+ pa.attname AS column_name,
98
+ pd.description
99
+ FROM
100
+ pg_description pd
101
+ JOIN
102
+ pg_class pc ON pd.objoid = pc.oid
103
+ JOIN
104
+ pg_namespace pn ON pc.relnamespace = pn.oid
105
+ LEFT JOIN
106
+ pg_attribute pa ON pd.objoid = pa.attrelid AND pd.objsubid = pa.attnum
107
+ WHERE
108
+ pc.relkind = 'r'
109
+ AND pn.nspname NOT IN ('pg_catalog', 'information_schema')
110
+ )
111
+ SELECT
112
+ t.table_schema,
113
+ t.table_name,
114
+ c.column_name,
115
+ c.data_type,
116
+ c.character_maximum_length,
117
+ c.numeric_precision,
118
+ c.numeric_scale,
119
+ c.udt_schema,
120
+ c.udt_name,
121
+ c.identity_increment,
122
+ c.is_nullable,
123
+ c.column_default,
124
+ CASE
125
+ WHEN c.column_default IS NULL THEN NULL
126
+ WHEN c.column_default LIKE 'nextval(%' THEN 'increment'
127
+ WHEN c.column_default LIKE '''%' THEN 'string'
128
+ WHEN c.column_default = 'true' OR c.column_default = 'false' THEN 'boolean'
129
+ WHEN c.column_default ~ '^-?[0-9]+(.[0-9]+)?$' THEN 'number'
130
+ ELSE 'expression'
131
+ END AS default_type,
132
+ (SELECT description FROM comments WHERE table_name = t.table_name AND table_schema = t.table_schema AND column_name IS NULL) AS table_comment,
133
+ (SELECT description FROM comments WHERE table_name = t.table_name AND table_schema = t.table_schema AND column_name = c.column_name) AS column_comment
134
+ FROM
135
+ information_schema.columns c
136
+ JOIN
137
+ information_schema.tables t ON c.table_name = t.table_name AND c.table_schema = t.table_schema
138
+ WHERE
139
+ t.table_type = 'BASE TABLE'
140
+ AND t.table_schema NOT IN ('pg_catalog', 'information_schema')
141
+ ORDER BY
142
+ t.table_schema,
143
+ t.table_name,
144
+ c.ordinal_position
145
+ ;
146
+ `;
147
+ const tablesAndFieldsResult = await client.query(tablesAndFieldsSql);
148
+ const tables = tablesAndFieldsResult.rows.reduce((acc, row) => {
149
+ const {
150
+ table_schema,
151
+ table_name,
152
+ table_comment
153
+ } = row;
154
+ if (!acc[table_name]) {
155
+ acc[table_name] = {
156
+ name: table_name,
157
+ schemaName: table_schema,
158
+ note: table_comment ? {
159
+ value: table_comment
160
+ } : {
161
+ value: ''
162
+ }
163
+ };
164
+ }
165
+ if (!fields[table_name]) fields[table_name] = [];
166
+ const field = generateField(row);
167
+ fields[table_name].push(field);
168
+ return acc;
169
+ }, {});
170
+ return {
171
+ tables: Object.values(tables),
172
+ fields
173
+ };
174
+ };
175
+ const generateRawRefs = async client => {
176
+ const refs = [];
177
+ const refsListSql = `
178
+ SELECT
179
+ tc.table_schema,
180
+ tc.table_name,
181
+ tc.constraint_name as fk_constraint_name,
182
+ STRING_AGG(DISTINCT kcu.column_name, ',') AS column_names,
183
+ ccu.table_schema AS foreign_table_schema,
184
+ ccu.table_name AS foreign_table_name,
185
+ STRING_AGG(DISTINCT ccu.column_name, ',') AS foreign_column_names,
186
+ tc.constraint_type,
187
+ rc.delete_rule AS on_delete,
188
+ rc.update_rule AS on_update
189
+ FROM information_schema.table_constraints AS tc
190
+ JOIN information_schema.key_column_usage AS kcu
191
+ ON tc.constraint_name = kcu.constraint_name
192
+ AND tc.table_schema = kcu.table_schema
193
+ JOIN information_schema.constraint_column_usage AS ccu
194
+ ON ccu.constraint_name = tc.constraint_name
195
+ JOIN information_schema.referential_constraints AS rc
196
+ ON tc.constraint_name = rc.constraint_name
197
+ AND tc.table_schema = rc.constraint_schema
198
+ WHERE tc.constraint_type = 'FOREIGN KEY'
199
+ AND tc.table_schema NOT IN ('pg_catalog', 'information_schema')
200
+ GROUP BY
201
+ tc.table_schema,
202
+ tc.table_name,
203
+ tc.constraint_name,
204
+ ccu.table_schema,
205
+ ccu.table_name,
206
+ tc.constraint_type,
207
+ rc.delete_rule,
208
+ rc.update_rule
209
+ ORDER BY
210
+ tc.table_schema,
211
+ tc.table_name;
212
+ `;
213
+ const refsQueryResult = await client.query(refsListSql);
214
+ refsQueryResult.rows.forEach(refRow => {
215
+ const {
216
+ table_schema,
217
+ fk_constraint_name,
218
+ table_name,
219
+ column_names,
220
+ foreign_table_schema,
221
+ foreign_table_name,
222
+ foreign_column_names,
223
+ on_delete,
224
+ on_update
225
+ } = refRow;
226
+ const ep1 = {
227
+ tableName: table_name,
228
+ schemaName: table_schema,
229
+ fieldNames: column_names.split(','),
230
+ relation: '*'
231
+ };
232
+ const ep2 = {
233
+ tableName: foreign_table_name,
234
+ schemaName: foreign_table_schema,
235
+ fieldNames: foreign_column_names.split(','),
236
+ relation: '1'
237
+ };
238
+ refs.push({
239
+ name: fk_constraint_name,
240
+ endpoints: [ep1, ep2],
241
+ onDelete: on_delete === 'NO ACTION' ? null : on_delete,
242
+ onUpdate: on_update === 'NO ACTION' ? null : on_update
243
+ });
244
+ });
245
+ return refs;
246
+ };
247
+ const generateIndexes = async client => {
248
+ // const tableConstraints = {};
249
+ const indexListSql = `
250
+ WITH user_tables AS (
251
+ SELECT tablename
252
+ FROM pg_tables
253
+ WHERE schemaname NOT IN ('pg_catalog', 'information_schema') -- Exclude system schemas
254
+ AND tablename NOT LIKE 'pg_%' -- Exclude PostgreSQL system tables
255
+ AND tablename NOT LIKE 'sql_%' -- Exclude SQL standard tables
256
+ ),
257
+ index_info AS (
258
+ SELECT
259
+ t.relname AS table_name,
260
+ i.relname AS index_name,
261
+ ix.indisunique AS is_unique,
262
+ ix.indisprimary AS is_primary,
263
+ am.amname AS index_type,
264
+ array_to_string(array_agg(a.attname ORDER BY x.n), ', ') AS columns,
265
+ pg_get_expr(ix.indexprs, ix.indrelid) AS expressions,
266
+ CASE
267
+ WHEN ix.indisprimary THEN 'PRIMARY KEY'
268
+ WHEN ix.indisunique THEN 'UNIQUE'
269
+ ELSE NULL
270
+ END AS constraint_type
271
+ FROM
272
+ pg_class t
273
+ JOIN pg_index ix ON t.oid = ix.indrelid
274
+ JOIN pg_class i ON i.oid = ix.indexrelid
275
+ LEFT JOIN pg_attribute a ON a.attrelid = t.oid AND a.attnum = ANY(ix.indkey)
276
+ JOIN pg_am am ON i.relam = am.oid
277
+ LEFT JOIN generate_subscripts(ix.indkey, 1) AS x(n) ON a.attnum = ix.indkey[x.n]
278
+ WHERE
279
+ t.relkind = 'r'
280
+ AND t.relname NOT LIKE 'pg_%'
281
+ AND t.relname NOT LIKE 'sql_%'
282
+ GROUP BY
283
+ t.relname, i.relname, ix.indisunique, ix.indisprimary, am.amname, ix.indexprs, ix.indrelid
284
+ )
285
+ SELECT
286
+ ut.tablename AS table_name,
287
+ ii.index_name,
288
+ ii.is_unique,
289
+ ii.is_primary,
290
+ ii.index_type,
291
+ ii.columns,
292
+ ii.expressions,
293
+ ii.constraint_type -- Added constraint type
294
+ FROM
295
+ user_tables ut
296
+ LEFT JOIN
297
+ index_info ii ON ut.tablename = ii.table_name
298
+ WHERE ii.columns IS NOT NULL
299
+ ORDER BY
300
+ ut.tablename,
301
+ ii.constraint_type,
302
+ ii.index_name
303
+ ;
304
+ `;
305
+ const indexListResult = await client.query(indexListSql);
306
+ const {
307
+ outOfLineConstraints,
308
+ inlineConstraints
309
+ } = indexListResult.rows.reduce((acc, row) => {
310
+ const {
311
+ constraint_type,
312
+ columns
313
+ } = row;
314
+ if (columns === 'null' || columns.trim() === '') return acc;
315
+ const isSingleColumn = columns.split(',').length === 1;
316
+ const isInlineConstraint = isSingleColumn && (constraint_type === 'PRIMARY KEY' || constraint_type === 'UNIQUE');
317
+ if (isInlineConstraint) {
318
+ acc.inlineConstraints.push(row);
319
+ } else {
320
+ acc.outOfLineConstraints.push(row);
321
+ }
322
+ return acc;
323
+ }, {
324
+ outOfLineConstraints: [],
325
+ inlineConstraints: []
326
+ });
327
+ const indexes = outOfLineConstraints.reduce((acc, indexRow) => {
328
+ const {
329
+ table_name,
330
+ index_name,
331
+ index_type,
332
+ columns,
333
+ expressions
334
+ } = indexRow;
335
+ const indexColumns = columns.split(',').map(column => {
336
+ return {
337
+ type: 'column',
338
+ value: column.trim()
339
+ };
340
+ });
341
+ const indexExpressions = expressions ? expressions.split(',').map(expression => {
342
+ return {
343
+ type: 'expression',
344
+ value: expression
345
+ };
346
+ }) : [];
347
+ const index = {
348
+ name: index_name,
349
+ type: index_type,
350
+ columns: [...indexColumns, ...indexExpressions]
351
+ };
352
+ if (acc[table_name]) {
353
+ acc[table_name].push(index);
354
+ } else {
355
+ acc[table_name] = [index];
356
+ }
357
+ return acc;
358
+ }, {});
359
+ const tableConstraints = inlineConstraints.reduce((acc, row) => {
360
+ const {
361
+ table_name,
362
+ columns,
363
+ constraint_type
364
+ } = row;
365
+ if (!acc[table_name]) acc[table_name] = {};
366
+ const columnNames = columns.split(',').map(column => column.trim());
367
+ columnNames.forEach(columnName => {
368
+ if (!acc[table_name][columnName]) acc[table_name][columnName] = {};
369
+ if (constraint_type === 'PRIMARY KEY') {
370
+ acc[table_name][columnName].pk = true;
371
+ }
372
+ if (constraint_type === 'UNIQUE' && !acc[table_name][columnName].pk) {
373
+ acc[table_name][columnName].unique = true;
374
+ }
375
+ });
376
+ return acc;
377
+ }, {});
378
+ return {
379
+ indexes,
380
+ tableConstraints
381
+ };
382
+ };
383
+ const generateRawEnums = async client => {
384
+ const enumListSql = `
385
+ SELECT
386
+ n.nspname AS schema_name,
387
+ t.typname AS enum_type,
388
+ e.enumlabel AS enum_value,
389
+ e.enumsortorder AS sort_order
390
+ FROM
391
+ pg_enum e
392
+ JOIN
393
+ pg_type t ON e.enumtypid = t.oid
394
+ JOIN
395
+ pg_namespace n ON t.typnamespace = n.oid
396
+ ORDER BY
397
+ schema_name,
398
+ enum_type,
399
+ sort_order;
400
+ ;
401
+ `;
402
+ const enumListResult = await client.query(enumListSql);
403
+ const enums = enumListResult.rows.reduce((acc, row) => {
404
+ const {
405
+ schema_name,
406
+ enum_type,
407
+ enum_value
408
+ } = row;
409
+ if (!acc[enum_type]) {
410
+ acc[enum_type] = {
411
+ name: enum_type,
412
+ schemaName: schema_name,
413
+ values: []
414
+ };
415
+ }
416
+ acc[enum_type].values.push({
417
+ name: enum_value
418
+ });
419
+ return acc;
420
+ }, {});
421
+ return Object.values(enums);
422
+ };
423
+ const fetchSchemaJson = async connection => {
424
+ const client = await connectPg(connection);
425
+ const tablesAndFieldsRes = generateTablesAndFields(client);
426
+ const indexesRes = generateIndexes(client);
427
+ const refsRes = generateRawRefs(client);
428
+ const enumsRes = generateRawEnums(client);
429
+ const res = await Promise.all([tablesAndFieldsRes, indexesRes, refsRes, enumsRes]);
430
+ client.end();
431
+ const {
432
+ tables,
433
+ fields
434
+ } = res[0];
435
+ const {
436
+ indexes,
437
+ tableConstraints
438
+ } = res[1];
439
+ const refs = res[2];
440
+ const enums = res[3];
441
+ return {
442
+ tables,
443
+ fields,
444
+ refs,
445
+ enums,
446
+ indexes,
447
+ tableConstraints
448
+ };
449
+ };
450
+ exports.fetchSchemaJson = fetchSchemaJson;
File without changes
File without changes
File without changes
File without changes
package/lib/index.js CHANGED
@@ -3,6 +3,12 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
+ Object.defineProperty(exports, "db2dbml", {
7
+ enumerable: true,
8
+ get: function () {
9
+ return _cli.db2dbml;
10
+ }
11
+ });
6
12
  Object.defineProperty(exports, "dbml2sql", {
7
13
  enumerable: true,
8
14
  get: function () {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dbml/cli",
3
- "version": "3.6.2",
3
+ "version": "3.7.0",
4
4
  "description": "",
5
5
  "main": "lib/index.js",
6
6
  "license": "Apache-2.0",
@@ -14,7 +14,8 @@
14
14
  },
15
15
  "bin": {
16
16
  "dbml2sql": "bin/dbml2sql.js",
17
- "sql2dbml": "bin/sql2dbml.js"
17
+ "sql2dbml": "bin/sql2dbml.js",
18
+ "db2dbml": "bin/db2dbml.js"
18
19
  },
19
20
  "author": "Holistics <dev@holistics.io>",
20
21
  "homepage": "https://dbml.dbdiagram.io",
@@ -25,7 +26,7 @@
25
26
  ],
26
27
  "dependencies": {
27
28
  "@babel/cli": "^7.21.0",
28
- "@dbml/core": "^3.6.2",
29
+ "@dbml/core": "^3.7.0",
29
30
  "bluebird": "^3.5.5",
30
31
  "chalk": "^2.4.2",
31
32
  "commander": "^2.20.0",
@@ -53,5 +54,5 @@
53
54
  "^.+\\.js$": "babel-jest"
54
55
  }
55
56
  },
56
- "gitHead": "d3d82a3e8260f733098edc5fbfdbd3f8a381c6e3"
57
+ "gitHead": "3222baa4bf45b9ff74711a63d376505cf4bd9ac0"
57
58
  }
package/src/cli/config.js CHANGED
File without changes
@@ -0,0 +1,31 @@
1
+ import { importer } from '@dbml/core';
2
+ import figures from 'figures';
3
+ import chalk from 'chalk';
4
+ import path from 'path';
5
+ import {
6
+ resolvePaths,
7
+ getConnectionOpt,
8
+ } from './utils';
9
+ import OutputConsolePlugin from './outputPlugins/outputConsolePlugin';
10
+ import OutputFilePlugin from './outputPlugins/outputFilePlugin';
11
+ import logger from '../helpers/logger';
12
+
13
+ export default async function connectionHandler (program) {
14
+ try {
15
+ const { connection, format } = getConnectionOpt(program.args);
16
+ const opts = program.opts();
17
+
18
+ if (!opts.outFile && !opts.outDir) {
19
+ const res = await importer.generateDbml(connection, format);
20
+ OutputConsolePlugin.write(res);
21
+ } else if (opts.outFile) {
22
+ const res = await importer.generateDbml(connection, format);
23
+ (new OutputFilePlugin(resolvePaths(opts.outFile))).write(res);
24
+
25
+ // bearer:disable javascript_lang_logger
26
+ console.log(` ${chalk.green(figures.main.tick)} Generated DBML file from database's connection: ${path.basename(opts.outFile)}`);
27
+ }
28
+ } catch (error) {
29
+ logger.error(error);
30
+ }
31
+ }
package/src/cli/export.js CHANGED
File without changes
package/src/cli/import.js CHANGED
File without changes
package/src/cli/index.js CHANGED
@@ -1,8 +1,13 @@
1
1
  import program from 'commander';
2
2
  import importHandler from './import';
3
3
  import exportHandler from './export';
4
+ import connectionHandler from './connector';
4
5
  import projectInfo from '../../package.json';
5
6
 
7
+ function showHelp (args) {
8
+ if (args.length < 3) program.help();
9
+ }
10
+
6
11
  function dbml2sql (args) {
7
12
  program.version(projectInfo.version);
8
13
 
@@ -15,6 +20,7 @@ function dbml2sql (args) {
15
20
  .option('-o, --out-file <pathspec>', 'compile all input files into a single files');
16
21
  // .option('-d, --out-dir <pathspec>', 'compile an input directory of dbml files into an output directory');
17
22
 
23
+ showHelp(args);
18
24
  program.parse(args);
19
25
 
20
26
  exportHandler(program);
@@ -34,12 +40,41 @@ function sql2dbml (args) {
34
40
  .option('-o, --out-file <pathspec>', 'compile all input files into a single files');
35
41
  // .option('-d, --out-dir <pathspec>', 'compile an input directory of sql files into an output directory');
36
42
 
43
+ showHelp(args);
37
44
  program.parse(args);
38
45
 
39
46
  importHandler(program);
40
47
  }
41
48
 
49
+ function db2dbml (args) {
50
+ program.version(projectInfo.version);
51
+
52
+ // Q: How to write the arguments description for the below usage?
53
+ // A: The usage description is written in the following way:
54
+ // - <format> your database format (postgres, mysql, mssql)
55
+ // - <connection-string> your database connection string
56
+ // - postgres: postgresql://user:password@localhost:5432/dbname
57
+ // - mssql: 'Server=localhost,1433;Database=master;User Id=sa;Password=your_password;Encrypt=true;TrustServerCertificate
58
+ const description = `
59
+ <format> your database format (postgres, mysql, mssql)
60
+ <connection-string> your database connection string:
61
+ - postgres: postgresql://user:password@localhost:5432/dbname
62
+ - mysql: mysql://user:password@localhost:3306/dbname
63
+ - mssql: 'Server=localhost,1433;Database=master;User Id=sa;Password=your_password;Encrypt=true;TrustServerCertificate=true;'
64
+ `;
65
+ program
66
+ .usage('<format> <connection-string> [options]')
67
+ .description(description)
68
+ .option('-o, --out-file <pathspec>', 'compile all input files into a single files');
69
+
70
+ showHelp(args);
71
+ program.parse(args);
72
+
73
+ connectionHandler(program);
74
+ }
75
+
42
76
  export {
43
77
  dbml2sql,
44
78
  sql2dbml,
79
+ db2dbml,
45
80
  };
File without changes
File without changes
package/src/cli/utils.js CHANGED
@@ -1,6 +1,7 @@
1
1
  import path from 'path';
2
2
  import fs from 'fs';
3
3
  import { CompilerError } from '@dbml/core';
4
+ import { reduce } from 'lodash';
4
5
 
5
6
  function resolvePaths (paths) {
6
7
  if (!Array.isArray(paths)) {
@@ -32,6 +33,27 @@ function getFormatOpt (opts) {
32
33
  return format;
33
34
  }
34
35
 
36
+ function getConnectionOpt (args) {
37
+ const supportedDatabases = ['postgres', 'mysql', 'mssql'];
38
+ const defaultConnectionOpt = {
39
+ connection: args[0],
40
+ format: 'unknown',
41
+ };
42
+
43
+ return reduce(args, (connectionOpt, arg) => {
44
+ if (supportedDatabases.includes(arg)) connectionOpt.format = arg;
45
+ // Check if the arg is a connection string using regex
46
+ const connectionStringRegex = /^.*[:;]/;
47
+ if (connectionStringRegex.test(arg)) {
48
+ // Example: jdbc:mysql://localhost:3306/mydatabase
49
+ // Example: odbc:Driver={SQL Server};Server=myServerAddress;Database=myDataBase;Uid=myUsername;Pwd=myPassword;
50
+ connectionOpt.connection = arg;
51
+ }
52
+
53
+ return connectionOpt;
54
+ }, defaultConnectionOpt);
55
+ }
56
+
35
57
  function generate (inputPaths, transform, outputPlugin) {
36
58
  inputPaths.forEach((_path) => {
37
59
  const source = fs.readFileSync(_path, 'utf-8');
@@ -49,5 +71,6 @@ export {
49
71
  resolvePaths,
50
72
  validateInputFilePaths,
51
73
  getFormatOpt,
74
+ getConnectionOpt,
52
75
  generate,
53
76
  };
File without changes
File without changes
File without changes
File without changes
File without changes
package/src/index.js CHANGED
@@ -1,6 +1,7 @@
1
- import { dbml2sql, sql2dbml } from './cli';
1
+ import { dbml2sql, sql2dbml, db2dbml } from './cli';
2
2
 
3
3
  export {
4
4
  dbml2sql,
5
5
  sql2dbml,
6
+ db2dbml,
6
7
  };