@orchestr-sh/orchestr 1.11.0 → 1.11.2

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 (340) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/CODE_OF_CONDUCT.md +43 -0
  3. package/CONTRIBUTING.md +274 -0
  4. package/dist/Cache/CacheManager.cjs +1 -1
  5. package/dist/Cache/CacheManager.mjs +1 -1
  6. package/dist/Cache/CacheManager.mjs.map +1 -1
  7. package/dist/Cache/Events/CacheFlushed.cjs +1 -1
  8. package/dist/Cache/Events/CacheFlushed.mjs +1 -1
  9. package/dist/Cache/Events/CacheFlushed.mjs.map +1 -1
  10. package/dist/Cache/Events/CacheHit.cjs +1 -1
  11. package/dist/Cache/Events/CacheHit.mjs +1 -1
  12. package/dist/Cache/Events/CacheHit.mjs.map +1 -1
  13. package/dist/Cache/Events/CacheMissed.cjs +1 -1
  14. package/dist/Cache/Events/CacheMissed.mjs +1 -1
  15. package/dist/Cache/Events/CacheMissed.mjs.map +1 -1
  16. package/dist/Cache/Events/KeyForgotten.cjs +1 -1
  17. package/dist/Cache/Events/KeyForgotten.mjs +1 -1
  18. package/dist/Cache/Events/KeyForgotten.mjs.map +1 -1
  19. package/dist/Cache/Events/KeyWritten.cjs +1 -1
  20. package/dist/Cache/Events/KeyWritten.mjs +1 -1
  21. package/dist/Cache/Events/KeyWritten.mjs.map +1 -1
  22. package/dist/Cache/Locks/CacheLock.cjs +1 -1
  23. package/dist/Cache/Locks/CacheLock.mjs +1 -1
  24. package/dist/Cache/Locks/CacheLock.mjs.map +1 -1
  25. package/dist/Cache/Locks/Lock.cjs +1 -1
  26. package/dist/Cache/Locks/Lock.mjs +1 -1
  27. package/dist/Cache/Locks/Lock.mjs.map +1 -1
  28. package/dist/Cache/Repository.cjs +1 -1
  29. package/dist/Cache/Repository.mjs +1 -1
  30. package/dist/Cache/Repository.mjs.map +1 -1
  31. package/dist/Cache/Stores/ArrayStore.cjs +1 -1
  32. package/dist/Cache/Stores/ArrayStore.mjs +1 -1
  33. package/dist/Cache/Stores/ArrayStore.mjs.map +1 -1
  34. package/dist/Cache/Stores/DatabaseStore.cjs +1 -1
  35. package/dist/Cache/Stores/DatabaseStore.mjs +1 -1
  36. package/dist/Cache/Stores/DatabaseStore.mjs.map +1 -1
  37. package/dist/Cache/Stores/FileStore.cjs +1 -1
  38. package/dist/Cache/Stores/FileStore.mjs +1 -1
  39. package/dist/Cache/Stores/FileStore.mjs.map +1 -1
  40. package/dist/Cache/Tags/TagSet.cjs +1 -1
  41. package/dist/Cache/Tags/TagSet.mjs +1 -1
  42. package/dist/Cache/Tags/TagSet.mjs.map +1 -1
  43. package/dist/Cache/Tags/TaggedCache.cjs +1 -1
  44. package/dist/Cache/Tags/TaggedCache.mjs +1 -1
  45. package/dist/Cache/Tags/TaggedCache.mjs.map +1 -1
  46. package/dist/Console/Commands/CacheClearCommand.cjs +1 -1
  47. package/dist/Console/Commands/CacheClearCommand.mjs +1 -1
  48. package/dist/Console/Commands/CacheClearCommand.mjs.map +1 -1
  49. package/dist/Console/Commands/CacheForgetCommand.cjs +1 -1
  50. package/dist/Console/Commands/CacheForgetCommand.mjs +1 -1
  51. package/dist/Console/Commands/CacheForgetCommand.mjs.map +1 -1
  52. package/dist/Console/Commands/CacheTableCommand.cjs +1 -1
  53. package/dist/Console/Commands/CacheTableCommand.mjs +1 -1
  54. package/dist/Console/Commands/CacheTableCommand.mjs.map +1 -1
  55. package/dist/Console/Commands/DeployCommand.mjs.map +1 -1
  56. package/dist/Console/Commands/DeployEnvCommand.mjs.map +1 -1
  57. package/dist/Console/Commands/DeployInitCommand.mjs.map +1 -1
  58. package/dist/Console/Commands/DeployProvisionCommand.mjs.map +1 -1
  59. package/dist/Console/Commands/DeployRollbackCommand.mjs.map +1 -1
  60. package/dist/Console/Commands/DeployServerCommand.mjs.map +1 -1
  61. package/dist/Console/Commands/DeployStatusCommand.mjs.map +1 -1
  62. package/dist/Console/Commands/EventCacheCommand.cjs +1 -1
  63. package/dist/Console/Commands/EventCacheCommand.mjs +1 -1
  64. package/dist/Console/Commands/EventCacheCommand.mjs.map +1 -1
  65. package/dist/Console/Commands/EventClearCommand.cjs +1 -1
  66. package/dist/Console/Commands/EventClearCommand.mjs +1 -1
  67. package/dist/Console/Commands/EventClearCommand.mjs.map +1 -1
  68. package/dist/Console/Commands/EventListCommand.cjs +1 -1
  69. package/dist/Console/Commands/EventListCommand.mjs +1 -1
  70. package/dist/Console/Commands/EventListCommand.mjs.map +1 -1
  71. package/dist/Console/Commands/MakeControllerCommand.cjs +1 -1
  72. package/dist/Console/Commands/MakeControllerCommand.mjs +1 -1
  73. package/dist/Console/Commands/MakeControllerCommand.mjs.map +1 -1
  74. package/dist/Console/Commands/MakeEventCommand.cjs +1 -1
  75. package/dist/Console/Commands/MakeEventCommand.mjs +1 -1
  76. package/dist/Console/Commands/MakeEventCommand.mjs.map +1 -1
  77. package/dist/Console/Commands/MakeJobCommand.cjs +1 -1
  78. package/dist/Console/Commands/MakeJobCommand.mjs +1 -1
  79. package/dist/Console/Commands/MakeJobCommand.mjs.map +1 -1
  80. package/dist/Console/Commands/MakeListenerCommand.cjs +1 -1
  81. package/dist/Console/Commands/MakeListenerCommand.mjs +1 -1
  82. package/dist/Console/Commands/MakeListenerCommand.mjs.map +1 -1
  83. package/dist/Console/Commands/MakeMigrationCommand.cjs +1 -1
  84. package/dist/Console/Commands/MakeMigrationCommand.mjs +1 -1
  85. package/dist/Console/Commands/MakeMigrationCommand.mjs.map +1 -1
  86. package/dist/Console/Commands/MakeSeederCommand.cjs +1 -1
  87. package/dist/Console/Commands/MakeSeederCommand.mjs +1 -1
  88. package/dist/Console/Commands/MakeSeederCommand.mjs.map +1 -1
  89. package/dist/Console/Commands/MakeViewCommand.cjs +1 -1
  90. package/dist/Console/Commands/MakeViewCommand.mjs +1 -1
  91. package/dist/Console/Commands/MakeViewCommand.mjs.map +1 -1
  92. package/dist/Console/Commands/MigrateCommand.cjs +1 -1
  93. package/dist/Console/Commands/MigrateCommand.mjs +1 -1
  94. package/dist/Console/Commands/MigrateCommand.mjs.map +1 -1
  95. package/dist/Console/Commands/MigrateFreshCommand.cjs +1 -1
  96. package/dist/Console/Commands/MigrateFreshCommand.mjs +1 -1
  97. package/dist/Console/Commands/MigrateFreshCommand.mjs.map +1 -1
  98. package/dist/Console/Commands/MigrateRefreshCommand.cjs +1 -1
  99. package/dist/Console/Commands/MigrateRefreshCommand.mjs +1 -1
  100. package/dist/Console/Commands/MigrateRefreshCommand.mjs.map +1 -1
  101. package/dist/Console/Commands/MigrateResetCommand.cjs +1 -1
  102. package/dist/Console/Commands/MigrateResetCommand.mjs +1 -1
  103. package/dist/Console/Commands/MigrateResetCommand.mjs.map +1 -1
  104. package/dist/Console/Commands/MigrateRollbackCommand.cjs +1 -1
  105. package/dist/Console/Commands/MigrateRollbackCommand.mjs +1 -1
  106. package/dist/Console/Commands/MigrateRollbackCommand.mjs.map +1 -1
  107. package/dist/Console/Commands/MigrateStatusCommand.cjs +1 -1
  108. package/dist/Console/Commands/MigrateStatusCommand.mjs +1 -1
  109. package/dist/Console/Commands/MigrateStatusCommand.mjs.map +1 -1
  110. package/dist/Console/Commands/QueueBatchesTableCommand.cjs +1 -1
  111. package/dist/Console/Commands/QueueBatchesTableCommand.mjs +1 -1
  112. package/dist/Console/Commands/QueueBatchesTableCommand.mjs.map +1 -1
  113. package/dist/Console/Commands/QueueClearCommand.cjs +1 -1
  114. package/dist/Console/Commands/QueueClearCommand.mjs +1 -1
  115. package/dist/Console/Commands/QueueClearCommand.mjs.map +1 -1
  116. package/dist/Console/Commands/QueueFailedCommand.cjs +1 -1
  117. package/dist/Console/Commands/QueueFailedCommand.mjs +1 -1
  118. package/dist/Console/Commands/QueueFailedCommand.mjs.map +1 -1
  119. package/dist/Console/Commands/QueueFailedTableCommand.cjs +1 -1
  120. package/dist/Console/Commands/QueueFailedTableCommand.mjs +1 -1
  121. package/dist/Console/Commands/QueueFailedTableCommand.mjs.map +1 -1
  122. package/dist/Console/Commands/QueueFlushCommand.cjs +1 -1
  123. package/dist/Console/Commands/QueueFlushCommand.mjs +1 -1
  124. package/dist/Console/Commands/QueueFlushCommand.mjs.map +1 -1
  125. package/dist/Console/Commands/QueueForgetCommand.cjs +1 -1
  126. package/dist/Console/Commands/QueueForgetCommand.mjs +1 -1
  127. package/dist/Console/Commands/QueueForgetCommand.mjs.map +1 -1
  128. package/dist/Console/Commands/QueueMonitorCommand.cjs +1 -1
  129. package/dist/Console/Commands/QueueMonitorCommand.mjs +1 -1
  130. package/dist/Console/Commands/QueueMonitorCommand.mjs.map +1 -1
  131. package/dist/Console/Commands/QueuePruneBatchesCommand.cjs +1 -1
  132. package/dist/Console/Commands/QueuePruneBatchesCommand.mjs +1 -1
  133. package/dist/Console/Commands/QueuePruneBatchesCommand.mjs.map +1 -1
  134. package/dist/Console/Commands/QueuePruneFailedCommand.cjs +1 -1
  135. package/dist/Console/Commands/QueuePruneFailedCommand.mjs +1 -1
  136. package/dist/Console/Commands/QueuePruneFailedCommand.mjs.map +1 -1
  137. package/dist/Console/Commands/QueueRestartCommand.cjs +1 -1
  138. package/dist/Console/Commands/QueueRestartCommand.mjs +1 -1
  139. package/dist/Console/Commands/QueueRestartCommand.mjs.map +1 -1
  140. package/dist/Console/Commands/QueueRetryCommand.cjs +1 -1
  141. package/dist/Console/Commands/QueueRetryCommand.mjs +1 -1
  142. package/dist/Console/Commands/QueueRetryCommand.mjs.map +1 -1
  143. package/dist/Console/Commands/QueueTableCommand.cjs +1 -1
  144. package/dist/Console/Commands/QueueTableCommand.mjs +1 -1
  145. package/dist/Console/Commands/QueueTableCommand.mjs.map +1 -1
  146. package/dist/Console/Commands/QueueWorkCommand.cjs +1 -1
  147. package/dist/Console/Commands/QueueWorkCommand.mjs +1 -1
  148. package/dist/Console/Commands/QueueWorkCommand.mjs.map +1 -1
  149. package/dist/Console/Commands/SeedCommand.cjs +1 -1
  150. package/dist/Console/Commands/SeedCommand.mjs +1 -1
  151. package/dist/Console/Commands/SeedCommand.mjs.map +1 -1
  152. package/dist/Console/ConsoleKernel.cjs +1 -1
  153. package/dist/Console/ConsoleKernel.mjs +1 -1
  154. package/dist/Console/ConsoleKernel.mjs.map +1 -1
  155. package/dist/Console/orchestr.cjs +2 -0
  156. package/dist/Console/orchestr.d.cts +1 -0
  157. package/dist/Console/orchestr.d.mts +1 -0
  158. package/dist/Console/orchestr.mjs +3 -0
  159. package/dist/Console/orchestr.mjs.map +1 -0
  160. package/dist/Container/Container.mjs.map +1 -1
  161. package/dist/Database/Adapters/DrizzleAdapter.cjs +1 -1
  162. package/dist/Database/Adapters/DrizzleAdapter.mjs +1 -1
  163. package/dist/Database/Adapters/DrizzleAdapter.mjs.map +1 -1
  164. package/dist/Database/Connection.cjs +1 -1
  165. package/dist/Database/Connection.mjs +1 -1
  166. package/dist/Database/Connection.mjs.map +1 -1
  167. package/dist/Database/DatabaseManager.cjs +1 -1
  168. package/dist/Database/DatabaseManager.mjs +1 -1
  169. package/dist/Database/DatabaseManager.mjs.map +1 -1
  170. package/dist/Database/Ensemble/Ensemble.mjs.map +1 -1
  171. package/dist/Database/Ensemble/EnsembleBuilder.mjs.map +1 -1
  172. package/dist/Database/Ensemble/EnsembleCollection.cjs +1 -1
  173. package/dist/Database/Ensemble/EnsembleCollection.mjs +1 -1
  174. package/dist/Database/Ensemble/EnsembleCollection.mjs.map +1 -1
  175. package/dist/Database/Ensemble/Relations/BelongsTo.mjs.map +1 -1
  176. package/dist/Database/Ensemble/Relations/BelongsToMany.cjs +1 -1
  177. package/dist/Database/Ensemble/Relations/BelongsToMany.mjs +1 -1
  178. package/dist/Database/Ensemble/Relations/BelongsToMany.mjs.map +1 -1
  179. package/dist/Database/Ensemble/Relations/HasMany.mjs.map +1 -1
  180. package/dist/Database/Ensemble/Relations/MorphTo.mjs.map +1 -1
  181. package/dist/Database/Ensemble/Relations/MorphToMany.mjs.map +1 -1
  182. package/dist/Database/Migrations/Blueprint.cjs +1 -1
  183. package/dist/Database/Migrations/Blueprint.mjs +1 -1
  184. package/dist/Database/Migrations/Blueprint.mjs.map +1 -1
  185. package/dist/Database/Migrations/MigrationCreator.cjs +1 -1
  186. package/dist/Database/Migrations/MigrationCreator.mjs +1 -1
  187. package/dist/Database/Migrations/MigrationCreator.mjs.map +1 -1
  188. package/dist/Database/Migrations/MigrationRepository.cjs +1 -1
  189. package/dist/Database/Migrations/MigrationRepository.mjs +1 -1
  190. package/dist/Database/Migrations/MigrationRepository.mjs.map +1 -1
  191. package/dist/Database/Migrations/Migrator.cjs +1 -1
  192. package/dist/Database/Migrations/Migrator.mjs +1 -1
  193. package/dist/Database/Migrations/Migrator.mjs.map +1 -1
  194. package/dist/Database/Migrations/SchemaBuilder.cjs +1 -1
  195. package/dist/Database/Migrations/SchemaBuilder.mjs +1 -1
  196. package/dist/Database/Migrations/SchemaBuilder.mjs.map +1 -1
  197. package/dist/Database/Query/Builder.cjs +1 -1
  198. package/dist/Database/Query/Builder.mjs +1 -1
  199. package/dist/Database/Query/Builder.mjs.map +1 -1
  200. package/dist/Database/Query/Expression.cjs +1 -1
  201. package/dist/Database/Query/Expression.mjs +1 -1
  202. package/dist/Database/Query/Expression.mjs.map +1 -1
  203. package/dist/Database/Seeders/SeederRunner.cjs +1 -1
  204. package/dist/Database/Seeders/SeederRunner.mjs +1 -1
  205. package/dist/Database/Seeders/SeederRunner.mjs.map +1 -1
  206. package/dist/Deploy/Deployer.cjs +1 -1
  207. package/dist/Deploy/Deployer.mjs +1 -1
  208. package/dist/Deploy/Deployer.mjs.map +1 -1
  209. package/dist/Deploy/ProjectConfig.mjs.map +1 -1
  210. package/dist/Deploy/Provisioner.cjs +1 -1
  211. package/dist/Deploy/Provisioner.mjs +1 -1
  212. package/dist/Deploy/Provisioner.mjs.map +1 -1
  213. package/dist/Deploy/SSHConnection.mjs.map +1 -1
  214. package/dist/Deploy/SymphonyClient.cjs +1 -1
  215. package/dist/Deploy/SymphonyClient.mjs +1 -1
  216. package/dist/Deploy/SymphonyClient.mjs.map +1 -1
  217. package/dist/Deploy/TarBuilder.mjs.map +1 -1
  218. package/dist/Deploy/prompt.mjs.map +1 -1
  219. package/dist/Events/Dispatcher.cjs +1 -1
  220. package/dist/Events/Dispatcher.d.cts +1 -1
  221. package/dist/Events/Dispatcher.d.mts +1 -1
  222. package/dist/Events/Dispatcher.mjs +1 -1
  223. package/dist/Events/Dispatcher.mjs.map +1 -1
  224. package/dist/Events/EventServiceProvider.cjs +1 -1
  225. package/dist/Events/EventServiceProvider.d.cts +1 -1
  226. package/dist/Events/EventServiceProvider.d.mts +1 -1
  227. package/dist/Events/EventServiceProvider.mjs.map +1 -1
  228. package/dist/Events/index.cjs +1 -0
  229. package/dist/Events/index.d.cts +7 -0
  230. package/dist/Events/index.d.mts +7 -0
  231. package/dist/Events/index.mjs +1 -0
  232. package/dist/Facades/Bus.mjs.map +1 -1
  233. package/dist/Facades/Cache.mjs.map +1 -1
  234. package/dist/Facades/Config.mjs.map +1 -1
  235. package/dist/Facades/DB.mjs.map +1 -1
  236. package/dist/Facades/Event.d.cts +1 -1
  237. package/dist/Facades/Event.d.mts +1 -1
  238. package/dist/Facades/Event.mjs.map +1 -1
  239. package/dist/Facades/Queue.mjs.map +1 -1
  240. package/dist/Facades/Route.d.cts +1 -1
  241. package/dist/Facades/Route.d.mts +1 -1
  242. package/dist/Facades/Route.mjs.map +1 -1
  243. package/dist/Facades/View.mjs.map +1 -1
  244. package/dist/Facades/index.cjs +1 -0
  245. package/dist/Facades/index.d.cts +9 -0
  246. package/dist/Facades/index.d.mts +9 -0
  247. package/dist/Facades/index.mjs +1 -0
  248. package/dist/Foundation/Application.mjs.map +1 -1
  249. package/dist/Foundation/Config/ConfigServiceProvider.d.cts +1 -1
  250. package/dist/Foundation/Config/ConfigServiceProvider.d.mts +1 -1
  251. package/dist/Foundation/Http/FormRequest.d.cts +1 -1
  252. package/dist/Foundation/Http/FormRequest.d.mts +1 -1
  253. package/dist/Foundation/Http/FormRequest.mjs.map +1 -1
  254. package/dist/Foundation/Http/Rules/AnyOfRule.mjs.map +1 -1
  255. package/dist/Foundation/Http/Rules/ImageFileRule.mjs.map +1 -1
  256. package/dist/Foundation/Http/Validator.mjs.map +1 -1
  257. package/dist/Queue/Batching/Batch.cjs +1 -1
  258. package/dist/Queue/Batching/Batch.mjs +1 -1
  259. package/dist/Queue/Batching/Batch.mjs.map +1 -1
  260. package/dist/Queue/Batching/PendingBatch.cjs +1 -1
  261. package/dist/Queue/Batching/PendingBatch.mjs +1 -1
  262. package/dist/Queue/Batching/PendingBatch.mjs.map +1 -1
  263. package/dist/Queue/Concerns/Dispatchable.mjs.map +1 -1
  264. package/dist/Queue/Drivers/DatabaseDriver.cjs +1 -1
  265. package/dist/Queue/Drivers/DatabaseDriver.mjs +1 -1
  266. package/dist/Queue/Drivers/DatabaseDriver.mjs.map +1 -1
  267. package/dist/Queue/Drivers/NullDriver.cjs +1 -1
  268. package/dist/Queue/Drivers/NullDriver.mjs +1 -1
  269. package/dist/Queue/Drivers/NullDriver.mjs.map +1 -1
  270. package/dist/Queue/Drivers/SyncDriver.cjs +1 -1
  271. package/dist/Queue/Drivers/SyncDriver.mjs +1 -1
  272. package/dist/Queue/Drivers/SyncDriver.mjs.map +1 -1
  273. package/dist/Queue/Events/JobExceptionOccurred.cjs +1 -1
  274. package/dist/Queue/Events/JobExceptionOccurred.mjs +1 -1
  275. package/dist/Queue/Events/JobExceptionOccurred.mjs.map +1 -1
  276. package/dist/Queue/Events/JobFailed.cjs +1 -1
  277. package/dist/Queue/Events/JobFailed.mjs +1 -1
  278. package/dist/Queue/Events/JobFailed.mjs.map +1 -1
  279. package/dist/Queue/Events/JobProcessed.cjs +1 -1
  280. package/dist/Queue/Events/JobProcessed.mjs +1 -1
  281. package/dist/Queue/Events/JobProcessed.mjs.map +1 -1
  282. package/dist/Queue/Events/JobProcessing.cjs +1 -1
  283. package/dist/Queue/Events/JobProcessing.mjs +1 -1
  284. package/dist/Queue/Events/JobProcessing.mjs.map +1 -1
  285. package/dist/Queue/Events/JobQueued.cjs +1 -1
  286. package/dist/Queue/Events/JobQueued.mjs +1 -1
  287. package/dist/Queue/Events/JobQueued.mjs.map +1 -1
  288. package/dist/Queue/Events/JobRetryRequested.cjs +1 -1
  289. package/dist/Queue/Events/JobRetryRequested.mjs +1 -1
  290. package/dist/Queue/Events/JobRetryRequested.mjs.map +1 -1
  291. package/dist/Queue/Events/WorkerStopping.cjs +1 -1
  292. package/dist/Queue/Events/WorkerStopping.mjs +1 -1
  293. package/dist/Queue/Events/WorkerStopping.mjs.map +1 -1
  294. package/dist/Queue/Failed/DatabaseFailedJobProvider.cjs +1 -1
  295. package/dist/Queue/Failed/DatabaseFailedJobProvider.mjs +1 -1
  296. package/dist/Queue/Failed/DatabaseFailedJobProvider.mjs.map +1 -1
  297. package/dist/Queue/Middleware/RateLimited.cjs +1 -1
  298. package/dist/Queue/Middleware/RateLimited.mjs +1 -1
  299. package/dist/Queue/Middleware/RateLimited.mjs.map +1 -1
  300. package/dist/Queue/Middleware/ThrottlesExceptions.cjs +1 -1
  301. package/dist/Queue/Middleware/ThrottlesExceptions.mjs +1 -1
  302. package/dist/Queue/Middleware/ThrottlesExceptions.mjs.map +1 -1
  303. package/dist/Queue/Middleware/WithoutOverlapping.cjs +1 -1
  304. package/dist/Queue/Middleware/WithoutOverlapping.mjs +1 -1
  305. package/dist/Queue/Middleware/WithoutOverlapping.mjs.map +1 -1
  306. package/dist/Queue/PendingChain.cjs +1 -1
  307. package/dist/Queue/PendingChain.mjs +1 -1
  308. package/dist/Queue/PendingChain.mjs.map +1 -1
  309. package/dist/Queue/PendingDispatch.cjs +1 -1
  310. package/dist/Queue/PendingDispatch.mjs +1 -1
  311. package/dist/Queue/PendingDispatch.mjs.map +1 -1
  312. package/dist/Queue/QueueManager.cjs +1 -1
  313. package/dist/Queue/QueueManager.mjs +1 -1
  314. package/dist/Queue/QueueManager.mjs.map +1 -1
  315. package/dist/Queue/QueueServiceProvider.mjs.map +1 -1
  316. package/dist/Queue/Workers/Worker.cjs +1 -1
  317. package/dist/Queue/Workers/Worker.mjs +1 -1
  318. package/dist/Queue/Workers/Worker.mjs.map +1 -1
  319. package/dist/Routing/Request.mjs.map +1 -1
  320. package/dist/Routing/Response.mjs.map +1 -1
  321. package/dist/Routing/Route.d.cts +1 -1
  322. package/dist/Routing/Route.d.mts +1 -1
  323. package/dist/Routing/Router.d.cts +1 -1
  324. package/dist/Routing/Router.d.mts +1 -1
  325. package/dist/Support/EventDiscovery.cjs +1 -1
  326. package/dist/Support/EventDiscovery.mjs +1 -1
  327. package/dist/Support/EventDiscovery.mjs.map +1 -1
  328. package/dist/Support/Testing/Fakes/EventFake.cjs +1 -1
  329. package/dist/Support/Testing/Fakes/EventFake.d.cts +1 -1
  330. package/dist/Support/Testing/Fakes/EventFake.d.mts +1 -1
  331. package/dist/Support/Testing/Fakes/EventFake.mjs +1 -1
  332. package/dist/Support/Testing/Fakes/EventFake.mjs.map +1 -1
  333. package/dist/Support/helpers.mjs.map +1 -1
  334. package/dist/View/Engines/TemplateEngine.mjs.map +1 -1
  335. package/dist/index.d.cts +19 -19
  336. package/dist/index.d.mts +19 -19
  337. package/docs/events-typescript-usage.md +126 -0
  338. package/docs/future-improvements.md +49 -0
  339. package/docs/validation.md +201 -0
  340. package/package.json +65 -31
