jcc-express-mvc 1.8.7 → 1.8.21

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 (296) hide show
  1. package/Core/index.d.ts +4 -0
  2. package/Core/index.d.ts.map +1 -1
  3. package/Core/index.js +5 -0
  4. package/__tests__/Job.test.d.ts +2 -0
  5. package/__tests__/Job.test.d.ts.map +1 -0
  6. package/__tests__/Job.test.js +205 -0
  7. package/__tests__/MySqlSchemaBlueprint.test.d.ts +2 -0
  8. package/__tests__/MySqlSchemaBlueprint.test.d.ts.map +1 -0
  9. package/__tests__/MySqlSchemaBlueprint.test.js +55 -0
  10. package/__tests__/PostgresTranslator.test.d.ts +2 -0
  11. package/__tests__/PostgresTranslator.test.d.ts.map +1 -0
  12. package/__tests__/PostgresTranslator.test.js +82 -0
  13. package/__tests__/SQLiteTranslator.test.d.ts +2 -0
  14. package/__tests__/SQLiteTranslator.test.d.ts.map +1 -0
  15. package/__tests__/SQLiteTranslator.test.js +125 -0
  16. package/__tests__/SchemaAlterBlueprint.test.d.ts +2 -0
  17. package/__tests__/SchemaAlterBlueprint.test.d.ts.map +1 -0
  18. package/__tests__/SchemaAlterBlueprint.test.js +35 -0
  19. package/global.d.ts +3 -1
  20. package/index.d.ts +28 -3
  21. package/index.d.ts.map +1 -1
  22. package/index.js +33 -75
  23. package/lib/Application/Application.d.ts.map +1 -1
  24. package/lib/Application/Application.js +2 -2
  25. package/lib/Application/ApplicationBuilder.d.ts.map +1 -1
  26. package/lib/Application/ApplicationBuilder.js +22 -11
  27. package/lib/Auth/AuthMiddleware.d.ts.map +1 -1
  28. package/lib/Auth/AuthMiddleware.js +29 -12
  29. package/lib/Auth/index.d.ts +17 -3
  30. package/lib/Auth/index.d.ts.map +1 -1
  31. package/lib/Auth/index.js +128 -26
  32. package/lib/Auth/loginRateLimit.d.ts +6 -0
  33. package/lib/Auth/loginRateLimit.d.ts.map +1 -0
  34. package/lib/Auth/loginRateLimit.js +25 -0
  35. package/lib/Auth/refreshTokenStore.d.ts +24 -0
  36. package/lib/Auth/refreshTokenStore.d.ts.map +1 -0
  37. package/lib/Auth/refreshTokenStore.js +46 -0
  38. package/lib/Command-Line/DBCommand.d.ts.map +1 -1
  39. package/lib/Command-Line/DBCommand.js +9 -3
  40. package/lib/Command-Line/KeyGenerateCommand.d.ts +6 -0
  41. package/lib/Command-Line/KeyGenerateCommand.d.ts.map +1 -0
  42. package/lib/Command-Line/KeyGenerateCommand.js +47 -0
  43. package/lib/Command-Line/MakeCommand.d.ts +1 -0
  44. package/lib/Command-Line/MakeCommand.d.ts.map +1 -1
  45. package/lib/Command-Line/MakeCommand.js +36 -32
  46. package/lib/Command-Line/NodeArtisanCommand.d.ts +2 -0
  47. package/lib/Command-Line/NodeArtisanCommand.d.ts.map +1 -1
  48. package/lib/Command-Line/NodeArtisanCommand.js +24 -6
  49. package/lib/Command-Line/NodeTinker/Tinker.d.ts +5 -2
  50. package/lib/Command-Line/NodeTinker/Tinker.d.ts.map +1 -1
  51. package/lib/Command-Line/NodeTinker/Tinker.js +13 -3
  52. package/lib/Command-Line/WatchCommand.d.ts +29 -0
  53. package/lib/Command-Line/WatchCommand.d.ts.map +1 -0
  54. package/lib/Command-Line/WatchCommand.js +234 -0
  55. package/lib/Command-Line/files/Models.d.ts.map +1 -1
  56. package/lib/Command-Line/files/Models.js +67 -0
  57. package/lib/Console/Command.d.ts +18 -0
  58. package/lib/Console/Command.d.ts.map +1 -1
  59. package/lib/Console/Command.js +29 -0
  60. package/lib/Container/index.d.ts.map +1 -1
  61. package/lib/Container/index.js +22 -8
  62. package/lib/Database/Database.d.ts +21 -0
  63. package/lib/Database/Database.d.ts.map +1 -0
  64. package/lib/Database/Database.js +55 -0
  65. package/lib/Database/DatabaseServiceProvider.d.ts +22 -0
  66. package/lib/Database/DatabaseServiceProvider.d.ts.map +1 -0
  67. package/lib/Database/DatabaseServiceProvider.js +50 -0
  68. package/lib/Database/Drivers/KnexDriver.d.ts +13 -0
  69. package/lib/Database/Drivers/KnexDriver.d.ts.map +1 -0
  70. package/lib/Database/Drivers/KnexDriver.js +29 -0
  71. package/lib/Database/Drivers/MongooseDriver.d.ts +20 -0
  72. package/lib/Database/Drivers/MongooseDriver.d.ts.map +1 -0
  73. package/lib/Database/Drivers/MongooseDriver.js +57 -0
  74. package/lib/Database/Drivers/SequelizeDriver.d.ts +24 -0
  75. package/lib/Database/Drivers/SequelizeDriver.d.ts.map +1 -0
  76. package/lib/Database/Drivers/SequelizeDriver.js +82 -0
  77. package/lib/Database/index.d.ts +7 -0
  78. package/lib/Database/index.d.ts.map +1 -0
  79. package/lib/Database/index.js +11 -0
  80. package/lib/Database/interface.d.ts +14 -0
  81. package/lib/Database/interface.d.ts.map +1 -0
  82. package/lib/Database/interface.js +2 -0
  83. package/lib/Database/type.d.ts +18 -0
  84. package/lib/Database/type.d.ts.map +1 -0
  85. package/lib/Database/type.js +2 -0
  86. package/lib/Error/DisplayErrorCode.d.ts.map +1 -1
  87. package/lib/Error/DisplayErrorCode.js +27 -17
  88. package/lib/Error/MissMatchTokenException/index.d.ts +4 -0
  89. package/lib/Error/MissMatchTokenException/index.d.ts.map +1 -0
  90. package/lib/Error/MissMatchTokenException/index.js +9 -0
  91. package/lib/Error/SocialiteAuthError/SocialiteAuthError.d.ts +9 -0
  92. package/lib/Error/SocialiteAuthError/SocialiteAuthError.d.ts.map +1 -0
  93. package/lib/Error/SocialiteAuthError/SocialiteAuthError.js +17 -0
  94. package/lib/Global/helpers.d.ts.map +1 -1
  95. package/lib/Global/helpers.js +7 -6
  96. package/lib/Http/index.d.ts +3 -1
  97. package/lib/Http/index.d.ts.map +1 -1
  98. package/lib/Http/index.js +26 -5
  99. package/lib/Interface/index.d.ts +17 -3
  100. package/lib/Interface/index.d.ts.map +1 -1
  101. package/lib/Jcc-eloquent/lib/Builder.d.ts +12 -1
  102. package/lib/Jcc-eloquent/lib/Builder.d.ts.map +1 -1
  103. package/lib/Jcc-eloquent/lib/Builder.js +119 -5
  104. package/lib/Jcc-eloquent/lib/Database/index.d.ts.map +1 -1
  105. package/lib/Jcc-eloquent/lib/Database/index.js +2 -1
  106. package/lib/Jcc-eloquent/lib/Interfaces/index.d.ts +37 -2
  107. package/lib/Jcc-eloquent/lib/Interfaces/index.d.ts.map +1 -1
  108. package/lib/Jcc-eloquent/lib/Migration.d.ts +6 -0
  109. package/lib/Jcc-eloquent/lib/Migration.d.ts.map +1 -1
  110. package/lib/Jcc-eloquent/lib/Migration.js +24 -2
  111. package/lib/Jcc-eloquent/lib/Model.d.ts +24 -7
  112. package/lib/Jcc-eloquent/lib/Model.d.ts.map +1 -1
  113. package/lib/Jcc-eloquent/lib/Model.js +35 -2
  114. package/lib/Jcc-eloquent/lib/QueryBuilder.d.ts +2 -1
  115. package/lib/Jcc-eloquent/lib/QueryBuilder.d.ts.map +1 -1
  116. package/lib/Jcc-eloquent/lib/QueryBuilder.js +10 -1
  117. package/lib/Jcc-eloquent/lib/Rollback.d.ts.map +1 -1
  118. package/lib/Jcc-eloquent/lib/Rollback.js +9 -2
  119. package/lib/Jcc-eloquent/lib/Schema/BaseSchemaEntity/index.d.ts.map +1 -1
  120. package/lib/Jcc-eloquent/lib/Schema/BaseSchemaEntity/index.js +3 -3
  121. package/lib/Jcc-eloquent/lib/Schema/BluePrint/index.d.ts +6 -2
  122. package/lib/Jcc-eloquent/lib/Schema/BluePrint/index.d.ts.map +1 -1
  123. package/lib/Jcc-eloquent/lib/Schema/BluePrint/index.js +41 -12
  124. package/lib/Jcc-eloquent/lib/Schema/Translator/Sqlite.d.ts.map +1 -1
  125. package/lib/Jcc-eloquent/lib/Schema/Translator/Sqlite.js +21 -3
  126. package/lib/Jcc-eloquent/lib/Schema/Translator/postgres.d.ts +1 -0
  127. package/lib/Jcc-eloquent/lib/Schema/Translator/postgres.d.ts.map +1 -1
  128. package/lib/Jcc-eloquent/lib/Schema/Translator/postgres.js +70 -14
  129. package/lib/Jcc-eloquent/lib/Schema/index.d.ts +12 -0
  130. package/lib/Jcc-eloquent/lib/Schema/index.d.ts.map +1 -1
  131. package/lib/Jcc-eloquent/lib/Schema/index.js +27 -6
  132. package/lib/Jcc-eloquent/lib/utils/index.d.ts +13 -0
  133. package/lib/Jcc-eloquent/lib/utils/index.d.ts.map +1 -1
  134. package/lib/Jcc-eloquent/lib/utils/index.js +62 -0
  135. package/lib/Middleware/index.d.ts +1 -0
  136. package/lib/Middleware/index.d.ts.map +1 -1
  137. package/lib/Middleware/index.js +20 -8
  138. package/lib/Model/Sequelize.d.ts +3 -0
  139. package/lib/Model/Sequelize.d.ts.map +1 -0
  140. package/lib/Model/Sequelize.js +6 -0
  141. package/lib/Providers/RouteServiceProvider.d.ts.map +1 -1
  142. package/lib/Providers/RouteServiceProvider.js +3 -0
  143. package/lib/Providers/SessionServiceProvider.d.ts +12 -0
  144. package/lib/Providers/SessionServiceProvider.d.ts.map +1 -0
  145. package/lib/Providers/SessionServiceProvider.js +47 -0
  146. package/lib/Queue/Controllers/QueueControllers.d.ts +31 -0
  147. package/lib/Queue/Controllers/QueueControllers.d.ts.map +1 -0
  148. package/lib/Queue/Controllers/QueueControllers.js +126 -0
  149. package/lib/Queue/Drivers/DatabaseDriver.d.ts +6 -1
  150. package/lib/Queue/Drivers/DatabaseDriver.d.ts.map +1 -1
  151. package/lib/Queue/Drivers/DatabaseDriver.js +76 -21
  152. package/lib/Queue/Drivers/MemoryDriver.d.ts +17 -6
  153. package/lib/Queue/Drivers/MemoryDriver.d.ts.map +1 -1
  154. package/lib/Queue/Drivers/MemoryDriver.js +323 -14
  155. package/lib/Queue/Drivers/RedisDriver.d.ts +48 -0
  156. package/lib/Queue/Drivers/RedisDriver.d.ts.map +1 -0
  157. package/lib/Queue/Drivers/RedisDriver.js +533 -0
  158. package/lib/Queue/Job.d.ts +8 -0
  159. package/lib/Queue/Job.d.ts.map +1 -1
  160. package/lib/Queue/Job.js +25 -1
  161. package/lib/Queue/JobsLogger.d.ts.map +1 -1
  162. package/lib/Queue/JobsLogger.js +6 -3
  163. package/lib/Queue/Queue.d.ts +17 -0
  164. package/lib/Queue/Queue.d.ts.map +1 -1
  165. package/lib/Queue/Queue.js +146 -11
  166. package/lib/Queue/QueueServiceProvider.d.ts +6 -0
  167. package/lib/Queue/QueueServiceProvider.d.ts.map +1 -0
  168. package/lib/Queue/QueueServiceProvider.js +18 -0
  169. package/lib/Queue/Route/web.d.ts +2 -0
  170. package/lib/Queue/Route/web.d.ts.map +1 -0
  171. package/lib/Queue/Route/web.js +16 -0
  172. package/lib/Queue/index.d.ts +1 -0
  173. package/lib/Queue/index.d.ts.map +1 -1
  174. package/lib/Queue/index.js +3 -0
  175. package/lib/Queue/interface.d.ts +25 -0
  176. package/lib/Queue/interface.d.ts.map +1 -1
  177. package/lib/Queue/middleware/queueDashboardGuard.d.ts +7 -0
  178. package/lib/Queue/middleware/queueDashboardGuard.d.ts.map +1 -0
  179. package/lib/Queue/middleware/queueDashboardGuard.js +43 -0
  180. package/lib/Queue/type.d.ts +12 -1
  181. package/lib/Queue/type.d.ts.map +1 -1
  182. package/lib/Response/index.d.ts.map +1 -1
  183. package/lib/Response/index.js +6 -1
  184. package/lib/Routes/Route.d.ts +2 -2
  185. package/lib/Routes/Route.d.ts.map +1 -1
  186. package/lib/Routes/RouteBuilder.d.ts +2 -2
  187. package/lib/Routes/RouteBuilder.d.ts.map +1 -1
  188. package/lib/Security/CsrfMiddleware.d.ts +37 -0
  189. package/lib/Security/CsrfMiddleware.d.ts.map +1 -0
  190. package/lib/Security/CsrfMiddleware.js +85 -0
  191. package/lib/Security/MethodSpoofingMiddleware.d.ts +36 -0
  192. package/lib/Security/MethodSpoofingMiddleware.d.ts.map +1 -0
  193. package/lib/Security/MethodSpoofingMiddleware.js +51 -0
  194. package/lib/Security/index.d.ts +5 -0
  195. package/lib/Security/index.d.ts.map +1 -0
  196. package/lib/Security/index.js +7 -0
  197. package/lib/Session/DatabaseSession.d.ts +9 -3
  198. package/lib/Session/DatabaseSession.d.ts.map +1 -1
  199. package/lib/Session/DatabaseSession.js +38 -36
  200. package/lib/Session/ExpressJccSession.d.ts +23 -0
  201. package/lib/Session/ExpressJccSession.d.ts.map +1 -0
  202. package/lib/Session/ExpressJccSession.js +110 -0
  203. package/lib/Session/RedisSession.d.ts +2 -2
  204. package/lib/Session/RedisSession.d.ts.map +1 -1
  205. package/lib/Session/RedisSession.js +19 -5
  206. package/lib/Session/SessionManager.d.ts +18 -4
  207. package/lib/Session/SessionManager.d.ts.map +1 -1
  208. package/lib/Session/SessionManager.js +53 -17
  209. package/lib/Socialite/AbstractProvider.d.ts +60 -0
  210. package/lib/Socialite/AbstractProvider.d.ts.map +1 -0
  211. package/lib/Socialite/AbstractProvider.js +136 -0
  212. package/lib/Socialite/Drivers/facebook/FacebookDriver.d.ts +9 -0
  213. package/lib/Socialite/Drivers/facebook/FacebookDriver.d.ts.map +1 -0
  214. package/lib/Socialite/Drivers/facebook/FacebookDriver.js +40 -0
  215. package/lib/Socialite/Drivers/facebook/FacebookProvider.d.ts +15 -0
  216. package/lib/Socialite/Drivers/facebook/FacebookProvider.d.ts.map +1 -0
  217. package/lib/Socialite/Drivers/facebook/FacebookProvider.js +28 -0
  218. package/lib/Socialite/Drivers/github/GitHubDriver.d.ts +9 -0
  219. package/lib/Socialite/Drivers/github/GitHubDriver.d.ts.map +1 -0
  220. package/lib/Socialite/Drivers/github/GitHubDriver.js +54 -0
  221. package/lib/Socialite/Drivers/github/GitHubProvider.d.ts +15 -0
  222. package/lib/Socialite/Drivers/github/GitHubProvider.d.ts.map +1 -0
  223. package/lib/Socialite/Drivers/github/GitHubProvider.js +28 -0
  224. package/lib/Socialite/Drivers/gitlab/GitLabDriver.d.ts +10 -0
  225. package/lib/Socialite/Drivers/gitlab/GitLabDriver.d.ts.map +1 -0
  226. package/lib/Socialite/Drivers/gitlab/GitLabDriver.js +37 -0
  227. package/lib/Socialite/Drivers/gitlab/GitLabProvider.d.ts +15 -0
  228. package/lib/Socialite/Drivers/gitlab/GitLabProvider.d.ts.map +1 -0
  229. package/lib/Socialite/Drivers/gitlab/GitLabProvider.js +28 -0
  230. package/lib/Socialite/Drivers/google/GoogleDriver.d.ts +9 -0
  231. package/lib/Socialite/Drivers/google/GoogleDriver.d.ts.map +1 -0
  232. package/lib/Socialite/Drivers/google/GoogleDriver.js +39 -0
  233. package/lib/Socialite/Drivers/google/GoogleProvider.d.ts +15 -0
  234. package/lib/Socialite/Drivers/google/GoogleProvider.d.ts.map +1 -0
  235. package/lib/Socialite/Drivers/google/GoogleProvider.js +28 -0
  236. package/lib/Socialite/Drivers/slack/SlackDriver.d.ts +9 -0
  237. package/lib/Socialite/Drivers/slack/SlackDriver.d.ts.map +1 -0
  238. package/lib/Socialite/Drivers/slack/SlackDriver.js +41 -0
  239. package/lib/Socialite/Drivers/slack/SlackProvider.d.ts +16 -0
  240. package/lib/Socialite/Drivers/slack/SlackProvider.d.ts.map +1 -0
  241. package/lib/Socialite/Drivers/slack/SlackProvider.js +37 -0
  242. package/lib/Socialite/Drivers/twitter/TwitterDriver.d.ts +9 -0
  243. package/lib/Socialite/Drivers/twitter/TwitterDriver.d.ts.map +1 -0
  244. package/lib/Socialite/Drivers/twitter/TwitterDriver.js +57 -0
  245. package/lib/Socialite/Drivers/twitter/TwitterProvider.d.ts +16 -0
  246. package/lib/Socialite/Drivers/twitter/TwitterProvider.d.ts.map +1 -0
  247. package/lib/Socialite/Drivers/twitter/TwitterProvider.js +38 -0
  248. package/lib/Socialite/SocialUser.d.ts +42 -0
  249. package/lib/Socialite/SocialUser.d.ts.map +1 -0
  250. package/lib/Socialite/SocialUser.js +116 -0
  251. package/lib/Socialite/Socialite.d.ts +13 -0
  252. package/lib/Socialite/Socialite.d.ts.map +1 -0
  253. package/lib/Socialite/Socialite.js +41 -0
  254. package/lib/Socialite/SocialiteProvider.d.ts +9 -0
  255. package/lib/Socialite/SocialiteProvider.d.ts.map +1 -0
  256. package/lib/Socialite/SocialiteProvider.js +15 -0
  257. package/lib/Socialite/config.d.ts +7 -0
  258. package/lib/Socialite/config.d.ts.map +1 -0
  259. package/lib/Socialite/config.js +44 -0
  260. package/lib/Socialite/constant.d.ts +18 -0
  261. package/lib/Socialite/constant.d.ts.map +1 -0
  262. package/lib/Socialite/constant.js +20 -0
  263. package/lib/Socialite/index.d.ts +13 -0
  264. package/lib/Socialite/index.d.ts.map +1 -0
  265. package/lib/Socialite/index.js +25 -0
  266. package/lib/Socialite/types.d.ts +13 -0
  267. package/lib/Socialite/types.d.ts.map +1 -0
  268. package/lib/Socialite/types.js +2 -0
  269. package/lib/Templating-engine/benchmark.d.ts +7 -0
  270. package/lib/Templating-engine/benchmark.d.ts.map +1 -0
  271. package/lib/Templating-engine/benchmark.js +44 -0
  272. package/lib/Templating-engine/engineHelper.d.ts +37 -8
  273. package/lib/Templating-engine/engineHelper.d.ts.map +1 -1
  274. package/lib/Templating-engine/engineHelper.js +203 -26
  275. package/lib/Templating-engine/errors.d.ts +15 -0
  276. package/lib/Templating-engine/errors.d.ts.map +1 -0
  277. package/lib/Templating-engine/errors.js +35 -0
  278. package/lib/Templating-engine/expressions.d.ts +24 -0
  279. package/lib/Templating-engine/expressions.d.ts.map +1 -1
  280. package/lib/Templating-engine/expressions.js +27 -5
  281. package/lib/Templating-engine/index.d.ts +87 -17
  282. package/lib/Templating-engine/index.d.ts.map +1 -1
  283. package/lib/Templating-engine/index.js +701 -96
  284. package/lib/Templating-engine/plugins.d.ts +30 -0
  285. package/lib/Templating-engine/plugins.d.ts.map +1 -0
  286. package/lib/Templating-engine/plugins.js +47 -0
  287. package/lib/Type/index.d.ts +1 -0
  288. package/lib/Type/index.d.ts.map +1 -1
  289. package/lib/Validation/Validator/CustomValidation.d.ts.map +1 -1
  290. package/lib/Validation/Validator/CustomValidation.js +2 -2
  291. package/lib/Validation/Validator/helper.d.ts.map +1 -1
  292. package/lib/Validation/Validator/helper.js +8 -1
  293. package/lib/util/index.d.ts +42 -1
  294. package/lib/util/index.d.ts.map +1 -1
  295. package/lib/util/index.js +154 -17
  296. package/package.json +1 -1