@@ -1 +1 @@
1
- {"version":3,"file":"Blueprint.mjs","names":[],"sources":["../../../src/Database/Migrations/Blueprint.ts"],"sourcesContent":["/**\n * Blueprint\n *\n * Defines a table schema in a migration\n */\n\nimport { Blueprint as IBlueprint } from '@/Database/Contracts/Schema';\nimport { ColumnDefinition } from './ColumnDefinition';\nimport { ForeignKeyDefinition } from './ForeignKeyDefinition';\n\nexport interface IndexDefinition {\n columns: string[];\n name?: string;\n type: 'index' | 'unique' | 'primary';\n}\n\nexport interface DropCommand {\n type: 'dropColumn' | 'dropIndex' | 'dropForeign' | 'renameColumn';\n name?: string;\n columns?: string[];\n from?: string;\n to?: string;\n}\n\nexport class Blueprint implements IBlueprint {\n public columns: ColumnDefinition[] = [];\n public indexes: IndexDefinition[] = [];\n public foreignKeys: ForeignKeyDefinition[] = [];\n public commands: DropCommand[] = [];\n public isCreate: boolean = false;\n\n constructor(public table: string) {}\n\n /**\n * Add an auto-incrementing ID column\n */\n id(column: string = 'id'): ColumnDefinition {\n const col = new ColumnDefinition(column, 'bigIncrements');\n col.isAutoIncrement = true;\n col.isPrimary = true;\n col.isUnsigned = true;\n this.columns.push(col);\n return col;\n }\n\n /**\n * Add a big auto-incrementing ID column\n */\n bigIncrements(column: string): ColumnDefinition {\n const col = new ColumnDefinition(column, 'bigIncrements');\n col.isAutoIncrement = true;\n col.isUnsigned = true;\n this.columns.push(col);\n return col;\n }\n\n /**\n * Add an auto-incrementing column\n */\n increments(column: string): ColumnDefinition {\n const col = new ColumnDefinition(column, 'increments');\n col.isAutoIncrement = true;\n col.isUnsigned = true;\n this.columns.push(col);\n return col;\n }\n\n /**\n * Add a UUID column\n */\n uuid(column: string): ColumnDefinition {\n const col = new ColumnDefinition(column, 'uuid');\n col.length = 36;\n this.columns.push(col);\n return col;\n }\n\n /**\n * Add a string column\n */\n string(column: string, length: number = 255): ColumnDefinition {\n const col = new ColumnDefinition(column, 'string');\n col.length = length;\n this.columns.push(col);\n return col;\n }\n\n /**\n * Add a text column\n */\n text(column: string): ColumnDefinition {\n const col = new ColumnDefinition(column, 'text');\n this.columns.push(col);\n return col;\n }\n\n /**\n * Add a medium text column\n */\n mediumText(column: string): ColumnDefinition {\n const col = new ColumnDefinition(column, 'mediumText');\n this.columns.push(col);\n return col;\n }\n\n /**\n * Add a long text column\n */\n longText(column: string): ColumnDefinition {\n const col = new ColumnDefinition(column, 'longText');\n this.columns.push(col);\n return col;\n }\n\n /**\n * Add an integer column\n */\n integer(column: string): ColumnDefinition {\n const col = new ColumnDefinition(column, 'integer');\n this.columns.push(col);\n return col;\n }\n\n /**\n * Add a big integer column\n */\n bigInteger(column: string): ColumnDefinition {\n const col = new ColumnDefinition(column, 'bigInteger');\n this.columns.push(col);\n return col;\n }\n\n /**\n * Add a small integer column\n */\n smallInteger(column: string): ColumnDefinition {\n const col = new ColumnDefinition(column, 'smallInteger');\n this.columns.push(col);\n return col;\n }\n\n /**\n * Add a tiny integer column\n */\n tinyInteger(column: string): ColumnDefinition {\n const col = new ColumnDefinition(column, 'tinyInteger');\n this.columns.push(col);\n return col;\n }\n\n /**\n * Add a decimal column\n */\n decimal(column: string, precision: number = 8, scale: number = 2): ColumnDefinition {\n const col = new ColumnDefinition(column, 'decimal');\n col.precision = precision;\n col.scale = scale;\n this.columns.push(col);\n return col;\n }\n\n /**\n * Add a float column\n */\n float(column: string, precision?: number, scale?: number): ColumnDefinition {\n const col = new ColumnDefinition(column, 'float');\n col.precision = precision;\n col.scale = scale;\n this.columns.push(col);\n return col;\n }\n\n /**\n * Add a double column\n */\n double(column: string, precision?: number, scale?: number): ColumnDefinition {\n const col = new ColumnDefinition(column, 'double');\n col.precision = precision;\n col.scale = scale;\n this.columns.push(col);\n return col;\n }\n\n /**\n * Add a boolean column\n */\n boolean(column: string): ColumnDefinition {\n const col = new ColumnDefinition(column, 'boolean');\n this.columns.push(col);\n return col;\n }\n\n /**\n * Add a date column\n */\n date(column: string): ColumnDefinition {\n const col = new ColumnDefinition(column, 'date');\n this.columns.push(col);\n return col;\n }\n\n /**\n * Add a datetime column\n */\n datetime(column: string, precision?: number): ColumnDefinition {\n const col = new ColumnDefinition(column, 'datetime');\n col.precision = precision;\n this.columns.push(col);\n return col;\n }\n\n /**\n * Add a timestamp column\n */\n timestamp(column: string, precision?: number): ColumnDefinition {\n const col = new ColumnDefinition(column, 'timestamp');\n col.precision = precision;\n this.columns.push(col);\n return col;\n }\n\n /**\n * Add created_at and updated_at timestamp columns\n */\n timestamps(precision?: number): void {\n this.timestamp('created_at', precision).nullable();\n this.timestamp('updated_at', precision).nullable();\n }\n\n /**\n * Add a JSON column\n */\n json(column: string): ColumnDefinition {\n const col = new ColumnDefinition(column, 'json');\n this.columns.push(col);\n return col;\n }\n\n /**\n * Add a JSONB column\n */\n jsonb(column: string): ColumnDefinition {\n const col = new ColumnDefinition(column, 'jsonb');\n this.columns.push(col);\n return col;\n }\n\n /**\n * Add a binary column\n */\n binary(column: string): ColumnDefinition {\n const col = new ColumnDefinition(column, 'binary');\n this.columns.push(col);\n return col;\n }\n\n /**\n * Add an enum column\n */\n enum(column: string, values: string[]): ColumnDefinition {\n const col = new ColumnDefinition(column, 'enum');\n col.enumValues = values;\n this.columns.push(col);\n return col;\n }\n\n /**\n * Add a remember token column\n */\n rememberToken(): ColumnDefinition {\n return this.string('remember_token', 100).nullable();\n }\n\n /**\n * Add soft delete columns\n */\n softDeletes(column: string = 'deleted_at'): ColumnDefinition {\n return this.timestamp(column).nullable();\n }\n\n /**\n * Add an index\n */\n index(columns: string | string[], indexName?: string): void {\n this.indexes.push({\n columns: Array.isArray(columns) ? columns : [columns],\n name: indexName,\n type: 'index',\n });\n }\n\n /**\n * Add a unique index\n */\n unique(columns: string | string[], indexName?: string): void {\n this.indexes.push({\n columns: Array.isArray(columns) ? columns : [columns],\n name: indexName,\n type: 'unique',\n });\n }\n\n /**\n * Add a primary key\n */\n primary(columns: string | string[]): void {\n this.indexes.push({\n columns: Array.isArray(columns) ? columns : [columns],\n type: 'primary',\n });\n }\n\n /**\n * Add a foreign key\n */\n foreign(columns: string | string[], indexName?: string): ForeignKeyDefinition {\n const fk = new ForeignKeyDefinition(columns, indexName);\n this.foreignKeys.push(fk);\n return fk;\n }\n\n /**\n * Drop a column\n */\n dropColumn(column: string | string[]): void {\n this.commands.push({\n type: 'dropColumn',\n columns: Array.isArray(column) ? column : [column],\n });\n }\n\n /**\n * Drop an index\n */\n dropIndex(indexName: string): void {\n this.commands.push({\n type: 'dropIndex',\n name: indexName,\n });\n }\n\n /**\n * Drop a foreign key\n */\n dropForeign(indexName: string): void {\n this.commands.push({\n type: 'dropForeign',\n name: indexName,\n });\n }\n\n /**\n * Rename a column\n */\n renameColumn(from: string, to: string): void {\n this.commands.push({\n type: 'renameColumn',\n from,\n to,\n });\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"Blueprint.mjs","names":[],"sources":["../../../src/Database/Migrations/Blueprint.ts"],"sourcesContent":["/**\n * Blueprint\n *\n * Defines a table schema in a migration\n */\n\nimport { Blueprint as IBlueprint } from '@/Database/Contracts/Schema';\nimport { ColumnDefinition } from './ColumnDefinition';\nimport { ForeignKeyDefinition } from './ForeignKeyDefinition';\n\nexport interface IndexDefinition {\n columns: string[];\n name?: string;\n type: 'index' | 'unique' | 'primary';\n}\n\nexport interface DropCommand {\n type: 'dropColumn' | 'dropIndex' | 'dropForeign' | 'renameColumn';\n name?: string;\n columns?: string[];\n from?: string;\n to?: string;\n}\n\nexport class Blueprint implements IBlueprint {\n public columns: ColumnDefinition[] = [];\n public indexes: IndexDefinition[] = [];\n public foreignKeys: ForeignKeyDefinition[] = [];\n public commands: DropCommand[] = [];\n public isCreate: boolean = false;\n\n constructor(public table: string) {}\n\n /**\n * Add an auto-incrementing ID column\n */\n id(column: string = 'id'): ColumnDefinition {\n const col = new ColumnDefinition(column, 'bigIncrements');\n col.isAutoIncrement = true;\n col.isPrimary = true;\n col.isUnsigned = true;\n this.columns.push(col);\n return col;\n }\n\n /**\n * Add a big auto-incrementing ID column\n */\n bigIncrements(column: string): ColumnDefinition {\n const col = new ColumnDefinition(column, 'bigIncrements');\n col.isAutoIncrement = true;\n col.isUnsigned = true;\n this.columns.push(col);\n return col;\n }\n\n /**\n * Add an auto-incrementing column\n */\n increments(column: string): ColumnDefinition {\n const col = new ColumnDefinition(column, 'increments');\n col.isAutoIncrement = true;\n col.isUnsigned = true;\n this.columns.push(col);\n return col;\n }\n\n /**\n * Add a UUID column\n */\n uuid(column: string): ColumnDefinition {\n const col = new ColumnDefinition(column, 'uuid');\n col.length = 36;\n this.columns.push(col);\n return col;\n }\n\n /**\n * Add a string column\n */\n string(column: string, length: number = 255): ColumnDefinition {\n const col = new ColumnDefinition(column, 'string');\n col.length = length;\n this.columns.push(col);\n return col;\n }\n\n /**\n * Add a text column\n */\n text(column: string): ColumnDefinition {\n const col = new ColumnDefinition(column, 'text');\n this.columns.push(col);\n return col;\n }\n\n /**\n * Add a medium text column\n */\n mediumText(column: string): ColumnDefinition {\n const col = new ColumnDefinition(column, 'mediumText');\n this.columns.push(col);\n return col;\n }\n\n /**\n * Add a long text column\n */\n longText(column: string): ColumnDefinition {\n const col = new ColumnDefinition(column, 'longText');\n this.columns.push(col);\n return col;\n }\n\n /**\n * Add an integer column\n */\n integer(column: string): ColumnDefinition {\n const col = new ColumnDefinition(column, 'integer');\n this.columns.push(col);\n return col;\n }\n\n /**\n * Add a big integer column\n */\n bigInteger(column: string): ColumnDefinition {\n const col = new ColumnDefinition(column, 'bigInteger');\n this.columns.push(col);\n return col;\n }\n\n /**\n * Add a small integer column\n */\n smallInteger(column: string): ColumnDefinition {\n const col = new ColumnDefinition(column, 'smallInteger');\n this.columns.push(col);\n return col;\n }\n\n /**\n * Add a tiny integer column\n */\n tinyInteger(column: string): ColumnDefinition {\n const col = new ColumnDefinition(column, 'tinyInteger');\n this.columns.push(col);\n return col;\n }\n\n /**\n * Add a decimal column\n */\n decimal(column: string, precision: number = 8, scale: number = 2): ColumnDefinition {\n const col = new ColumnDefinition(column, 'decimal');\n col.precision = precision;\n col.scale = scale;\n this.columns.push(col);\n return col;\n }\n\n /**\n * Add a float column\n */\n float(column: string, precision?: number, scale?: number): ColumnDefinition {\n const col = new ColumnDefinition(column, 'float');\n col.precision = precision;\n col.scale = scale;\n this.columns.push(col);\n return col;\n }\n\n /**\n * Add a double column\n */\n double(column: string, precision?: number, scale?: number): ColumnDefinition {\n const col = new ColumnDefinition(column, 'double');\n col.precision = precision;\n col.scale = scale;\n this.columns.push(col);\n return col;\n }\n\n /**\n * Add a boolean column\n */\n boolean(column: string): ColumnDefinition {\n const col = new ColumnDefinition(column, 'boolean');\n this.columns.push(col);\n return col;\n }\n\n /**\n * Add a date column\n */\n date(column: string): ColumnDefinition {\n const col = new ColumnDefinition(column, 'date');\n this.columns.push(col);\n return col;\n }\n\n /**\n * Add a datetime column\n */\n datetime(column: string, precision?: number): ColumnDefinition {\n const col = new ColumnDefinition(column, 'datetime');\n col.precision = precision;\n this.columns.push(col);\n return col;\n }\n\n /**\n * Add a timestamp column\n */\n timestamp(column: string, precision?: number): ColumnDefinition {\n const col = new ColumnDefinition(column, 'timestamp');\n col.precision = precision;\n this.columns.push(col);\n return col;\n }\n\n /**\n * Add created_at and updated_at timestamp columns\n */\n timestamps(precision?: number): void {\n this.timestamp('created_at', precision).nullable();\n this.timestamp('updated_at', precision).nullable();\n }\n\n /**\n * Add a JSON column\n */\n json(column: string): ColumnDefinition {\n const col = new ColumnDefinition(column, 'json');\n this.columns.push(col);\n return col;\n }\n\n /**\n * Add a JSONB column\n */\n jsonb(column: string): ColumnDefinition {\n const col = new ColumnDefinition(column, 'jsonb');\n this.columns.push(col);\n return col;\n }\n\n /**\n * Add a binary column\n */\n binary(column: string): ColumnDefinition {\n const col = new ColumnDefinition(column, 'binary');\n this.columns.push(col);\n return col;\n }\n\n /**\n * Add an enum column\n */\n enum(column: string, values: string[]): ColumnDefinition {\n const col = new ColumnDefinition(column, 'enum');\n col.enumValues = values;\n this.columns.push(col);\n return col;\n }\n\n /**\n * Add a remember token column\n */\n rememberToken(): ColumnDefinition {\n return this.string('remember_token', 100).nullable();\n }\n\n /**\n * Add soft delete columns\n */\n softDeletes(column: string = 'deleted_at'): ColumnDefinition {\n return this.timestamp(column).nullable();\n }\n\n /**\n * Add an index\n */\n index(columns: string | string[], indexName?: string): void {\n this.indexes.push({\n columns: Array.isArray(columns) ? columns : [columns],\n name: indexName,\n type: 'index',\n });\n }\n\n /**\n * Add a unique index\n */\n unique(columns: string | string[], indexName?: string): void {\n this.indexes.push({\n columns: Array.isArray(columns) ? columns : [columns],\n name: indexName,\n type: 'unique',\n });\n }\n\n /**\n * Add a primary key\n */\n primary(columns: string | string[]): void {\n this.indexes.push({\n columns: Array.isArray(columns) ? columns : [columns],\n type: 'primary',\n });\n }\n\n /**\n * Add a foreign key\n */\n foreign(columns: string | string[], indexName?: string): ForeignKeyDefinition {\n const fk = new ForeignKeyDefinition(columns, indexName);\n this.foreignKeys.push(fk);\n return fk;\n }\n\n /**\n * Drop a column\n */\n dropColumn(column: string | string[]): void {\n this.commands.push({\n type: 'dropColumn',\n columns: Array.isArray(column) ? column : [column],\n });\n }\n\n /**\n * Drop an index\n */\n dropIndex(indexName: string): void {\n this.commands.push({\n type: 'dropIndex',\n name: indexName,\n });\n }\n\n /**\n * Drop a foreign key\n */\n dropForeign(indexName: string): void {\n this.commands.push({\n type: 'dropForeign',\n name: indexName,\n });\n }\n\n /**\n * Rename a column\n */\n renameColumn(from: string, to: string): void {\n this.commands.push({\n type: 'renameColumn',\n from,\n to,\n });\n }\n}\n"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- const e=require(`../../_virtual/_rolldown/runtime.cjs`);let t=require(`path`);t=e.__toESM(t);let n=require(`fs`);n=e.__toESM(n);var r=class{constructor(e){this.customStubPath=e}async create(e,r,i,a=!1){this.ensureMigrationDirectoryExists(r);let o=this.getDatePrefix()+`_`+e+`.ts`,s=t.join(r,o),c=this.getStub(i,a),l=this.populateStub(c,i);return n.writeFileSync(s,l),s}getStub(e,t=!1){return e&&t?this.getCreateStub():e?this.getUpdateStub():this.getBlankStub()}getBlankStub(){return`import { Migration } from '@orchestr-sh/orchestr';
1
+ const e=require(`../../_virtual/_rolldown/runtime.cjs`);let t=require(`path`);t=e.__toESM(t,1);let n=require(`fs`);n=e.__toESM(n,1);var r=class{customStubPath;constructor(e){this.customStubPath=e}async create(e,r,i,a=!1){this.ensureMigrationDirectoryExists(r);let o=this.getDatePrefix()+`_`+e+`.ts`,s=t.join(r,o),c=this.getStub(i,a),l=this.populateStub(c,i);return n.writeFileSync(s,l),s}getStub(e,t=!1){return e&&t?this.getCreateStub():e?this.getUpdateStub():this.getBlankStub()}getBlankStub(){return`import { Migration } from '@orchestr-sh/orchestr';
2
2
  import { Schema } from '@orchestr-sh/orchestr';
3
3
 
4
4
  export default class extends Migration {
@@ -1,4 +1,4 @@
1
- import*as e from"path";import*as t from"fs";var n=class{constructor(e){this.customStubPath=e}async create(n,r,i,a=!1){this.ensureMigrationDirectoryExists(r);let o=this.getDatePrefix()+`_`+n+`.ts`,s=e.join(r,o),c=this.getStub(i,a),l=this.populateStub(c,i);return t.writeFileSync(s,l),s}getStub(e,t=!1){return e&&t?this.getCreateStub():e?this.getUpdateStub():this.getBlankStub()}getBlankStub(){return`import { Migration } from '@orchestr-sh/orchestr';
1
+ import*as e from"path";import*as t from"fs";var n=class{customStubPath;constructor(e){this.customStubPath=e}async create(n,r,i,a=!1){this.ensureMigrationDirectoryExists(r);let o=this.getDatePrefix()+`_`+n+`.ts`,s=e.join(r,o),c=this.getStub(i,a),l=this.populateStub(c,i);return t.writeFileSync(s,l),s}getStub(e,t=!1){return e&&t?this.getCreateStub():e?this.getUpdateStub():this.getBlankStub()}getBlankStub(){return`import { Migration } from '@orchestr-sh/orchestr';
2
2
  import { Schema } from '@orchestr-sh/orchestr';
3
3
 
4
4
  export default class extends Migration {
@@ -1 +1 @@
1
- {"version":3,"file":"MigrationCreator.mjs","names":[],"sources":["../../../src/Database/Migrations/MigrationCreator.ts"],"sourcesContent":["/**\n * MigrationCreator\n *\n * Creates new migration files from stubs\n */\n\nimport * as fs from 'fs';\nimport * as path from 'path';\n\nexport class MigrationCreator {\n constructor(protected customStubPath?: string) {}\n\n /**\n * Create a new migration file\n */\n async create(name: string, migrationPath: string, table?: string, create: boolean = false): Promise<string> {\n this.ensureMigrationDirectoryExists(migrationPath);\n\n const fileName = this.getDatePrefix() + '_' + name + '.ts';\n const filePath = path.join(migrationPath, fileName);\n\n const stub = this.getStub(table, create);\n const populated = this.populateStub(stub, table);\n\n fs.writeFileSync(filePath, populated);\n\n return filePath;\n }\n\n /**\n * Get the migration stub\n */\n protected getStub(table?: string, create: boolean = false): string {\n if (table && create) {\n return this.getCreateStub();\n }\n\n if (table) {\n return this.getUpdateStub();\n }\n\n return this.getBlankStub();\n }\n\n /**\n * Get the blank migration stub\n */\n protected getBlankStub(): string {\n return `import { Migration } from '@orchestr-sh/orchestr';\nimport { Schema } from '@orchestr-sh/orchestr';\n\nexport default class extends Migration {\n /**\n * Run the migrations\n */\n async up(schema: Schema): Promise<void> {\n //\n }\n\n /**\n * Reverse the migrations\n */\n async down(schema: Schema): Promise<void> {\n //\n }\n}\n`;\n }\n\n /**\n * Get the create table stub\n */\n protected getCreateStub(): string {\n return `import { Migration } from '@orchestr-sh/orchestr';\nimport { Schema } from '@orchestr-sh/orchestr';\n\nexport default class extends Migration {\n /**\n * Run the migrations\n */\n async up(schema: Schema): Promise<void> {\n await schema.create('{{table}}', (table) => {\n table.id();\n table.timestamps();\n });\n }\n\n /**\n * Reverse the migrations\n */\n async down(schema: Schema): Promise<void> {\n await schema.dropIfExists('{{table}}');\n }\n}\n`;\n }\n\n /**\n * Get the update table stub\n */\n protected getUpdateStub(): string {\n return `import { Migration } from '@orchestr-sh/orchestr';\nimport { Schema } from '@orchestr-sh/orchestr';\n\nexport default class extends Migration {\n /**\n * Run the migrations\n */\n async up(schema: Schema): Promise<void> {\n await schema.table('{{table}}', (table) => {\n //\n });\n }\n\n /**\n * Reverse the migrations\n */\n async down(schema: Schema): Promise<void> {\n await schema.table('{{table}}', (table) => {\n //\n });\n }\n}\n`;\n }\n\n /**\n * Populate the stub with table name\n */\n protected populateStub(stub: string, table?: string): string {\n if (table) {\n return stub.replace(/\\{\\{table\\}\\}/g, table);\n }\n\n return stub;\n }\n\n /**\n * Get the date prefix for the migration\n */\n protected getDatePrefix(): string {\n const now = new Date();\n\n const year = now.getFullYear();\n const month = String(now.getMonth() + 1).padStart(2, '0');\n const day = String(now.getDate()).padStart(2, '0');\n const hour = String(now.getHours()).padStart(2, '0');\n const minute = String(now.getMinutes()).padStart(2, '0');\n const second = String(now.getSeconds()).padStart(2, '0');\n\n return `${year}_${month}_${day}_${hour}${minute}${second}`;\n }\n\n /**\n * Ensure the migration directory exists\n */\n protected ensureMigrationDirectoryExists(path: string): void {\n if (!fs.existsSync(path)) {\n fs.mkdirSync(path, { recursive: true });\n }\n }\n}\n"],"mappings":"4CASA,IAAa,EAAb,KAA8B,CAC5B,YAAY,EAAmC,CAAzB,KAAA,eAAA,EAKtB,MAAM,OAAO,EAAc,EAAuB,EAAgB,EAAkB,GAAwB,CAC1G,KAAK,+BAA+B,EAAc,CAElD,IAAM,EAAW,KAAK,eAAe,CAAG,IAAM,EAAO,MAC/C,EAAW,EAAK,KAAK,EAAe,EAAS,CAE7C,EAAO,KAAK,QAAQ,EAAO,EAAO,CAClC,EAAY,KAAK,aAAa,EAAM,EAAM,CAIhD,OAFA,EAAG,cAAc,EAAU,EAAU,CAE9B,EAMT,QAAkB,EAAgB,EAAkB,GAAe,CASjE,OARI,GAAS,EACJ,KAAK,eAAe,CAGzB,EACK,KAAK,eAAe,CAGtB,KAAK,cAAc,CAM5B,cAAiC,CAC/B,MAAO;;;;;;;;;;;;;;;;;;EAwBT,eAAkC,CAChC,MAAO;;;;;;;;;;;;;;;;;;;;;EA2BT,eAAkC,CAChC,MAAO;;;;;;;;;;;;;;;;;;;;;;EA4BT,aAAuB,EAAc,EAAwB,CAK3D,OAJI,EACK,EAAK,QAAQ,iBAAkB,EAAM,CAGvC,EAMT,eAAkC,CAChC,IAAM,EAAM,IAAI,KAShB,MAAO,GAPM,EAAI,aAAa,CAOf,GAND,OAAO,EAAI,UAAU,CAAG,EAAE,CAAC,SAAS,EAAG,IAAI,CAMjC,GALZ,OAAO,EAAI,SAAS,CAAC,CAAC,SAAS,EAAG,IAAI,CAKnB,GAJlB,OAAO,EAAI,UAAU,CAAC,CAAC,SAAS,EAAG,IAAI,GACrC,OAAO,EAAI,YAAY,CAAC,CAAC,SAAS,EAAG,IAAI,GACzC,OAAO,EAAI,YAAY,CAAC,CAAC,SAAS,EAAG,IAAI,GAQ1D,+BAAyC,EAAoB,CACtD,EAAG,WAAW,EAAK,EACtB,EAAG,UAAU,EAAM,CAAE,UAAW,GAAM,CAAC"}
1
+ {"version":3,"file":"MigrationCreator.mjs","names":[],"sources":["../../../src/Database/Migrations/MigrationCreator.ts"],"sourcesContent":["/**\n * MigrationCreator\n *\n * Creates new migration files from stubs\n */\n\nimport * as fs from 'fs';\nimport * as path from 'path';\n\nexport class MigrationCreator {\n constructor(protected customStubPath?: string) {}\n\n /**\n * Create a new migration file\n */\n async create(name: string, migrationPath: string, table?: string, create: boolean = false): Promise<string> {\n this.ensureMigrationDirectoryExists(migrationPath);\n\n const fileName = this.getDatePrefix() + '_' + name + '.ts';\n const filePath = path.join(migrationPath, fileName);\n\n const stub = this.getStub(table, create);\n const populated = this.populateStub(stub, table);\n\n fs.writeFileSync(filePath, populated);\n\n return filePath;\n }\n\n /**\n * Get the migration stub\n */\n protected getStub(table?: string, create: boolean = false): string {\n if (table && create) {\n return this.getCreateStub();\n }\n\n if (table) {\n return this.getUpdateStub();\n }\n\n return this.getBlankStub();\n }\n\n /**\n * Get the blank migration stub\n */\n protected getBlankStub(): string {\n return `import { Migration } from '@orchestr-sh/orchestr';\nimport { Schema } from '@orchestr-sh/orchestr';\n\nexport default class extends Migration {\n /**\n * Run the migrations\n */\n async up(schema: Schema): Promise<void> {\n //\n }\n\n /**\n * Reverse the migrations\n */\n async down(schema: Schema): Promise<void> {\n //\n }\n}\n`;\n }\n\n /**\n * Get the create table stub\n */\n protected getCreateStub(): string {\n return `import { Migration } from '@orchestr-sh/orchestr';\nimport { Schema } from '@orchestr-sh/orchestr';\n\nexport default class extends Migration {\n /**\n * Run the migrations\n */\n async up(schema: Schema): Promise<void> {\n await schema.create('{{table}}', (table) => {\n table.id();\n table.timestamps();\n });\n }\n\n /**\n * Reverse the migrations\n */\n async down(schema: Schema): Promise<void> {\n await schema.dropIfExists('{{table}}');\n }\n}\n`;\n }\n\n /**\n * Get the update table stub\n */\n protected getUpdateStub(): string {\n return `import { Migration } from '@orchestr-sh/orchestr';\nimport { Schema } from '@orchestr-sh/orchestr';\n\nexport default class extends Migration {\n /**\n * Run the migrations\n */\n async up(schema: Schema): Promise<void> {\n await schema.table('{{table}}', (table) => {\n //\n });\n }\n\n /**\n * Reverse the migrations\n */\n async down(schema: Schema): Promise<void> {\n await schema.table('{{table}}', (table) => {\n //\n });\n }\n}\n`;\n }\n\n /**\n * Populate the stub with table name\n */\n protected populateStub(stub: string, table?: string): string {\n if (table) {\n return stub.replace(/\\{\\{table\\}\\}/g, table);\n }\n\n return stub;\n }\n\n /**\n * Get the date prefix for the migration\n */\n protected getDatePrefix(): string {\n const now = new Date();\n\n const year = now.getFullYear();\n const month = String(now.getMonth() + 1).padStart(2, '0');\n const day = String(now.getDate()).padStart(2, '0');\n const hour = String(now.getHours()).padStart(2, '0');\n const minute = String(now.getMinutes()).padStart(2, '0');\n const second = String(now.getSeconds()).padStart(2, '0');\n\n return `${year}_${month}_${day}_${hour}${minute}${second}`;\n }\n\n /**\n * Ensure the migration directory exists\n */\n protected ensureMigrationDirectoryExists(path: string): void {\n if (!fs.existsSync(path)) {\n fs.mkdirSync(path, { recursive: true });\n }\n }\n}\n"],"mappings":"4CASA,IAAa,EAAb,KAA8B,CACN,eAAtB,YAAY,EAAmC,CAAzB,KAAA,eAAA,EAKtB,MAAM,OAAO,EAAc,EAAuB,EAAgB,EAAkB,GAAwB,CAC1G,KAAK,+BAA+B,EAAc,CAElD,IAAM,EAAW,KAAK,eAAe,CAAG,IAAM,EAAO,MAC/C,EAAW,EAAK,KAAK,EAAe,EAAS,CAE7C,EAAO,KAAK,QAAQ,EAAO,EAAO,CAClC,EAAY,KAAK,aAAa,EAAM,EAAM,CAIhD,OAFA,EAAG,cAAc,EAAU,EAAU,CAE9B,EAMT,QAAkB,EAAgB,EAAkB,GAAe,CASjE,OARI,GAAS,EACJ,KAAK,eAAe,CAGzB,EACK,KAAK,eAAe,CAGtB,KAAK,cAAc,CAM5B,cAAiC,CAC/B,MAAO;;;;;;;;;;;;;;;;;;EAwBT,eAAkC,CAChC,MAAO;;;;;;;;;;;;;;;;;;;;;EA2BT,eAAkC,CAChC,MAAO;;;;;;;;;;;;;;;;;;;;;;EA4BT,aAAuB,EAAc,EAAwB,CAK3D,OAJI,EACK,EAAK,QAAQ,iBAAkB,EAAM,CAGvC,EAMT,eAAkC,CAChC,IAAM,EAAM,IAAI,KAShB,MAAO,GAPM,EAAI,aAOH,CAAC,GAND,OAAO,EAAI,UAAU,CAAG,EAAE,CAAC,SAAS,EAAG,IAM9B,CAAC,GALZ,OAAO,EAAI,SAAS,CAAC,CAAC,SAAS,EAAG,IAKhB,CAAC,GAJlB,OAAO,EAAI,UAAU,CAAC,CAAC,SAAS,EAAG,IAIV,GAHvB,OAAO,EAAI,YAAY,CAAC,CAAC,SAAS,EAAG,IAGL,GAFhC,OAAO,EAAI,YAAY,CAAC,CAAC,SAAS,EAAG,IAEI,GAM1D,+BAAyC,EAAoB,CACtD,EAAG,WAAW,EAAK,EACtB,EAAG,UAAU,EAAM,CAAE,UAAW,GAAM,CAAC"}
@@ -1,4 +1,4 @@
1
- require(`../../_virtual/_rolldown/runtime.cjs`);var e=class{table=`migrations`;constructor(e){this.connection=e}async getRan(){return(await this.connection.table(this.table).orderBy(`batch`,`asc`).orderBy(`migration`,`asc`).get()).map(e=>e.migration)}async getMigrations(e){let t=this.connection.table(this.table).orderBy(`batch`,`desc`).orderBy(`migration`,`desc`);return e!==void 0&&e>0&&t.limit(e),await t.get()}async getLast(){let e=await this.getLastBatchNumber();return e===0?[]:await this.connection.table(this.table).where(`batch`,e).orderBy(`migration`,`desc`).get()}async getMigrationBatches(){let e=await this.connection.table(this.table).orderBy(`batch`,`asc`).orderBy(`migration`,`asc`).get(),t={};return e.forEach(e=>{t[e.migration]=e.batch}),t}async log(e,t){await this.connection.table(this.table).insert({migration:e,batch:t})}async delete(e){await this.connection.table(this.table).where(`migration`,e.migration).delete()}async getNextBatchNumber(){return await this.getLastBatchNumber()+1}async getLastBatchNumber(){let e=await this.connection.table(this.table).max(`batch`);return e===null?0:Number(e)}async createRepository(){this.connection.getAdapter(),await this.connection.query(`
1
+ require(`../../_virtual/_rolldown/runtime.cjs`);var e=class{connection;table=`migrations`;constructor(e){this.connection=e}async getRan(){return(await this.connection.table(this.table).orderBy(`batch`,`asc`).orderBy(`migration`,`asc`).get()).map(e=>e.migration)}async getMigrations(e){let t=this.connection.table(this.table).orderBy(`batch`,`desc`).orderBy(`migration`,`desc`);return e!==void 0&&e>0&&t.limit(e),await t.get()}async getLast(){let e=await this.getLastBatchNumber();return e===0?[]:await this.connection.table(this.table).where(`batch`,e).orderBy(`migration`,`desc`).get()}async getMigrationBatches(){let e=await this.connection.table(this.table).orderBy(`batch`,`asc`).orderBy(`migration`,`asc`).get(),t={};return e.forEach(e=>{t[e.migration]=e.batch}),t}async log(e,t){await this.connection.table(this.table).insert({migration:e,batch:t})}async delete(e){await this.connection.table(this.table).where(`migration`,e.migration).delete()}async getNextBatchNumber(){return await this.getLastBatchNumber()+1}async getLastBatchNumber(){let e=await this.connection.table(this.table).max(`batch`);return e===null?0:Number(e)}async createRepository(){this.connection.getAdapter(),await this.connection.query(`
2
2
  CREATE TABLE IF NOT EXISTS ${this.table} (
3
3
  id INTEGER PRIMARY KEY AUTOINCREMENT,
4
4
  migration VARCHAR(255) NOT NULL,
@@ -1,4 +1,4 @@
1
- var e=class{table=`migrations`;constructor(e){this.connection=e}async getRan(){return(await this.connection.table(this.table).orderBy(`batch`,`asc`).orderBy(`migration`,`asc`).get()).map(e=>e.migration)}async getMigrations(e){let t=this.connection.table(this.table).orderBy(`batch`,`desc`).orderBy(`migration`,`desc`);return e!==void 0&&e>0&&t.limit(e),await t.get()}async getLast(){let e=await this.getLastBatchNumber();return e===0?[]:await this.connection.table(this.table).where(`batch`,e).orderBy(`migration`,`desc`).get()}async getMigrationBatches(){let e=await this.connection.table(this.table).orderBy(`batch`,`asc`).orderBy(`migration`,`asc`).get(),t={};return e.forEach(e=>{t[e.migration]=e.batch}),t}async log(e,t){await this.connection.table(this.table).insert({migration:e,batch:t})}async delete(e){await this.connection.table(this.table).where(`migration`,e.migration).delete()}async getNextBatchNumber(){return await this.getLastBatchNumber()+1}async getLastBatchNumber(){let e=await this.connection.table(this.table).max(`batch`);return e===null?0:Number(e)}async createRepository(){this.connection.getAdapter(),await this.connection.query(`
1
+ var e=class{connection;table=`migrations`;constructor(e){this.connection=e}async getRan(){return(await this.connection.table(this.table).orderBy(`batch`,`asc`).orderBy(`migration`,`asc`).get()).map(e=>e.migration)}async getMigrations(e){let t=this.connection.table(this.table).orderBy(`batch`,`desc`).orderBy(`migration`,`desc`);return e!==void 0&&e>0&&t.limit(e),await t.get()}async getLast(){let e=await this.getLastBatchNumber();return e===0?[]:await this.connection.table(this.table).where(`batch`,e).orderBy(`migration`,`desc`).get()}async getMigrationBatches(){let e=await this.connection.table(this.table).orderBy(`batch`,`asc`).orderBy(`migration`,`asc`).get(),t={};return e.forEach(e=>{t[e.migration]=e.batch}),t}async log(e,t){await this.connection.table(this.table).insert({migration:e,batch:t})}async delete(e){await this.connection.table(this.table).where(`migration`,e.migration).delete()}async getNextBatchNumber(){return await this.getLastBatchNumber()+1}async getLastBatchNumber(){let e=await this.connection.table(this.table).max(`batch`);return e===null?0:Number(e)}async createRepository(){this.connection.getAdapter(),await this.connection.query(`
2
2
  CREATE TABLE IF NOT EXISTS ${this.table} (
3
3
  id INTEGER PRIMARY KEY AUTOINCREMENT,
4
4
  migration VARCHAR(255) NOT NULL,
@@ -1 +1 @@
1
- {"version":3,"file":"MigrationRepository.mjs","names":[],"sources":["../../../src/Database/Migrations/MigrationRepository.ts"],"sourcesContent":["/**\n * MigrationRepository\n *\n * Manages the migrations table that tracks which migrations have been run\n */\n\nimport { Connection } from '@/Database/Connection';\n\nexport interface MigrationData {\n id?: number;\n migration: string;\n batch: number;\n}\n\nexport class MigrationRepository {\n protected table: string = 'migrations';\n\n constructor(protected connection: Connection) {}\n\n /**\n * Get the migrations that have been run\n */\n async getRan(): Promise<string[]> {\n const results = await this.connection.table(this.table).orderBy('batch', 'asc').orderBy('migration', 'asc').get();\n\n return results.map((row: any) => row.migration);\n }\n\n /**\n * Get the list of migrations\n */\n async getMigrations(steps?: number): Promise<MigrationData[]> {\n const query = this.connection.table(this.table).orderBy('batch', 'desc').orderBy('migration', 'desc');\n\n if (steps !== undefined && steps > 0) {\n query.limit(steps);\n }\n\n return await query.get();\n }\n\n /**\n * Get the last migration batch\n */\n async getLast(): Promise<MigrationData[]> {\n const batch = await this.getLastBatchNumber();\n\n if (batch === 0) {\n return [];\n }\n\n return await this.connection.table(this.table).where('batch', batch).orderBy('migration', 'desc').get();\n }\n\n /**\n * Get the migrations for a batch\n */\n async getMigrationBatches(): Promise<Record<string, number>> {\n const results = await this.connection.table(this.table).orderBy('batch', 'asc').orderBy('migration', 'asc').get();\n\n const batches: Record<string, number> = {};\n results.forEach((row: any) => {\n batches[row.migration] = row.batch;\n });\n\n return batches;\n }\n\n /**\n * Log that a migration was run\n */\n async log(file: string, batch: number): Promise<void> {\n await this.connection.table(this.table).insert({\n migration: file,\n batch,\n });\n }\n\n /**\n * Remove a migration from the log\n */\n async delete(migration: MigrationData): Promise<void> {\n await this.connection.table(this.table).where('migration', migration.migration).delete();\n }\n\n /**\n * Get the next migration batch number\n */\n async getNextBatchNumber(): Promise<number> {\n return (await this.getLastBatchNumber()) + 1;\n }\n\n /**\n * Get the last migration batch number\n */\n async getLastBatchNumber(): Promise<number> {\n const result = await this.connection.table(this.table).max('batch');\n\n return result !== null ? Number(result) : 0;\n }\n\n /**\n * Create the migration repository table\n */\n async createRepository(): Promise<void> {\n const schema = this.connection.getAdapter();\n\n await this.connection.query(`\n CREATE TABLE IF NOT EXISTS ${this.table} (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n migration VARCHAR(255) NOT NULL,\n batch INTEGER NOT NULL\n )\n `);\n }\n\n /**\n * Determine if the migration repository exists\n */\n async repositoryExists(): Promise<boolean> {\n try {\n await this.connection.table(this.table).limit(1).get();\n return true;\n } catch (error) {\n return false;\n }\n }\n\n /**\n * Delete the migration repository\n */\n async deleteRepository(): Promise<void> {\n await this.connection.query(`DROP TABLE IF EXISTS ${this.table}`);\n }\n\n /**\n * Set the information source to gather data\n */\n setSource(name: string): void {\n // Reserved for future use with different connections\n }\n}\n"],"mappings":"AAcA,IAAa,EAAb,KAAiC,CAC/B,MAA0B,aAE1B,YAAY,EAAkC,CAAxB,KAAA,WAAA,EAKtB,MAAM,QAA4B,CAGhC,OAFgB,MAAM,KAAK,WAAW,MAAM,KAAK,MAAM,CAAC,QAAQ,QAAS,MAAM,CAAC,QAAQ,YAAa,MAAM,CAAC,KAAK,EAElG,IAAK,GAAa,EAAI,UAAU,CAMjD,MAAM,cAAc,EAA0C,CAC5D,IAAM,EAAQ,KAAK,WAAW,MAAM,KAAK,MAAM,CAAC,QAAQ,QAAS,OAAO,CAAC,QAAQ,YAAa,OAAO,CAMrG,OAJI,IAAU,IAAA,IAAa,EAAQ,GACjC,EAAM,MAAM,EAAM,CAGb,MAAM,EAAM,KAAK,CAM1B,MAAM,SAAoC,CACxC,IAAM,EAAQ,MAAM,KAAK,oBAAoB,CAM7C,OAJI,IAAU,EACL,EAAE,CAGJ,MAAM,KAAK,WAAW,MAAM,KAAK,MAAM,CAAC,MAAM,QAAS,EAAM,CAAC,QAAQ,YAAa,OAAO,CAAC,KAAK,CAMzG,MAAM,qBAAuD,CAC3D,IAAM,EAAU,MAAM,KAAK,WAAW,MAAM,KAAK,MAAM,CAAC,QAAQ,QAAS,MAAM,CAAC,QAAQ,YAAa,MAAM,CAAC,KAAK,CAE3G,EAAkC,EAAE,CAK1C,OAJA,EAAQ,QAAS,GAAa,CAC5B,EAAQ,EAAI,WAAa,EAAI,OAC7B,CAEK,EAMT,MAAM,IAAI,EAAc,EAA8B,CACpD,MAAM,KAAK,WAAW,MAAM,KAAK,MAAM,CAAC,OAAO,CAC7C,UAAW,EACX,QACD,CAAC,CAMJ,MAAM,OAAO,EAAyC,CACpD,MAAM,KAAK,WAAW,MAAM,KAAK,MAAM,CAAC,MAAM,YAAa,EAAU,UAAU,CAAC,QAAQ,CAM1F,MAAM,oBAAsC,CAC1C,OAAQ,MAAM,KAAK,oBAAoB,CAAI,EAM7C,MAAM,oBAAsC,CAC1C,IAAM,EAAS,MAAM,KAAK,WAAW,MAAM,KAAK,MAAM,CAAC,IAAI,QAAQ,CAEnE,OAAO,IAAW,KAAwB,EAAjB,OAAO,EAAO,CAMzC,MAAM,kBAAkC,CACvB,KAAK,WAAW,YAAY,CAE3C,MAAM,KAAK,WAAW,MAAM;mCACG,KAAK,MAAM;;;;;MAKxC,CAMJ,MAAM,kBAAqC,CACzC,GAAI,CAEF,OADA,MAAM,KAAK,WAAW,MAAM,KAAK,MAAM,CAAC,MAAM,EAAE,CAAC,KAAK,CAC/C,QACO,CACd,MAAO,IAOX,MAAM,kBAAkC,CACtC,MAAM,KAAK,WAAW,MAAM,wBAAwB,KAAK,QAAQ,CAMnE,UAAU,EAAoB"}
1
+ {"version":3,"file":"MigrationRepository.mjs","names":[],"sources":["../../../src/Database/Migrations/MigrationRepository.ts"],"sourcesContent":["/**\n * MigrationRepository\n *\n * Manages the migrations table that tracks which migrations have been run\n */\n\nimport { Connection } from '@/Database/Connection';\n\nexport interface MigrationData {\n id?: number;\n migration: string;\n batch: number;\n}\n\nexport class MigrationRepository {\n protected table: string = 'migrations';\n\n constructor(protected connection: Connection) {}\n\n /**\n * Get the migrations that have been run\n */\n async getRan(): Promise<string[]> {\n const results = await this.connection.table(this.table).orderBy('batch', 'asc').orderBy('migration', 'asc').get();\n\n return results.map((row: any) => row.migration);\n }\n\n /**\n * Get the list of migrations\n */\n async getMigrations(steps?: number): Promise<MigrationData[]> {\n const query = this.connection.table(this.table).orderBy('batch', 'desc').orderBy('migration', 'desc');\n\n if (steps !== undefined && steps > 0) {\n query.limit(steps);\n }\n\n return await query.get();\n }\n\n /**\n * Get the last migration batch\n */\n async getLast(): Promise<MigrationData[]> {\n const batch = await this.getLastBatchNumber();\n\n if (batch === 0) {\n return [];\n }\n\n return await this.connection.table(this.table).where('batch', batch).orderBy('migration', 'desc').get();\n }\n\n /**\n * Get the migrations for a batch\n */\n async getMigrationBatches(): Promise<Record<string, number>> {\n const results = await this.connection.table(this.table).orderBy('batch', 'asc').orderBy('migration', 'asc').get();\n\n const batches: Record<string, number> = {};\n results.forEach((row: any) => {\n batches[row.migration] = row.batch;\n });\n\n return batches;\n }\n\n /**\n * Log that a migration was run\n */\n async log(file: string, batch: number): Promise<void> {\n await this.connection.table(this.table).insert({\n migration: file,\n batch,\n });\n }\n\n /**\n * Remove a migration from the log\n */\n async delete(migration: MigrationData): Promise<void> {\n await this.connection.table(this.table).where('migration', migration.migration).delete();\n }\n\n /**\n * Get the next migration batch number\n */\n async getNextBatchNumber(): Promise<number> {\n return (await this.getLastBatchNumber()) + 1;\n }\n\n /**\n * Get the last migration batch number\n */\n async getLastBatchNumber(): Promise<number> {\n const result = await this.connection.table(this.table).max('batch');\n\n return result !== null ? Number(result) : 0;\n }\n\n /**\n * Create the migration repository table\n */\n async createRepository(): Promise<void> {\n const schema = this.connection.getAdapter();\n\n await this.connection.query(`\n CREATE TABLE IF NOT EXISTS ${this.table} (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n migration VARCHAR(255) NOT NULL,\n batch INTEGER NOT NULL\n )\n `);\n }\n\n /**\n * Determine if the migration repository exists\n */\n async repositoryExists(): Promise<boolean> {\n try {\n await this.connection.table(this.table).limit(1).get();\n return true;\n } catch (error) {\n return false;\n }\n }\n\n /**\n * Delete the migration repository\n */\n async deleteRepository(): Promise<void> {\n await this.connection.query(`DROP TABLE IF EXISTS ${this.table}`);\n }\n\n /**\n * Set the information source to gather data\n */\n setSource(name: string): void {\n // Reserved for future use with different connections\n }\n}\n"],"mappings":"AAcA,IAAa,EAAb,KAAiC,CAGT,WAFtB,MAA0B,aAE1B,YAAY,EAAkC,CAAxB,KAAA,WAAA,EAKtB,MAAM,QAA4B,CAGhC,OAAO,MAFe,KAAK,WAAW,MAAM,KAAK,MAAM,CAAC,QAAQ,QAAS,MAAM,CAAC,QAAQ,YAAa,MAAM,CAAC,KAAK,EAElG,IAAK,GAAa,EAAI,UAAU,CAMjD,MAAM,cAAc,EAA0C,CAC5D,IAAM,EAAQ,KAAK,WAAW,MAAM,KAAK,MAAM,CAAC,QAAQ,QAAS,OAAO,CAAC,QAAQ,YAAa,OAAO,CAMrG,OAJI,IAAU,IAAA,IAAa,EAAQ,GACjC,EAAM,MAAM,EAAM,CAGb,MAAM,EAAM,KAAK,CAM1B,MAAM,SAAoC,CACxC,IAAM,EAAQ,MAAM,KAAK,oBAAoB,CAM7C,OAJI,IAAU,EACL,EAAE,CAGJ,MAAM,KAAK,WAAW,MAAM,KAAK,MAAM,CAAC,MAAM,QAAS,EAAM,CAAC,QAAQ,YAAa,OAAO,CAAC,KAAK,CAMzG,MAAM,qBAAuD,CAC3D,IAAM,EAAU,MAAM,KAAK,WAAW,MAAM,KAAK,MAAM,CAAC,QAAQ,QAAS,MAAM,CAAC,QAAQ,YAAa,MAAM,CAAC,KAAK,CAE3G,EAAkC,EAAE,CAK1C,OAJA,EAAQ,QAAS,GAAa,CAC5B,EAAQ,EAAI,WAAa,EAAI,OAC7B,CAEK,EAMT,MAAM,IAAI,EAAc,EAA8B,CACpD,MAAM,KAAK,WAAW,MAAM,KAAK,MAAM,CAAC,OAAO,CAC7C,UAAW,EACX,QACD,CAAC,CAMJ,MAAM,OAAO,EAAyC,CACpD,MAAM,KAAK,WAAW,MAAM,KAAK,MAAM,CAAC,MAAM,YAAa,EAAU,UAAU,CAAC,QAAQ,CAM1F,MAAM,oBAAsC,CAC1C,OAAQ,MAAM,KAAK,oBAAoB,CAAI,EAM7C,MAAM,oBAAsC,CAC1C,IAAM,EAAS,MAAM,KAAK,WAAW,MAAM,KAAK,MAAM,CAAC,IAAI,QAAQ,CAEnE,OAAO,IAAW,KAAwB,EAAjB,OAAO,EAAO,CAMzC,MAAM,kBAAkC,CACvB,KAAK,WAAW,YAAY,CAE3C,MAAM,KAAK,WAAW,MAAM;mCACG,KAAK,MAAM;;;;;MAKxC,CAMJ,MAAM,kBAAqC,CACzC,GAAI,CAEF,OADA,MAAM,KAAK,WAAW,MAAM,KAAK,MAAM,CAAC,MAAM,EAAE,CAAC,KAAK,CAC/C,QACO,CACd,MAAO,IAOX,MAAM,kBAAkC,CACtC,MAAM,KAAK,WAAW,MAAM,wBAAwB,KAAK,QAAQ,CAMnE,UAAU,EAAoB"}
@@ -1 +1 @@
1
- const e=require(`../../_virtual/_rolldown/runtime.cjs`),t=require(`./MigrationRepository.cjs`),n=require(`./SchemaBuilder.cjs`);let r=require(`path`);r=e.__toESM(r);let i=require(`fs`);i=e.__toESM(i);var a=class{repository;schema;constructor(e,r){this.connection=e,this.paths=r,this.repository=new t.MigrationRepository(e),this.schema=new n.SchemaBuilder(e)}async run(e={}){let t=[];await this.repository.createRepository();let n=await this.getMigrationFiles(),r=await this.repository.getRan(),i=n.filter(e=>!r.includes(e));if(i.length===0)return[];let a=await this.repository.getNextBatchNumber();for(let n of i)await this.runUp(n,a,e.pretend||!1),t.push(n);return t}async runUp(e,t,n){let r=await this.resolveMigration(e);if(n){console.log(`Would run: ${e}`);return}await r.up(this.schema),await this.repository.log(e,t)}async rollback(e={}){let t=[],n=await this.getMigrationsForRollback(e);if(n.length===0)return[];for(let r of n)await this.runDown(r.migration,e.pretend||!1),t.push(r.migration);return t}async runDown(e,t){let n=await this.resolveMigration(e);if(t){console.log(`Would rollback: ${e}`);return}await n.down(this.schema),await this.repository.delete({migration:e,batch:0})}async reset(){let e=[],t=await this.repository.getMigrations();if(t.length===0)return[];t.reverse();for(let n of t)await this.runDown(n.migration,!1),e.push(n.migration);return e}async dropAllTables(){let e=await this.connection.getTables();for(let t of e)await this.connection.query(`DROP TABLE IF EXISTS ${t}`)}async refresh(){return{rolledBack:await this.reset(),ran:await this.run()}}async getMigrationsForRollback(e){return e.step&&e.step>0?await this.repository.getMigrations(e.step):await this.repository.getLast()}async resolveMigration(e){let t=await this.findMigrationFile(e);if(!t)throw Error(`Migration file not found: ${e}`);let n=await import(t),r=n.default||Object.values(n)[0];if(!r)throw Error(`No migration class found in: ${e}`);return new r}async findMigrationFile(e){for(let t of this.paths){let n=r.join(t,e);if(i.existsSync(n+`.ts`))return n+`.ts`;if(i.existsSync(n+`.js`))return n+`.js`;if(i.existsSync(n))return n}return null}async getMigrationFiles(){let e=[];for(let t of this.paths){if(!i.existsSync(t))continue;let n=i.readdirSync(t);for(let t of n)t.match(/\.(ts|js)$/)&&e.push(t.replace(/\.(ts|js)$/,``))}return Array.from(new Set(e)).sort()}async getRan(){return await this.repository.getRan()}async getMigrationBatches(){return await this.repository.getMigrationBatches()}getRepository(){return this.repository}setPaths(e){this.paths=e}getPaths(){return this.paths}};exports.Migrator=a;
1
+ const e=require(`../../_virtual/_rolldown/runtime.cjs`),t=require(`./MigrationRepository.cjs`),n=require(`./SchemaBuilder.cjs`);let r=require(`path`);r=e.__toESM(r,1);let i=require(`fs`);i=e.__toESM(i,1);var a=class{connection;paths;repository;schema;constructor(e,r){this.connection=e,this.paths=r,this.repository=new t.MigrationRepository(e),this.schema=new n.SchemaBuilder(e)}async run(e={}){let t=[];await this.repository.createRepository();let n=await this.getMigrationFiles(),r=await this.repository.getRan(),i=n.filter(e=>!r.includes(e));if(i.length===0)return[];let a=await this.repository.getNextBatchNumber();for(let n of i)await this.runUp(n,a,e.pretend||!1),t.push(n);return t}async runUp(e,t,n){let r=await this.resolveMigration(e);if(n){console.log(`Would run: ${e}`);return}await r.up(this.schema),await this.repository.log(e,t)}async rollback(e={}){let t=[],n=await this.getMigrationsForRollback(e);if(n.length===0)return[];for(let r of n)await this.runDown(r.migration,e.pretend||!1),t.push(r.migration);return t}async runDown(e,t){let n=await this.resolveMigration(e);if(t){console.log(`Would rollback: ${e}`);return}await n.down(this.schema),await this.repository.delete({migration:e,batch:0})}async reset(){let e=[],t=await this.repository.getMigrations();if(t.length===0)return[];t.reverse();for(let n of t)await this.runDown(n.migration,!1),e.push(n.migration);return e}async dropAllTables(){let e=await this.connection.getTables();for(let t of e)await this.connection.query(`DROP TABLE IF EXISTS ${t}`)}async refresh(){return{rolledBack:await this.reset(),ran:await this.run()}}async getMigrationsForRollback(e){return e.step&&e.step>0?await this.repository.getMigrations(e.step):await this.repository.getLast()}async resolveMigration(e){let t=await this.findMigrationFile(e);if(!t)throw Error(`Migration file not found: ${e}`);let n=await import(t),r=n.default||Object.values(n)[0];if(!r)throw Error(`No migration class found in: ${e}`);return new r}async findMigrationFile(e){for(let t of this.paths){let n=r.join(t,e);if(i.existsSync(n+`.ts`))return n+`.ts`;if(i.existsSync(n+`.js`))return n+`.js`;if(i.existsSync(n))return n}return null}async getMigrationFiles(){let e=[];for(let t of this.paths){if(!i.existsSync(t))continue;let n=i.readdirSync(t);for(let t of n)t.match(/\.(ts|js)$/)&&e.push(t.replace(/\.(ts|js)$/,``))}return Array.from(new Set(e)).sort()}async getRan(){return await this.repository.getRan()}async getMigrationBatches(){return await this.repository.getMigrationBatches()}getRepository(){return this.repository}setPaths(e){this.paths=e}getPaths(){return this.paths}};exports.Migrator=a;
@@ -1,2 +1,2 @@
1
- import{MigrationRepository as e}from"./MigrationRepository.mjs";import{SchemaBuilder as t}from"./SchemaBuilder.mjs";import*as n from"path";import*as r from"fs";var i=class{repository;schema;constructor(n,r){this.connection=n,this.paths=r,this.repository=new e(n),this.schema=new t(n)}async run(e={}){let t=[];await this.repository.createRepository();let n=await this.getMigrationFiles(),r=await this.repository.getRan(),i=n.filter(e=>!r.includes(e));if(i.length===0)return[];let a=await this.repository.getNextBatchNumber();for(let n of i)await this.runUp(n,a,e.pretend||!1),t.push(n);return t}async runUp(e,t,n){let r=await this.resolveMigration(e);if(n){console.log(`Would run: ${e}`);return}await r.up(this.schema),await this.repository.log(e,t)}async rollback(e={}){let t=[],n=await this.getMigrationsForRollback(e);if(n.length===0)return[];for(let r of n)await this.runDown(r.migration,e.pretend||!1),t.push(r.migration);return t}async runDown(e,t){let n=await this.resolveMigration(e);if(t){console.log(`Would rollback: ${e}`);return}await n.down(this.schema),await this.repository.delete({migration:e,batch:0})}async reset(){let e=[],t=await this.repository.getMigrations();if(t.length===0)return[];t.reverse();for(let n of t)await this.runDown(n.migration,!1),e.push(n.migration);return e}async dropAllTables(){let e=await this.connection.getTables();for(let t of e)await this.connection.query(`DROP TABLE IF EXISTS ${t}`)}async refresh(){return{rolledBack:await this.reset(),ran:await this.run()}}async getMigrationsForRollback(e){return e.step&&e.step>0?await this.repository.getMigrations(e.step):await this.repository.getLast()}async resolveMigration(e){let t=await this.findMigrationFile(e);if(!t)throw Error(`Migration file not found: ${e}`);let n=await import(t),r=n.default||Object.values(n)[0];if(!r)throw Error(`No migration class found in: ${e}`);return new r}async findMigrationFile(e){for(let t of this.paths){let i=n.join(t,e);if(r.existsSync(i+`.ts`))return i+`.ts`;if(r.existsSync(i+`.js`))return i+`.js`;if(r.existsSync(i))return i}return null}async getMigrationFiles(){let e=[];for(let t of this.paths){if(!r.existsSync(t))continue;let n=r.readdirSync(t);for(let t of n)t.match(/\.(ts|js)$/)&&e.push(t.replace(/\.(ts|js)$/,``))}return Array.from(new Set(e)).sort()}async getRan(){return await this.repository.getRan()}async getMigrationBatches(){return await this.repository.getMigrationBatches()}getRepository(){return this.repository}setPaths(e){this.paths=e}getPaths(){return this.paths}};export{i as Migrator};
1
+ import{MigrationRepository as e}from"./MigrationRepository.mjs";import{SchemaBuilder as t}from"./SchemaBuilder.mjs";import*as n from"path";import*as r from"fs";var i=class{connection;paths;repository;schema;constructor(n,r){this.connection=n,this.paths=r,this.repository=new e(n),this.schema=new t(n)}async run(e={}){let t=[];await this.repository.createRepository();let n=await this.getMigrationFiles(),r=await this.repository.getRan(),i=n.filter(e=>!r.includes(e));if(i.length===0)return[];let a=await this.repository.getNextBatchNumber();for(let n of i)await this.runUp(n,a,e.pretend||!1),t.push(n);return t}async runUp(e,t,n){let r=await this.resolveMigration(e);if(n){console.log(`Would run: ${e}`);return}await r.up(this.schema),await this.repository.log(e,t)}async rollback(e={}){let t=[],n=await this.getMigrationsForRollback(e);if(n.length===0)return[];for(let r of n)await this.runDown(r.migration,e.pretend||!1),t.push(r.migration);return t}async runDown(e,t){let n=await this.resolveMigration(e);if(t){console.log(`Would rollback: ${e}`);return}await n.down(this.schema),await this.repository.delete({migration:e,batch:0})}async reset(){let e=[],t=await this.repository.getMigrations();if(t.length===0)return[];t.reverse();for(let n of t)await this.runDown(n.migration,!1),e.push(n.migration);return e}async dropAllTables(){let e=await this.connection.getTables();for(let t of e)await this.connection.query(`DROP TABLE IF EXISTS ${t}`)}async refresh(){return{rolledBack:await this.reset(),ran:await this.run()}}async getMigrationsForRollback(e){return e.step&&e.step>0?await this.repository.getMigrations(e.step):await this.repository.getLast()}async resolveMigration(e){let t=await this.findMigrationFile(e);if(!t)throw Error(`Migration file not found: ${e}`);let n=await import(t),r=n.default||Object.values(n)[0];if(!r)throw Error(`No migration class found in: ${e}`);return new r}async findMigrationFile(e){for(let t of this.paths){let i=n.join(t,e);if(r.existsSync(i+`.ts`))return i+`.ts`;if(r.existsSync(i+`.js`))return i+`.js`;if(r.existsSync(i))return i}return null}async getMigrationFiles(){let e=[];for(let t of this.paths){if(!r.existsSync(t))continue;let n=r.readdirSync(t);for(let t of n)t.match(/\.(ts|js)$/)&&e.push(t.replace(/\.(ts|js)$/,``))}return Array.from(new Set(e)).sort()}async getRan(){return await this.repository.getRan()}async getMigrationBatches(){return await this.repository.getMigrationBatches()}getRepository(){return this.repository}setPaths(e){this.paths=e}getPaths(){return this.paths}};export{i as Migrator};
2
2
  //# sourceMappingURL=Migrator.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"Migrator.mjs","names":[],"sources":["../../../src/Database/Migrations/Migrator.ts"],"sourcesContent":["/**\n * Migrator\n *\n * Handles running and rolling back migrations\n */\n\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport { Connection } from '@/Database/Connection';\nimport { Migration } from './Migration';\nimport { MigrationRepository } from './MigrationRepository';\nimport { SchemaBuilder } from './SchemaBuilder';\n\nexport interface MigrationOptions {\n step?: number;\n pretend?: boolean;\n}\n\nexport class Migrator {\n protected repository: MigrationRepository;\n protected schema: SchemaBuilder;\n\n constructor(\n protected connection: Connection,\n protected paths: string[]\n ) {\n this.repository = new MigrationRepository(connection);\n this.schema = new SchemaBuilder(connection);\n }\n\n /**\n * Run the pending migrations\n */\n async run(options: MigrationOptions = {}): Promise<string[]> {\n const ran: string[] = [];\n\n // Ensure the migrations repository exists\n await this.repository.createRepository();\n\n const files = await this.getMigrationFiles();\n const ranMigrations = await this.repository.getRan();\n\n const pending = files.filter((file) => !ranMigrations.includes(file));\n\n if (pending.length === 0) {\n return [];\n }\n\n const batch = await this.repository.getNextBatchNumber();\n\n for (const file of pending) {\n await this.runUp(file, batch, options.pretend || false);\n ran.push(file);\n }\n\n return ran;\n }\n\n /**\n * Run a single migration up\n */\n protected async runUp(file: string, batch: number, pretend: boolean): Promise<void> {\n const migration = await this.resolveMigration(file);\n\n if (pretend) {\n console.log(`Would run: ${file}`);\n return;\n }\n\n await migration.up(this.schema);\n await this.repository.log(file, batch);\n }\n\n /**\n * Rollback the last migration batch\n */\n async rollback(options: MigrationOptions = {}): Promise<string[]> {\n const rolledBack: string[] = [];\n\n const migrations = await this.getMigrationsForRollback(options);\n\n if (migrations.length === 0) {\n return [];\n }\n\n for (const migration of migrations) {\n await this.runDown(migration.migration, options.pretend || false);\n rolledBack.push(migration.migration);\n }\n\n return rolledBack;\n }\n\n /**\n * Run a single migration down\n */\n protected async runDown(file: string, pretend: boolean): Promise<void> {\n const migration = await this.resolveMigration(file);\n\n if (pretend) {\n console.log(`Would rollback: ${file}`);\n return;\n }\n\n await migration.down(this.schema);\n await this.repository.delete({ migration: file, batch: 0 });\n }\n\n /**\n * Reset all migrations\n */\n async reset(): Promise<string[]> {\n const rolledBack: string[] = [];\n\n const migrations = await this.repository.getMigrations();\n\n if (migrations.length === 0) {\n return [];\n }\n\n // Reverse the order for rollback\n migrations.reverse();\n\n for (const migration of migrations) {\n await this.runDown(migration.migration, false);\n rolledBack.push(migration.migration);\n }\n\n return rolledBack;\n }\n\n /**\n * Drop all tables in the connected database.\n *\n * Unlike reset(), this does not rely on migration records or down() methods.\n * It queries the database's own schema catalog for every table name and\n * issues a DROP TABLE IF EXISTS for each one, giving a truly clean slate\n * regardless of whether migrations were tracked.\n */\n async dropAllTables(): Promise<void> {\n const tables = await this.connection.getTables();\n\n for (const table of tables) {\n await this.connection.query(`DROP TABLE IF EXISTS ${table}`);\n }\n }\n\n /**\n * Refresh the database (reset and re-run all migrations)\n */\n async refresh(): Promise<{ rolledBack: string[]; ran: string[] }> {\n const rolledBack = await this.reset();\n const ran = await this.run();\n\n return { rolledBack, ran };\n }\n\n /**\n * Get migrations for rollback\n */\n protected async getMigrationsForRollback(options: MigrationOptions): Promise<any[]> {\n if (options.step && options.step > 0) {\n return await this.repository.getMigrations(options.step);\n }\n\n return await this.repository.getLast();\n }\n\n /**\n * Resolve a migration instance from a file\n */\n protected async resolveMigration(file: string): Promise<Migration> {\n const migrationPath = await this.findMigrationFile(file);\n\n if (!migrationPath) {\n throw new Error(`Migration file not found: ${file}`);\n }\n\n // Import the migration file\n const migrationModule = await import(migrationPath);\n\n // Get the default export or the first class export\n const MigrationClass = migrationModule.default || Object.values(migrationModule)[0];\n\n if (!MigrationClass) {\n throw new Error(`No migration class found in: ${file}`);\n }\n\n return new (MigrationClass as any)();\n }\n\n /**\n * Find a migration file in the paths\n */\n protected async findMigrationFile(file: string): Promise<string | null> {\n for (const searchPath of this.paths) {\n const fullPath = path.join(searchPath, file);\n\n // Try with .ts extension\n if (fs.existsSync(fullPath + '.ts')) {\n return fullPath + '.ts';\n }\n\n // Try with .js extension\n if (fs.existsSync(fullPath + '.js')) {\n return fullPath + '.js';\n }\n\n // Try without extension\n if (fs.existsSync(fullPath)) {\n return fullPath;\n }\n }\n\n return null;\n }\n\n /**\n * Get all migration files\n */\n async getMigrationFiles(): Promise<string[]> {\n const files: string[] = [];\n\n for (const searchPath of this.paths) {\n if (!fs.existsSync(searchPath)) {\n continue;\n }\n\n const dirFiles = fs.readdirSync(searchPath);\n\n for (const file of dirFiles) {\n if (file.match(/\\.(ts|js)$/)) {\n files.push(file.replace(/\\.(ts|js)$/, ''));\n }\n }\n }\n\n // Remove duplicates and sort\n return Array.from(new Set(files)).sort();\n }\n\n /**\n * Get the ran migrations\n */\n async getRan(): Promise<string[]> {\n return await this.repository.getRan();\n }\n\n /**\n * Get migrations with their batch numbers\n */\n async getMigrationBatches(): Promise<Record<string, number>> {\n return await this.repository.getMigrationBatches();\n }\n\n /**\n * Get the migration repository\n */\n getRepository(): MigrationRepository {\n return this.repository;\n }\n\n /**\n * Set the migration paths\n */\n setPaths(paths: string[]): void {\n this.paths = paths;\n }\n\n /**\n * Get the migration paths\n */\n getPaths(): string[] {\n return this.paths;\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"Migrator.mjs","names":[],"sources":["../../../src/Database/Migrations/Migrator.ts"],"sourcesContent":["/**\n * Migrator\n *\n * Handles running and rolling back migrations\n */\n\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport { Connection } from '@/Database/Connection';\nimport { Migration } from './Migration';\nimport { MigrationRepository } from './MigrationRepository';\nimport { SchemaBuilder } from './SchemaBuilder';\n\nexport interface MigrationOptions {\n step?: number;\n pretend?: boolean;\n}\n\nexport class Migrator {\n protected repository: MigrationRepository;\n protected schema: SchemaBuilder;\n\n constructor(\n protected connection: Connection,\n protected paths: string[]\n ) {\n this.repository = new MigrationRepository(connection);\n this.schema = new SchemaBuilder(connection);\n }\n\n /**\n * Run the pending migrations\n */\n async run(options: MigrationOptions = {}): Promise<string[]> {\n const ran: string[] = [];\n\n // Ensure the migrations repository exists\n await this.repository.createRepository();\n\n const files = await this.getMigrationFiles();\n const ranMigrations = await this.repository.getRan();\n\n const pending = files.filter((file) => !ranMigrations.includes(file));\n\n if (pending.length === 0) {\n return [];\n }\n\n const batch = await this.repository.getNextBatchNumber();\n\n for (const file of pending) {\n await this.runUp(file, batch, options.pretend || false);\n ran.push(file);\n }\n\n return ran;\n }\n\n /**\n * Run a single migration up\n */\n protected async runUp(file: string, batch: number, pretend: boolean): Promise<void> {\n const migration = await this.resolveMigration(file);\n\n if (pretend) {\n console.log(`Would run: ${file}`);\n return;\n }\n\n await migration.up(this.schema);\n await this.repository.log(file, batch);\n }\n\n /**\n * Rollback the last migration batch\n */\n async rollback(options: MigrationOptions = {}): Promise<string[]> {\n const rolledBack: string[] = [];\n\n const migrations = await this.getMigrationsForRollback(options);\n\n if (migrations.length === 0) {\n return [];\n }\n\n for (const migration of migrations) {\n await this.runDown(migration.migration, options.pretend || false);\n rolledBack.push(migration.migration);\n }\n\n return rolledBack;\n }\n\n /**\n * Run a single migration down\n */\n protected async runDown(file: string, pretend: boolean): Promise<void> {\n const migration = await this.resolveMigration(file);\n\n if (pretend) {\n console.log(`Would rollback: ${file}`);\n return;\n }\n\n await migration.down(this.schema);\n await this.repository.delete({ migration: file, batch: 0 });\n }\n\n /**\n * Reset all migrations\n */\n async reset(): Promise<string[]> {\n const rolledBack: string[] = [];\n\n const migrations = await this.repository.getMigrations();\n\n if (migrations.length === 0) {\n return [];\n }\n\n // Reverse the order for rollback\n migrations.reverse();\n\n for (const migration of migrations) {\n await this.runDown(migration.migration, false);\n rolledBack.push(migration.migration);\n }\n\n return rolledBack;\n }\n\n /**\n * Drop all tables in the connected database.\n *\n * Unlike reset(), this does not rely on migration records or down() methods.\n * It queries the database's own schema catalog for every table name and\n * issues a DROP TABLE IF EXISTS for each one, giving a truly clean slate\n * regardless of whether migrations were tracked.\n */\n async dropAllTables(): Promise<void> {\n const tables = await this.connection.getTables();\n\n for (const table of tables) {\n await this.connection.query(`DROP TABLE IF EXISTS ${table}`);\n }\n }\n\n /**\n * Refresh the database (reset and re-run all migrations)\n */\n async refresh(): Promise<{ rolledBack: string[]; ran: string[] }> {\n const rolledBack = await this.reset();\n const ran = await this.run();\n\n return { rolledBack, ran };\n }\n\n /**\n * Get migrations for rollback\n */\n protected async getMigrationsForRollback(options: MigrationOptions): Promise<any[]> {\n if (options.step && options.step > 0) {\n return await this.repository.getMigrations(options.step);\n }\n\n return await this.repository.getLast();\n }\n\n /**\n * Resolve a migration instance from a file\n */\n protected async resolveMigration(file: string): Promise<Migration> {\n const migrationPath = await this.findMigrationFile(file);\n\n if (!migrationPath) {\n throw new Error(`Migration file not found: ${file}`);\n }\n\n // Import the migration file\n const migrationModule = await import(migrationPath);\n\n // Get the default export or the first class export\n const MigrationClass = migrationModule.default || Object.values(migrationModule)[0];\n\n if (!MigrationClass) {\n throw new Error(`No migration class found in: ${file}`);\n }\n\n return new (MigrationClass as any)();\n }\n\n /**\n * Find a migration file in the paths\n */\n protected async findMigrationFile(file: string): Promise<string | null> {\n for (const searchPath of this.paths) {\n const fullPath = path.join(searchPath, file);\n\n // Try with .ts extension\n if (fs.existsSync(fullPath + '.ts')) {\n return fullPath + '.ts';\n }\n\n // Try with .js extension\n if (fs.existsSync(fullPath + '.js')) {\n return fullPath + '.js';\n }\n\n // Try without extension\n if (fs.existsSync(fullPath)) {\n return fullPath;\n }\n }\n\n return null;\n }\n\n /**\n * Get all migration files\n */\n async getMigrationFiles(): Promise<string[]> {\n const files: string[] = [];\n\n for (const searchPath of this.paths) {\n if (!fs.existsSync(searchPath)) {\n continue;\n }\n\n const dirFiles = fs.readdirSync(searchPath);\n\n for (const file of dirFiles) {\n if (file.match(/\\.(ts|js)$/)) {\n files.push(file.replace(/\\.(ts|js)$/, ''));\n }\n }\n }\n\n // Remove duplicates and sort\n return Array.from(new Set(files)).sort();\n }\n\n /**\n * Get the ran migrations\n */\n async getRan(): Promise<string[]> {\n return await this.repository.getRan();\n }\n\n /**\n * Get migrations with their batch numbers\n */\n async getMigrationBatches(): Promise<Record<string, number>> {\n return await this.repository.getMigrationBatches();\n }\n\n /**\n * Get the migration repository\n */\n getRepository(): MigrationRepository {\n return this.repository;\n }\n\n /**\n * Set the migration paths\n */\n setPaths(paths: string[]): void {\n this.paths = paths;\n }\n\n /**\n * Get the migration paths\n */\n getPaths(): string[] {\n return this.paths;\n }\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- require(`../../_virtual/_rolldown/runtime.cjs`);const e=require(`./Blueprint.cjs`);var t=class{driver;constructor(e){this.connection=e,this.driver=e.getConfig().driver}async create(t,n){let r=new e.Blueprint(t);r.isCreate=!0,n(r);let i=this.compileCreate(r);await this.connection.query(i);for(let e of r.indexes){let n=this.compileIndex(t,e);n&&await this.connection.query(n)}for(let e of r.foreignKeys){let n=this.compileForeignKey(t,e);n&&await this.connection.query(n)}}async drop(e){let t=`DROP TABLE ${this.wrapTable(e)}`;await this.connection.query(t)}async dropIfExists(e){let t=`DROP TABLE IF EXISTS ${this.wrapTable(e)}`;await this.connection.query(t)}async rename(e,t){let n=this.compileRename(e,t);await this.connection.query(n)}async hasTable(e){let t=this.compileHasTable(e);return(await this.connection.select(t)).length>0}async hasColumn(e,t){let n=this.compileHasColumn(e,t);return(await this.connection.select(n)).length>0}async table(t,n){let r=new e.Blueprint(t);r.isCreate=!1,n(r);for(let e of r.columns){let n=this.compileAddColumn(t,e);await this.connection.query(n)}for(let e of r.commands){let n=this.compileCommand(t,e);n&&await this.connection.query(n)}for(let e of r.indexes){let n=this.compileIndex(t,e);n&&await this.connection.query(n)}for(let e of r.foreignKeys){let n=this.compileForeignKey(t,e);n&&await this.connection.query(n)}}compileCreate(e){let t=e.columns.map(e=>this.compileColumnDefinition(e)).join(`, `),n=`CREATE TABLE ${this.wrapTable(e.table)} (${t}`,r=e.indexes.find(e=>e.type===`primary`);return r&&(n+=`, PRIMARY KEY (${r.columns.map(e=>this.wrap(e)).join(`, `)})`),n+=`)`,n}compileColumnDefinition(e){let t=this.wrap(e.name)+` `+this.getColumnType(e);return e.isAutoIncrement&&(t+=this.getAutoIncrementClause(e)),!e.isNullable&&!e.isAutoIncrement&&(t+=` NOT NULL`),e.defaultValue!==void 0&&(t+=` DEFAULT `+this.getDefaultValue(e.defaultValue)),t}getColumnType(e){switch(this.driver){case`sqlite`:return this.getSQLiteColumnType(e);case`postgres`:case`postgresql`:return this.getPostgresColumnType(e);case`mysql`:return this.getMySQLColumnType(e);default:return this.getSQLiteColumnType(e)}}getSQLiteColumnType(e){switch(e.type){case`bigIncrements`:case`increments`:return`INTEGER`;case`bigInteger`:case`integer`:case`smallInteger`:case`tinyInteger`:return`INTEGER`;case`string`:case`uuid`:return e.length?`VARCHAR(${e.length})`:`VARCHAR(255)`;case`text`:case`mediumText`:case`longText`:return`TEXT`;case`decimal`:case`float`:case`double`:return`REAL`;case`boolean`:return`INTEGER`;case`date`:return`DATE`;case`datetime`:case`timestamp`:return`DATETIME`;case`json`:case`jsonb`:return`TEXT`;case`binary`:return`BLOB`;case`enum`:return`TEXT`;default:return`TEXT`}}getPostgresColumnType(e){switch(e.type){case`bigIncrements`:return`BIGSERIAL`;case`increments`:return`SERIAL`;case`bigInteger`:return`BIGINT`;case`integer`:return`INTEGER`;case`smallInteger`:return`SMALLINT`;case`tinyInteger`:return`SMALLINT`;case`string`:return e.length?`VARCHAR(${e.length})`:`VARCHAR(255)`;case`uuid`:return`UUID`;case`text`:return`TEXT`;case`mediumText`:case`longText`:return`TEXT`;case`decimal`:return e.precision&&e.scale?`DECIMAL(${e.precision}, ${e.scale})`:`DECIMAL(8, 2)`;case`float`:return`REAL`;case`double`:return`DOUBLE PRECISION`;case`boolean`:return`BOOLEAN`;case`date`:return`DATE`;case`datetime`:return e.precision?`TIMESTAMP(${e.precision})`:`TIMESTAMP`;case`timestamp`:return e.precision?`TIMESTAMP(${e.precision})`:`TIMESTAMP`;case`json`:return`JSON`;case`jsonb`:return`JSONB`;case`binary`:return`BYTEA`;case`enum`:return`VARCHAR(255)`;default:return`TEXT`}}getMySQLColumnType(e){switch(e.type){case`bigIncrements`:return`BIGINT UNSIGNED AUTO_INCREMENT`;case`increments`:return`INT UNSIGNED AUTO_INCREMENT`;case`bigInteger`:return e.isUnsigned?`BIGINT UNSIGNED`:`BIGINT`;case`integer`:return e.isUnsigned?`INT UNSIGNED`:`INT`;case`smallInteger`:return e.isUnsigned?`SMALLINT UNSIGNED`:`SMALLINT`;case`tinyInteger`:return e.isUnsigned?`TINYINT UNSIGNED`:`TINYINT`;case`string`:return e.length?`VARCHAR(${e.length})`:`VARCHAR(255)`;case`uuid`:return`CHAR(36)`;case`text`:return`TEXT`;case`mediumText`:return`MEDIUMTEXT`;case`longText`:return`LONGTEXT`;case`decimal`:return e.precision&&e.scale?`DECIMAL(${e.precision}, ${e.scale})`:`DECIMAL(8, 2)`;case`float`:return e.precision&&e.scale?`FLOAT(${e.precision}, ${e.scale})`:`FLOAT`;case`double`:return e.precision&&e.scale?`DOUBLE(${e.precision}, ${e.scale})`:`DOUBLE`;case`boolean`:return`TINYINT(1)`;case`date`:return`DATE`;case`datetime`:return e.precision?`DATETIME(${e.precision})`:`DATETIME`;case`timestamp`:return e.precision?`TIMESTAMP(${e.precision})`:`TIMESTAMP`;case`json`:return`JSON`;case`jsonb`:return`JSON`;case`binary`:return`BLOB`;case`enum`:return e.enumValues?`ENUM(${e.enumValues.map(e=>`'${e}'`).join(`, `)})`:`VARCHAR(255)`;default:return`TEXT`}}getAutoIncrementClause(e){switch(this.driver){case`sqlite`:return e.isPrimary?` PRIMARY KEY AUTOINCREMENT`:``;case`postgres`:case`postgresql`:return``;case`mysql`:return``;default:return e.isPrimary?` PRIMARY KEY AUTOINCREMENT`:``}}getDefaultValue(e){return e===null?`NULL`:typeof e==`string`?`'${e}'`:typeof e==`boolean`?this.driver===`postgres`||this.driver===`postgresql`?e?`TRUE`:`FALSE`:e?`1`:`0`:String(e)}compileAddColumn(e,t){let n=this.compileColumnDefinition(t);return`ALTER TABLE ${this.wrapTable(e)} ADD COLUMN ${n}`}compileCommand(e,t){switch(t.type){case`dropColumn`:return this.compileDropColumn(e,t.columns);case`dropIndex`:return this.compileDropIndex(e,t.name);case`dropForeign`:return this.compileDropForeign(e,t.name);case`renameColumn`:return this.compileRenameColumn(e,t.from,t.to);default:return null}}compileDropColumn(e,t){let n=t.map(e=>`DROP COLUMN ${this.wrap(e)}`).join(`, `);return`ALTER TABLE ${this.wrapTable(e)} ${n}`}compileDropIndex(e,t){return this.driver===`mysql`?`ALTER TABLE ${this.wrapTable(e)} DROP INDEX ${this.wrap(t)}`:`DROP INDEX ${this.wrap(t)}`}compileDropForeign(e,t){return`ALTER TABLE ${this.wrapTable(e)} DROP FOREIGN KEY ${this.wrap(t)}`}compileRenameColumn(e,t,n){return this.driver,`ALTER TABLE ${this.wrapTable(e)} RENAME COLUMN ${this.wrap(t)} TO ${this.wrap(n)}`}compileIndex(e,t){if(t.type===`primary`)return null;let n=t.columns.map(e=>this.wrap(e)).join(`, `),r=t.name||this.createIndexName(e,t.columns,t.type);return t.type===`unique`?`CREATE UNIQUE INDEX ${this.wrap(r)} ON ${this.wrapTable(e)} (${n})`:`CREATE INDEX ${this.wrap(r)} ON ${this.wrapTable(e)} (${n})`}compileForeignKey(e,t){if(!t.referencedTable||!t.referencedColumns)return null;let n=t.columns.map(e=>this.wrap(e)).join(`, `),r=t.referencedColumns.map(e=>this.wrap(e)).join(`, `),i=t.name||this.createForeignKeyName(e,t.columns),a=`ALTER TABLE ${this.wrapTable(e)} ADD CONSTRAINT ${this.wrap(i)} `;return a+=`FOREIGN KEY (${n}) REFERENCES ${this.wrapTable(t.referencedTable)} (${r})`,t.onDeleteAction&&(a+=` ON DELETE ${t.onDeleteAction.toUpperCase()}`),t.onUpdateAction&&(a+=` ON UPDATE ${t.onUpdateAction.toUpperCase()}`),a}compileRename(e,t){return`ALTER TABLE ${this.wrapTable(e)} RENAME TO ${this.wrapTable(t)}`}compileHasTable(e){switch(this.driver){case`sqlite`:return`SELECT name FROM sqlite_master WHERE type='table' AND name='${e}'`;case`postgres`:case`postgresql`:return`SELECT tablename FROM pg_tables WHERE tablename='${e}'`;case`mysql`:return`SELECT TABLE_NAME FROM information_schema.TABLES WHERE TABLE_NAME='${e}'`;default:return`SELECT name FROM sqlite_master WHERE type='table' AND name='${e}'`}}compileHasColumn(e,t){switch(this.driver){case`sqlite`:return`PRAGMA table_info(${e})`;case`postgres`:case`postgresql`:return`SELECT column_name FROM information_schema.columns WHERE table_name='${e}' AND column_name='${t}'`;case`mysql`:return`SELECT COLUMN_NAME FROM information_schema.COLUMNS WHERE TABLE_NAME='${e}' AND COLUMN_NAME='${t}'`;default:return`PRAGMA table_info(${e})`}}createIndexName(e,t,n){let r=n===`unique`?`unique`:`index`;return`${e}_${t.join(`_`)}_${r}`}createForeignKeyName(e,t){return`${e}_${t.join(`_`)}_foreign`}wrapTable(e){return this.wrap(e)}wrap(e){switch(this.driver){case`postgres`:case`postgresql`:return`"${e}"`;case`mysql`:return`\`${e}\``;default:return`"${e}"`}}};exports.SchemaBuilder=t;
1
+ require(`../../_virtual/_rolldown/runtime.cjs`);const e=require(`./Blueprint.cjs`);var t=class{connection;driver;constructor(e){this.connection=e,this.driver=e.getConfig().driver}async create(t,n){let r=new e.Blueprint(t);r.isCreate=!0,n(r);let i=this.compileCreate(r);await this.connection.query(i);for(let e of r.indexes){let n=this.compileIndex(t,e);n&&await this.connection.query(n)}for(let e of r.foreignKeys){let n=this.compileForeignKey(t,e);n&&await this.connection.query(n)}}async drop(e){let t=`DROP TABLE ${this.wrapTable(e)}`;await this.connection.query(t)}async dropIfExists(e){let t=`DROP TABLE IF EXISTS ${this.wrapTable(e)}`;await this.connection.query(t)}async rename(e,t){let n=this.compileRename(e,t);await this.connection.query(n)}async hasTable(e){let t=this.compileHasTable(e);return(await this.connection.select(t)).length>0}async hasColumn(e,t){let n=this.compileHasColumn(e,t);return(await this.connection.select(n)).length>0}async table(t,n){let r=new e.Blueprint(t);r.isCreate=!1,n(r);for(let e of r.columns){let n=this.compileAddColumn(t,e);await this.connection.query(n)}for(let e of r.commands){let n=this.compileCommand(t,e);n&&await this.connection.query(n)}for(let e of r.indexes){let n=this.compileIndex(t,e);n&&await this.connection.query(n)}for(let e of r.foreignKeys){let n=this.compileForeignKey(t,e);n&&await this.connection.query(n)}}compileCreate(e){let t=e.columns.map(e=>this.compileColumnDefinition(e)).join(`, `),n=`CREATE TABLE ${this.wrapTable(e.table)} (${t}`,r=e.indexes.find(e=>e.type===`primary`);return r&&(n+=`, PRIMARY KEY (${r.columns.map(e=>this.wrap(e)).join(`, `)})`),n+=`)`,n}compileColumnDefinition(e){let t=this.wrap(e.name)+` `+this.getColumnType(e);return e.isAutoIncrement&&(t+=this.getAutoIncrementClause(e)),!e.isNullable&&!e.isAutoIncrement&&(t+=` NOT NULL`),e.defaultValue!==void 0&&(t+=` DEFAULT `+this.getDefaultValue(e.defaultValue)),t}getColumnType(e){switch(this.driver){case`sqlite`:return this.getSQLiteColumnType(e);case`postgres`:case`postgresql`:return this.getPostgresColumnType(e);case`mysql`:return this.getMySQLColumnType(e);default:return this.getSQLiteColumnType(e)}}getSQLiteColumnType(e){switch(e.type){case`bigIncrements`:case`increments`:return`INTEGER`;case`bigInteger`:case`integer`:case`smallInteger`:case`tinyInteger`:return`INTEGER`;case`string`:case`uuid`:return e.length?`VARCHAR(${e.length})`:`VARCHAR(255)`;case`text`:case`mediumText`:case`longText`:return`TEXT`;case`decimal`:case`float`:case`double`:return`REAL`;case`boolean`:return`INTEGER`;case`date`:return`DATE`;case`datetime`:case`timestamp`:return`DATETIME`;case`json`:case`jsonb`:return`TEXT`;case`binary`:return`BLOB`;case`enum`:return`TEXT`;default:return`TEXT`}}getPostgresColumnType(e){switch(e.type){case`bigIncrements`:return`BIGSERIAL`;case`increments`:return`SERIAL`;case`bigInteger`:return`BIGINT`;case`integer`:return`INTEGER`;case`smallInteger`:return`SMALLINT`;case`tinyInteger`:return`SMALLINT`;case`string`:return e.length?`VARCHAR(${e.length})`:`VARCHAR(255)`;case`uuid`:return`UUID`;case`text`:return`TEXT`;case`mediumText`:case`longText`:return`TEXT`;case`decimal`:return e.precision&&e.scale?`DECIMAL(${e.precision}, ${e.scale})`:`DECIMAL(8, 2)`;case`float`:return`REAL`;case`double`:return`DOUBLE PRECISION`;case`boolean`:return`BOOLEAN`;case`date`:return`DATE`;case`datetime`:return e.precision?`TIMESTAMP(${e.precision})`:`TIMESTAMP`;case`timestamp`:return e.precision?`TIMESTAMP(${e.precision})`:`TIMESTAMP`;case`json`:return`JSON`;case`jsonb`:return`JSONB`;case`binary`:return`BYTEA`;case`enum`:return`VARCHAR(255)`;default:return`TEXT`}}getMySQLColumnType(e){switch(e.type){case`bigIncrements`:return`BIGINT UNSIGNED AUTO_INCREMENT`;case`increments`:return`INT UNSIGNED AUTO_INCREMENT`;case`bigInteger`:return e.isUnsigned?`BIGINT UNSIGNED`:`BIGINT`;case`integer`:return e.isUnsigned?`INT UNSIGNED`:`INT`;case`smallInteger`:return e.isUnsigned?`SMALLINT UNSIGNED`:`SMALLINT`;case`tinyInteger`:return e.isUnsigned?`TINYINT UNSIGNED`:`TINYINT`;case`string`:return e.length?`VARCHAR(${e.length})`:`VARCHAR(255)`;case`uuid`:return`CHAR(36)`;case`text`:return`TEXT`;case`mediumText`:return`MEDIUMTEXT`;case`longText`:return`LONGTEXT`;case`decimal`:return e.precision&&e.scale?`DECIMAL(${e.precision}, ${e.scale})`:`DECIMAL(8, 2)`;case`float`:return e.precision&&e.scale?`FLOAT(${e.precision}, ${e.scale})`:`FLOAT`;case`double`:return e.precision&&e.scale?`DOUBLE(${e.precision}, ${e.scale})`:`DOUBLE`;case`boolean`:return`TINYINT(1)`;case`date`:return`DATE`;case`datetime`:return e.precision?`DATETIME(${e.precision})`:`DATETIME`;case`timestamp`:return e.precision?`TIMESTAMP(${e.precision})`:`TIMESTAMP`;case`json`:return`JSON`;case`jsonb`:return`JSON`;case`binary`:return`BLOB`;case`enum`:return e.enumValues?`ENUM(${e.enumValues.map(e=>`'${e}'`).join(`, `)})`:`VARCHAR(255)`;default:return`TEXT`}}getAutoIncrementClause(e){switch(this.driver){case`sqlite`:return e.isPrimary?` PRIMARY KEY AUTOINCREMENT`:``;case`postgres`:case`postgresql`:return``;case`mysql`:return``;default:return e.isPrimary?` PRIMARY KEY AUTOINCREMENT`:``}}getDefaultValue(e){return e===null?`NULL`:typeof e==`string`?`'${e}'`:typeof e==`boolean`?this.driver===`postgres`||this.driver===`postgresql`?e?`TRUE`:`FALSE`:e?`1`:`0`:String(e)}compileAddColumn(e,t){let n=this.compileColumnDefinition(t);return`ALTER TABLE ${this.wrapTable(e)} ADD COLUMN ${n}`}compileCommand(e,t){switch(t.type){case`dropColumn`:return this.compileDropColumn(e,t.columns);case`dropIndex`:return this.compileDropIndex(e,t.name);case`dropForeign`:return this.compileDropForeign(e,t.name);case`renameColumn`:return this.compileRenameColumn(e,t.from,t.to);default:return null}}compileDropColumn(e,t){let n=t.map(e=>`DROP COLUMN ${this.wrap(e)}`).join(`, `);return`ALTER TABLE ${this.wrapTable(e)} ${n}`}compileDropIndex(e,t){return this.driver===`mysql`?`ALTER TABLE ${this.wrapTable(e)} DROP INDEX ${this.wrap(t)}`:`DROP INDEX ${this.wrap(t)}`}compileDropForeign(e,t){return`ALTER TABLE ${this.wrapTable(e)} DROP FOREIGN KEY ${this.wrap(t)}`}compileRenameColumn(e,t,n){return this.driver,`ALTER TABLE ${this.wrapTable(e)} RENAME COLUMN ${this.wrap(t)} TO ${this.wrap(n)}`}compileIndex(e,t){if(t.type===`primary`)return null;let n=t.columns.map(e=>this.wrap(e)).join(`, `),r=t.name||this.createIndexName(e,t.columns,t.type);return t.type===`unique`?`CREATE UNIQUE INDEX ${this.wrap(r)} ON ${this.wrapTable(e)} (${n})`:`CREATE INDEX ${this.wrap(r)} ON ${this.wrapTable(e)} (${n})`}compileForeignKey(e,t){if(!t.referencedTable||!t.referencedColumns)return null;let n=t.columns.map(e=>this.wrap(e)).join(`, `),r=t.referencedColumns.map(e=>this.wrap(e)).join(`, `),i=t.name||this.createForeignKeyName(e,t.columns),a=`ALTER TABLE ${this.wrapTable(e)} ADD CONSTRAINT ${this.wrap(i)} `;return a+=`FOREIGN KEY (${n}) REFERENCES ${this.wrapTable(t.referencedTable)} (${r})`,t.onDeleteAction&&(a+=` ON DELETE ${t.onDeleteAction.toUpperCase()}`),t.onUpdateAction&&(a+=` ON UPDATE ${t.onUpdateAction.toUpperCase()}`),a}compileRename(e,t){return`ALTER TABLE ${this.wrapTable(e)} RENAME TO ${this.wrapTable(t)}`}compileHasTable(e){switch(this.driver){case`sqlite`:return`SELECT name FROM sqlite_master WHERE type='table' AND name='${e}'`;case`postgres`:case`postgresql`:return`SELECT tablename FROM pg_tables WHERE tablename='${e}'`;case`mysql`:return`SELECT TABLE_NAME FROM information_schema.TABLES WHERE TABLE_NAME='${e}'`;default:return`SELECT name FROM sqlite_master WHERE type='table' AND name='${e}'`}}compileHasColumn(e,t){switch(this.driver){case`sqlite`:return`PRAGMA table_info(${e})`;case`postgres`:case`postgresql`:return`SELECT column_name FROM information_schema.columns WHERE table_name='${e}' AND column_name='${t}'`;case`mysql`:return`SELECT COLUMN_NAME FROM information_schema.COLUMNS WHERE TABLE_NAME='${e}' AND COLUMN_NAME='${t}'`;default:return`PRAGMA table_info(${e})`}}createIndexName(e,t,n){let r=n===`unique`?`unique`:`index`;return`${e}_${t.join(`_`)}_${r}`}createForeignKeyName(e,t){return`${e}_${t.join(`_`)}_foreign`}wrapTable(e){return this.wrap(e)}wrap(e){switch(this.driver){case`postgres`:case`postgresql`:return`"${e}"`;case`mysql`:return`\`${e}\``;default:return`"${e}"`}}};exports.SchemaBuilder=t;
@@ -1,2 +1,2 @@
1
- import{Blueprint as e}from"./Blueprint.mjs";var t=class{driver;constructor(e){this.connection=e,this.driver=e.getConfig().driver}async create(t,n){let r=new e(t);r.isCreate=!0,n(r);let i=this.compileCreate(r);await this.connection.query(i);for(let e of r.indexes){let n=this.compileIndex(t,e);n&&await this.connection.query(n)}for(let e of r.foreignKeys){let n=this.compileForeignKey(t,e);n&&await this.connection.query(n)}}async drop(e){let t=`DROP TABLE ${this.wrapTable(e)}`;await this.connection.query(t)}async dropIfExists(e){let t=`DROP TABLE IF EXISTS ${this.wrapTable(e)}`;await this.connection.query(t)}async rename(e,t){let n=this.compileRename(e,t);await this.connection.query(n)}async hasTable(e){let t=this.compileHasTable(e);return(await this.connection.select(t)).length>0}async hasColumn(e,t){let n=this.compileHasColumn(e,t);return(await this.connection.select(n)).length>0}async table(t,n){let r=new e(t);r.isCreate=!1,n(r);for(let e of r.columns){let n=this.compileAddColumn(t,e);await this.connection.query(n)}for(let e of r.commands){let n=this.compileCommand(t,e);n&&await this.connection.query(n)}for(let e of r.indexes){let n=this.compileIndex(t,e);n&&await this.connection.query(n)}for(let e of r.foreignKeys){let n=this.compileForeignKey(t,e);n&&await this.connection.query(n)}}compileCreate(e){let t=e.columns.map(e=>this.compileColumnDefinition(e)).join(`, `),n=`CREATE TABLE ${this.wrapTable(e.table)} (${t}`,r=e.indexes.find(e=>e.type===`primary`);return r&&(n+=`, PRIMARY KEY (${r.columns.map(e=>this.wrap(e)).join(`, `)})`),n+=`)`,n}compileColumnDefinition(e){let t=this.wrap(e.name)+` `+this.getColumnType(e);return e.isAutoIncrement&&(t+=this.getAutoIncrementClause(e)),!e.isNullable&&!e.isAutoIncrement&&(t+=` NOT NULL`),e.defaultValue!==void 0&&(t+=` DEFAULT `+this.getDefaultValue(e.defaultValue)),t}getColumnType(e){switch(this.driver){case`sqlite`:return this.getSQLiteColumnType(e);case`postgres`:case`postgresql`:return this.getPostgresColumnType(e);case`mysql`:return this.getMySQLColumnType(e);default:return this.getSQLiteColumnType(e)}}getSQLiteColumnType(e){switch(e.type){case`bigIncrements`:case`increments`:return`INTEGER`;case`bigInteger`:case`integer`:case`smallInteger`:case`tinyInteger`:return`INTEGER`;case`string`:case`uuid`:return e.length?`VARCHAR(${e.length})`:`VARCHAR(255)`;case`text`:case`mediumText`:case`longText`:return`TEXT`;case`decimal`:case`float`:case`double`:return`REAL`;case`boolean`:return`INTEGER`;case`date`:return`DATE`;case`datetime`:case`timestamp`:return`DATETIME`;case`json`:case`jsonb`:return`TEXT`;case`binary`:return`BLOB`;case`enum`:return`TEXT`;default:return`TEXT`}}getPostgresColumnType(e){switch(e.type){case`bigIncrements`:return`BIGSERIAL`;case`increments`:return`SERIAL`;case`bigInteger`:return`BIGINT`;case`integer`:return`INTEGER`;case`smallInteger`:return`SMALLINT`;case`tinyInteger`:return`SMALLINT`;case`string`:return e.length?`VARCHAR(${e.length})`:`VARCHAR(255)`;case`uuid`:return`UUID`;case`text`:return`TEXT`;case`mediumText`:case`longText`:return`TEXT`;case`decimal`:return e.precision&&e.scale?`DECIMAL(${e.precision}, ${e.scale})`:`DECIMAL(8, 2)`;case`float`:return`REAL`;case`double`:return`DOUBLE PRECISION`;case`boolean`:return`BOOLEAN`;case`date`:return`DATE`;case`datetime`:return e.precision?`TIMESTAMP(${e.precision})`:`TIMESTAMP`;case`timestamp`:return e.precision?`TIMESTAMP(${e.precision})`:`TIMESTAMP`;case`json`:return`JSON`;case`jsonb`:return`JSONB`;case`binary`:return`BYTEA`;case`enum`:return`VARCHAR(255)`;default:return`TEXT`}}getMySQLColumnType(e){switch(e.type){case`bigIncrements`:return`BIGINT UNSIGNED AUTO_INCREMENT`;case`increments`:return`INT UNSIGNED AUTO_INCREMENT`;case`bigInteger`:return e.isUnsigned?`BIGINT UNSIGNED`:`BIGINT`;case`integer`:return e.isUnsigned?`INT UNSIGNED`:`INT`;case`smallInteger`:return e.isUnsigned?`SMALLINT UNSIGNED`:`SMALLINT`;case`tinyInteger`:return e.isUnsigned?`TINYINT UNSIGNED`:`TINYINT`;case`string`:return e.length?`VARCHAR(${e.length})`:`VARCHAR(255)`;case`uuid`:return`CHAR(36)`;case`text`:return`TEXT`;case`mediumText`:return`MEDIUMTEXT`;case`longText`:return`LONGTEXT`;case`decimal`:return e.precision&&e.scale?`DECIMAL(${e.precision}, ${e.scale})`:`DECIMAL(8, 2)`;case`float`:return e.precision&&e.scale?`FLOAT(${e.precision}, ${e.scale})`:`FLOAT`;case`double`:return e.precision&&e.scale?`DOUBLE(${e.precision}, ${e.scale})`:`DOUBLE`;case`boolean`:return`TINYINT(1)`;case`date`:return`DATE`;case`datetime`:return e.precision?`DATETIME(${e.precision})`:`DATETIME`;case`timestamp`:return e.precision?`TIMESTAMP(${e.precision})`:`TIMESTAMP`;case`json`:return`JSON`;case`jsonb`:return`JSON`;case`binary`:return`BLOB`;case`enum`:return e.enumValues?`ENUM(${e.enumValues.map(e=>`'${e}'`).join(`, `)})`:`VARCHAR(255)`;default:return`TEXT`}}getAutoIncrementClause(e){switch(this.driver){case`sqlite`:return e.isPrimary?` PRIMARY KEY AUTOINCREMENT`:``;case`postgres`:case`postgresql`:return``;case`mysql`:return``;default:return e.isPrimary?` PRIMARY KEY AUTOINCREMENT`:``}}getDefaultValue(e){return e===null?`NULL`:typeof e==`string`?`'${e}'`:typeof e==`boolean`?this.driver===`postgres`||this.driver===`postgresql`?e?`TRUE`:`FALSE`:e?`1`:`0`:String(e)}compileAddColumn(e,t){let n=this.compileColumnDefinition(t);return`ALTER TABLE ${this.wrapTable(e)} ADD COLUMN ${n}`}compileCommand(e,t){switch(t.type){case`dropColumn`:return this.compileDropColumn(e,t.columns);case`dropIndex`:return this.compileDropIndex(e,t.name);case`dropForeign`:return this.compileDropForeign(e,t.name);case`renameColumn`:return this.compileRenameColumn(e,t.from,t.to);default:return null}}compileDropColumn(e,t){let n=t.map(e=>`DROP COLUMN ${this.wrap(e)}`).join(`, `);return`ALTER TABLE ${this.wrapTable(e)} ${n}`}compileDropIndex(e,t){return this.driver===`mysql`?`ALTER TABLE ${this.wrapTable(e)} DROP INDEX ${this.wrap(t)}`:`DROP INDEX ${this.wrap(t)}`}compileDropForeign(e,t){return`ALTER TABLE ${this.wrapTable(e)} DROP FOREIGN KEY ${this.wrap(t)}`}compileRenameColumn(e,t,n){return this.driver,`ALTER TABLE ${this.wrapTable(e)} RENAME COLUMN ${this.wrap(t)} TO ${this.wrap(n)}`}compileIndex(e,t){if(t.type===`primary`)return null;let n=t.columns.map(e=>this.wrap(e)).join(`, `),r=t.name||this.createIndexName(e,t.columns,t.type);return t.type===`unique`?`CREATE UNIQUE INDEX ${this.wrap(r)} ON ${this.wrapTable(e)} (${n})`:`CREATE INDEX ${this.wrap(r)} ON ${this.wrapTable(e)} (${n})`}compileForeignKey(e,t){if(!t.referencedTable||!t.referencedColumns)return null;let n=t.columns.map(e=>this.wrap(e)).join(`, `),r=t.referencedColumns.map(e=>this.wrap(e)).join(`, `),i=t.name||this.createForeignKeyName(e,t.columns),a=`ALTER TABLE ${this.wrapTable(e)} ADD CONSTRAINT ${this.wrap(i)} `;return a+=`FOREIGN KEY (${n}) REFERENCES ${this.wrapTable(t.referencedTable)} (${r})`,t.onDeleteAction&&(a+=` ON DELETE ${t.onDeleteAction.toUpperCase()}`),t.onUpdateAction&&(a+=` ON UPDATE ${t.onUpdateAction.toUpperCase()}`),a}compileRename(e,t){return`ALTER TABLE ${this.wrapTable(e)} RENAME TO ${this.wrapTable(t)}`}compileHasTable(e){switch(this.driver){case`sqlite`:return`SELECT name FROM sqlite_master WHERE type='table' AND name='${e}'`;case`postgres`:case`postgresql`:return`SELECT tablename FROM pg_tables WHERE tablename='${e}'`;case`mysql`:return`SELECT TABLE_NAME FROM information_schema.TABLES WHERE TABLE_NAME='${e}'`;default:return`SELECT name FROM sqlite_master WHERE type='table' AND name='${e}'`}}compileHasColumn(e,t){switch(this.driver){case`sqlite`:return`PRAGMA table_info(${e})`;case`postgres`:case`postgresql`:return`SELECT column_name FROM information_schema.columns WHERE table_name='${e}' AND column_name='${t}'`;case`mysql`:return`SELECT COLUMN_NAME FROM information_schema.COLUMNS WHERE TABLE_NAME='${e}' AND COLUMN_NAME='${t}'`;default:return`PRAGMA table_info(${e})`}}createIndexName(e,t,n){let r=n===`unique`?`unique`:`index`;return`${e}_${t.join(`_`)}_${r}`}createForeignKeyName(e,t){return`${e}_${t.join(`_`)}_foreign`}wrapTable(e){return this.wrap(e)}wrap(e){switch(this.driver){case`postgres`:case`postgresql`:return`"${e}"`;case`mysql`:return`\`${e}\``;default:return`"${e}"`}}};export{t as SchemaBuilder};
1
+ import{Blueprint as e}from"./Blueprint.mjs";var t=class{connection;driver;constructor(e){this.connection=e,this.driver=e.getConfig().driver}async create(t,n){let r=new e(t);r.isCreate=!0,n(r);let i=this.compileCreate(r);await this.connection.query(i);for(let e of r.indexes){let n=this.compileIndex(t,e);n&&await this.connection.query(n)}for(let e of r.foreignKeys){let n=this.compileForeignKey(t,e);n&&await this.connection.query(n)}}async drop(e){let t=`DROP TABLE ${this.wrapTable(e)}`;await this.connection.query(t)}async dropIfExists(e){let t=`DROP TABLE IF EXISTS ${this.wrapTable(e)}`;await this.connection.query(t)}async rename(e,t){let n=this.compileRename(e,t);await this.connection.query(n)}async hasTable(e){let t=this.compileHasTable(e);return(await this.connection.select(t)).length>0}async hasColumn(e,t){let n=this.compileHasColumn(e,t);return(await this.connection.select(n)).length>0}async table(t,n){let r=new e(t);r.isCreate=!1,n(r);for(let e of r.columns){let n=this.compileAddColumn(t,e);await this.connection.query(n)}for(let e of r.commands){let n=this.compileCommand(t,e);n&&await this.connection.query(n)}for(let e of r.indexes){let n=this.compileIndex(t,e);n&&await this.connection.query(n)}for(let e of r.foreignKeys){let n=this.compileForeignKey(t,e);n&&await this.connection.query(n)}}compileCreate(e){let t=e.columns.map(e=>this.compileColumnDefinition(e)).join(`, `),n=`CREATE TABLE ${this.wrapTable(e.table)} (${t}`,r=e.indexes.find(e=>e.type===`primary`);return r&&(n+=`, PRIMARY KEY (${r.columns.map(e=>this.wrap(e)).join(`, `)})`),n+=`)`,n}compileColumnDefinition(e){let t=this.wrap(e.name)+` `+this.getColumnType(e);return e.isAutoIncrement&&(t+=this.getAutoIncrementClause(e)),!e.isNullable&&!e.isAutoIncrement&&(t+=` NOT NULL`),e.defaultValue!==void 0&&(t+=` DEFAULT `+this.getDefaultValue(e.defaultValue)),t}getColumnType(e){switch(this.driver){case`sqlite`:return this.getSQLiteColumnType(e);case`postgres`:case`postgresql`:return this.getPostgresColumnType(e);case`mysql`:return this.getMySQLColumnType(e);default:return this.getSQLiteColumnType(e)}}getSQLiteColumnType(e){switch(e.type){case`bigIncrements`:case`increments`:return`INTEGER`;case`bigInteger`:case`integer`:case`smallInteger`:case`tinyInteger`:return`INTEGER`;case`string`:case`uuid`:return e.length?`VARCHAR(${e.length})`:`VARCHAR(255)`;case`text`:case`mediumText`:case`longText`:return`TEXT`;case`decimal`:case`float`:case`double`:return`REAL`;case`boolean`:return`INTEGER`;case`date`:return`DATE`;case`datetime`:case`timestamp`:return`DATETIME`;case`json`:case`jsonb`:return`TEXT`;case`binary`:return`BLOB`;case`enum`:return`TEXT`;default:return`TEXT`}}getPostgresColumnType(e){switch(e.type){case`bigIncrements`:return`BIGSERIAL`;case`increments`:return`SERIAL`;case`bigInteger`:return`BIGINT`;case`integer`:return`INTEGER`;case`smallInteger`:return`SMALLINT`;case`tinyInteger`:return`SMALLINT`;case`string`:return e.length?`VARCHAR(${e.length})`:`VARCHAR(255)`;case`uuid`:return`UUID`;case`text`:return`TEXT`;case`mediumText`:case`longText`:return`TEXT`;case`decimal`:return e.precision&&e.scale?`DECIMAL(${e.precision}, ${e.scale})`:`DECIMAL(8, 2)`;case`float`:return`REAL`;case`double`:return`DOUBLE PRECISION`;case`boolean`:return`BOOLEAN`;case`date`:return`DATE`;case`datetime`:return e.precision?`TIMESTAMP(${e.precision})`:`TIMESTAMP`;case`timestamp`:return e.precision?`TIMESTAMP(${e.precision})`:`TIMESTAMP`;case`json`:return`JSON`;case`jsonb`:return`JSONB`;case`binary`:return`BYTEA`;case`enum`:return`VARCHAR(255)`;default:return`TEXT`}}getMySQLColumnType(e){switch(e.type){case`bigIncrements`:return`BIGINT UNSIGNED AUTO_INCREMENT`;case`increments`:return`INT UNSIGNED AUTO_INCREMENT`;case`bigInteger`:return e.isUnsigned?`BIGINT UNSIGNED`:`BIGINT`;case`integer`:return e.isUnsigned?`INT UNSIGNED`:`INT`;case`smallInteger`:return e.isUnsigned?`SMALLINT UNSIGNED`:`SMALLINT`;case`tinyInteger`:return e.isUnsigned?`TINYINT UNSIGNED`:`TINYINT`;case`string`:return e.length?`VARCHAR(${e.length})`:`VARCHAR(255)`;case`uuid`:return`CHAR(36)`;case`text`:return`TEXT`;case`mediumText`:return`MEDIUMTEXT`;case`longText`:return`LONGTEXT`;case`decimal`:return e.precision&&e.scale?`DECIMAL(${e.precision}, ${e.scale})`:`DECIMAL(8, 2)`;case`float`:return e.precision&&e.scale?`FLOAT(${e.precision}, ${e.scale})`:`FLOAT`;case`double`:return e.precision&&e.scale?`DOUBLE(${e.precision}, ${e.scale})`:`DOUBLE`;case`boolean`:return`TINYINT(1)`;case`date`:return`DATE`;case`datetime`:return e.precision?`DATETIME(${e.precision})`:`DATETIME`;case`timestamp`:return e.precision?`TIMESTAMP(${e.precision})`:`TIMESTAMP`;case`json`:return`JSON`;case`jsonb`:return`JSON`;case`binary`:return`BLOB`;case`enum`:return e.enumValues?`ENUM(${e.enumValues.map(e=>`'${e}'`).join(`, `)})`:`VARCHAR(255)`;default:return`TEXT`}}getAutoIncrementClause(e){switch(this.driver){case`sqlite`:return e.isPrimary?` PRIMARY KEY AUTOINCREMENT`:``;case`postgres`:case`postgresql`:return``;case`mysql`:return``;default:return e.isPrimary?` PRIMARY KEY AUTOINCREMENT`:``}}getDefaultValue(e){return e===null?`NULL`:typeof e==`string`?`'${e}'`:typeof e==`boolean`?this.driver===`postgres`||this.driver===`postgresql`?e?`TRUE`:`FALSE`:e?`1`:`0`:String(e)}compileAddColumn(e,t){let n=this.compileColumnDefinition(t);return`ALTER TABLE ${this.wrapTable(e)} ADD COLUMN ${n}`}compileCommand(e,t){switch(t.type){case`dropColumn`:return this.compileDropColumn(e,t.columns);case`dropIndex`:return this.compileDropIndex(e,t.name);case`dropForeign`:return this.compileDropForeign(e,t.name);case`renameColumn`:return this.compileRenameColumn(e,t.from,t.to);default:return null}}compileDropColumn(e,t){let n=t.map(e=>`DROP COLUMN ${this.wrap(e)}`).join(`, `);return`ALTER TABLE ${this.wrapTable(e)} ${n}`}compileDropIndex(e,t){return this.driver===`mysql`?`ALTER TABLE ${this.wrapTable(e)} DROP INDEX ${this.wrap(t)}`:`DROP INDEX ${this.wrap(t)}`}compileDropForeign(e,t){return`ALTER TABLE ${this.wrapTable(e)} DROP FOREIGN KEY ${this.wrap(t)}`}compileRenameColumn(e,t,n){return this.driver,`ALTER TABLE ${this.wrapTable(e)} RENAME COLUMN ${this.wrap(t)} TO ${this.wrap(n)}`}compileIndex(e,t){if(t.type===`primary`)return null;let n=t.columns.map(e=>this.wrap(e)).join(`, `),r=t.name||this.createIndexName(e,t.columns,t.type);return t.type===`unique`?`CREATE UNIQUE INDEX ${this.wrap(r)} ON ${this.wrapTable(e)} (${n})`:`CREATE INDEX ${this.wrap(r)} ON ${this.wrapTable(e)} (${n})`}compileForeignKey(e,t){if(!t.referencedTable||!t.referencedColumns)return null;let n=t.columns.map(e=>this.wrap(e)).join(`, `),r=t.referencedColumns.map(e=>this.wrap(e)).join(`, `),i=t.name||this.createForeignKeyName(e,t.columns),a=`ALTER TABLE ${this.wrapTable(e)} ADD CONSTRAINT ${this.wrap(i)} `;return a+=`FOREIGN KEY (${n}) REFERENCES ${this.wrapTable(t.referencedTable)} (${r})`,t.onDeleteAction&&(a+=` ON DELETE ${t.onDeleteAction.toUpperCase()}`),t.onUpdateAction&&(a+=` ON UPDATE ${t.onUpdateAction.toUpperCase()}`),a}compileRename(e,t){return`ALTER TABLE ${this.wrapTable(e)} RENAME TO ${this.wrapTable(t)}`}compileHasTable(e){switch(this.driver){case`sqlite`:return`SELECT name FROM sqlite_master WHERE type='table' AND name='${e}'`;case`postgres`:case`postgresql`:return`SELECT tablename FROM pg_tables WHERE tablename='${e}'`;case`mysql`:return`SELECT TABLE_NAME FROM information_schema.TABLES WHERE TABLE_NAME='${e}'`;default:return`SELECT name FROM sqlite_master WHERE type='table' AND name='${e}'`}}compileHasColumn(e,t){switch(this.driver){case`sqlite`:return`PRAGMA table_info(${e})`;case`postgres`:case`postgresql`:return`SELECT column_name FROM information_schema.columns WHERE table_name='${e}' AND column_name='${t}'`;case`mysql`:return`SELECT COLUMN_NAME FROM information_schema.COLUMNS WHERE TABLE_NAME='${e}' AND COLUMN_NAME='${t}'`;default:return`PRAGMA table_info(${e})`}}createIndexName(e,t,n){let r=n===`unique`?`unique`:`index`;return`${e}_${t.join(`_`)}_${r}`}createForeignKeyName(e,t){return`${e}_${t.join(`_`)}_foreign`}wrapTable(e){return this.wrap(e)}wrap(e){switch(this.driver){case`postgres`:case`postgresql`:return`"${e}"`;case`mysql`:return`\`${e}\``;default:return`"${e}"`}}};export{t as SchemaBuilder};
2
2
  //# sourceMappingURL=SchemaBuilder.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"SchemaBuilder.mjs","names":[],"sources":["../../../src/Database/Migrations/SchemaBuilder.ts"],"sourcesContent":["/**\n * SchemaBuilder\n *\n * Builds and executes schema migrations with support for multiple database drivers\n */\n\nimport { Connection } from '@/Database/Connection';\nimport { Schema } from '@/Database/Contracts/Schema';\nimport { Blueprint } from './Blueprint';\nimport { ColumnDefinition } from './ColumnDefinition';\nimport { ForeignKeyDefinition } from './ForeignKeyDefinition';\n\nexport class SchemaBuilder implements Schema {\n protected driver: string;\n\n constructor(protected connection: Connection) {\n this.driver = connection.getConfig().driver;\n }\n\n /**\n * Create a new table\n */\n async create(tableName: string, callback: (table: Blueprint) => void): Promise<void> {\n const blueprint = new Blueprint(tableName);\n blueprint.isCreate = true;\n callback(blueprint);\n\n const sql = this.compileCreate(blueprint);\n await this.connection.query(sql);\n\n // Create indexes\n for (const index of blueprint.indexes) {\n const indexSql = this.compileIndex(tableName, index);\n if (indexSql) {\n await this.connection.query(indexSql);\n }\n }\n\n // Create foreign keys\n for (const fk of blueprint.foreignKeys) {\n const fkSql = this.compileForeignKey(tableName, fk);\n if (fkSql) {\n await this.connection.query(fkSql);\n }\n }\n }\n\n /**\n * Drop a table\n */\n async drop(tableName: string): Promise<void> {\n const sql = `DROP TABLE ${this.wrapTable(tableName)}`;\n await this.connection.query(sql);\n }\n\n /**\n * Drop a table if it exists\n */\n async dropIfExists(tableName: string): Promise<void> {\n const sql = `DROP TABLE IF EXISTS ${this.wrapTable(tableName)}`;\n await this.connection.query(sql);\n }\n\n /**\n * Rename a table\n */\n async rename(from: string, to: string): Promise<void> {\n const sql = this.compileRename(from, to);\n await this.connection.query(sql);\n }\n\n /**\n * Determine if a table exists\n */\n async hasTable(tableName: string): Promise<boolean> {\n const sql = this.compileHasTable(tableName);\n const results = await this.connection.select(sql);\n return results.length > 0;\n }\n\n /**\n * Determine if a column exists on a table\n */\n async hasColumn(tableName: string, columnName: string): Promise<boolean> {\n const sql = this.compileHasColumn(tableName, columnName);\n const results = await this.connection.select(sql);\n return results.length > 0;\n }\n\n /**\n * Modify an existing table\n */\n async table(tableName: string, callback: (table: Blueprint) => void): Promise<void> {\n const blueprint = new Blueprint(tableName);\n blueprint.isCreate = false;\n callback(blueprint);\n\n // Add new columns\n for (const column of blueprint.columns) {\n const sql = this.compileAddColumn(tableName, column);\n await this.connection.query(sql);\n }\n\n // Execute commands (drop, rename, etc.)\n for (const command of blueprint.commands) {\n const sql = this.compileCommand(tableName, command);\n if (sql) {\n await this.connection.query(sql);\n }\n }\n\n // Create indexes\n for (const index of blueprint.indexes) {\n const indexSql = this.compileIndex(tableName, index);\n if (indexSql) {\n await this.connection.query(indexSql);\n }\n }\n\n // Create foreign keys\n for (const fk of blueprint.foreignKeys) {\n const fkSql = this.compileForeignKey(tableName, fk);\n if (fkSql) {\n await this.connection.query(fkSql);\n }\n }\n }\n\n /**\n * Compile CREATE TABLE statement\n */\n protected compileCreate(blueprint: Blueprint): string {\n const columns = blueprint.columns.map((col) => this.compileColumnDefinition(col)).join(', ');\n\n let sql = `CREATE TABLE ${this.wrapTable(blueprint.table)} (${columns}`;\n\n // Add primary key if defined in indexes\n const primaryKey = blueprint.indexes.find((idx) => idx.type === 'primary');\n if (primaryKey) {\n sql += `, PRIMARY KEY (${primaryKey.columns.map((c) => this.wrap(c)).join(', ')})`;\n }\n\n sql += ')';\n\n return sql;\n }\n\n /**\n * Compile column definition\n */\n protected compileColumnDefinition(column: ColumnDefinition): string {\n let sql = this.wrap(column.name) + ' ' + this.getColumnType(column);\n\n if (column.isAutoIncrement) {\n sql += this.getAutoIncrementClause(column);\n }\n\n if (!column.isNullable && !column.isAutoIncrement) {\n sql += ' NOT NULL';\n }\n\n if (column.defaultValue !== undefined) {\n sql += ' DEFAULT ' + this.getDefaultValue(column.defaultValue);\n }\n\n return sql;\n }\n\n /**\n * Get column type SQL\n */\n protected getColumnType(column: ColumnDefinition): string {\n switch (this.driver) {\n case 'sqlite':\n return this.getSQLiteColumnType(column);\n case 'postgres':\n case 'postgresql':\n return this.getPostgresColumnType(column);\n case 'mysql':\n return this.getMySQLColumnType(column);\n default:\n return this.getSQLiteColumnType(column);\n }\n }\n\n /**\n * Get SQLite column type\n */\n protected getSQLiteColumnType(column: ColumnDefinition): string {\n switch (column.type) {\n case 'bigIncrements':\n case 'increments':\n return 'INTEGER';\n case 'bigInteger':\n case 'integer':\n case 'smallInteger':\n case 'tinyInteger':\n return 'INTEGER';\n case 'string':\n case 'uuid':\n return column.length ? `VARCHAR(${column.length})` : 'VARCHAR(255)';\n case 'text':\n case 'mediumText':\n case 'longText':\n return 'TEXT';\n case 'decimal':\n case 'float':\n case 'double':\n return 'REAL';\n case 'boolean':\n return 'INTEGER';\n case 'date':\n return 'DATE';\n case 'datetime':\n case 'timestamp':\n return 'DATETIME';\n case 'json':\n case 'jsonb':\n return 'TEXT';\n case 'binary':\n return 'BLOB';\n case 'enum':\n return 'TEXT';\n default:\n return 'TEXT';\n }\n }\n\n /**\n * Get PostgreSQL column type\n */\n protected getPostgresColumnType(column: ColumnDefinition): string {\n switch (column.type) {\n case 'bigIncrements':\n return 'BIGSERIAL';\n case 'increments':\n return 'SERIAL';\n case 'bigInteger':\n return 'BIGINT';\n case 'integer':\n return 'INTEGER';\n case 'smallInteger':\n return 'SMALLINT';\n case 'tinyInteger':\n return 'SMALLINT';\n case 'string':\n return column.length ? `VARCHAR(${column.length})` : 'VARCHAR(255)';\n case 'uuid':\n return 'UUID';\n case 'text':\n return 'TEXT';\n case 'mediumText':\n case 'longText':\n return 'TEXT';\n case 'decimal':\n return column.precision && column.scale ? `DECIMAL(${column.precision}, ${column.scale})` : 'DECIMAL(8, 2)';\n case 'float':\n return 'REAL';\n case 'double':\n return 'DOUBLE PRECISION';\n case 'boolean':\n return 'BOOLEAN';\n case 'date':\n return 'DATE';\n case 'datetime':\n return column.precision ? `TIMESTAMP(${column.precision})` : 'TIMESTAMP';\n case 'timestamp':\n return column.precision ? `TIMESTAMP(${column.precision})` : 'TIMESTAMP';\n case 'json':\n return 'JSON';\n case 'jsonb':\n return 'JSONB';\n case 'binary':\n return 'BYTEA';\n case 'enum':\n // PostgreSQL enums would need to be created separately, use VARCHAR for simplicity\n return 'VARCHAR(255)';\n default:\n return 'TEXT';\n }\n }\n\n /**\n * Get MySQL column type\n */\n protected getMySQLColumnType(column: ColumnDefinition): string {\n switch (column.type) {\n case 'bigIncrements':\n return 'BIGINT UNSIGNED AUTO_INCREMENT';\n case 'increments':\n return 'INT UNSIGNED AUTO_INCREMENT';\n case 'bigInteger':\n return column.isUnsigned ? 'BIGINT UNSIGNED' : 'BIGINT';\n case 'integer':\n return column.isUnsigned ? 'INT UNSIGNED' : 'INT';\n case 'smallInteger':\n return column.isUnsigned ? 'SMALLINT UNSIGNED' : 'SMALLINT';\n case 'tinyInteger':\n return column.isUnsigned ? 'TINYINT UNSIGNED' : 'TINYINT';\n case 'string':\n return column.length ? `VARCHAR(${column.length})` : 'VARCHAR(255)';\n case 'uuid':\n return 'CHAR(36)';\n case 'text':\n return 'TEXT';\n case 'mediumText':\n return 'MEDIUMTEXT';\n case 'longText':\n return 'LONGTEXT';\n case 'decimal':\n return column.precision && column.scale ? `DECIMAL(${column.precision}, ${column.scale})` : 'DECIMAL(8, 2)';\n case 'float':\n return column.precision && column.scale ? `FLOAT(${column.precision}, ${column.scale})` : 'FLOAT';\n case 'double':\n return column.precision && column.scale ? `DOUBLE(${column.precision}, ${column.scale})` : 'DOUBLE';\n case 'boolean':\n return 'TINYINT(1)';\n case 'date':\n return 'DATE';\n case 'datetime':\n return column.precision ? `DATETIME(${column.precision})` : 'DATETIME';\n case 'timestamp':\n return column.precision ? `TIMESTAMP(${column.precision})` : 'TIMESTAMP';\n case 'json':\n return 'JSON';\n case 'jsonb':\n return 'JSON';\n case 'binary':\n return 'BLOB';\n case 'enum':\n return column.enumValues ? `ENUM(${column.enumValues.map((v) => `'${v}'`).join(', ')})` : 'VARCHAR(255)';\n default:\n return 'TEXT';\n }\n }\n\n /**\n * Get auto increment clause\n */\n protected getAutoIncrementClause(column: ColumnDefinition): string {\n switch (this.driver) {\n case 'sqlite':\n return column.isPrimary ? ' PRIMARY KEY AUTOINCREMENT' : '';\n case 'postgres':\n case 'postgresql':\n return ''; // Already handled in type (SERIAL/BIGSERIAL)\n case 'mysql':\n return ''; // Already handled in type\n default:\n return column.isPrimary ? ' PRIMARY KEY AUTOINCREMENT' : '';\n }\n }\n\n /**\n * Get default value SQL\n */\n protected getDefaultValue(value: any): string {\n if (value === null) {\n return 'NULL';\n }\n\n if (typeof value === 'string') {\n return `'${value}'`;\n }\n\n if (typeof value === 'boolean') {\n if (this.driver === 'postgres' || this.driver === 'postgresql') {\n return value ? 'TRUE' : 'FALSE';\n }\n return value ? '1' : '0';\n }\n\n return String(value);\n }\n\n /**\n * Compile ADD COLUMN statement\n */\n protected compileAddColumn(tableName: string, column: ColumnDefinition): string {\n const columnDef = this.compileColumnDefinition(column);\n return `ALTER TABLE ${this.wrapTable(tableName)} ADD COLUMN ${columnDef}`;\n }\n\n /**\n * Compile command (drop, rename, etc.)\n */\n protected compileCommand(tableName: string, command: any): string | null {\n switch (command.type) {\n case 'dropColumn':\n return this.compileDropColumn(tableName, command.columns);\n case 'dropIndex':\n return this.compileDropIndex(tableName, command.name);\n case 'dropForeign':\n return this.compileDropForeign(tableName, command.name);\n case 'renameColumn':\n return this.compileRenameColumn(tableName, command.from, command.to);\n default:\n return null;\n }\n }\n\n /**\n * Compile DROP COLUMN statement\n */\n protected compileDropColumn(tableName: string, columns: string[]): string {\n const cols = columns.map((col) => `DROP COLUMN ${this.wrap(col)}`).join(', ');\n return `ALTER TABLE ${this.wrapTable(tableName)} ${cols}`;\n }\n\n /**\n * Compile DROP INDEX statement\n */\n protected compileDropIndex(tableName: string, indexName: string): string {\n if (this.driver === 'mysql') {\n return `ALTER TABLE ${this.wrapTable(tableName)} DROP INDEX ${this.wrap(indexName)}`;\n }\n return `DROP INDEX ${this.wrap(indexName)}`;\n }\n\n /**\n * Compile DROP FOREIGN KEY statement\n */\n protected compileDropForeign(tableName: string, keyName: string): string {\n return `ALTER TABLE ${this.wrapTable(tableName)} DROP FOREIGN KEY ${this.wrap(keyName)}`;\n }\n\n /**\n * Compile RENAME COLUMN statement\n */\n protected compileRenameColumn(tableName: string, from: string, to: string): string {\n if (this.driver === 'sqlite') {\n // SQLite doesn't support RENAME COLUMN directly in older versions\n return `ALTER TABLE ${this.wrapTable(tableName)} RENAME COLUMN ${this.wrap(from)} TO ${this.wrap(to)}`;\n }\n return `ALTER TABLE ${this.wrapTable(tableName)} RENAME COLUMN ${this.wrap(from)} TO ${this.wrap(to)}`;\n }\n\n /**\n * Compile index creation\n */\n protected compileIndex(tableName: string, index: any): string | null {\n if (index.type === 'primary') {\n // Primary keys are handled in CREATE TABLE\n return null;\n }\n\n const columns = index.columns.map((col: string) => this.wrap(col)).join(', ');\n const indexName = index.name || this.createIndexName(tableName, index.columns, index.type);\n\n if (index.type === 'unique') {\n return `CREATE UNIQUE INDEX ${this.wrap(indexName)} ON ${this.wrapTable(tableName)} (${columns})`;\n }\n\n return `CREATE INDEX ${this.wrap(indexName)} ON ${this.wrapTable(tableName)} (${columns})`;\n }\n\n /**\n * Compile foreign key creation\n */\n protected compileForeignKey(tableName: string, fk: ForeignKeyDefinition): string | null {\n if (!fk.referencedTable || !fk.referencedColumns) {\n return null;\n }\n\n const columns = fk.columns.map((col) => this.wrap(col)).join(', ');\n const refColumns = fk.referencedColumns.map((col) => this.wrap(col)).join(', ');\n const keyName = fk.name || this.createForeignKeyName(tableName, fk.columns);\n\n let sql = `ALTER TABLE ${this.wrapTable(tableName)} ADD CONSTRAINT ${this.wrap(keyName)} `;\n sql += `FOREIGN KEY (${columns}) REFERENCES ${this.wrapTable(fk.referencedTable)} (${refColumns})`;\n\n if (fk.onDeleteAction) {\n sql += ` ON DELETE ${fk.onDeleteAction.toUpperCase()}`;\n }\n\n if (fk.onUpdateAction) {\n sql += ` ON UPDATE ${fk.onUpdateAction.toUpperCase()}`;\n }\n\n return sql;\n }\n\n /**\n * Compile RENAME TABLE statement\n */\n protected compileRename(from: string, to: string): string {\n return `ALTER TABLE ${this.wrapTable(from)} RENAME TO ${this.wrapTable(to)}`;\n }\n\n /**\n * Compile has table check\n */\n protected compileHasTable(tableName: string): string {\n switch (this.driver) {\n case 'sqlite':\n return `SELECT name FROM sqlite_master WHERE type='table' AND name='${tableName}'`;\n case 'postgres':\n case 'postgresql':\n return `SELECT tablename FROM pg_tables WHERE tablename='${tableName}'`;\n case 'mysql':\n return `SELECT TABLE_NAME FROM information_schema.TABLES WHERE TABLE_NAME='${tableName}'`;\n default:\n return `SELECT name FROM sqlite_master WHERE type='table' AND name='${tableName}'`;\n }\n }\n\n /**\n * Compile has column check\n */\n protected compileHasColumn(tableName: string, columnName: string): string {\n switch (this.driver) {\n case 'sqlite':\n return `PRAGMA table_info(${tableName})`;\n case 'postgres':\n case 'postgresql':\n return `SELECT column_name FROM information_schema.columns WHERE table_name='${tableName}' AND column_name='${columnName}'`;\n case 'mysql':\n return `SELECT COLUMN_NAME FROM information_schema.COLUMNS WHERE TABLE_NAME='${tableName}' AND COLUMN_NAME='${columnName}'`;\n default:\n return `PRAGMA table_info(${tableName})`;\n }\n }\n\n /**\n * Create index name\n */\n protected createIndexName(tableName: string, columns: string[], type: string): string {\n const suffix = type === 'unique' ? 'unique' : 'index';\n return `${tableName}_${columns.join('_')}_${suffix}`;\n }\n\n /**\n * Create foreign key name\n */\n protected createForeignKeyName(tableName: string, columns: string[]): string {\n return `${tableName}_${columns.join('_')}_foreign`;\n }\n\n /**\n * Wrap a table name\n */\n protected wrapTable(table: string): string {\n return this.wrap(table);\n }\n\n /**\n * Wrap an identifier\n */\n protected wrap(value: string): string {\n switch (this.driver) {\n case 'postgres':\n case 'postgresql':\n return `\"${value}\"`;\n case 'mysql':\n return `\\`${value}\\``;\n case 'sqlite':\n default:\n return `\"${value}\"`;\n }\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"SchemaBuilder.mjs","names":[],"sources":["../../../src/Database/Migrations/SchemaBuilder.ts"],"sourcesContent":["/**\n * SchemaBuilder\n *\n * Builds and executes schema migrations with support for multiple database drivers\n */\n\nimport { Connection } from '@/Database/Connection';\nimport { Schema } from '@/Database/Contracts/Schema';\nimport { Blueprint } from './Blueprint';\nimport { ColumnDefinition } from './ColumnDefinition';\nimport { ForeignKeyDefinition } from './ForeignKeyDefinition';\n\nexport class SchemaBuilder implements Schema {\n protected driver: string;\n\n constructor(protected connection: Connection) {\n this.driver = connection.getConfig().driver;\n }\n\n /**\n * Create a new table\n */\n async create(tableName: string, callback: (table: Blueprint) => void): Promise<void> {\n const blueprint = new Blueprint(tableName);\n blueprint.isCreate = true;\n callback(blueprint);\n\n const sql = this.compileCreate(blueprint);\n await this.connection.query(sql);\n\n // Create indexes\n for (const index of blueprint.indexes) {\n const indexSql = this.compileIndex(tableName, index);\n if (indexSql) {\n await this.connection.query(indexSql);\n }\n }\n\n // Create foreign keys\n for (const fk of blueprint.foreignKeys) {\n const fkSql = this.compileForeignKey(tableName, fk);\n if (fkSql) {\n await this.connection.query(fkSql);\n }\n }\n }\n\n /**\n * Drop a table\n */\n async drop(tableName: string): Promise<void> {\n const sql = `DROP TABLE ${this.wrapTable(tableName)}`;\n await this.connection.query(sql);\n }\n\n /**\n * Drop a table if it exists\n */\n async dropIfExists(tableName: string): Promise<void> {\n const sql = `DROP TABLE IF EXISTS ${this.wrapTable(tableName)}`;\n await this.connection.query(sql);\n }\n\n /**\n * Rename a table\n */\n async rename(from: string, to: string): Promise<void> {\n const sql = this.compileRename(from, to);\n await this.connection.query(sql);\n }\n\n /**\n * Determine if a table exists\n */\n async hasTable(tableName: string): Promise<boolean> {\n const sql = this.compileHasTable(tableName);\n const results = await this.connection.select(sql);\n return results.length > 0;\n }\n\n /**\n * Determine if a column exists on a table\n */\n async hasColumn(tableName: string, columnName: string): Promise<boolean> {\n const sql = this.compileHasColumn(tableName, columnName);\n const results = await this.connection.select(sql);\n return results.length > 0;\n }\n\n /**\n * Modify an existing table\n */\n async table(tableName: string, callback: (table: Blueprint) => void): Promise<void> {\n const blueprint = new Blueprint(tableName);\n blueprint.isCreate = false;\n callback(blueprint);\n\n // Add new columns\n for (const column of blueprint.columns) {\n const sql = this.compileAddColumn(tableName, column);\n await this.connection.query(sql);\n }\n\n // Execute commands (drop, rename, etc.)\n for (const command of blueprint.commands) {\n const sql = this.compileCommand(tableName, command);\n if (sql) {\n await this.connection.query(sql);\n }\n }\n\n // Create indexes\n for (const index of blueprint.indexes) {\n const indexSql = this.compileIndex(tableName, index);\n if (indexSql) {\n await this.connection.query(indexSql);\n }\n }\n\n // Create foreign keys\n for (const fk of blueprint.foreignKeys) {\n const fkSql = this.compileForeignKey(tableName, fk);\n if (fkSql) {\n await this.connection.query(fkSql);\n }\n }\n }\n\n /**\n * Compile CREATE TABLE statement\n */\n protected compileCreate(blueprint: Blueprint): string {\n const columns = blueprint.columns.map((col) => this.compileColumnDefinition(col)).join(', ');\n\n let sql = `CREATE TABLE ${this.wrapTable(blueprint.table)} (${columns}`;\n\n // Add primary key if defined in indexes\n const primaryKey = blueprint.indexes.find((idx) => idx.type === 'primary');\n if (primaryKey) {\n sql += `, PRIMARY KEY (${primaryKey.columns.map((c) => this.wrap(c)).join(', ')})`;\n }\n\n sql += ')';\n\n return sql;\n }\n\n /**\n * Compile column definition\n */\n protected compileColumnDefinition(column: ColumnDefinition): string {\n let sql = this.wrap(column.name) + ' ' + this.getColumnType(column);\n\n if (column.isAutoIncrement) {\n sql += this.getAutoIncrementClause(column);\n }\n\n if (!column.isNullable && !column.isAutoIncrement) {\n sql += ' NOT NULL';\n }\n\n if (column.defaultValue !== undefined) {\n sql += ' DEFAULT ' + this.getDefaultValue(column.defaultValue);\n }\n\n return sql;\n }\n\n /**\n * Get column type SQL\n */\n protected getColumnType(column: ColumnDefinition): string {\n switch (this.driver) {\n case 'sqlite':\n return this.getSQLiteColumnType(column);\n case 'postgres':\n case 'postgresql':\n return this.getPostgresColumnType(column);\n case 'mysql':\n return this.getMySQLColumnType(column);\n default:\n return this.getSQLiteColumnType(column);\n }\n }\n\n /**\n * Get SQLite column type\n */\n protected getSQLiteColumnType(column: ColumnDefinition): string {\n switch (column.type) {\n case 'bigIncrements':\n case 'increments':\n return 'INTEGER';\n case 'bigInteger':\n case 'integer':\n case 'smallInteger':\n case 'tinyInteger':\n return 'INTEGER';\n case 'string':\n case 'uuid':\n return column.length ? `VARCHAR(${column.length})` : 'VARCHAR(255)';\n case 'text':\n case 'mediumText':\n case 'longText':\n return 'TEXT';\n case 'decimal':\n case 'float':\n case 'double':\n return 'REAL';\n case 'boolean':\n return 'INTEGER';\n case 'date':\n return 'DATE';\n case 'datetime':\n case 'timestamp':\n return 'DATETIME';\n case 'json':\n case 'jsonb':\n return 'TEXT';\n case 'binary':\n return 'BLOB';\n case 'enum':\n return 'TEXT';\n default:\n return 'TEXT';\n }\n }\n\n /**\n * Get PostgreSQL column type\n */\n protected getPostgresColumnType(column: ColumnDefinition): string {\n switch (column.type) {\n case 'bigIncrements':\n return 'BIGSERIAL';\n case 'increments':\n return 'SERIAL';\n case 'bigInteger':\n return 'BIGINT';\n case 'integer':\n return 'INTEGER';\n case 'smallInteger':\n return 'SMALLINT';\n case 'tinyInteger':\n return 'SMALLINT';\n case 'string':\n return column.length ? `VARCHAR(${column.length})` : 'VARCHAR(255)';\n case 'uuid':\n return 'UUID';\n case 'text':\n return 'TEXT';\n case 'mediumText':\n case 'longText':\n return 'TEXT';\n case 'decimal':\n return column.precision && column.scale ? `DECIMAL(${column.precision}, ${column.scale})` : 'DECIMAL(8, 2)';\n case 'float':\n return 'REAL';\n case 'double':\n return 'DOUBLE PRECISION';\n case 'boolean':\n return 'BOOLEAN';\n case 'date':\n return 'DATE';\n case 'datetime':\n return column.precision ? `TIMESTAMP(${column.precision})` : 'TIMESTAMP';\n case 'timestamp':\n return column.precision ? `TIMESTAMP(${column.precision})` : 'TIMESTAMP';\n case 'json':\n return 'JSON';\n case 'jsonb':\n return 'JSONB';\n case 'binary':\n return 'BYTEA';\n case 'enum':\n // PostgreSQL enums would need to be created separately, use VARCHAR for simplicity\n return 'VARCHAR(255)';\n default:\n return 'TEXT';\n }\n }\n\n /**\n * Get MySQL column type\n */\n protected getMySQLColumnType(column: ColumnDefinition): string {\n switch (column.type) {\n case 'bigIncrements':\n return 'BIGINT UNSIGNED AUTO_INCREMENT';\n case 'increments':\n return 'INT UNSIGNED AUTO_INCREMENT';\n case 'bigInteger':\n return column.isUnsigned ? 'BIGINT UNSIGNED' : 'BIGINT';\n case 'integer':\n return column.isUnsigned ? 'INT UNSIGNED' : 'INT';\n case 'smallInteger':\n return column.isUnsigned ? 'SMALLINT UNSIGNED' : 'SMALLINT';\n case 'tinyInteger':\n return column.isUnsigned ? 'TINYINT UNSIGNED' : 'TINYINT';\n case 'string':\n return column.length ? `VARCHAR(${column.length})` : 'VARCHAR(255)';\n case 'uuid':\n return 'CHAR(36)';\n case 'text':\n return 'TEXT';\n case 'mediumText':\n return 'MEDIUMTEXT';\n case 'longText':\n return 'LONGTEXT';\n case 'decimal':\n return column.precision && column.scale ? `DECIMAL(${column.precision}, ${column.scale})` : 'DECIMAL(8, 2)';\n case 'float':\n return column.precision && column.scale ? `FLOAT(${column.precision}, ${column.scale})` : 'FLOAT';\n case 'double':\n return column.precision && column.scale ? `DOUBLE(${column.precision}, ${column.scale})` : 'DOUBLE';\n case 'boolean':\n return 'TINYINT(1)';\n case 'date':\n return 'DATE';\n case 'datetime':\n return column.precision ? `DATETIME(${column.precision})` : 'DATETIME';\n case 'timestamp':\n return column.precision ? `TIMESTAMP(${column.precision})` : 'TIMESTAMP';\n case 'json':\n return 'JSON';\n case 'jsonb':\n return 'JSON';\n case 'binary':\n return 'BLOB';\n case 'enum':\n return column.enumValues ? `ENUM(${column.enumValues.map((v) => `'${v}'`).join(', ')})` : 'VARCHAR(255)';\n default:\n return 'TEXT';\n }\n }\n\n /**\n * Get auto increment clause\n */\n protected getAutoIncrementClause(column: ColumnDefinition): string {\n switch (this.driver) {\n case 'sqlite':\n return column.isPrimary ? ' PRIMARY KEY AUTOINCREMENT' : '';\n case 'postgres':\n case 'postgresql':\n return ''; // Already handled in type (SERIAL/BIGSERIAL)\n case 'mysql':\n return ''; // Already handled in type\n default:\n return column.isPrimary ? ' PRIMARY KEY AUTOINCREMENT' : '';\n }\n }\n\n /**\n * Get default value SQL\n */\n protected getDefaultValue(value: any): string {\n if (value === null) {\n return 'NULL';\n }\n\n if (typeof value === 'string') {\n return `'${value}'`;\n }\n\n if (typeof value === 'boolean') {\n if (this.driver === 'postgres' || this.driver === 'postgresql') {\n return value ? 'TRUE' : 'FALSE';\n }\n return value ? '1' : '0';\n }\n\n return String(value);\n }\n\n /**\n * Compile ADD COLUMN statement\n */\n protected compileAddColumn(tableName: string, column: ColumnDefinition): string {\n const columnDef = this.compileColumnDefinition(column);\n return `ALTER TABLE ${this.wrapTable(tableName)} ADD COLUMN ${columnDef}`;\n }\n\n /**\n * Compile command (drop, rename, etc.)\n */\n protected compileCommand(tableName: string, command: any): string | null {\n switch (command.type) {\n case 'dropColumn':\n return this.compileDropColumn(tableName, command.columns);\n case 'dropIndex':\n return this.compileDropIndex(tableName, command.name);\n case 'dropForeign':\n return this.compileDropForeign(tableName, command.name);\n case 'renameColumn':\n return this.compileRenameColumn(tableName, command.from, command.to);\n default:\n return null;\n }\n }\n\n /**\n * Compile DROP COLUMN statement\n */\n protected compileDropColumn(tableName: string, columns: string[]): string {\n const cols = columns.map((col) => `DROP COLUMN ${this.wrap(col)}`).join(', ');\n return `ALTER TABLE ${this.wrapTable(tableName)} ${cols}`;\n }\n\n /**\n * Compile DROP INDEX statement\n */\n protected compileDropIndex(tableName: string, indexName: string): string {\n if (this.driver === 'mysql') {\n return `ALTER TABLE ${this.wrapTable(tableName)} DROP INDEX ${this.wrap(indexName)}`;\n }\n return `DROP INDEX ${this.wrap(indexName)}`;\n }\n\n /**\n * Compile DROP FOREIGN KEY statement\n */\n protected compileDropForeign(tableName: string, keyName: string): string {\n return `ALTER TABLE ${this.wrapTable(tableName)} DROP FOREIGN KEY ${this.wrap(keyName)}`;\n }\n\n /**\n * Compile RENAME COLUMN statement\n */\n protected compileRenameColumn(tableName: string, from: string, to: string): string {\n if (this.driver === 'sqlite') {\n // SQLite doesn't support RENAME COLUMN directly in older versions\n return `ALTER TABLE ${this.wrapTable(tableName)} RENAME COLUMN ${this.wrap(from)} TO ${this.wrap(to)}`;\n }\n return `ALTER TABLE ${this.wrapTable(tableName)} RENAME COLUMN ${this.wrap(from)} TO ${this.wrap(to)}`;\n }\n\n /**\n * Compile index creation\n */\n protected compileIndex(tableName: string, index: any): string | null {\n if (index.type === 'primary') {\n // Primary keys are handled in CREATE TABLE\n return null;\n }\n\n const columns = index.columns.map((col: string) => this.wrap(col)).join(', ');\n const indexName = index.name || this.createIndexName(tableName, index.columns, index.type);\n\n if (index.type === 'unique') {\n return `CREATE UNIQUE INDEX ${this.wrap(indexName)} ON ${this.wrapTable(tableName)} (${columns})`;\n }\n\n return `CREATE INDEX ${this.wrap(indexName)} ON ${this.wrapTable(tableName)} (${columns})`;\n }\n\n /**\n * Compile foreign key creation\n */\n protected compileForeignKey(tableName: string, fk: ForeignKeyDefinition): string | null {\n if (!fk.referencedTable || !fk.referencedColumns) {\n return null;\n }\n\n const columns = fk.columns.map((col) => this.wrap(col)).join(', ');\n const refColumns = fk.referencedColumns.map((col) => this.wrap(col)).join(', ');\n const keyName = fk.name || this.createForeignKeyName(tableName, fk.columns);\n\n let sql = `ALTER TABLE ${this.wrapTable(tableName)} ADD CONSTRAINT ${this.wrap(keyName)} `;\n sql += `FOREIGN KEY (${columns}) REFERENCES ${this.wrapTable(fk.referencedTable)} (${refColumns})`;\n\n if (fk.onDeleteAction) {\n sql += ` ON DELETE ${fk.onDeleteAction.toUpperCase()}`;\n }\n\n if (fk.onUpdateAction) {\n sql += ` ON UPDATE ${fk.onUpdateAction.toUpperCase()}`;\n }\n\n return sql;\n }\n\n /**\n * Compile RENAME TABLE statement\n */\n protected compileRename(from: string, to: string): string {\n return `ALTER TABLE ${this.wrapTable(from)} RENAME TO ${this.wrapTable(to)}`;\n }\n\n /**\n * Compile has table check\n */\n protected compileHasTable(tableName: string): string {\n switch (this.driver) {\n case 'sqlite':\n return `SELECT name FROM sqlite_master WHERE type='table' AND name='${tableName}'`;\n case 'postgres':\n case 'postgresql':\n return `SELECT tablename FROM pg_tables WHERE tablename='${tableName}'`;\n case 'mysql':\n return `SELECT TABLE_NAME FROM information_schema.TABLES WHERE TABLE_NAME='${tableName}'`;\n default:\n return `SELECT name FROM sqlite_master WHERE type='table' AND name='${tableName}'`;\n }\n }\n\n /**\n * Compile has column check\n */\n protected compileHasColumn(tableName: string, columnName: string): string {\n switch (this.driver) {\n case 'sqlite':\n return `PRAGMA table_info(${tableName})`;\n case 'postgres':\n case 'postgresql':\n return `SELECT column_name FROM information_schema.columns WHERE table_name='${tableName}' AND column_name='${columnName}'`;\n case 'mysql':\n return `SELECT COLUMN_NAME FROM information_schema.COLUMNS WHERE TABLE_NAME='${tableName}' AND COLUMN_NAME='${columnName}'`;\n default:\n return `PRAGMA table_info(${tableName})`;\n }\n }\n\n /**\n * Create index name\n */\n protected createIndexName(tableName: string, columns: string[], type: string): string {\n const suffix = type === 'unique' ? 'unique' : 'index';\n return `${tableName}_${columns.join('_')}_${suffix}`;\n }\n\n /**\n * Create foreign key name\n */\n protected createForeignKeyName(tableName: string, columns: string[]): string {\n return `${tableName}_${columns.join('_')}_foreign`;\n }\n\n /**\n * Wrap a table name\n */\n protected wrapTable(table: string): string {\n return this.wrap(table);\n }\n\n /**\n * Wrap an identifier\n */\n protected wrap(value: string): string {\n switch (this.driver) {\n case 'postgres':\n case 'postgresql':\n return `\"${value}\"`;\n case 'mysql':\n return `\\`${value}\\``;\n case 'sqlite':\n default:\n return `\"${value}\"`;\n }\n }\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- require(`../../_virtual/_rolldown/runtime.cjs`);const e=require(`./Expression.cjs`);var t=class t{_columns=[`*`];_distinct=!1;_table;_wheres=[];_joins=[];_orders=[];_groups=[];_havings=[];_limit;_offset;_bindings=[];_returning;constructor(e){this.adapter=e}select(...e){return this._columns=e.length>0?e:[`*`],this}selectRaw(t,n=[]){return this._columns.push(new e.Expression(t)),this._bindings.push(...n),this}distinct(){return this._distinct=!0,this}from(e){return this._table=e,this}where(e,t,n){return arguments.length===2&&(n=t,t=`=`),this._wheres.push({column:e,operator:t,value:n,boolean:`and`}),n!=null&&this._bindings.push(n),this}orWhere(e,t,n){return arguments.length===2&&(n=t,t=`=`),this._wheres.push({column:e,operator:t,value:n,boolean:`or`}),n!=null&&this._bindings.push(n),this}whereIn(e,t){return this._wheres.push({column:e,operator:`in`,value:t,boolean:`and`}),this._bindings.push(...t),this}whereNotIn(e,t){return this._wheres.push({column:e,operator:`not in`,value:t,boolean:`and`}),this._bindings.push(...t),this}whereNull(e){return this._wheres.push({column:e,operator:`is null`,value:null,boolean:`and`}),this}whereNotNull(e){return this._wheres.push({column:e,operator:`is not null`,value:null,boolean:`and`}),this}whereBetween(e,t){return this._wheres.push({column:e,operator:`between`,value:t,boolean:`and`}),this._bindings.push(...t),this}whereRaw(t,n=[]){return this._wheres.push({column:new e.Expression(t),operator:`raw`,value:null,boolean:`and`}),this._bindings.push(...n),this}join(e,t,n=`=`,r){return this._joins.push({type:`inner`,table:e,first:t,operator:n,second:r}),this}leftJoin(e,t,n=`=`,r){return this._joins.push({type:`left`,table:e,first:t,operator:n,second:r}),this}rightJoin(e,t,n=`=`,r){return this._joins.push({type:`right`,table:e,first:t,operator:n,second:r}),this}orderBy(e,t=`asc`){return this._orders.push({column:e,direction:t}),this}latest(e=`created_at`){return this.orderBy(e,`desc`)}oldest(e=`created_at`){return this.orderBy(e,`asc`)}groupBy(...e){return this._groups.push(...e),this}having(e,t,n){return arguments.length===2&&(n=t,t=`=`),this._havings.push({column:e,operator:t,value:n}),n!=null&&this._bindings.push(n),this}limit(e){return this._limit=e,this}take(e){return this.limit(e)}offset(e){return this._offset=e,this}skip(e){return this.offset(e)}async get(){let e=this.toSql();return await this.adapter.select(e,this.getBindings())}async first(){return(await this.limit(1).get())[0]||null}async find(e){return this.where(`id`,`=`,e).first()}async value(e){let t=await this.select(e).first();return t?t[e]:null}async pluck(e){return(await this.select(e).get()).map(t=>t[e])}async exists(){return await this.count()>0}async count(e=`*`){return this.aggregate(`COUNT`,e)}async max(e){return this.aggregate(`MAX`,e)}async min(e){return this.aggregate(`MIN`,e)}async avg(e){return this.aggregate(`AVG`,e)}async sum(e){return this.aggregate(`SUM`,e)||0}async aggregate(e,t){let n=this._columns,r=this._bindings.slice();this.selectRaw(`${e}(${t}) as aggregate`);let i=await this.first();return this._columns=n,this._bindings=r,i?i.aggregate:null}insert(e){let t=t=>this.insertReturning(e,t),n=()=>this.executeInsert(e);return{returning:t,then:(e,t)=>n().then(e,t),catch:e=>n().catch(e),finally:e=>n().finally(e)}}async executeInsert(e){if(!this._table)throw Error(`Cannot insert without specifying a table`);let t=Array.isArray(e)?e:[e];if(t.length===0)return!0;let n=Object.keys(t[0]),r=t.map(()=>`(${n.map(()=>`?`).join(`, `)})`).join(`, `),i=t.flatMap(e=>n.map(t=>e[t])),a=`INSERT INTO ${this._table} (${n.join(`, `)}) VALUES ${r}`;return await this.adapter.insert(a,i),!0}returning(e){return e?Array.isArray(e)?this._returning=e:this._returning=[e]:this._returning=[`*`],this}async insertReturning(e,t){if(!this._table)throw Error(`Cannot insert without specifying a table`);let n=Array.isArray(e)?e:[e];if(n.length===0)return Array.isArray(e)?[]:null;let r=Object.keys(n[0]),i=n.map(()=>`(${r.map(()=>`?`).join(`, `)})`).join(`, `),a=n.flatMap(e=>r.map(t=>e[t])),o=t===void 0?this._returning&&this._returning.length>0?this._returning:[`*`]:Array.isArray(t)?t:[t],s=`INSERT INTO ${this._table} (${r.join(`, `)}) VALUES ${i} RETURNING ${o.join(`, `)}`;try{let e=await this.adapter.select(s,a);return this._returning=void 0,n.length===1?e[0]??null:e}catch{let e=`INSERT INTO ${this._table} (${r.join(`, `)}) VALUES ${i}`,t=await this.adapter.insert(e,a);if(n.length===1){let e=t;if(e==null)return this._returning=void 0,null;let n=o.join(`, `),r=await this.adapter.select(`SELECT ${n} FROM ${this._table} WHERE id = ? LIMIT 1`,[e]);return this._returning=void 0,r[0]??null}throw Error(`returning() is not supported for bulk inserts on this driver. Insert succeeded without returning rows.`)}}async insertGetId(e,t){if(!this._table)throw Error(`Cannot insert without specifying a table`);let n=Object.keys(e),r=n.map(()=>`?`).join(`, `),i=n.map(t=>e[t]),a=`INSERT INTO ${this._table} (${n.join(`, `)}) VALUES (${r})`;return await this.adapter.insert(a,i)}async update(e){if(!this._table)throw Error(`Cannot update without specifying a table`);let t=Object.keys(e).map(e=>`${e} = ?`).join(`, `),n=[...Object.values(e),...this.getBindings()],r=`UPDATE ${this._table} SET ${t}`;return this._wheres.length>0&&(r+=` WHERE `+this.compileWheres()),await this.adapter.update(r,n)}async delete(){if(!this._table)throw Error(`Cannot delete without specifying a table`);let e=`DELETE FROM ${this._table}`;return this._wheres.length>0&&(e+=` WHERE `+this.compileWheres()),await this.adapter.delete(e,this.getBindings())}async truncate(){if(!this._table)throw Error(`Cannot truncate without specifying a table`);let e=`TRUNCATE TABLE ${this._table}`;await this.adapter.query(e)}toSql(){if(!this._table)throw Error(`Cannot generate SQL without specifying a table`);let e=`SELECT `;return this._distinct&&(e+=`DISTINCT `),e+=this.compileColumns(),e+=` FROM ${this._table}`,this._joins.length>0&&(e+=` `+this.compileJoins()),this._wheres.length>0&&(e+=` WHERE `+this.compileWheres()),this._groups.length>0&&(e+=` GROUP BY `+this._groups.join(`, `)),this._havings.length>0&&(e+=` HAVING `+this.compileHavings()),this._orders.length>0&&(e+=` ORDER BY `+this.compileOrders()),this._limit!==void 0&&(e+=` LIMIT ${this._limit}`),this._offset!==void 0&&(e+=` OFFSET ${this._offset}`),e}compileColumns(){return this._columns.map(e=>typeof e==`object`&&e&&`getValue`in e?e.getValue():e).join(`, `)}compileWheres(){return this._wheres.map((e,t)=>{let n=t===0?``:` ${e.boolean.toUpperCase()} `;if(e.operator===`raw`)return n+(typeof e.column==`object`&&e.column&&`getValue`in e.column?e.column.getValue():e.column);if(e.operator===`in`||e.operator===`not in`){let t=e.value.map(()=>`?`).join(`, `);return`${n}${e.column} ${e.operator.toUpperCase()} (${t})`}return e.operator===`between`?`${n}${e.column} BETWEEN ? AND ?`:e.operator===`is null`||e.operator===`is not null`?`${n}${e.column} ${e.operator.toUpperCase()}`:`${n}${e.column} ${e.operator} ?`}).join(``)}compileJoins(){return this._joins.map(e=>`${e.type.toUpperCase()} JOIN ${e.table} ON ${e.first} ${e.operator} ${e.second}`).join(` `)}compileOrders(){return this._orders.map(e=>`${e.column} ${e.direction.toUpperCase()}`).join(`, `)}compileHavings(){return this._havings.map((e,t)=>`${t===0?``:` AND `}${e.column} ${e.operator} ?`).join(``)}getBindings(){return this._bindings}clone(){let e=new t(this.adapter);return e._columns=[...this._columns],e._distinct=this._distinct,e._table=this._table,e._wheres=[...this._wheres],e._joins=[...this._joins],e._orders=[...this._orders],e._groups=[...this._groups],e._havings=[...this._havings],e._limit=this._limit,e._offset=this._offset,e._bindings=[...this._bindings],e}};exports.Builder=t;
1
+ require(`../../_virtual/_rolldown/runtime.cjs`);const e=require(`./Expression.cjs`);var t=class t{adapter;_columns=[`*`];_distinct=!1;_table;_wheres=[];_joins=[];_orders=[];_groups=[];_havings=[];_limit;_offset;_bindings=[];_returning;constructor(e){this.adapter=e}select(...e){return this._columns=e.length>0?e:[`*`],this}selectRaw(t,n=[]){return this._columns.push(new e.Expression(t)),this._bindings.push(...n),this}distinct(){return this._distinct=!0,this}from(e){return this._table=e,this}where(e,t,n){return arguments.length===2&&(n=t,t=`=`),this._wheres.push({column:e,operator:t,value:n,boolean:`and`}),n!=null&&this._bindings.push(n),this}orWhere(e,t,n){return arguments.length===2&&(n=t,t=`=`),this._wheres.push({column:e,operator:t,value:n,boolean:`or`}),n!=null&&this._bindings.push(n),this}whereIn(e,t){return this._wheres.push({column:e,operator:`in`,value:t,boolean:`and`}),this._bindings.push(...t),this}whereNotIn(e,t){return this._wheres.push({column:e,operator:`not in`,value:t,boolean:`and`}),this._bindings.push(...t),this}whereNull(e){return this._wheres.push({column:e,operator:`is null`,value:null,boolean:`and`}),this}whereNotNull(e){return this._wheres.push({column:e,operator:`is not null`,value:null,boolean:`and`}),this}whereBetween(e,t){return this._wheres.push({column:e,operator:`between`,value:t,boolean:`and`}),this._bindings.push(...t),this}whereRaw(t,n=[]){return this._wheres.push({column:new e.Expression(t),operator:`raw`,value:null,boolean:`and`}),this._bindings.push(...n),this}join(e,t,n=`=`,r){return this._joins.push({type:`inner`,table:e,first:t,operator:n,second:r}),this}leftJoin(e,t,n=`=`,r){return this._joins.push({type:`left`,table:e,first:t,operator:n,second:r}),this}rightJoin(e,t,n=`=`,r){return this._joins.push({type:`right`,table:e,first:t,operator:n,second:r}),this}orderBy(e,t=`asc`){return this._orders.push({column:e,direction:t}),this}latest(e=`created_at`){return this.orderBy(e,`desc`)}oldest(e=`created_at`){return this.orderBy(e,`asc`)}groupBy(...e){return this._groups.push(...e),this}having(e,t,n){return arguments.length===2&&(n=t,t=`=`),this._havings.push({column:e,operator:t,value:n}),n!=null&&this._bindings.push(n),this}limit(e){return this._limit=e,this}take(e){return this.limit(e)}offset(e){return this._offset=e,this}skip(e){return this.offset(e)}async get(){let e=this.toSql();return await this.adapter.select(e,this.getBindings())}async first(){return(await this.limit(1).get())[0]||null}async find(e){return this.where(`id`,`=`,e).first()}async value(e){let t=await this.select(e).first();return t?t[e]:null}async pluck(e){return(await this.select(e).get()).map(t=>t[e])}async exists(){return await this.count()>0}async count(e=`*`){return this.aggregate(`COUNT`,e)}async max(e){return this.aggregate(`MAX`,e)}async min(e){return this.aggregate(`MIN`,e)}async avg(e){return this.aggregate(`AVG`,e)}async sum(e){return this.aggregate(`SUM`,e)||0}async aggregate(e,t){let n=this._columns,r=this._bindings.slice();this.selectRaw(`${e}(${t}) as aggregate`);let i=await this.first();return this._columns=n,this._bindings=r,i?i.aggregate:null}insert(e){let t=t=>this.insertReturning(e,t),n=()=>this.executeInsert(e);return{returning:t,then:(e,t)=>n().then(e,t),catch:e=>n().catch(e),finally:e=>n().finally(e)}}async executeInsert(e){if(!this._table)throw Error(`Cannot insert without specifying a table`);let t=Array.isArray(e)?e:[e];if(t.length===0)return!0;let n=Object.keys(t[0]),r=t.map(()=>`(${n.map(()=>`?`).join(`, `)})`).join(`, `),i=t.flatMap(e=>n.map(t=>e[t])),a=`INSERT INTO ${this._table} (${n.join(`, `)}) VALUES ${r}`;return await this.adapter.insert(a,i),!0}returning(e){return e?Array.isArray(e)?this._returning=e:this._returning=[e]:this._returning=[`*`],this}async insertReturning(e,t){if(!this._table)throw Error(`Cannot insert without specifying a table`);let n=Array.isArray(e)?e:[e];if(n.length===0)return Array.isArray(e)?[]:null;let r=Object.keys(n[0]),i=n.map(()=>`(${r.map(()=>`?`).join(`, `)})`).join(`, `),a=n.flatMap(e=>r.map(t=>e[t])),o=t===void 0?this._returning&&this._returning.length>0?this._returning:[`*`]:Array.isArray(t)?t:[t],s=`INSERT INTO ${this._table} (${r.join(`, `)}) VALUES ${i} RETURNING ${o.join(`, `)}`;try{let e=await this.adapter.select(s,a);return this._returning=void 0,n.length===1?e[0]??null:e}catch{let e=`INSERT INTO ${this._table} (${r.join(`, `)}) VALUES ${i}`,t=await this.adapter.insert(e,a);if(n.length===1){let e=t;if(e==null)return this._returning=void 0,null;let n=o.join(`, `),r=await this.adapter.select(`SELECT ${n} FROM ${this._table} WHERE id = ? LIMIT 1`,[e]);return this._returning=void 0,r[0]??null}throw Error(`returning() is not supported for bulk inserts on this driver. Insert succeeded without returning rows.`)}}async insertGetId(e,t){if(!this._table)throw Error(`Cannot insert without specifying a table`);let n=Object.keys(e),r=n.map(()=>`?`).join(`, `),i=n.map(t=>e[t]),a=`INSERT INTO ${this._table} (${n.join(`, `)}) VALUES (${r})`;return await this.adapter.insert(a,i)}async update(e){if(!this._table)throw Error(`Cannot update without specifying a table`);let t=Object.keys(e).map(e=>`${e} = ?`).join(`, `),n=[...Object.values(e),...this.getBindings()],r=`UPDATE ${this._table} SET ${t}`;return this._wheres.length>0&&(r+=` WHERE `+this.compileWheres()),await this.adapter.update(r,n)}async delete(){if(!this._table)throw Error(`Cannot delete without specifying a table`);let e=`DELETE FROM ${this._table}`;return this._wheres.length>0&&(e+=` WHERE `+this.compileWheres()),await this.adapter.delete(e,this.getBindings())}async truncate(){if(!this._table)throw Error(`Cannot truncate without specifying a table`);let e=`TRUNCATE TABLE ${this._table}`;await this.adapter.query(e)}toSql(){if(!this._table)throw Error(`Cannot generate SQL without specifying a table`);let e=`SELECT `;return this._distinct&&(e+=`DISTINCT `),e+=this.compileColumns(),e+=` FROM ${this._table}`,this._joins.length>0&&(e+=` `+this.compileJoins()),this._wheres.length>0&&(e+=` WHERE `+this.compileWheres()),this._groups.length>0&&(e+=` GROUP BY `+this._groups.join(`, `)),this._havings.length>0&&(e+=` HAVING `+this.compileHavings()),this._orders.length>0&&(e+=` ORDER BY `+this.compileOrders()),this._limit!==void 0&&(e+=` LIMIT ${this._limit}`),this._offset!==void 0&&(e+=` OFFSET ${this._offset}`),e}compileColumns(){return this._columns.map(e=>typeof e==`object`&&e&&`getValue`in e?e.getValue():e).join(`, `)}compileWheres(){return this._wheres.map((e,t)=>{let n=t===0?``:` ${e.boolean.toUpperCase()} `;if(e.operator===`raw`)return n+(typeof e.column==`object`&&e.column&&`getValue`in e.column?e.column.getValue():e.column);if(e.operator===`in`||e.operator===`not in`){let t=e.value.map(()=>`?`).join(`, `);return`${n}${e.column} ${e.operator.toUpperCase()} (${t})`}return e.operator===`between`?`${n}${e.column} BETWEEN ? AND ?`:e.operator===`is null`||e.operator===`is not null`?`${n}${e.column} ${e.operator.toUpperCase()}`:`${n}${e.column} ${e.operator} ?`}).join(``)}compileJoins(){return this._joins.map(e=>`${e.type.toUpperCase()} JOIN ${e.table} ON ${e.first} ${e.operator} ${e.second}`).join(` `)}compileOrders(){return this._orders.map(e=>`${e.column} ${e.direction.toUpperCase()}`).join(`, `)}compileHavings(){return this._havings.map((e,t)=>`${t===0?``:` AND `}${e.column} ${e.operator} ?`).join(``)}getBindings(){return this._bindings}clone(){let e=new t(this.adapter);return e._columns=[...this._columns],e._distinct=this._distinct,e._table=this._table,e._wheres=[...this._wheres],e._joins=[...this._joins],e._orders=[...this._orders],e._groups=[...this._groups],e._havings=[...this._havings],e._limit=this._limit,e._offset=this._offset,e._bindings=[...this._bindings],e}};exports.Builder=t;
@@ -1,2 +1,2 @@
1
- import{Expression as e}from"./Expression.mjs";var t=class t{_columns=[`*`];_distinct=!1;_table;_wheres=[];_joins=[];_orders=[];_groups=[];_havings=[];_limit;_offset;_bindings=[];_returning;constructor(e){this.adapter=e}select(...e){return this._columns=e.length>0?e:[`*`],this}selectRaw(t,n=[]){return this._columns.push(new e(t)),this._bindings.push(...n),this}distinct(){return this._distinct=!0,this}from(e){return this._table=e,this}where(e,t,n){return arguments.length===2&&(n=t,t=`=`),this._wheres.push({column:e,operator:t,value:n,boolean:`and`}),n!=null&&this._bindings.push(n),this}orWhere(e,t,n){return arguments.length===2&&(n=t,t=`=`),this._wheres.push({column:e,operator:t,value:n,boolean:`or`}),n!=null&&this._bindings.push(n),this}whereIn(e,t){return this._wheres.push({column:e,operator:`in`,value:t,boolean:`and`}),this._bindings.push(...t),this}whereNotIn(e,t){return this._wheres.push({column:e,operator:`not in`,value:t,boolean:`and`}),this._bindings.push(...t),this}whereNull(e){return this._wheres.push({column:e,operator:`is null`,value:null,boolean:`and`}),this}whereNotNull(e){return this._wheres.push({column:e,operator:`is not null`,value:null,boolean:`and`}),this}whereBetween(e,t){return this._wheres.push({column:e,operator:`between`,value:t,boolean:`and`}),this._bindings.push(...t),this}whereRaw(t,n=[]){return this._wheres.push({column:new e(t),operator:`raw`,value:null,boolean:`and`}),this._bindings.push(...n),this}join(e,t,n=`=`,r){return this._joins.push({type:`inner`,table:e,first:t,operator:n,second:r}),this}leftJoin(e,t,n=`=`,r){return this._joins.push({type:`left`,table:e,first:t,operator:n,second:r}),this}rightJoin(e,t,n=`=`,r){return this._joins.push({type:`right`,table:e,first:t,operator:n,second:r}),this}orderBy(e,t=`asc`){return this._orders.push({column:e,direction:t}),this}latest(e=`created_at`){return this.orderBy(e,`desc`)}oldest(e=`created_at`){return this.orderBy(e,`asc`)}groupBy(...e){return this._groups.push(...e),this}having(e,t,n){return arguments.length===2&&(n=t,t=`=`),this._havings.push({column:e,operator:t,value:n}),n!=null&&this._bindings.push(n),this}limit(e){return this._limit=e,this}take(e){return this.limit(e)}offset(e){return this._offset=e,this}skip(e){return this.offset(e)}async get(){let e=this.toSql();return await this.adapter.select(e,this.getBindings())}async first(){return(await this.limit(1).get())[0]||null}async find(e){return this.where(`id`,`=`,e).first()}async value(e){let t=await this.select(e).first();return t?t[e]:null}async pluck(e){return(await this.select(e).get()).map(t=>t[e])}async exists(){return await this.count()>0}async count(e=`*`){return this.aggregate(`COUNT`,e)}async max(e){return this.aggregate(`MAX`,e)}async min(e){return this.aggregate(`MIN`,e)}async avg(e){return this.aggregate(`AVG`,e)}async sum(e){return this.aggregate(`SUM`,e)||0}async aggregate(e,t){let n=this._columns,r=this._bindings.slice();this.selectRaw(`${e}(${t}) as aggregate`);let i=await this.first();return this._columns=n,this._bindings=r,i?i.aggregate:null}insert(e){let t=t=>this.insertReturning(e,t),n=()=>this.executeInsert(e);return{returning:t,then:(e,t)=>n().then(e,t),catch:e=>n().catch(e),finally:e=>n().finally(e)}}async executeInsert(e){if(!this._table)throw Error(`Cannot insert without specifying a table`);let t=Array.isArray(e)?e:[e];if(t.length===0)return!0;let n=Object.keys(t[0]),r=t.map(()=>`(${n.map(()=>`?`).join(`, `)})`).join(`, `),i=t.flatMap(e=>n.map(t=>e[t])),a=`INSERT INTO ${this._table} (${n.join(`, `)}) VALUES ${r}`;return await this.adapter.insert(a,i),!0}returning(e){return e?Array.isArray(e)?this._returning=e:this._returning=[e]:this._returning=[`*`],this}async insertReturning(e,t){if(!this._table)throw Error(`Cannot insert without specifying a table`);let n=Array.isArray(e)?e:[e];if(n.length===0)return Array.isArray(e)?[]:null;let r=Object.keys(n[0]),i=n.map(()=>`(${r.map(()=>`?`).join(`, `)})`).join(`, `),a=n.flatMap(e=>r.map(t=>e[t])),o=t===void 0?this._returning&&this._returning.length>0?this._returning:[`*`]:Array.isArray(t)?t:[t],s=`INSERT INTO ${this._table} (${r.join(`, `)}) VALUES ${i} RETURNING ${o.join(`, `)}`;try{let e=await this.adapter.select(s,a);return this._returning=void 0,n.length===1?e[0]??null:e}catch{let e=`INSERT INTO ${this._table} (${r.join(`, `)}) VALUES ${i}`,t=await this.adapter.insert(e,a);if(n.length===1){let e=t;if(e==null)return this._returning=void 0,null;let n=o.join(`, `),r=await this.adapter.select(`SELECT ${n} FROM ${this._table} WHERE id = ? LIMIT 1`,[e]);return this._returning=void 0,r[0]??null}throw Error(`returning() is not supported for bulk inserts on this driver. Insert succeeded without returning rows.`)}}async insertGetId(e,t){if(!this._table)throw Error(`Cannot insert without specifying a table`);let n=Object.keys(e),r=n.map(()=>`?`).join(`, `),i=n.map(t=>e[t]),a=`INSERT INTO ${this._table} (${n.join(`, `)}) VALUES (${r})`;return await this.adapter.insert(a,i)}async update(e){if(!this._table)throw Error(`Cannot update without specifying a table`);let t=Object.keys(e).map(e=>`${e} = ?`).join(`, `),n=[...Object.values(e),...this.getBindings()],r=`UPDATE ${this._table} SET ${t}`;return this._wheres.length>0&&(r+=` WHERE `+this.compileWheres()),await this.adapter.update(r,n)}async delete(){if(!this._table)throw Error(`Cannot delete without specifying a table`);let e=`DELETE FROM ${this._table}`;return this._wheres.length>0&&(e+=` WHERE `+this.compileWheres()),await this.adapter.delete(e,this.getBindings())}async truncate(){if(!this._table)throw Error(`Cannot truncate without specifying a table`);let e=`TRUNCATE TABLE ${this._table}`;await this.adapter.query(e)}toSql(){if(!this._table)throw Error(`Cannot generate SQL without specifying a table`);let e=`SELECT `;return this._distinct&&(e+=`DISTINCT `),e+=this.compileColumns(),e+=` FROM ${this._table}`,this._joins.length>0&&(e+=` `+this.compileJoins()),this._wheres.length>0&&(e+=` WHERE `+this.compileWheres()),this._groups.length>0&&(e+=` GROUP BY `+this._groups.join(`, `)),this._havings.length>0&&(e+=` HAVING `+this.compileHavings()),this._orders.length>0&&(e+=` ORDER BY `+this.compileOrders()),this._limit!==void 0&&(e+=` LIMIT ${this._limit}`),this._offset!==void 0&&(e+=` OFFSET ${this._offset}`),e}compileColumns(){return this._columns.map(e=>typeof e==`object`&&e&&`getValue`in e?e.getValue():e).join(`, `)}compileWheres(){return this._wheres.map((e,t)=>{let n=t===0?``:` ${e.boolean.toUpperCase()} `;if(e.operator===`raw`)return n+(typeof e.column==`object`&&e.column&&`getValue`in e.column?e.column.getValue():e.column);if(e.operator===`in`||e.operator===`not in`){let t=e.value.map(()=>`?`).join(`, `);return`${n}${e.column} ${e.operator.toUpperCase()} (${t})`}return e.operator===`between`?`${n}${e.column} BETWEEN ? AND ?`:e.operator===`is null`||e.operator===`is not null`?`${n}${e.column} ${e.operator.toUpperCase()}`:`${n}${e.column} ${e.operator} ?`}).join(``)}compileJoins(){return this._joins.map(e=>`${e.type.toUpperCase()} JOIN ${e.table} ON ${e.first} ${e.operator} ${e.second}`).join(` `)}compileOrders(){return this._orders.map(e=>`${e.column} ${e.direction.toUpperCase()}`).join(`, `)}compileHavings(){return this._havings.map((e,t)=>`${t===0?``:` AND `}${e.column} ${e.operator} ?`).join(``)}getBindings(){return this._bindings}clone(){let e=new t(this.adapter);return e._columns=[...this._columns],e._distinct=this._distinct,e._table=this._table,e._wheres=[...this._wheres],e._joins=[...this._joins],e._orders=[...this._orders],e._groups=[...this._groups],e._havings=[...this._havings],e._limit=this._limit,e._offset=this._offset,e._bindings=[...this._bindings],e}};export{t as Builder};
1
+ import{Expression as e}from"./Expression.mjs";var t=class t{adapter;_columns=[`*`];_distinct=!1;_table;_wheres=[];_joins=[];_orders=[];_groups=[];_havings=[];_limit;_offset;_bindings=[];_returning;constructor(e){this.adapter=e}select(...e){return this._columns=e.length>0?e:[`*`],this}selectRaw(t,n=[]){return this._columns.push(new e(t)),this._bindings.push(...n),this}distinct(){return this._distinct=!0,this}from(e){return this._table=e,this}where(e,t,n){return arguments.length===2&&(n=t,t=`=`),this._wheres.push({column:e,operator:t,value:n,boolean:`and`}),n!=null&&this._bindings.push(n),this}orWhere(e,t,n){return arguments.length===2&&(n=t,t=`=`),this._wheres.push({column:e,operator:t,value:n,boolean:`or`}),n!=null&&this._bindings.push(n),this}whereIn(e,t){return this._wheres.push({column:e,operator:`in`,value:t,boolean:`and`}),this._bindings.push(...t),this}whereNotIn(e,t){return this._wheres.push({column:e,operator:`not in`,value:t,boolean:`and`}),this._bindings.push(...t),this}whereNull(e){return this._wheres.push({column:e,operator:`is null`,value:null,boolean:`and`}),this}whereNotNull(e){return this._wheres.push({column:e,operator:`is not null`,value:null,boolean:`and`}),this}whereBetween(e,t){return this._wheres.push({column:e,operator:`between`,value:t,boolean:`and`}),this._bindings.push(...t),this}whereRaw(t,n=[]){return this._wheres.push({column:new e(t),operator:`raw`,value:null,boolean:`and`}),this._bindings.push(...n),this}join(e,t,n=`=`,r){return this._joins.push({type:`inner`,table:e,first:t,operator:n,second:r}),this}leftJoin(e,t,n=`=`,r){return this._joins.push({type:`left`,table:e,first:t,operator:n,second:r}),this}rightJoin(e,t,n=`=`,r){return this._joins.push({type:`right`,table:e,first:t,operator:n,second:r}),this}orderBy(e,t=`asc`){return this._orders.push({column:e,direction:t}),this}latest(e=`created_at`){return this.orderBy(e,`desc`)}oldest(e=`created_at`){return this.orderBy(e,`asc`)}groupBy(...e){return this._groups.push(...e),this}having(e,t,n){return arguments.length===2&&(n=t,t=`=`),this._havings.push({column:e,operator:t,value:n}),n!=null&&this._bindings.push(n),this}limit(e){return this._limit=e,this}take(e){return this.limit(e)}offset(e){return this._offset=e,this}skip(e){return this.offset(e)}async get(){let e=this.toSql();return await this.adapter.select(e,this.getBindings())}async first(){return(await this.limit(1).get())[0]||null}async find(e){return this.where(`id`,`=`,e).first()}async value(e){let t=await this.select(e).first();return t?t[e]:null}async pluck(e){return(await this.select(e).get()).map(t=>t[e])}async exists(){return await this.count()>0}async count(e=`*`){return this.aggregate(`COUNT`,e)}async max(e){return this.aggregate(`MAX`,e)}async min(e){return this.aggregate(`MIN`,e)}async avg(e){return this.aggregate(`AVG`,e)}async sum(e){return this.aggregate(`SUM`,e)||0}async aggregate(e,t){let n=this._columns,r=this._bindings.slice();this.selectRaw(`${e}(${t}) as aggregate`);let i=await this.first();return this._columns=n,this._bindings=r,i?i.aggregate:null}insert(e){let t=t=>this.insertReturning(e,t),n=()=>this.executeInsert(e);return{returning:t,then:(e,t)=>n().then(e,t),catch:e=>n().catch(e),finally:e=>n().finally(e)}}async executeInsert(e){if(!this._table)throw Error(`Cannot insert without specifying a table`);let t=Array.isArray(e)?e:[e];if(t.length===0)return!0;let n=Object.keys(t[0]),r=t.map(()=>`(${n.map(()=>`?`).join(`, `)})`).join(`, `),i=t.flatMap(e=>n.map(t=>e[t])),a=`INSERT INTO ${this._table} (${n.join(`, `)}) VALUES ${r}`;return await this.adapter.insert(a,i),!0}returning(e){return e?Array.isArray(e)?this._returning=e:this._returning=[e]:this._returning=[`*`],this}async insertReturning(e,t){if(!this._table)throw Error(`Cannot insert without specifying a table`);let n=Array.isArray(e)?e:[e];if(n.length===0)return Array.isArray(e)?[]:null;let r=Object.keys(n[0]),i=n.map(()=>`(${r.map(()=>`?`).join(`, `)})`).join(`, `),a=n.flatMap(e=>r.map(t=>e[t])),o=t===void 0?this._returning&&this._returning.length>0?this._returning:[`*`]:Array.isArray(t)?t:[t],s=`INSERT INTO ${this._table} (${r.join(`, `)}) VALUES ${i} RETURNING ${o.join(`, `)}`;try{let e=await this.adapter.select(s,a);return this._returning=void 0,n.length===1?e[0]??null:e}catch{let e=`INSERT INTO ${this._table} (${r.join(`, `)}) VALUES ${i}`,t=await this.adapter.insert(e,a);if(n.length===1){let e=t;if(e==null)return this._returning=void 0,null;let n=o.join(`, `),r=await this.adapter.select(`SELECT ${n} FROM ${this._table} WHERE id = ? LIMIT 1`,[e]);return this._returning=void 0,r[0]??null}throw Error(`returning() is not supported for bulk inserts on this driver. Insert succeeded without returning rows.`)}}async insertGetId(e,t){if(!this._table)throw Error(`Cannot insert without specifying a table`);let n=Object.keys(e),r=n.map(()=>`?`).join(`, `),i=n.map(t=>e[t]),a=`INSERT INTO ${this._table} (${n.join(`, `)}) VALUES (${r})`;return await this.adapter.insert(a,i)}async update(e){if(!this._table)throw Error(`Cannot update without specifying a table`);let t=Object.keys(e).map(e=>`${e} = ?`).join(`, `),n=[...Object.values(e),...this.getBindings()],r=`UPDATE ${this._table} SET ${t}`;return this._wheres.length>0&&(r+=` WHERE `+this.compileWheres()),await this.adapter.update(r,n)}async delete(){if(!this._table)throw Error(`Cannot delete without specifying a table`);let e=`DELETE FROM ${this._table}`;return this._wheres.length>0&&(e+=` WHERE `+this.compileWheres()),await this.adapter.delete(e,this.getBindings())}async truncate(){if(!this._table)throw Error(`Cannot truncate without specifying a table`);let e=`TRUNCATE TABLE ${this._table}`;await this.adapter.query(e)}toSql(){if(!this._table)throw Error(`Cannot generate SQL without specifying a table`);let e=`SELECT `;return this._distinct&&(e+=`DISTINCT `),e+=this.compileColumns(),e+=` FROM ${this._table}`,this._joins.length>0&&(e+=` `+this.compileJoins()),this._wheres.length>0&&(e+=` WHERE `+this.compileWheres()),this._groups.length>0&&(e+=` GROUP BY `+this._groups.join(`, `)),this._havings.length>0&&(e+=` HAVING `+this.compileHavings()),this._orders.length>0&&(e+=` ORDER BY `+this.compileOrders()),this._limit!==void 0&&(e+=` LIMIT ${this._limit}`),this._offset!==void 0&&(e+=` OFFSET ${this._offset}`),e}compileColumns(){return this._columns.map(e=>typeof e==`object`&&e&&`getValue`in e?e.getValue():e).join(`, `)}compileWheres(){return this._wheres.map((e,t)=>{let n=t===0?``:` ${e.boolean.toUpperCase()} `;if(e.operator===`raw`)return n+(typeof e.column==`object`&&e.column&&`getValue`in e.column?e.column.getValue():e.column);if(e.operator===`in`||e.operator===`not in`){let t=e.value.map(()=>`?`).join(`, `);return`${n}${e.column} ${e.operator.toUpperCase()} (${t})`}return e.operator===`between`?`${n}${e.column} BETWEEN ? AND ?`:e.operator===`is null`||e.operator===`is not null`?`${n}${e.column} ${e.operator.toUpperCase()}`:`${n}${e.column} ${e.operator} ?`}).join(``)}compileJoins(){return this._joins.map(e=>`${e.type.toUpperCase()} JOIN ${e.table} ON ${e.first} ${e.operator} ${e.second}`).join(` `)}compileOrders(){return this._orders.map(e=>`${e.column} ${e.direction.toUpperCase()}`).join(`, `)}compileHavings(){return this._havings.map((e,t)=>`${t===0?``:` AND `}${e.column} ${e.operator} ?`).join(``)}getBindings(){return this._bindings}clone(){let e=new t(this.adapter);return e._columns=[...this._columns],e._distinct=this._distinct,e._table=this._table,e._wheres=[...this._wheres],e._joins=[...this._joins],e._orders=[...this._orders],e._groups=[...this._groups],e._havings=[...this._havings],e._limit=this._limit,e._offset=this._offset,e._bindings=[...this._bindings],e}};export{t as Builder};
2
2
  //# sourceMappingURL=Builder.mjs.map