@@ -86,7 +86,7 @@ class QueryBuilder extends ModelEvent_1.ModelEvent {
86
86
  * Add a where exists clause.
87
87
  */
88
88
  // public static whereExists(
89
- // subquery: ((qb: Knex.QueryBuilder) => void) | Knex.QueryBuilder
89
+ // subquery: ((qb: type Knex.QueryBuilder) => void) | type Knex.QueryBuilder
90
90
  // ): typeof QueryBuilder {
91
91
  // this.query().whereExists(subquery);
92
92
  // return this;
@@ -578,6 +578,15 @@ class QueryBuilder extends ModelEvent_1.ModelEvent {
578
578
  return this.query().firstRaw();
579
579
  }
580
580
  static async paginate(req, perPage = 15) { }
581
+ static async findOrCreate(where, data) {
582
+ const result = await this.query().where(where).first();
583
+ if (result) {
584
+ return result;
585
+ }
586
+ else {
587
+ return this.query().insert(data);
588
+ }
589
+ }
581
590
  }
582
591
  exports.QueryBuilder = QueryBuilder;
583
592
  QueryBuilder.softDelete = false;
@@ -1 +1 @@
1
- {"version":3,"file":"Rollback.d.ts","sourceRoot":"","sources":["../../../../jcc-express-mvc/lib/Jcc-eloquent/lib/Rollback.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,qBAAa,QAAS,SAAQ,OAAO;IACnC;;;;;OAKG;IACG,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;IAQlD,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAO1D;;;;;;;OAOG;IACG,QAAQ,CACZ,KAAK,EAAE,MAAM,YAAI,EACjB,aAAa,EAAE,MAAM,EACrB,GAAG,GAAE,MAAa,GACjB,OAAO,CAAC,GAAG,CAAC;IAoCf,mBAAmB,CAAC,SAAS,EAAE,MAAM;CAOtC;AAED,eAAO,MAAM,QAAQ,UAhDV,MAAM,6BACE,MAAM,QAChB,MAAM,KACV,OAAO,CAAC,GAAG,CA6CoD,CAAC"}
1
+ {"version":3,"file":"Rollback.d.ts","sourceRoot":"","sources":["../../../../jcc-express-mvc/lib/Jcc-eloquent/lib/Rollback.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,qBAAa,QAAS,SAAQ,OAAO;IACnC;;;;;OAKG;IACG,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;IAQlD,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAO1D;;;;;;;OAOG;IACG,QAAQ,CACZ,KAAK,EAAE,MAAM,YAAI,EACjB,aAAa,EAAE,MAAM,EACrB,GAAG,GAAE,MAAa,GACjB,OAAO,CAAC,GAAG,CAAC;IAwCf,mBAAmB,CAAC,SAAS,EAAE,MAAM;CAOtC;AAED,eAAO,MAAM,QAAQ,UApDV,MAAM,6BACE,MAAM,QAChB,MAAM,KACV,OAAO,CAAC,GAAG,CAiDoD,CAAC"}
@@ -5,6 +5,8 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.rollback = exports.Rollback = void 0;
7
7
  const Builder_1 = require("./Builder");
8
+ const Schema_1 = require("./Schema");
9
+ const Migration_1 = require("./Migration");
8
10
  const colors_1 = __importDefault(require("colors"));
9
11
  class Rollback extends Builder_1.Builder {
10
12
  /**
@@ -47,8 +49,13 @@ class Rollback extends Builder_1.Builder {
47
49
  if (await this.removeMigration(migratedFile.migration)) {
48
50
  const { Migration } = this.importMigrationFile(`${migrationPath}/${migratedFile.migration}`);
49
51
  const instance = new Migration();
50
- const sql = instance.down();
51
- const result = await this.runQuery(sql);
52
+ Schema_1.Schema.clearLastGeneratedSql();
53
+ const returned = instance.down();
54
+ const statements = (0, Migration_1.getMigrationStatements)(returned);
55
+ let result;
56
+ for (const sql of statements) {
57
+ result = await this.runQuery(sql);
58
+ }
52
59
  if (result) {
53
60
  logs.push(`${migratedFile.migration} rollback succesfully`);
54
61
  console.log(colors_1.default.green(`${migratedFile.migration} rollback succesfully`));
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../jcc-express-mvc/lib/Jcc-eloquent/lib/Schema/BaseSchemaEntity/index.ts"],"names":[],"mappings":"AAGA,qBAAa,gBAAgB;IAC3B,MAAM,CAAC,UAAU,SAAoD;IACrE,MAAM,CAAC,UAAU,SAC8D;IAC/E,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,CAAM;IACnC,MAAM,CAAC,WAAW,EAAE,KAAK,CAAC,MAAM,CAAC,CAAM;IAEvC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,CAgC7B;IAEF,MAAM,CAAC,aAAa,EAAE,KAAK,CAAC,MAAM,CAAC,CAqBjC;IAEF;;OAEG;IACH,MAAM,CAAC,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,YAAY,GAAE,MAAW,GAAG,MAAM;IAmB5E;;OAEG;IACH,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IASzC;;OAEG;IACH,MAAM,CAAC,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAc7C;;OAEG;IACH,MAAM,CAAC,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IASxC;;OAEG;IACH,MAAM,CAAC,WAAW,IAAI,IAAI;IAK1B;;OAEG;IACH,MAAM,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM;CAgD/D"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../jcc-express-mvc/lib/Jcc-eloquent/lib/Schema/BaseSchemaEntity/index.ts"],"names":[],"mappings":"AAGA,qBAAa,gBAAgB;IAC3B,MAAM,CAAC,UAAU,SAAoD;IACrE,MAAM,CAAC,UAAU,SAC8D;IAC/E,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,CAAM;IACnC,MAAM,CAAC,WAAW,EAAE,KAAK,CAAC,MAAM,CAAC,CAAM;IAEvC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,CAgC7B;IAEF,MAAM,CAAC,aAAa,EAAE,KAAK,CAAC,MAAM,CAAC,CAoBjC;IAEF;;OAEG;IACH,MAAM,CAAC,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,YAAY,GAAE,MAAW,GAAG,MAAM;IAmB5E;;OAEG;IACH,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IASzC;;OAEG;IACH,MAAM,CAAC,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAc7C;;OAEG;IACH,MAAM,CAAC,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IAUxC;;OAEG;IACH,MAAM,CAAC,WAAW,IAAI,IAAI;IAK1B;;OAEG;IACH,MAAM,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM;CAgD/D"}
@@ -49,8 +49,9 @@ class BaseSchemaEntity {
49
49
  if (this.columns.length === 0) {
50
50
  throw new Error("No columns available to modify");
51
51
  }
52
- const firstIndex = this.columns[0];
53
- return (this.columns[0] = `${str} ${firstIndex}`);
52
+ const lastIndex = this.columns.length - 1;
53
+ const column = this.columns[lastIndex];
54
+ return (this.columns[lastIndex] = `${str} ${column}`);
54
55
  }
55
56
  /**
56
57
  * Resets the schema by clearing the columns and constraints arrays.
@@ -159,5 +160,4 @@ BaseSchemaEntity.alterKeywords = [
159
160
  "AUTO_INCREMENT",
160
161
  "DISABLE KEYS",
161
162
  "ENABLE KEYS",
162
- "AFTER",
163
163
  ];
@@ -163,9 +163,12 @@ export declare class Blueprint {
163
163
  */
164
164
  first(): this;
165
165
  /**
166
- * Adds an index to the column.
166
+ * Adds an index (Laravel-style):
167
+ * - index("email")
168
+ * - index(["email", "status"])
169
+ * - index("email", "idx_users_email")
167
170
  */
168
- index(indexName?: string | string[]): this;
171
+ index(columns?: string | string[], indexName?: string): this;
169
172
  /**
170
173
  * Adds a TIME column to the schema.
171
174
  */
@@ -269,6 +272,7 @@ export declare class Blueprint {
269
272
  autoIncrement(): this;
270
273
  /**
271
274
  * Makes the column unsigned.
275
+ * MySQL requires TYPE UNSIGNED NOT NULL — not TYPE NOT NULL UNSIGNED (append was invalid).
272
276
  */
273
277
  unsigned(): this;
274
278
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../jcc-express-mvc/lib/Jcc-eloquent/lib/Schema/BluePrint/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../jcc-express-mvc/lib/Jcc-eloquent/lib/Schema/BluePrint/index.ts"],"names":[],"mappings":"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"}
@@ -339,18 +339,33 @@ class Blueprint {
339
339
  return this;
340
340
  }
341
341
  /**
342
- * Adds an index to the column.
343
- */
344
- index(indexName) {
345
- if (typeof indexName === "string") {
346
- BaseSchemaEntity_1.BaseSchemaEntity.columns.push(`INDEX ${indexName} (${indexName})`);
347
- }
348
- else if (Array.isArray(indexName)) {
349
- BaseSchemaEntity_1.BaseSchemaEntity.columns.push(`INDEX ${this.tableName}_${indexName.join("_")} (${indexName.join(",")})`);
350
- }
351
- else {
352
- BaseSchemaEntity_1.BaseSchemaEntity.AddQueryToLastIndex(`INDEX`);
342
+ * Adds an index (Laravel-style):
343
+ * - index("email")
344
+ * - index(["email", "status"])
345
+ * - index("email", "idx_users_email")
346
+ */
347
+ index(columns, indexName) {
348
+ if (columns === undefined) {
349
+ // Chain style: table.integer("last_activity").index()
350
+ // Must be a table-level INDEX clause, not "INT NOT NULL INDEX" (invalid in MySQL).
351
+ if (BaseSchemaEntity_1.BaseSchemaEntity.columns.length === 0) {
352
+ throw new Error("index() chain requires a preceding column definition");
353
+ }
354
+ const lastCol = BaseSchemaEntity_1.BaseSchemaEntity.columns[BaseSchemaEntity_1.BaseSchemaEntity.columns.length - 1];
355
+ const colMatch = lastCol.match(/^(`?\w+`?)\s/);
356
+ const colName = colMatch ? colMatch[1].replace(/`/g, "") : "";
357
+ if (!colName) {
358
+ throw new Error("Could not parse column name for index()");
359
+ }
360
+ const table = this.tableName || "table";
361
+ const name = indexName || `idx_${table}_${colName}`;
362
+ BaseSchemaEntity_1.BaseSchemaEntity.columns.push(`INDEX ${name} (${colName})`);
363
+ return this;
353
364
  }
365
+ const columnList = Array.isArray(columns) ? columns : [columns];
366
+ const table = this.tableName || "table";
367
+ const name = indexName || `idx_${table}_${columnList.join("_")}`;
368
+ BaseSchemaEntity_1.BaseSchemaEntity.columns.push(`INDEX ${name} (${columnList.join(", ")})`);
354
369
  return this;
355
370
  }
356
371
  //start
@@ -372,7 +387,7 @@ class Blueprint {
372
387
  * Adds a SMALLINT column to the schema.
373
388
  */
374
389
  smallInteger(column) {
375
- BaseSchemaEntity_1.BaseSchemaEntity.columns.push(`${column}SMALLINT NOT NULL`);
390
+ BaseSchemaEntity_1.BaseSchemaEntity.columns.push(`${column} SMALLINT NOT NULL`);
376
391
  return this;
377
392
  }
378
393
  /**
@@ -584,8 +599,22 @@ class Blueprint {
584
599
  }
585
600
  /**
586
601
  * Makes the column unsigned.
602
+ * MySQL requires TYPE UNSIGNED NOT NULL — not TYPE NOT NULL UNSIGNED (append was invalid).
587
603
  */
588
604
  unsigned() {
605
+ if (BaseSchemaEntity_1.BaseSchemaEntity.columns.length === 0) {
606
+ throw new Error("No columns available to modify");
607
+ }
608
+ const lastIndex = BaseSchemaEntity_1.BaseSchemaEntity.columns.length - 1;
609
+ const col = BaseSchemaEntity_1.BaseSchemaEntity.columns[lastIndex];
610
+ if (/\bUNSIGNED\b/i.test(col)) {
611
+ return this;
612
+ }
613
+ const replaced = col.replace(/\b(INT|BIGINT|SMALLINT|MEDIUMINT|TINYINT)(\(\d+\))? NOT NULL\b/i, "$1$2 UNSIGNED NOT NULL");
614
+ if (replaced !== col) {
615
+ BaseSchemaEntity_1.BaseSchemaEntity.columns[lastIndex] = replaced;
616
+ return this;
617
+ }
589
618
  BaseSchemaEntity_1.BaseSchemaEntity.AddQueryToLastIndex("UNSIGNED");
590
619
  return this;
591
620
  }
@@ -1 +1 @@
1
- {"version":3,"file":"Sqlite.d.ts","sourceRoot":"","sources":["../../../../../../jcc-express-mvc/lib/Jcc-eloquent/lib/Schema/Translator/Sqlite.ts"],"names":[],"mappings":"AAKA,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,MAAM,CAAC,eAAe,CAoI5B;IAEF,MAAM,CAAC,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IAuDzC;;;;OAIG;WACW,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;IA6BjD;;;;OAIG;IACH,OAAO,CAAC,MAAM,CAAC,oBAAoB;IAOnC;;;;OAIG;IACH,OAAO,CAAC,MAAM,CAAC,oBAAoB;IAsCnC;;;;OAIG;IACH,OAAO,CAAC,MAAM,CAAC,0BAA0B;CAc1C"}
1
+ {"version":3,"file":"Sqlite.d.ts","sourceRoot":"","sources":["../../../../../../jcc-express-mvc/lib/Jcc-eloquent/lib/Schema/Translator/Sqlite.ts"],"names":[],"mappings":"AAKA,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,MAAM,CAAC,eAAe,CAoI5B;IAEF,MAAM,CAAC,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IAuDzC;;;;OAIG;WACW,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;IAkCjD;;;;OAIG;IACH,OAAO,CAAC,MAAM,CAAC,oBAAoB;IAOnC;;;;OAIG;IACH,OAAO,CAAC,MAAM,CAAC,oBAAoB;IAsCnC;;;;OAIG;IACH,OAAO,CAAC,MAAM,CAAC,0BAA0B;CA4C1C"}
@@ -81,7 +81,11 @@ class SQLiteTranslator {
81
81
  .replace(/,\s*\)/g, ")") // remove trailing commas in parentheses
82
82
  .replace(/\s+ON\s*,/g, ",") // clean up malformed ON clauses
83
83
  .replace(/\s+ON\s*\)/g, ")"); // clean up malformed ON clauses at end of parentheses
84
- return this.SQLiteFKFixer(sqliteSql);
84
+ // FK reordering is only relevant for CREATE TABLE statements.
85
+ if (/^\s*CREATE\s+TABLE\b/i.test(sqliteSql)) {
86
+ return this.SQLiteFKFixer(sqliteSql);
87
+ }
88
+ return sqliteSql;
85
89
  }
86
90
  /**
87
91
  * Converts MySQL CONCAT() function to SQLite concatenation operator ||
@@ -141,6 +145,20 @@ class SQLiteTranslator {
141
145
  "3. DROP old table\n" +
142
146
  "4. RENAME new table */\n" +
143
147
  "-- ALTER TABLE $1 attempted to modify column $2 to $3");
148
+ sql = sql.replace(/ALTER\s+TABLE\s+(\w+)\s+CHANGE\s+COLUMN\s+(\w+)\s+(\w+)\s+([^;]+)/gi, "/* SQLite doesn't support CHANGE COLUMN directly. Use: \n" +
149
+ "1. CREATE new table with desired schema\n" +
150
+ "2. INSERT data from old table\n" +
151
+ "3. DROP old table\n" +
152
+ "4. RENAME new table */\n" +
153
+ "-- ALTER TABLE $1 attempted to change column $2 to $3 $4");
154
+ sql = sql.replace(/ALTER\s+TABLE\s+(\w+)\s+DROP\s+COLUMN\s+(\w+)\s*;?/gi, "/* SQLite supports DROP COLUMN only in newer versions and with constraints caveats. " +
155
+ "Safer cross-version approach is table rebuild. */\n" +
156
+ "-- ALTER TABLE $1 attempted to drop column $2");
157
+ sql = sql.replace(/ALTER\s+TABLE\s+(\w+)\s+DROP\s+INDEX\s+(\w+)\s*;?/gi, "/* SQLite drops indexes with standalone DROP INDEX, not ALTER TABLE DROP INDEX. */\n" +
158
+ "DROP INDEX IF EXISTS $2;");
159
+ sql = sql.replace(/ALTER\s+TABLE\s+(\w+)\s+DROP\s+FOREIGN\s+KEY\s+(\w+)\s*;?/gi, "/* SQLite doesn't support dropping a foreign key constraint directly. " +
160
+ "Rebuild table without the constraint. */\n" +
161
+ "-- ALTER TABLE $1 attempted to drop foreign key $2");
144
162
  return sql;
145
163
  }
146
164
  }
@@ -188,9 +206,9 @@ SQLiteTranslator.conversionRules = [
188
206
  // Character set and collation
189
207
  { pattern: /CHARACTER\s+SET\s+\w+/gi, replacement: "" },
190
208
  { pattern: /COLLATE\s+\w+/gi, replacement: "" },
191
- // Key declarations
209
+ // Key declarations (single or multi-column)
192
210
  {
193
- pattern: /\bKEY\s+`?(\w+)`?\s+\(`?(\w+)`?\)/gi,
211
+ pattern: /\bKEY\s+`?([a-zA-Z0-9_]+)`?\s+\(([^)]+)\)/gi,
194
212
  replacement: "INDEX $1($2)",
195
213
  },
196
214
  // UNSIGNED attribute (not supported in SQLite)
@@ -5,6 +5,7 @@ export declare class PostgresTranslator {
5
5
  * @returns The PostgreSQL-compatible query string.
6
6
  */
7
7
  private static replaceQuestionMarks;
8
+ private static normalizeCommon;
8
9
  private static translateCreateTable;
9
10
  /**
10
11
  * Translates MySQL ALTER TABLE statements to PostgreSQL.
@@ -1 +1 @@
1
- {"version":3,"file":"postgres.d.ts","sourceRoot":"","sources":["../../../../../../jcc-express-mvc/lib/Jcc-eloquent/lib/Schema/Translator/postgres.ts"],"names":[],"mappings":"AAAA,qBAAa,kBAAkB;IAC7B;;;;OAIG;IAEH,OAAO,CAAC,MAAM,CAAC,oBAAoB;IAKnC,OAAO,CAAC,MAAM,CAAC,oBAAoB;IAwDnC;;;;OAIG;IACH,OAAO,CAAC,MAAM,CAAC,mBAAmB;IAMlC;;;;OAIG;IACH,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;CAaxC"}
1
+ {"version":3,"file":"postgres.d.ts","sourceRoot":"","sources":["../../../../../../jcc-express-mvc/lib/Jcc-eloquent/lib/Schema/Translator/postgres.ts"],"names":[],"mappings":"AAAA,qBAAa,kBAAkB;IAC7B;;;;OAIG;IAEH,OAAO,CAAC,MAAM,CAAC,oBAAoB;IAKnC,OAAO,CAAC,MAAM,CAAC,eAAe;IA6D9B,OAAO,CAAC,MAAM,CAAC,oBAAoB;IAcnC;;;;OAIG;IACH,OAAO,CAAC,MAAM,CAAC,mBAAmB;IAyElC;;;;OAIG;IACH,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;CAaxC"}
@@ -11,17 +11,18 @@ class PostgresTranslator {
11
11
  let counter = 1;
12
12
  return query.replace(/\?/g, () => `$${counter++}`);
13
13
  }
14
- static translateCreateTable(query) {
15
- // Replace MySQL types with PostgreSQL equivalents
14
+ static normalizeCommon(query) {
15
+ // Remove MySQL identifier quoting.
16
+ query = query.replace(/`([^`]+)`/g, "$1");
16
17
  // Handle AUTO_INCREMENT columns first (order matters)
17
18
  query = query.replace(/\bBIGINT\s+UNSIGNED\s+AUTO_INCREMENT\b/gi, "BIGSERIAL");
18
19
  query = query.replace(/\bINT\s+UNSIGNED\s+AUTO_INCREMENT\b/gi, "SERIAL");
19
20
  query = query.replace(/\bBIGINT\s+AUTO_INCREMENT\b/gi, "BIGSERIAL");
20
21
  query = query.replace(/\bINT\s+AUTO_INCREMENT\b/gi, "SERIAL");
21
22
  query = query.replace(/\b(MEDIUMINT|SMALLINT)\s+AUTO_INCREMENT\b/gi, "SERIAL");
22
- // Remove UNSIGNED keyword (PostgreSQL doesn't have unsigned types)
23
+ // Remove UNSIGNED keyword (PostgreSQL doesn't support unsigned types)
23
24
  query = query.replace(/\s+UNSIGNED\b/gi, "");
24
- // Replace remaining AUTO_INCREMENT (shouldn't happen after above, but just in case)
25
+ // Replace remaining AUTO_INCREMENT (safety fallback)
25
26
  query = query.replace(/\s+AUTO_INCREMENT\b/gi, "");
26
27
  // Data type mappings
27
28
  query = query.replace(/\bTINYINT\b/gi, "SMALLINT");
@@ -30,20 +31,29 @@ class PostgresTranslator {
30
31
  query = query.replace(/\bBIGINT\b/gi, "BIGINT");
31
32
  query = query.replace(/\bFLOAT\b/gi, "REAL");
32
33
  query = query.replace(/\bDOUBLE\b/gi, "DOUBLE PRECISION");
33
- // BLOB and binary types
34
- query = query.replace(/\b(TINYBLOB|BLOB|MEDIUMBLOB|LONGBLOB|BINARY|VARBINARY)\b/gi, "BYTEA");
35
- // Date/time types
36
34
  query = query.replace(/\bDATETIME\b/gi, "TIMESTAMP");
37
- // Text types
38
35
  query = query.replace(/\b(TINYTEXT|MEDIUMTEXT|LONGTEXT)\b/gi, "TEXT");
36
+ query = query.replace(/\b(TINYBLOB|BLOB|MEDIUMBLOB|LONGBLOB|BINARY|VARBINARY)\b/gi, "BYTEA");
39
37
  // Remove MySQL-specific clauses
40
38
  query = query.replace(/\s+ON\s+UPDATE\s+CURRENT_TIMESTAMP\b/gi, "");
41
- // Handle ENGINE, CHARSET, etc. (remove MySQL-specific table options)
39
+ // MySQL unique-key syntax inside CREATE TABLE.
40
+ query = query.replace(/\bUNIQUE\s+KEY\s+([a-zA-Z0-9_]+)\s*\(([^)]+)\)/gi, "CONSTRAINT $1 UNIQUE ($2)");
41
+ // PostgreSQL BOOLEAN defaults must be TRUE/FALSE (not 1/0).
42
+ query = query.replace(/\bBOOLEAN\b([^,;]*?)\bDEFAULT\s+([01])\b/gi, (_match, between, bit) => `BOOLEAN${between}DEFAULT ${bit === "1" ? "TRUE" : "FALSE"}`);
43
+ // Table options not supported in PostgreSQL
42
44
  query = query.replace(/\s+ENGINE\s*=\s*\w+/gi, "");
43
45
  query = query.replace(/\s+DEFAULT\s+CHARSET\s*=\s*\w+/gi, "");
44
46
  query = query.replace(/\s+COLLATE\s*=\s*\w+/gi, "");
47
+ return query;
48
+ }
49
+ static translateCreateTable(query) {
50
+ query = this.normalizeCommon(query);
51
+ // MySQL inline non-unique index definitions are not valid in PostgreSQL CREATE TABLE.
52
+ // Remove these clauses to keep CREATE TABLE executable.
53
+ query = query.replace(/\s*,\s*(?:INDEX|KEY)\s+[a-zA-Z0-9_]+\s*\([^)]+\)/gi, "");
45
54
  // Clean up extra whitespace
46
55
  query = query.replace(/\s+/g, " ").trim();
56
+ query = query.replace(/,\s*\)/g, ")");
47
57
  return query;
48
58
  }
49
59
  /**
@@ -52,9 +62,55 @@ class PostgresTranslator {
52
62
  * @returns The PostgreSQL-compatible query string.
53
63
  */
54
64
  static translateAlterTable(query) {
55
- // Handle ALTER TABLE specific translations
56
- // This is a placeholder - you'd need to implement specific ALTER TABLE logic
57
- return this.translateCreateTable(query);
65
+ query = this.normalizeCommon(query);
66
+ // DROP FOREIGN KEY name -> DROP CONSTRAINT name
67
+ query = query.replace(/\bDROP\s+FOREIGN\s+KEY\s+([a-zA-Z0-9_]+)/gi, "DROP CONSTRAINT $1");
68
+ // DROP INDEX name -> DROP CONSTRAINT name (for unique/index-like constraints emitted by schema builder)
69
+ query = query.replace(/\bDROP\s+INDEX\s+([a-zA-Z0-9_]+)/gi, "DROP CONSTRAINT $1");
70
+ // CHANGE COLUMN old new TYPE ... -> RENAME + TYPE (+ null/default when present)
71
+ query = query.replace(/\bCHANGE\s+COLUMN\s+([a-zA-Z0-9_]+)\s+([a-zA-Z0-9_]+)\s+([A-Z]+(?:\([^)]+\))?)([^,;]*)/gi, (_match, oldCol, newCol, type, tail) => {
72
+ const ops = [
73
+ `RENAME COLUMN ${oldCol} TO ${newCol}`,
74
+ `ALTER COLUMN ${newCol} TYPE ${type}`,
75
+ ];
76
+ const t = String(tail || "");
77
+ if (/\bNOT\s+NULL\b/i.test(t)) {
78
+ ops.push(`ALTER COLUMN ${newCol} SET NOT NULL`);
79
+ }
80
+ else if (/\bNULL\b/i.test(t)) {
81
+ ops.push(`ALTER COLUMN ${newCol} DROP NOT NULL`);
82
+ }
83
+ const defaultMatch = t.match(/\bDEFAULT\s+([^\s,;]+)/i);
84
+ if (defaultMatch?.[1]) {
85
+ ops.push(`ALTER COLUMN ${newCol} SET DEFAULT ${defaultMatch[1]}`);
86
+ }
87
+ return ops.join(", ");
88
+ });
89
+ // MODIFY COLUMN col TYPE ... -> ALTER COLUMN statements (+ null/default when present)
90
+ query = query.replace(/\bMODIFY\s+COLUMN\s+([a-zA-Z0-9_]+)\s+([A-Z]+(?:\([^)]+\))?)([^,;]*)/gi, (_match, col, type, tail) => {
91
+ const ops = [`ALTER COLUMN ${col} TYPE ${type}`];
92
+ const t = String(tail || "");
93
+ if (/\bNOT\s+NULL\b/i.test(t)) {
94
+ ops.push(`ALTER COLUMN ${col} SET NOT NULL`);
95
+ }
96
+ else if (/\bNULL\b/i.test(t)) {
97
+ ops.push(`ALTER COLUMN ${col} DROP NOT NULL`);
98
+ }
99
+ const defaultMatch = t.match(/\bDEFAULT\s+([^\s,;]+)/i);
100
+ if (defaultMatch?.[1]) {
101
+ ops.push(`ALTER COLUMN ${col} SET DEFAULT ${defaultMatch[1]}`);
102
+ }
103
+ return ops.join(", ");
104
+ });
105
+ // AFTER/FIRST are MySQL-only column positioning hints.
106
+ query = query.replace(/\s+AFTER\s+[a-zA-Z0-9_]+/gi, "");
107
+ query = query.replace(/\s+FIRST\b/gi, "");
108
+ // Boolean defaults in ALTER statements as well.
109
+ query = query.replace(/\bALTER\s+COLUMN\s+([a-zA-Z0-9_]+)\s+SET\s+DEFAULT\s+([01])\b/gi, (_match, col, bit) => `ALTER COLUMN ${col} SET DEFAULT ${bit === "1" ? "TRUE" : "FALSE"}`);
110
+ // Clean up extra whitespace
111
+ query = query.replace(/\s+/g, " ").trim();
112
+ query = query.replace(/,\s*;/g, ";");
113
+ return query;
58
114
  }
59
115
  /**
60
116
  * Main translation method that handles both CREATE TABLE and ALTER TABLE statements.
@@ -70,8 +126,8 @@ class PostgresTranslator {
70
126
  else if (trimmedQuery.toUpperCase().startsWith("ALTER TABLE")) {
71
127
  return this.translateAlterTable(this.replaceQuestionMarks(trimmedQuery));
72
128
  }
73
- // For other query types, just replace question marks
74
- return this.replaceQuestionMarks(trimmedQuery);
129
+ // For other query types, replace placeholders and normalize identifier quoting.
130
+ return this.replaceQuestionMarks(trimmedQuery).replace(/`([^`]+)`/g, "$1");
75
131
  }
76
132
  }
77
133
  exports.PostgresTranslator = PostgresTranslator;
@@ -1,5 +1,17 @@
1
1
  import { Blueprint } from "./BluePrint";
2
2
  export declare class Schema {
3
+ /**
4
+ * SQL emitted by Schema.create/table/drop/… in order, so migrations can omit
5
+ * `return` and still run; multiple calls in one `up()`/`down()` are all kept.
6
+ */
7
+ private static generatedSqlBatch;
8
+ /** Clear before running a migration `up`/`down` to avoid stale SQL. */
9
+ static clearLastGeneratedSql(): void;
10
+ private static captureGeneratedSql;
11
+ /**
12
+ * All statements captured since {@link clearLastGeneratedSql}, then clears the batch.
13
+ */
14
+ static consumeAllGeneratedSql(): string[];
3
15
  /**
4
16
  * Creates a new table using a blueprint.
5
17
  */
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../jcc-express-mvc/lib/Jcc-eloquent/lib/Schema/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAMxC,qBAAa,MAAM;IACjB;;OAEG;IACH,MAAM,CAAC,MAAM,CACX,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,CAAC,SAAS,EAAE,SAAS,KAAK,IAAI,GACvC,MAAM;IAiBT;;OAEG;IACH,MAAM,CAAC,KAAK,CACV,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,CAAC,SAAS,EAAE,SAAS,KAAK,IAAI,GACvC,MAAM;IAiBT;;OAEG;IACH,MAAM,CAAC,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM;IAgB3C,MAAM,CAAC,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM;IAI9C;;OAEG;IACH,MAAM,CAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM;IAgB1C;;OAEG;IACH,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM;IAgBtC;;OAEG;IACH,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM;IAe/C;;OAEG;WACU,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IA0C1D;;OAEG;WACU,SAAS,CACpB,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,OAAO,CAAC;IAmDnB;;OAEG;WACU,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;CAmDpE"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../jcc-express-mvc/lib/Jcc-eloquent/lib/Schema/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAMxC,qBAAa,MAAM;IACjB;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,iBAAiB,CAAgB;IAEhD,uEAAuE;IACvE,MAAM,CAAC,qBAAqB,IAAI,IAAI;IAIpC,OAAO,CAAC,MAAM,CAAC,mBAAmB;IAKlC;;OAEG;IACH,MAAM,CAAC,sBAAsB,IAAI,MAAM,EAAE;IAMzC;;OAEG;IACH,MAAM,CAAC,MAAM,CACX,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,CAAC,SAAS,EAAE,SAAS,KAAK,IAAI,GACvC,MAAM;IAiBT;;OAEG;IACH,MAAM,CAAC,KAAK,CACV,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,CAAC,SAAS,EAAE,SAAS,KAAK,IAAI,GACvC,MAAM;IAiBT;;OAEG;IACH,MAAM,CAAC,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM;IAkB3C,MAAM,CAAC,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM;IAI9C;;OAEG;IACH,MAAM,CAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM;IAgB1C;;OAEG;IACH,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM;IAgBtC;;OAEG;IACH,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM;IAe/C;;OAEG;WACU,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IA0C1D;;OAEG;WACU,SAAS,CACpB,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,OAAO,CAAC;IAmDnB;;OAEG;WACU,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;CAmDpE"}
@@ -8,6 +8,22 @@ const DB_1 = require("../DB");
8
8
  const Config_1 = require("../../../Config/Config");
9
9
  // dotenv.config({ path: `${appRootPath.path}/.env` });
10
10
  class Schema {
11
+ /** Clear before running a migration `up`/`down` to avoid stale SQL. */
12
+ static clearLastGeneratedSql() {
13
+ this.generatedSqlBatch = [];
14
+ }
15
+ static captureGeneratedSql(sql) {
16
+ this.generatedSqlBatch.push(sql);
17
+ return sql;
18
+ }
19
+ /**
20
+ * All statements captured since {@link clearLastGeneratedSql}, then clears the batch.
21
+ */
22
+ static consumeAllGeneratedSql() {
23
+ const out = [...this.generatedSqlBatch];
24
+ this.generatedSqlBatch = [];
25
+ return out;
26
+ }
11
27
  /**
12
28
  * Creates a new table using a blueprint.
13
29
  */
@@ -18,7 +34,7 @@ class Schema {
18
34
  }
19
35
  const blueprint = new BluePrint_1.Blueprint(tableName);
20
36
  callback(blueprint);
21
- return blueprint.toSQL("CREATE", tableName);
37
+ return this.captureGeneratedSql(blueprint.toSQL("CREATE", tableName));
22
38
  }
23
39
  catch (error) {
24
40
  throw new DatabaseError_1.DatabaseError(`Failed to create table '${tableName}': ${error.message}`, constant_1.SCHEMA_CREATE_ERROR);
@@ -34,7 +50,7 @@ class Schema {
34
50
  }
35
51
  const blueprint = new BluePrint_1.Blueprint(tableName);
36
52
  callback(blueprint);
37
- return blueprint.toSQL("ALTER", tableName);
53
+ return this.captureGeneratedSql(blueprint.toSQL("ALTER", tableName));
38
54
  }
39
55
  catch (error) {
40
56
  throw new DatabaseError_1.DatabaseError(`Failed to alter table '${tableName}': ${error.message}`, constant_1.SCHEMA_CREATE_ERROR);
@@ -49,7 +65,7 @@ class Schema {
49
65
  throw new Error("Table name cannot be empty");
50
66
  }
51
67
  const blueprint = new BluePrint_1.Blueprint(tableName);
52
- return blueprint.toSQL("DROP TABLE IF EXISTS", tableName);
68
+ return this.captureGeneratedSql(blueprint.toSQL("DROP TABLE IF EXISTS", tableName));
53
69
  }
54
70
  catch (error) {
55
71
  throw new DatabaseError_1.DatabaseError(`Failed to drop table '${tableName}': ${error.message}`, constant_1.SCHEMA_CREATE_ERROR);
@@ -67,7 +83,7 @@ class Schema {
67
83
  throw new Error("Table name cannot be empty");
68
84
  }
69
85
  const blueprint = new BluePrint_1.Blueprint(tableName);
70
- return blueprint.toSQL("TRUNCATE TABLE", tableName);
86
+ return this.captureGeneratedSql(blueprint.toSQL("TRUNCATE TABLE", tableName));
71
87
  }
72
88
  catch (error) {
73
89
  throw new DatabaseError_1.DatabaseError(`Failed to truncate table '${tableName}': ${error.message}`, constant_1.SCHEMA_CREATE_ERROR);
@@ -82,7 +98,7 @@ class Schema {
82
98
  throw new Error("Table name cannot be empty");
83
99
  }
84
100
  const blueprint = new BluePrint_1.Blueprint(tableName);
85
- return blueprint.toSQL("DROP TABLE", tableName);
101
+ return this.captureGeneratedSql(blueprint.toSQL("DROP TABLE", tableName));
86
102
  }
87
103
  catch (error) {
88
104
  throw new DatabaseError_1.DatabaseError(`Failed to drop table '${tableName}': ${error.message}`, constant_1.SCHEMA_CREATE_ERROR);
@@ -96,7 +112,7 @@ class Schema {
96
112
  if (!from || from.trim() === "" || !to || to.trim() === "") {
97
113
  throw new Error("Table names cannot be empty");
98
114
  }
99
- return `RENAME TABLE ${from} TO ${to};`;
115
+ return this.captureGeneratedSql(`RENAME TABLE ${from} TO ${to};`);
100
116
  }
101
117
  catch (error) {
102
118
  throw new DatabaseError_1.DatabaseError(`Failed to rename table from '${from}' to '${to}': ${error.message}`, constant_1.SCHEMA_CREATE_ERROR);
@@ -235,3 +251,8 @@ class Schema {
235
251
  }
236
252
  }
237
253
  exports.Schema = Schema;
254
+ /**
255
+ * SQL emitted by Schema.create/table/drop/… in order, so migrations can omit
256
+ * `return` and still run; multiple calls in one `up()`/`down()` are all kept.
257
+ */
258
+ Schema.generatedSqlBatch = [];
@@ -1,3 +1,4 @@
1
+ import type { Request } from "express";
1
2
  import { Model } from "../Model";
2
3
  export declare class Utils {
3
4
  /**
@@ -52,6 +53,15 @@ export declare class Utils {
52
53
  * - `active`: A boolean indicating if the link corresponds to the current page.
53
54
  */
54
55
  static generatePaginationLinks(path: string, currentPage: number, lastPage: number): Record<string, any>[];
56
+ /**
57
+ * Merge `request.query` with overrides into a full URL (pathname + search).
58
+ * Pass `null` / `undefined` in overrides to remove a query key.
59
+ */
60
+ static mergeRequestQuery(request: Request, overrides: Record<string, string | number | boolean | null | undefined>): string;
61
+ /** Encode a cursor column value for `?cursor=` (base64url JSON). */
62
+ static encodeCursorValue(value: unknown): string;
63
+ /** Decode `?cursor=` from {@link encodeCursorValue} or fall back to raw string / number. */
64
+ static decodeCursorValue(encoded: string): unknown;
55
65
  /**
56
66
  * Extracts and returns metadata and configurations for a given Model.
57
67
  * @param {any} Model - The model whose metadata needs to be extracted. This should follow the ORM's Model structure.
@@ -84,5 +94,8 @@ export declare class Utils {
84
94
  static getModelFile(modelType: string): Promise<typeof Model>;
85
95
  static formatDate(): string;
86
96
  static isClass(value: any): boolean;
97
+ static isPostgres(): boolean;
98
+ static isMysql(): boolean;
99
+ static isSqlite(): boolean;
87
100
  }
88
101
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../jcc-express-mvc/lib/Jcc-eloquent/lib/utils/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAEjC,qBAAa,KAAK;IAChB;;;;;OAKG;IACH,MAAM,CAAC,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IAKrC;;;;;OAKG;IACH,MAAM,CAAC,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IAIvC;;;;;OAKG;IACH,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IAQpC;;;;;OAKG;IACH,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM;IAYrD,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,GAAG;IAkBjC;;;;;;OAMG;IACH,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,GAAG,OAAO;IAMzE;;;;;OAKG;IACH,MAAM,CAAC,oBAAoB,CACzB,cAAc,EAAE,MAAM,GAAG,MAAM,GAC9B,MAAM,GAAG,MAAM;IAUlB;;;;;;OAMG;IACH,MAAM,CAAC,uBAAuB,CAC5B,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM;IAalB;;;;;OAKG;IACH,MAAM,CAAC,gBAAgB,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE;;;;;;;IAenE;;OAEG;IACH,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAQxC;;;OAGG;IACH,MAAM,CAAC,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,QAAQ,GAAG,MAAM;IAmBhD;;;;OAIG;WACU,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,KAAK,CAAC;IAwDnE,MAAM,CAAC,UAAU;IAYjB,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,GAAG,OAAO;CAMpC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../jcc-express-mvc/lib/Jcc-eloquent/lib/utils/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAGvC,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAGjC,qBAAa,KAAK;IAChB;;;;;OAKG;IACH,MAAM,CAAC,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IAKrC;;;;;OAKG;IACH,MAAM,CAAC,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IAIvC;;;;;OAKG;IACH,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IAQpC;;;;;OAKG;IACH,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM;IAYrD,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,GAAG;IAkBjC;;;;;;OAMG;IACH,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,GAAG,OAAO;IAMzE;;;;;OAKG;IACH,MAAM,CAAC,oBAAoB,CACzB,cAAc,EAAE,MAAM,GAAG,MAAM,GAC9B,MAAM,GAAG,MAAM;IAUlB;;;;;;OAMG;IACH,MAAM,CAAC,uBAAuB,CAC5B,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM;IAalB;;;OAGG;IACH,MAAM,CAAC,iBAAiB,CACtB,OAAO,EAAE,OAAO,EAChB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS,CAAC,GACtE,MAAM;IAmBT,oEAAoE;IACpE,MAAM,CAAC,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM;IAOhD,4FAA4F;IAC5F,MAAM,CAAC,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAelD;;;;;OAKG;IACH,MAAM,CAAC,gBAAgB,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE;;;;;;;IAenE;;OAEG;IACH,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAQxC;;;OAGG;IACH,MAAM,CAAC,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,QAAQ,GAAG,MAAM;IAmBhD;;;;OAIG;WACU,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,KAAK,CAAC;IAwDnE,MAAM,CAAC,UAAU;IAYjB,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,GAAG,OAAO;IAOnC,MAAM,CAAC,UAAU,IAAI,OAAO;IAO5B,MAAM,CAAC,OAAO,IAAI,OAAO;IAOzB,MAAM,CAAC,QAAQ,IAAI,OAAO;CAO3B"}