@orchestr-sh/orchestr 1.11.1 → 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 (303) hide show
  1. package/CHANGELOG.md +2 -0
  2. package/dist/Cache/CacheManager.cjs +1 -1
  3. package/dist/Cache/CacheManager.mjs +1 -1
  4. package/dist/Cache/CacheManager.mjs.map +1 -1
  5. package/dist/Cache/Events/CacheFlushed.cjs +1 -1
  6. package/dist/Cache/Events/CacheFlushed.mjs +1 -1
  7. package/dist/Cache/Events/CacheFlushed.mjs.map +1 -1
  8. package/dist/Cache/Events/CacheHit.cjs +1 -1
  9. package/dist/Cache/Events/CacheHit.mjs +1 -1
  10. package/dist/Cache/Events/CacheHit.mjs.map +1 -1
  11. package/dist/Cache/Events/CacheMissed.cjs +1 -1
  12. package/dist/Cache/Events/CacheMissed.mjs +1 -1
  13. package/dist/Cache/Events/CacheMissed.mjs.map +1 -1
  14. package/dist/Cache/Events/KeyForgotten.cjs +1 -1
  15. package/dist/Cache/Events/KeyForgotten.mjs +1 -1
  16. package/dist/Cache/Events/KeyForgotten.mjs.map +1 -1
  17. package/dist/Cache/Events/KeyWritten.cjs +1 -1
  18. package/dist/Cache/Events/KeyWritten.mjs +1 -1
  19. package/dist/Cache/Events/KeyWritten.mjs.map +1 -1
  20. package/dist/Cache/Locks/CacheLock.cjs +1 -1
  21. package/dist/Cache/Locks/CacheLock.mjs +1 -1
  22. package/dist/Cache/Locks/CacheLock.mjs.map +1 -1
  23. package/dist/Cache/Locks/Lock.cjs +1 -1
  24. package/dist/Cache/Locks/Lock.mjs +1 -1
  25. package/dist/Cache/Locks/Lock.mjs.map +1 -1
  26. package/dist/Cache/Repository.cjs +1 -1
  27. package/dist/Cache/Repository.mjs +1 -1
  28. package/dist/Cache/Repository.mjs.map +1 -1
  29. package/dist/Cache/Stores/ArrayStore.cjs +1 -1
  30. package/dist/Cache/Stores/ArrayStore.mjs +1 -1
  31. package/dist/Cache/Stores/ArrayStore.mjs.map +1 -1
  32. package/dist/Cache/Stores/DatabaseStore.cjs +1 -1
  33. package/dist/Cache/Stores/DatabaseStore.mjs +1 -1
  34. package/dist/Cache/Stores/DatabaseStore.mjs.map +1 -1
  35. package/dist/Cache/Stores/FileStore.cjs +1 -1
  36. package/dist/Cache/Stores/FileStore.mjs +1 -1
  37. package/dist/Cache/Stores/FileStore.mjs.map +1 -1
  38. package/dist/Cache/Tags/TagSet.cjs +1 -1
  39. package/dist/Cache/Tags/TagSet.mjs +1 -1
  40. package/dist/Cache/Tags/TagSet.mjs.map +1 -1
  41. package/dist/Cache/Tags/TaggedCache.cjs +1 -1
  42. package/dist/Cache/Tags/TaggedCache.mjs +1 -1
  43. package/dist/Cache/Tags/TaggedCache.mjs.map +1 -1
  44. package/dist/Console/Commands/CacheClearCommand.cjs +1 -1
  45. package/dist/Console/Commands/CacheClearCommand.mjs +1 -1
  46. package/dist/Console/Commands/CacheClearCommand.mjs.map +1 -1
  47. package/dist/Console/Commands/CacheForgetCommand.cjs +1 -1
  48. package/dist/Console/Commands/CacheForgetCommand.mjs +1 -1
  49. package/dist/Console/Commands/CacheForgetCommand.mjs.map +1 -1
  50. package/dist/Console/Commands/CacheTableCommand.cjs +1 -1
  51. package/dist/Console/Commands/CacheTableCommand.mjs +1 -1
  52. package/dist/Console/Commands/CacheTableCommand.mjs.map +1 -1
  53. package/dist/Console/Commands/DeployCommand.mjs.map +1 -1
  54. package/dist/Console/Commands/DeployEnvCommand.mjs.map +1 -1
  55. package/dist/Console/Commands/DeployInitCommand.mjs.map +1 -1
  56. package/dist/Console/Commands/DeployProvisionCommand.mjs.map +1 -1
  57. package/dist/Console/Commands/DeployRollbackCommand.mjs.map +1 -1
  58. package/dist/Console/Commands/DeployServerCommand.mjs.map +1 -1
  59. package/dist/Console/Commands/DeployStatusCommand.mjs.map +1 -1
  60. package/dist/Console/Commands/EventCacheCommand.cjs +1 -1
  61. package/dist/Console/Commands/EventCacheCommand.mjs +1 -1
  62. package/dist/Console/Commands/EventCacheCommand.mjs.map +1 -1
  63. package/dist/Console/Commands/EventClearCommand.cjs +1 -1
  64. package/dist/Console/Commands/EventClearCommand.mjs +1 -1
  65. package/dist/Console/Commands/EventClearCommand.mjs.map +1 -1
  66. package/dist/Console/Commands/EventListCommand.cjs +1 -1
  67. package/dist/Console/Commands/EventListCommand.mjs +1 -1
  68. package/dist/Console/Commands/EventListCommand.mjs.map +1 -1
  69. package/dist/Console/Commands/MakeControllerCommand.cjs +1 -1
  70. package/dist/Console/Commands/MakeControllerCommand.mjs +1 -1
  71. package/dist/Console/Commands/MakeControllerCommand.mjs.map +1 -1
  72. package/dist/Console/Commands/MakeEventCommand.cjs +1 -1
  73. package/dist/Console/Commands/MakeEventCommand.mjs +1 -1
  74. package/dist/Console/Commands/MakeEventCommand.mjs.map +1 -1
  75. package/dist/Console/Commands/MakeJobCommand.cjs +1 -1
  76. package/dist/Console/Commands/MakeJobCommand.mjs +1 -1
  77. package/dist/Console/Commands/MakeJobCommand.mjs.map +1 -1
  78. package/dist/Console/Commands/MakeListenerCommand.cjs +1 -1
  79. package/dist/Console/Commands/MakeListenerCommand.mjs +1 -1
  80. package/dist/Console/Commands/MakeListenerCommand.mjs.map +1 -1
  81. package/dist/Console/Commands/MakeMigrationCommand.cjs +1 -1
  82. package/dist/Console/Commands/MakeMigrationCommand.mjs +1 -1
  83. package/dist/Console/Commands/MakeMigrationCommand.mjs.map +1 -1
  84. package/dist/Console/Commands/MakeSeederCommand.cjs +1 -1
  85. package/dist/Console/Commands/MakeSeederCommand.mjs +1 -1
  86. package/dist/Console/Commands/MakeSeederCommand.mjs.map +1 -1
  87. package/dist/Console/Commands/MakeViewCommand.cjs +1 -1
  88. package/dist/Console/Commands/MakeViewCommand.mjs +1 -1
  89. package/dist/Console/Commands/MakeViewCommand.mjs.map +1 -1
  90. package/dist/Console/Commands/MigrateCommand.cjs +1 -1
  91. package/dist/Console/Commands/MigrateCommand.mjs +1 -1
  92. package/dist/Console/Commands/MigrateCommand.mjs.map +1 -1
  93. package/dist/Console/Commands/MigrateFreshCommand.cjs +1 -1
  94. package/dist/Console/Commands/MigrateFreshCommand.mjs +1 -1
  95. package/dist/Console/Commands/MigrateFreshCommand.mjs.map +1 -1
  96. package/dist/Console/Commands/MigrateRefreshCommand.cjs +1 -1
  97. package/dist/Console/Commands/MigrateRefreshCommand.mjs +1 -1
  98. package/dist/Console/Commands/MigrateRefreshCommand.mjs.map +1 -1
  99. package/dist/Console/Commands/MigrateResetCommand.cjs +1 -1
  100. package/dist/Console/Commands/MigrateResetCommand.mjs +1 -1
  101. package/dist/Console/Commands/MigrateResetCommand.mjs.map +1 -1
  102. package/dist/Console/Commands/MigrateRollbackCommand.cjs +1 -1
  103. package/dist/Console/Commands/MigrateRollbackCommand.mjs +1 -1
  104. package/dist/Console/Commands/MigrateRollbackCommand.mjs.map +1 -1
  105. package/dist/Console/Commands/MigrateStatusCommand.cjs +1 -1
  106. package/dist/Console/Commands/MigrateStatusCommand.mjs +1 -1
  107. package/dist/Console/Commands/MigrateStatusCommand.mjs.map +1 -1
  108. package/dist/Console/Commands/QueueBatchesTableCommand.cjs +1 -1
  109. package/dist/Console/Commands/QueueBatchesTableCommand.mjs +1 -1
  110. package/dist/Console/Commands/QueueBatchesTableCommand.mjs.map +1 -1
  111. package/dist/Console/Commands/QueueClearCommand.cjs +1 -1
  112. package/dist/Console/Commands/QueueClearCommand.mjs +1 -1
  113. package/dist/Console/Commands/QueueClearCommand.mjs.map +1 -1
  114. package/dist/Console/Commands/QueueFailedCommand.cjs +1 -1
  115. package/dist/Console/Commands/QueueFailedCommand.mjs +1 -1
  116. package/dist/Console/Commands/QueueFailedCommand.mjs.map +1 -1
  117. package/dist/Console/Commands/QueueFailedTableCommand.cjs +1 -1
  118. package/dist/Console/Commands/QueueFailedTableCommand.mjs +1 -1
  119. package/dist/Console/Commands/QueueFailedTableCommand.mjs.map +1 -1
  120. package/dist/Console/Commands/QueueFlushCommand.cjs +1 -1
  121. package/dist/Console/Commands/QueueFlushCommand.mjs +1 -1
  122. package/dist/Console/Commands/QueueFlushCommand.mjs.map +1 -1
  123. package/dist/Console/Commands/QueueForgetCommand.cjs +1 -1
  124. package/dist/Console/Commands/QueueForgetCommand.mjs +1 -1
  125. package/dist/Console/Commands/QueueForgetCommand.mjs.map +1 -1
  126. package/dist/Console/Commands/QueueMonitorCommand.cjs +1 -1
  127. package/dist/Console/Commands/QueueMonitorCommand.mjs +1 -1
  128. package/dist/Console/Commands/QueueMonitorCommand.mjs.map +1 -1
  129. package/dist/Console/Commands/QueuePruneBatchesCommand.cjs +1 -1
  130. package/dist/Console/Commands/QueuePruneBatchesCommand.mjs +1 -1
  131. package/dist/Console/Commands/QueuePruneBatchesCommand.mjs.map +1 -1
  132. package/dist/Console/Commands/QueuePruneFailedCommand.cjs +1 -1
  133. package/dist/Console/Commands/QueuePruneFailedCommand.mjs +1 -1
  134. package/dist/Console/Commands/QueuePruneFailedCommand.mjs.map +1 -1
  135. package/dist/Console/Commands/QueueRestartCommand.cjs +1 -1
  136. package/dist/Console/Commands/QueueRestartCommand.mjs +1 -1
  137. package/dist/Console/Commands/QueueRestartCommand.mjs.map +1 -1
  138. package/dist/Console/Commands/QueueRetryCommand.cjs +1 -1
  139. package/dist/Console/Commands/QueueRetryCommand.mjs +1 -1
  140. package/dist/Console/Commands/QueueRetryCommand.mjs.map +1 -1
  141. package/dist/Console/Commands/QueueTableCommand.cjs +1 -1
  142. package/dist/Console/Commands/QueueTableCommand.mjs +1 -1
  143. package/dist/Console/Commands/QueueTableCommand.mjs.map +1 -1
  144. package/dist/Console/Commands/QueueWorkCommand.cjs +1 -1
  145. package/dist/Console/Commands/QueueWorkCommand.mjs +1 -1
  146. package/dist/Console/Commands/QueueWorkCommand.mjs.map +1 -1
  147. package/dist/Console/Commands/SeedCommand.cjs +1 -1
  148. package/dist/Console/Commands/SeedCommand.mjs +1 -1
  149. package/dist/Console/Commands/SeedCommand.mjs.map +1 -1
  150. package/dist/Console/ConsoleKernel.cjs +1 -1
  151. package/dist/Console/ConsoleKernel.mjs +1 -1
  152. package/dist/Console/ConsoleKernel.mjs.map +1 -1
  153. package/dist/Console/orchestr.mjs.map +1 -1
  154. package/dist/Container/Container.mjs.map +1 -1
  155. package/dist/Database/Adapters/DrizzleAdapter.cjs +1 -1
  156. package/dist/Database/Adapters/DrizzleAdapter.mjs +1 -1
  157. package/dist/Database/Adapters/DrizzleAdapter.mjs.map +1 -1
  158. package/dist/Database/Connection.cjs +1 -1
  159. package/dist/Database/Connection.mjs +1 -1
  160. package/dist/Database/Connection.mjs.map +1 -1
  161. package/dist/Database/DatabaseManager.cjs +1 -1
  162. package/dist/Database/DatabaseManager.mjs +1 -1
  163. package/dist/Database/DatabaseManager.mjs.map +1 -1
  164. package/dist/Database/Ensemble/Ensemble.mjs.map +1 -1
  165. package/dist/Database/Ensemble/EnsembleBuilder.mjs.map +1 -1
  166. package/dist/Database/Ensemble/EnsembleCollection.cjs +1 -1
  167. package/dist/Database/Ensemble/EnsembleCollection.mjs +1 -1
  168. package/dist/Database/Ensemble/EnsembleCollection.mjs.map +1 -1
  169. package/dist/Database/Ensemble/Relations/BelongsTo.mjs.map +1 -1
  170. package/dist/Database/Ensemble/Relations/BelongsToMany.cjs +1 -1
  171. package/dist/Database/Ensemble/Relations/BelongsToMany.mjs +1 -1
  172. package/dist/Database/Ensemble/Relations/BelongsToMany.mjs.map +1 -1
  173. package/dist/Database/Ensemble/Relations/HasMany.mjs.map +1 -1
  174. package/dist/Database/Ensemble/Relations/MorphTo.mjs.map +1 -1
  175. package/dist/Database/Ensemble/Relations/MorphToMany.mjs.map +1 -1
  176. package/dist/Database/Migrations/Blueprint.cjs +1 -1
  177. package/dist/Database/Migrations/Blueprint.mjs +1 -1
  178. package/dist/Database/Migrations/Blueprint.mjs.map +1 -1
  179. package/dist/Database/Migrations/MigrationCreator.cjs +1 -1
  180. package/dist/Database/Migrations/MigrationCreator.mjs +1 -1
  181. package/dist/Database/Migrations/MigrationCreator.mjs.map +1 -1
  182. package/dist/Database/Migrations/MigrationRepository.cjs +1 -1
  183. package/dist/Database/Migrations/MigrationRepository.mjs +1 -1
  184. package/dist/Database/Migrations/MigrationRepository.mjs.map +1 -1
  185. package/dist/Database/Migrations/Migrator.cjs +1 -1
  186. package/dist/Database/Migrations/Migrator.mjs +1 -1
  187. package/dist/Database/Migrations/Migrator.mjs.map +1 -1
  188. package/dist/Database/Migrations/SchemaBuilder.cjs +1 -1
  189. package/dist/Database/Migrations/SchemaBuilder.mjs +1 -1
  190. package/dist/Database/Migrations/SchemaBuilder.mjs.map +1 -1
  191. package/dist/Database/Query/Builder.cjs +1 -1
  192. package/dist/Database/Query/Builder.mjs +1 -1
  193. package/dist/Database/Query/Builder.mjs.map +1 -1
  194. package/dist/Database/Query/Expression.cjs +1 -1
  195. package/dist/Database/Query/Expression.mjs +1 -1
  196. package/dist/Database/Query/Expression.mjs.map +1 -1
  197. package/dist/Database/Seeders/SeederRunner.cjs +1 -1
  198. package/dist/Database/Seeders/SeederRunner.mjs +1 -1
  199. package/dist/Database/Seeders/SeederRunner.mjs.map +1 -1
  200. package/dist/Deploy/Deployer.cjs +1 -1
  201. package/dist/Deploy/Deployer.mjs +1 -1
  202. package/dist/Deploy/Deployer.mjs.map +1 -1
  203. package/dist/Deploy/ProjectConfig.mjs.map +1 -1
  204. package/dist/Deploy/Provisioner.cjs +1 -1
  205. package/dist/Deploy/Provisioner.mjs +1 -1
  206. package/dist/Deploy/Provisioner.mjs.map +1 -1
  207. package/dist/Deploy/SSHConnection.mjs.map +1 -1
  208. package/dist/Deploy/SymphonyClient.cjs +1 -1
  209. package/dist/Deploy/SymphonyClient.mjs +1 -1
  210. package/dist/Deploy/SymphonyClient.mjs.map +1 -1
  211. package/dist/Deploy/TarBuilder.mjs.map +1 -1
  212. package/dist/Deploy/prompt.mjs.map +1 -1
  213. package/dist/Events/Dispatcher.cjs +1 -1
  214. package/dist/Events/Dispatcher.mjs +1 -1
  215. package/dist/Events/Dispatcher.mjs.map +1 -1
  216. package/dist/Events/EventServiceProvider.cjs +1 -1
  217. package/dist/Events/EventServiceProvider.mjs.map +1 -1
  218. package/dist/Facades/Bus.mjs.map +1 -1
  219. package/dist/Facades/Cache.mjs.map +1 -1
  220. package/dist/Facades/Config.mjs.map +1 -1
  221. package/dist/Facades/DB.mjs.map +1 -1
  222. package/dist/Facades/Event.mjs.map +1 -1
  223. package/dist/Facades/Queue.mjs.map +1 -1
  224. package/dist/Facades/Route.mjs.map +1 -1
  225. package/dist/Facades/View.mjs.map +1 -1
  226. package/dist/Foundation/Application.mjs.map +1 -1
  227. package/dist/Foundation/Http/FormRequest.mjs.map +1 -1
  228. package/dist/Foundation/Http/Rules/AnyOfRule.mjs.map +1 -1
  229. package/dist/Foundation/Http/Rules/ImageFileRule.mjs.map +1 -1
  230. package/dist/Foundation/Http/Validator.mjs.map +1 -1
  231. package/dist/Queue/Batching/Batch.cjs +1 -1
  232. package/dist/Queue/Batching/Batch.mjs +1 -1
  233. package/dist/Queue/Batching/Batch.mjs.map +1 -1
  234. package/dist/Queue/Batching/PendingBatch.cjs +1 -1
  235. package/dist/Queue/Batching/PendingBatch.mjs +1 -1
  236. package/dist/Queue/Batching/PendingBatch.mjs.map +1 -1
  237. package/dist/Queue/Concerns/Dispatchable.mjs.map +1 -1
  238. package/dist/Queue/Drivers/DatabaseDriver.cjs +1 -1
  239. package/dist/Queue/Drivers/DatabaseDriver.mjs +1 -1
  240. package/dist/Queue/Drivers/DatabaseDriver.mjs.map +1 -1
  241. package/dist/Queue/Drivers/NullDriver.cjs +1 -1
  242. package/dist/Queue/Drivers/NullDriver.mjs +1 -1
  243. package/dist/Queue/Drivers/NullDriver.mjs.map +1 -1
  244. package/dist/Queue/Drivers/SyncDriver.cjs +1 -1
  245. package/dist/Queue/Drivers/SyncDriver.mjs +1 -1
  246. package/dist/Queue/Drivers/SyncDriver.mjs.map +1 -1
  247. package/dist/Queue/Events/JobExceptionOccurred.cjs +1 -1
  248. package/dist/Queue/Events/JobExceptionOccurred.mjs +1 -1
  249. package/dist/Queue/Events/JobExceptionOccurred.mjs.map +1 -1
  250. package/dist/Queue/Events/JobFailed.cjs +1 -1
  251. package/dist/Queue/Events/JobFailed.mjs +1 -1
  252. package/dist/Queue/Events/JobFailed.mjs.map +1 -1
  253. package/dist/Queue/Events/JobProcessed.cjs +1 -1
  254. package/dist/Queue/Events/JobProcessed.mjs +1 -1
  255. package/dist/Queue/Events/JobProcessed.mjs.map +1 -1
  256. package/dist/Queue/Events/JobProcessing.cjs +1 -1
  257. package/dist/Queue/Events/JobProcessing.mjs +1 -1
  258. package/dist/Queue/Events/JobProcessing.mjs.map +1 -1
  259. package/dist/Queue/Events/JobQueued.cjs +1 -1
  260. package/dist/Queue/Events/JobQueued.mjs +1 -1
  261. package/dist/Queue/Events/JobQueued.mjs.map +1 -1
  262. package/dist/Queue/Events/JobRetryRequested.cjs +1 -1
  263. package/dist/Queue/Events/JobRetryRequested.mjs +1 -1
  264. package/dist/Queue/Events/JobRetryRequested.mjs.map +1 -1
  265. package/dist/Queue/Events/WorkerStopping.cjs +1 -1
  266. package/dist/Queue/Events/WorkerStopping.mjs +1 -1
  267. package/dist/Queue/Events/WorkerStopping.mjs.map +1 -1
  268. package/dist/Queue/Failed/DatabaseFailedJobProvider.cjs +1 -1
  269. package/dist/Queue/Failed/DatabaseFailedJobProvider.mjs +1 -1
  270. package/dist/Queue/Failed/DatabaseFailedJobProvider.mjs.map +1 -1
  271. package/dist/Queue/Middleware/RateLimited.cjs +1 -1
  272. package/dist/Queue/Middleware/RateLimited.mjs +1 -1
  273. package/dist/Queue/Middleware/RateLimited.mjs.map +1 -1
  274. package/dist/Queue/Middleware/ThrottlesExceptions.cjs +1 -1
  275. package/dist/Queue/Middleware/ThrottlesExceptions.mjs +1 -1
  276. package/dist/Queue/Middleware/ThrottlesExceptions.mjs.map +1 -1
  277. package/dist/Queue/Middleware/WithoutOverlapping.cjs +1 -1
  278. package/dist/Queue/Middleware/WithoutOverlapping.mjs +1 -1
  279. package/dist/Queue/Middleware/WithoutOverlapping.mjs.map +1 -1
  280. package/dist/Queue/PendingChain.cjs +1 -1
  281. package/dist/Queue/PendingChain.mjs +1 -1
  282. package/dist/Queue/PendingChain.mjs.map +1 -1
  283. package/dist/Queue/PendingDispatch.cjs +1 -1
  284. package/dist/Queue/PendingDispatch.mjs +1 -1
  285. package/dist/Queue/PendingDispatch.mjs.map +1 -1
  286. package/dist/Queue/QueueManager.cjs +1 -1
  287. package/dist/Queue/QueueManager.mjs +1 -1
  288. package/dist/Queue/QueueManager.mjs.map +1 -1
  289. package/dist/Queue/QueueServiceProvider.mjs.map +1 -1
  290. package/dist/Queue/Workers/Worker.cjs +1 -1
  291. package/dist/Queue/Workers/Worker.mjs +1 -1
  292. package/dist/Queue/Workers/Worker.mjs.map +1 -1
  293. package/dist/Routing/Request.mjs.map +1 -1
  294. package/dist/Routing/Response.mjs.map +1 -1
  295. package/dist/Support/EventDiscovery.cjs +1 -1
  296. package/dist/Support/EventDiscovery.mjs +1 -1
  297. package/dist/Support/EventDiscovery.mjs.map +1 -1
  298. package/dist/Support/Testing/Fakes/EventFake.cjs +1 -1
  299. package/dist/Support/Testing/Fakes/EventFake.mjs +1 -1
  300. package/dist/Support/Testing/Fakes/EventFake.mjs.map +1 -1
  301. package/dist/Support/helpers.mjs.map +1 -1
  302. package/dist/View/Engines/TemplateEngine.mjs.map +1 -1
  303. package/package.json +17 -17
@@ -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
@@ -1 +1 @@
1
- {"version":3,"file":"Builder.mjs","names":[],"sources":["../../../src/Database/Query/Builder.ts"],"sourcesContent":["/**\n * Query Builder\n *\n * Fluent query builder for constructing database queries\n */\n\nimport { DatabaseAdapter } from '@/Database/Contracts/DatabaseAdapter';\nimport {\n QueryBuilderInterface,\n WhereOperator,\n OrderDirection,\n JoinType,\n WhereClause,\n JoinClause,\n OrderByClause,\n} from '@/Database/Contracts/QueryBuilderInterface';\nimport { Expression } from './Expression';\n\nexport class Builder<T = any> implements QueryBuilderInterface<T> {\n protected _columns: string[] = ['*'];\n protected _distinct: boolean = false;\n protected _table?: string;\n protected _wheres: WhereClause[] = [];\n protected _joins: JoinClause[] = [];\n protected _orders: OrderByClause[] = [];\n protected _groups: string[] = [];\n protected _havings: any[] = [];\n protected _limit?: number;\n protected _offset?: number;\n protected _bindings: any[] = [];\n protected _returning?: string[];\n\n constructor(protected adapter: DatabaseAdapter) {}\n\n /**\n * Set the columns to be selected\n */\n select(...columns: string[]): this {\n this._columns = columns.length > 0 ? columns : ['*'];\n return this;\n }\n\n /**\n * Add a raw select expression\n */\n selectRaw(sql: string, bindings: any[] = []): this {\n this._columns.push(new Expression(sql) as any);\n this._bindings.push(...bindings);\n return this;\n }\n\n /**\n * Force the query to only return distinct results\n */\n distinct(): this {\n this._distinct = true;\n return this;\n }\n\n /**\n * Set the table which the query is targeting\n */\n from(table: string): this {\n this._table = table;\n return this;\n }\n\n /**\n * Add a basic where clause\n */\n where(column: string, operator?: WhereOperator | any, value?: any): this {\n // Handle where(column, value) syntax\n if (arguments.length === 2) {\n value = operator;\n operator = '=';\n }\n\n this._wheres.push({\n column,\n operator: operator as WhereOperator,\n value,\n boolean: 'and',\n });\n\n if (value !== undefined && value !== null) {\n this._bindings.push(value);\n }\n\n return this;\n }\n\n /**\n * Add an \"or where\" clause\n */\n orWhere(column: string, operator?: WhereOperator | any, value?: any): this {\n if (arguments.length === 2) {\n value = operator;\n operator = '=';\n }\n\n this._wheres.push({\n column,\n operator: operator as WhereOperator,\n value,\n boolean: 'or',\n });\n\n if (value !== undefined && value !== null) {\n this._bindings.push(value);\n }\n\n return this;\n }\n\n /**\n * Add a where in clause\n */\n whereIn(column: string, values: any[]): this {\n this._wheres.push({\n column,\n operator: 'in',\n value: values,\n boolean: 'and',\n });\n\n this._bindings.push(...values);\n return this;\n }\n\n /**\n * Add a where not in clause\n */\n whereNotIn(column: string, values: any[]): this {\n this._wheres.push({\n column,\n operator: 'not in',\n value: values,\n boolean: 'and',\n });\n\n this._bindings.push(...values);\n return this;\n }\n\n /**\n * Add a where null clause\n */\n whereNull(column: string): this {\n this._wheres.push({\n column,\n operator: 'is null',\n value: null,\n boolean: 'and',\n });\n\n return this;\n }\n\n /**\n * Add a where not null clause\n */\n whereNotNull(column: string): this {\n this._wheres.push({\n column,\n operator: 'is not null',\n value: null,\n boolean: 'and',\n });\n\n return this;\n }\n\n /**\n * Add a where between clause\n */\n whereBetween(column: string, values: [any, any]): this {\n this._wheres.push({\n column,\n operator: 'between',\n value: values,\n boolean: 'and',\n });\n\n this._bindings.push(...values);\n return this;\n }\n\n /**\n * Add a raw where clause\n */\n whereRaw(sql: string, bindings: any[] = []): this {\n this._wheres.push({\n column: new Expression(sql) as any,\n operator: 'raw',\n value: null,\n boolean: 'and',\n });\n\n this._bindings.push(...bindings);\n return this;\n }\n\n /**\n * Add a join clause\n */\n join(table: string, first: string, operator: string = '=', second?: string): this {\n this._joins.push({\n type: 'inner',\n table,\n first,\n operator,\n second,\n });\n\n return this;\n }\n\n /**\n * Add a left join clause\n */\n leftJoin(table: string, first: string, operator: string = '=', second?: string): this {\n this._joins.push({\n type: 'left',\n table,\n first,\n operator,\n second,\n });\n\n return this;\n }\n\n /**\n * Add a right join clause\n */\n rightJoin(table: string, first: string, operator: string = '=', second?: string): this {\n this._joins.push({\n type: 'right',\n table,\n first,\n operator,\n second,\n });\n\n return this;\n }\n\n /**\n * Add an order by clause\n */\n orderBy(column: string, direction: OrderDirection = 'asc'): this {\n this._orders.push({ column, direction });\n return this;\n }\n\n /**\n * Order by latest (descending created_at)\n */\n latest(column: string = 'created_at'): this {\n return this.orderBy(column, 'desc');\n }\n\n /**\n * Order by oldest (ascending created_at)\n */\n oldest(column: string = 'created_at'): this {\n return this.orderBy(column, 'asc');\n }\n\n /**\n * Add a group by clause\n */\n groupBy(...columns: string[]): this {\n this._groups.push(...columns);\n return this;\n }\n\n /**\n * Add a having clause\n */\n having(column: string, operator?: string, value?: any): this {\n if (arguments.length === 2) {\n value = operator;\n operator = '=';\n }\n\n this._havings.push({ column, operator, value });\n\n if (value !== undefined && value !== null) {\n this._bindings.push(value);\n }\n\n return this;\n }\n\n /**\n * Set the limit\n */\n limit(value: number): this {\n this._limit = value;\n return this;\n }\n\n /**\n * Alias for limit\n */\n take(value: number): this {\n return this.limit(value);\n }\n\n /**\n * Set the offset\n */\n offset(value: number): this {\n this._offset = value;\n return this;\n }\n\n /**\n * Alias for offset\n */\n skip(value: number): this {\n return this.offset(value);\n }\n\n /**\n * Get all records\n */\n async get(): Promise<T[]> {\n const sql = this.toSql();\n const results = await this.adapter.select<T>(sql, this.getBindings());\n return results;\n }\n\n /**\n * Get the first record\n */\n async first(): Promise<T | null> {\n const results = await this.limit(1).get();\n return results[0] || null;\n }\n\n /**\n * Find a record by ID\n */\n async find(id: any): Promise<T | null> {\n return this.where('id', '=', id).first();\n }\n\n /**\n * Get a single column's value\n */\n async value(column: string): Promise<any> {\n const result = await this.select(column).first();\n return result ? (result as any)[column] : null;\n }\n\n /**\n * Get an array of column values\n */\n async pluck(column: string): Promise<any[]> {\n const results = await this.select(column).get();\n return results.map((row) => (row as any)[column]);\n }\n\n /**\n * Determine if any rows exist\n */\n async exists(): Promise<boolean> {\n const count = await this.count();\n return count > 0;\n }\n\n /**\n * Get the count of records\n */\n async count(column: string = '*'): Promise<number> {\n return this.aggregate('COUNT', column);\n }\n\n /**\n * Get the maximum value of a column\n */\n async max(column: string): Promise<number | null> {\n return this.aggregate('MAX', column);\n }\n\n /**\n * Get the minimum value of a column\n */\n async min(column: string): Promise<number | null> {\n return this.aggregate('MIN', column);\n }\n\n /**\n * Get the average value of a column\n */\n async avg(column: string): Promise<number | null> {\n return this.aggregate('AVG', column);\n }\n\n /**\n * Get the sum of a column's values\n */\n async sum(column: string): Promise<number> {\n return this.aggregate('SUM', column) || 0;\n }\n\n /**\n * Execute an aggregate function\n */\n protected async aggregate(func: string, column: string): Promise<any> {\n const previousColumns = this._columns;\n const previousBindings = this._bindings.slice();\n\n this.selectRaw(`${func}(${column}) as aggregate`);\n\n const result = await this.first();\n\n this._columns = previousColumns;\n this._bindings = previousBindings;\n\n return result ? (result as any)['aggregate'] : null;\n }\n\n /**\n * Insert a new record\n */\n insert(values: Record<string, any> | Record<string, any>[]): Promise<boolean> & {\n returning(columns?: string | string[]): Promise<any | any[]>;\n } {\n const returningFn = (columns?: string | string[]) => this.insertReturning(values, columns);\n const exec = () => this.executeInsert(values);\n const chain: any = {\n returning: returningFn,\n then: (onfulfilled: any, onrejected: any) => exec().then(onfulfilled, onrejected),\n catch: (onrejected: any) => exec().catch(onrejected),\n finally: (onfinally: any) => exec().finally(onfinally),\n };\n return chain as Promise<boolean> & { returning: typeof returningFn };\n }\n\n protected async executeInsert(values: Record<string, any> | Record<string, any>[]): Promise<boolean> {\n if (!this._table) {\n throw new Error('Cannot insert without specifying a table');\n }\n\n const records = Array.isArray(values) ? values : [values];\n if (records.length === 0) {\n return true;\n }\n\n const columns = Object.keys(records[0]);\n const placeholders = records.map(() => `(${columns.map(() => '?').join(', ')})`).join(', ');\n const bindings = records.flatMap((record) => columns.map((col) => record[col]));\n const sql = `INSERT INTO ${this._table} (${columns.join(', ')}) VALUES ${placeholders}`;\n await this.adapter.insert(sql, bindings);\n return true;\n }\n\n /**\n * Specify returning columns for insert/update operations\n */\n returning(columns?: string | string[]): this {\n if (!columns) {\n this._returning = ['*'];\n } else if (Array.isArray(columns)) {\n this._returning = columns;\n } else {\n this._returning = [columns];\n }\n return this;\n }\n\n /**\n * Insert and return selected columns\n * - Single insert: returns one row (object)\n * - Bulk insert: returns array of rows\n * - Fallbacks for drivers without RETURNING (e.g., MySQL)\n */\n async insertReturning(\n values: Record<string, any> | Record<string, any>[],\n columns?: string | string[]\n ): Promise<any | any[]> {\n if (!this._table) {\n throw new Error('Cannot insert without specifying a table');\n }\n\n const records = Array.isArray(values) ? values : [values];\n if (records.length === 0) {\n return Array.isArray(values) ? [] : null;\n }\n\n const insertCols = Object.keys(records[0]);\n const placeholders = records.map(() => `(${insertCols.map(() => '?').join(', ')})`).join(', ');\n const bindings = records.flatMap((record) => insertCols.map((col) => record[col]));\n\n const retCols =\n columns === undefined\n ? this._returning && this._returning.length > 0\n ? this._returning\n : ['*']\n : Array.isArray(columns)\n ? columns\n : [columns];\n\n const sqlWithReturning = `INSERT INTO ${this._table} (${insertCols.join(', ')}) VALUES ${placeholders} RETURNING ${retCols.join(\n ', '\n )}`;\n\n try {\n const rows = await this.adapter.select<any>(sqlWithReturning, bindings);\n // Reset returning state after use\n this._returning = undefined;\n return records.length === 1 ? (rows[0] ?? null) : rows;\n } catch (error) {\n // Fallback for drivers without RETURNING (e.g., MySQL)\n const sqlNoReturning = `INSERT INTO ${this._table} (${insertCols.join(', ')}) VALUES ${placeholders}`;\n const insertResult = await this.adapter.insert(sqlNoReturning, bindings);\n\n // Only supported fallback: single-row insert by primary key ID\n if (records.length === 1) {\n const id = insertResult;\n // If no id is obtainable, return minimal best-effort (null)\n if (id === undefined || id === null) {\n this._returning = undefined;\n return null;\n }\n\n const selectCols = retCols.join(', ');\n const row = await this.adapter.select<any>(`SELECT ${selectCols} FROM ${this._table} WHERE id = ? LIMIT 1`, [\n id,\n ]);\n this._returning = undefined;\n return row[0] ?? null;\n }\n\n // Bulk insert not supported on drivers without RETURNING\n throw new Error(\n 'returning() is not supported for bulk inserts on this driver. Insert succeeded without returning rows.'\n );\n }\n }\n\n /**\n * Insert a new record and get the ID\n */\n async insertGetId(values: Record<string, any>, sequence?: string): Promise<any> {\n if (!this._table) {\n throw new Error('Cannot insert without specifying a table');\n }\n\n const columns = Object.keys(values);\n const placeholders = columns.map(() => '?').join(', ');\n const bindings = columns.map((col) => values[col]);\n\n const sql = `INSERT INTO ${this._table} (${columns.join(', ')}) VALUES (${placeholders})`;\n\n return await this.adapter.insert(sql, bindings);\n }\n\n /**\n * Update records\n */\n async update(values: Record<string, any>): Promise<number> {\n if (!this._table) {\n throw new Error('Cannot update without specifying a table');\n }\n\n const sets = Object.keys(values)\n .map((key) => `${key} = ?`)\n .join(', ');\n\n const bindings = [...Object.values(values), ...this.getBindings()];\n\n let sql = `UPDATE ${this._table} SET ${sets}`;\n\n if (this._wheres.length > 0) {\n sql += ' WHERE ' + this.compileWheres();\n }\n\n return await this.adapter.update(sql, bindings);\n }\n\n /**\n * Delete records\n */\n async delete(): Promise<number> {\n if (!this._table) {\n throw new Error('Cannot delete without specifying a table');\n }\n\n let sql = `DELETE FROM ${this._table}`;\n\n if (this._wheres.length > 0) {\n sql += ' WHERE ' + this.compileWheres();\n }\n\n return await this.adapter.delete(sql, this.getBindings());\n }\n\n /**\n * Truncate the table\n */\n async truncate(): Promise<void> {\n if (!this._table) {\n throw new Error('Cannot truncate without specifying a table');\n }\n\n const sql = `TRUNCATE TABLE ${this._table}`;\n await this.adapter.query(sql);\n }\n\n /**\n * Get the SQL query string\n */\n toSql(): string {\n if (!this._table) {\n throw new Error('Cannot generate SQL without specifying a table');\n }\n\n let sql = 'SELECT ';\n\n if (this._distinct) {\n sql += 'DISTINCT ';\n }\n\n sql += this.compileColumns();\n sql += ` FROM ${this._table}`;\n\n if (this._joins.length > 0) {\n sql += ' ' + this.compileJoins();\n }\n\n if (this._wheres.length > 0) {\n sql += ' WHERE ' + this.compileWheres();\n }\n\n if (this._groups.length > 0) {\n sql += ' GROUP BY ' + this._groups.join(', ');\n }\n\n if (this._havings.length > 0) {\n sql += ' HAVING ' + this.compileHavings();\n }\n\n if (this._orders.length > 0) {\n sql += ' ORDER BY ' + this.compileOrders();\n }\n\n if (this._limit !== undefined) {\n sql += ` LIMIT ${this._limit}`;\n }\n\n if (this._offset !== undefined) {\n sql += ` OFFSET ${this._offset}`;\n }\n\n return sql;\n }\n\n /**\n * Compile the columns\n */\n protected compileColumns(): string {\n return this._columns\n .map((col) => (typeof col === 'object' && col && 'getValue' in col ? (col as Expression).getValue() : col))\n .join(', ');\n }\n\n /**\n * Compile the where clauses\n */\n protected compileWheres(): string {\n return this._wheres\n .map((where, index) => {\n const boolean = index === 0 ? '' : ` ${where.boolean.toUpperCase()} `;\n\n if (where.operator === 'raw') {\n return (\n boolean +\n (typeof where.column === 'object' && where.column && 'getValue' in where.column\n ? (where.column as Expression).getValue()\n : where.column)\n );\n }\n\n if (where.operator === 'in' || where.operator === 'not in') {\n const placeholders = (where.value as any[]).map(() => '?').join(', ');\n return `${boolean}${where.column} ${where.operator.toUpperCase()} (${placeholders})`;\n }\n\n if (where.operator === 'between') {\n return `${boolean}${where.column} BETWEEN ? AND ?`;\n }\n\n if (where.operator === 'is null' || where.operator === 'is not null') {\n return `${boolean}${where.column} ${where.operator.toUpperCase()}`;\n }\n\n return `${boolean}${where.column} ${where.operator} ?`;\n })\n .join('');\n }\n\n /**\n * Compile the join clauses\n */\n protected compileJoins(): string {\n return this._joins\n .map((join) => {\n const type = join.type.toUpperCase();\n return `${type} JOIN ${join.table} ON ${join.first} ${join.operator} ${join.second}`;\n })\n .join(' ');\n }\n\n /**\n * Compile the order by clauses\n */\n protected compileOrders(): string {\n return this._orders.map((order) => `${order.column} ${order.direction.toUpperCase()}`).join(', ');\n }\n\n /**\n * Compile the having clauses\n */\n protected compileHavings(): string {\n return this._havings\n .map((having, index) => {\n const boolean = index === 0 ? '' : ' AND ';\n return `${boolean}${having.column} ${having.operator} ?`;\n })\n .join('');\n }\n\n /**\n * Get the bindings for the query\n */\n getBindings(): any[] {\n return this._bindings;\n }\n\n /**\n * Clone the query builder\n */\n clone(): Builder<T> {\n const cloned = new Builder<T>(this.adapter);\n cloned._columns = [...this._columns];\n cloned._distinct = this._distinct;\n cloned._table = this._table;\n cloned._wheres = [...this._wheres];\n cloned._joins = [...this._joins];\n cloned._orders = [...this._orders];\n cloned._groups = [...this._groups];\n cloned._havings = [...this._havings];\n cloned._limit = this._limit;\n cloned._offset = this._offset;\n cloned._bindings = [...this._bindings];\n return cloned;\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"Builder.mjs","names":[],"sources":["../../../src/Database/Query/Builder.ts"],"sourcesContent":["/**\n * Query Builder\n *\n * Fluent query builder for constructing database queries\n */\n\nimport { DatabaseAdapter } from '@/Database/Contracts/DatabaseAdapter';\nimport {\n QueryBuilderInterface,\n WhereOperator,\n OrderDirection,\n JoinType,\n WhereClause,\n JoinClause,\n OrderByClause,\n} from '@/Database/Contracts/QueryBuilderInterface';\nimport { Expression } from './Expression';\n\nexport class Builder<T = any> implements QueryBuilderInterface<T> {\n protected _columns: string[] = ['*'];\n protected _distinct: boolean = false;\n protected _table?: string;\n protected _wheres: WhereClause[] = [];\n protected _joins: JoinClause[] = [];\n protected _orders: OrderByClause[] = [];\n protected _groups: string[] = [];\n protected _havings: any[] = [];\n protected _limit?: number;\n protected _offset?: number;\n protected _bindings: any[] = [];\n protected _returning?: string[];\n\n constructor(protected adapter: DatabaseAdapter) {}\n\n /**\n * Set the columns to be selected\n */\n select(...columns: string[]): this {\n this._columns = columns.length > 0 ? columns : ['*'];\n return this;\n }\n\n /**\n * Add a raw select expression\n */\n selectRaw(sql: string, bindings: any[] = []): this {\n this._columns.push(new Expression(sql) as any);\n this._bindings.push(...bindings);\n return this;\n }\n\n /**\n * Force the query to only return distinct results\n */\n distinct(): this {\n this._distinct = true;\n return this;\n }\n\n /**\n * Set the table which the query is targeting\n */\n from(table: string): this {\n this._table = table;\n return this;\n }\n\n /**\n * Add a basic where clause\n */\n where(column: string, operator?: WhereOperator | any, value?: any): this {\n // Handle where(column, value) syntax\n if (arguments.length === 2) {\n value = operator;\n operator = '=';\n }\n\n this._wheres.push({\n column,\n operator: operator as WhereOperator,\n value,\n boolean: 'and',\n });\n\n if (value !== undefined && value !== null) {\n this._bindings.push(value);\n }\n\n return this;\n }\n\n /**\n * Add an \"or where\" clause\n */\n orWhere(column: string, operator?: WhereOperator | any, value?: any): this {\n if (arguments.length === 2) {\n value = operator;\n operator = '=';\n }\n\n this._wheres.push({\n column,\n operator: operator as WhereOperator,\n value,\n boolean: 'or',\n });\n\n if (value !== undefined && value !== null) {\n this._bindings.push(value);\n }\n\n return this;\n }\n\n /**\n * Add a where in clause\n */\n whereIn(column: string, values: any[]): this {\n this._wheres.push({\n column,\n operator: 'in',\n value: values,\n boolean: 'and',\n });\n\n this._bindings.push(...values);\n return this;\n }\n\n /**\n * Add a where not in clause\n */\n whereNotIn(column: string, values: any[]): this {\n this._wheres.push({\n column,\n operator: 'not in',\n value: values,\n boolean: 'and',\n });\n\n this._bindings.push(...values);\n return this;\n }\n\n /**\n * Add a where null clause\n */\n whereNull(column: string): this {\n this._wheres.push({\n column,\n operator: 'is null',\n value: null,\n boolean: 'and',\n });\n\n return this;\n }\n\n /**\n * Add a where not null clause\n */\n whereNotNull(column: string): this {\n this._wheres.push({\n column,\n operator: 'is not null',\n value: null,\n boolean: 'and',\n });\n\n return this;\n }\n\n /**\n * Add a where between clause\n */\n whereBetween(column: string, values: [any, any]): this {\n this._wheres.push({\n column,\n operator: 'between',\n value: values,\n boolean: 'and',\n });\n\n this._bindings.push(...values);\n return this;\n }\n\n /**\n * Add a raw where clause\n */\n whereRaw(sql: string, bindings: any[] = []): this {\n this._wheres.push({\n column: new Expression(sql) as any,\n operator: 'raw',\n value: null,\n boolean: 'and',\n });\n\n this._bindings.push(...bindings);\n return this;\n }\n\n /**\n * Add a join clause\n */\n join(table: string, first: string, operator: string = '=', second?: string): this {\n this._joins.push({\n type: 'inner',\n table,\n first,\n operator,\n second,\n });\n\n return this;\n }\n\n /**\n * Add a left join clause\n */\n leftJoin(table: string, first: string, operator: string = '=', second?: string): this {\n this._joins.push({\n type: 'left',\n table,\n first,\n operator,\n second,\n });\n\n return this;\n }\n\n /**\n * Add a right join clause\n */\n rightJoin(table: string, first: string, operator: string = '=', second?: string): this {\n this._joins.push({\n type: 'right',\n table,\n first,\n operator,\n second,\n });\n\n return this;\n }\n\n /**\n * Add an order by clause\n */\n orderBy(column: string, direction: OrderDirection = 'asc'): this {\n this._orders.push({ column, direction });\n return this;\n }\n\n /**\n * Order by latest (descending created_at)\n */\n latest(column: string = 'created_at'): this {\n return this.orderBy(column, 'desc');\n }\n\n /**\n * Order by oldest (ascending created_at)\n */\n oldest(column: string = 'created_at'): this {\n return this.orderBy(column, 'asc');\n }\n\n /**\n * Add a group by clause\n */\n groupBy(...columns: string[]): this {\n this._groups.push(...columns);\n return this;\n }\n\n /**\n * Add a having clause\n */\n having(column: string, operator?: string, value?: any): this {\n if (arguments.length === 2) {\n value = operator;\n operator = '=';\n }\n\n this._havings.push({ column, operator, value });\n\n if (value !== undefined && value !== null) {\n this._bindings.push(value);\n }\n\n return this;\n }\n\n /**\n * Set the limit\n */\n limit(value: number): this {\n this._limit = value;\n return this;\n }\n\n /**\n * Alias for limit\n */\n take(value: number): this {\n return this.limit(value);\n }\n\n /**\n * Set the offset\n */\n offset(value: number): this {\n this._offset = value;\n return this;\n }\n\n /**\n * Alias for offset\n */\n skip(value: number): this {\n return this.offset(value);\n }\n\n /**\n * Get all records\n */\n async get(): Promise<T[]> {\n const sql = this.toSql();\n const results = await this.adapter.select<T>(sql, this.getBindings());\n return results;\n }\n\n /**\n * Get the first record\n */\n async first(): Promise<T | null> {\n const results = await this.limit(1).get();\n return results[0] || null;\n }\n\n /**\n * Find a record by ID\n */\n async find(id: any): Promise<T | null> {\n return this.where('id', '=', id).first();\n }\n\n /**\n * Get a single column's value\n */\n async value(column: string): Promise<any> {\n const result = await this.select(column).first();\n return result ? (result as any)[column] : null;\n }\n\n /**\n * Get an array of column values\n */\n async pluck(column: string): Promise<any[]> {\n const results = await this.select(column).get();\n return results.map((row) => (row as any)[column]);\n }\n\n /**\n * Determine if any rows exist\n */\n async exists(): Promise<boolean> {\n const count = await this.count();\n return count > 0;\n }\n\n /**\n * Get the count of records\n */\n async count(column: string = '*'): Promise<number> {\n return this.aggregate('COUNT', column);\n }\n\n /**\n * Get the maximum value of a column\n */\n async max(column: string): Promise<number | null> {\n return this.aggregate('MAX', column);\n }\n\n /**\n * Get the minimum value of a column\n */\n async min(column: string): Promise<number | null> {\n return this.aggregate('MIN', column);\n }\n\n /**\n * Get the average value of a column\n */\n async avg(column: string): Promise<number | null> {\n return this.aggregate('AVG', column);\n }\n\n /**\n * Get the sum of a column's values\n */\n async sum(column: string): Promise<number> {\n return this.aggregate('SUM', column) || 0;\n }\n\n /**\n * Execute an aggregate function\n */\n protected async aggregate(func: string, column: string): Promise<any> {\n const previousColumns = this._columns;\n const previousBindings = this._bindings.slice();\n\n this.selectRaw(`${func}(${column}) as aggregate`);\n\n const result = await this.first();\n\n this._columns = previousColumns;\n this._bindings = previousBindings;\n\n return result ? (result as any)['aggregate'] : null;\n }\n\n /**\n * Insert a new record\n */\n insert(values: Record<string, any> | Record<string, any>[]): Promise<boolean> & {\n returning(columns?: string | string[]): Promise<any | any[]>;\n } {\n const returningFn = (columns?: string | string[]) => this.insertReturning(values, columns);\n const exec = () => this.executeInsert(values);\n const chain: any = {\n returning: returningFn,\n then: (onfulfilled: any, onrejected: any) => exec().then(onfulfilled, onrejected),\n catch: (onrejected: any) => exec().catch(onrejected),\n finally: (onfinally: any) => exec().finally(onfinally),\n };\n return chain as Promise<boolean> & { returning: typeof returningFn };\n }\n\n protected async executeInsert(values: Record<string, any> | Record<string, any>[]): Promise<boolean> {\n if (!this._table) {\n throw new Error('Cannot insert without specifying a table');\n }\n\n const records = Array.isArray(values) ? values : [values];\n if (records.length === 0) {\n return true;\n }\n\n const columns = Object.keys(records[0]);\n const placeholders = records.map(() => `(${columns.map(() => '?').join(', ')})`).join(', ');\n const bindings = records.flatMap((record) => columns.map((col) => record[col]));\n const sql = `INSERT INTO ${this._table} (${columns.join(', ')}) VALUES ${placeholders}`;\n await this.adapter.insert(sql, bindings);\n return true;\n }\n\n /**\n * Specify returning columns for insert/update operations\n */\n returning(columns?: string | string[]): this {\n if (!columns) {\n this._returning = ['*'];\n } else if (Array.isArray(columns)) {\n this._returning = columns;\n } else {\n this._returning = [columns];\n }\n return this;\n }\n\n /**\n * Insert and return selected columns\n * - Single insert: returns one row (object)\n * - Bulk insert: returns array of rows\n * - Fallbacks for drivers without RETURNING (e.g., MySQL)\n */\n async insertReturning(\n values: Record<string, any> | Record<string, any>[],\n columns?: string | string[]\n ): Promise<any | any[]> {\n if (!this._table) {\n throw new Error('Cannot insert without specifying a table');\n }\n\n const records = Array.isArray(values) ? values : [values];\n if (records.length === 0) {\n return Array.isArray(values) ? [] : null;\n }\n\n const insertCols = Object.keys(records[0]);\n const placeholders = records.map(() => `(${insertCols.map(() => '?').join(', ')})`).join(', ');\n const bindings = records.flatMap((record) => insertCols.map((col) => record[col]));\n\n const retCols =\n columns === undefined\n ? this._returning && this._returning.length > 0\n ? this._returning\n : ['*']\n : Array.isArray(columns)\n ? columns\n : [columns];\n\n const sqlWithReturning = `INSERT INTO ${this._table} (${insertCols.join(', ')}) VALUES ${placeholders} RETURNING ${retCols.join(\n ', '\n )}`;\n\n try {\n const rows = await this.adapter.select<any>(sqlWithReturning, bindings);\n // Reset returning state after use\n this._returning = undefined;\n return records.length === 1 ? (rows[0] ?? null) : rows;\n } catch (error) {\n // Fallback for drivers without RETURNING (e.g., MySQL)\n const sqlNoReturning = `INSERT INTO ${this._table} (${insertCols.join(', ')}) VALUES ${placeholders}`;\n const insertResult = await this.adapter.insert(sqlNoReturning, bindings);\n\n // Only supported fallback: single-row insert by primary key ID\n if (records.length === 1) {\n const id = insertResult;\n // If no id is obtainable, return minimal best-effort (null)\n if (id === undefined || id === null) {\n this._returning = undefined;\n return null;\n }\n\n const selectCols = retCols.join(', ');\n const row = await this.adapter.select<any>(`SELECT ${selectCols} FROM ${this._table} WHERE id = ? LIMIT 1`, [\n id,\n ]);\n this._returning = undefined;\n return row[0] ?? null;\n }\n\n // Bulk insert not supported on drivers without RETURNING\n throw new Error(\n 'returning() is not supported for bulk inserts on this driver. Insert succeeded without returning rows.'\n );\n }\n }\n\n /**\n * Insert a new record and get the ID\n */\n async insertGetId(values: Record<string, any>, sequence?: string): Promise<any> {\n if (!this._table) {\n throw new Error('Cannot insert without specifying a table');\n }\n\n const columns = Object.keys(values);\n const placeholders = columns.map(() => '?').join(', ');\n const bindings = columns.map((col) => values[col]);\n\n const sql = `INSERT INTO ${this._table} (${columns.join(', ')}) VALUES (${placeholders})`;\n\n return await this.adapter.insert(sql, bindings);\n }\n\n /**\n * Update records\n */\n async update(values: Record<string, any>): Promise<number> {\n if (!this._table) {\n throw new Error('Cannot update without specifying a table');\n }\n\n const sets = Object.keys(values)\n .map((key) => `${key} = ?`)\n .join(', ');\n\n const bindings = [...Object.values(values), ...this.getBindings()];\n\n let sql = `UPDATE ${this._table} SET ${sets}`;\n\n if (this._wheres.length > 0) {\n sql += ' WHERE ' + this.compileWheres();\n }\n\n return await this.adapter.update(sql, bindings);\n }\n\n /**\n * Delete records\n */\n async delete(): Promise<number> {\n if (!this._table) {\n throw new Error('Cannot delete without specifying a table');\n }\n\n let sql = `DELETE FROM ${this._table}`;\n\n if (this._wheres.length > 0) {\n sql += ' WHERE ' + this.compileWheres();\n }\n\n return await this.adapter.delete(sql, this.getBindings());\n }\n\n /**\n * Truncate the table\n */\n async truncate(): Promise<void> {\n if (!this._table) {\n throw new Error('Cannot truncate without specifying a table');\n }\n\n const sql = `TRUNCATE TABLE ${this._table}`;\n await this.adapter.query(sql);\n }\n\n /**\n * Get the SQL query string\n */\n toSql(): string {\n if (!this._table) {\n throw new Error('Cannot generate SQL without specifying a table');\n }\n\n let sql = 'SELECT ';\n\n if (this._distinct) {\n sql += 'DISTINCT ';\n }\n\n sql += this.compileColumns();\n sql += ` FROM ${this._table}`;\n\n if (this._joins.length > 0) {\n sql += ' ' + this.compileJoins();\n }\n\n if (this._wheres.length > 0) {\n sql += ' WHERE ' + this.compileWheres();\n }\n\n if (this._groups.length > 0) {\n sql += ' GROUP BY ' + this._groups.join(', ');\n }\n\n if (this._havings.length > 0) {\n sql += ' HAVING ' + this.compileHavings();\n }\n\n if (this._orders.length > 0) {\n sql += ' ORDER BY ' + this.compileOrders();\n }\n\n if (this._limit !== undefined) {\n sql += ` LIMIT ${this._limit}`;\n }\n\n if (this._offset !== undefined) {\n sql += ` OFFSET ${this._offset}`;\n }\n\n return sql;\n }\n\n /**\n * Compile the columns\n */\n protected compileColumns(): string {\n return this._columns\n .map((col) => (typeof col === 'object' && col && 'getValue' in col ? (col as Expression).getValue() : col))\n .join(', ');\n }\n\n /**\n * Compile the where clauses\n */\n protected compileWheres(): string {\n return this._wheres\n .map((where, index) => {\n const boolean = index === 0 ? '' : ` ${where.boolean.toUpperCase()} `;\n\n if (where.operator === 'raw') {\n return (\n boolean +\n (typeof where.column === 'object' && where.column && 'getValue' in where.column\n ? (where.column as Expression).getValue()\n : where.column)\n );\n }\n\n if (where.operator === 'in' || where.operator === 'not in') {\n const placeholders = (where.value as any[]).map(() => '?').join(', ');\n return `${boolean}${where.column} ${where.operator.toUpperCase()} (${placeholders})`;\n }\n\n if (where.operator === 'between') {\n return `${boolean}${where.column} BETWEEN ? AND ?`;\n }\n\n if (where.operator === 'is null' || where.operator === 'is not null') {\n return `${boolean}${where.column} ${where.operator.toUpperCase()}`;\n }\n\n return `${boolean}${where.column} ${where.operator} ?`;\n })\n .join('');\n }\n\n /**\n * Compile the join clauses\n */\n protected compileJoins(): string {\n return this._joins\n .map((join) => {\n const type = join.type.toUpperCase();\n return `${type} JOIN ${join.table} ON ${join.first} ${join.operator} ${join.second}`;\n })\n .join(' ');\n }\n\n /**\n * Compile the order by clauses\n */\n protected compileOrders(): string {\n return this._orders.map((order) => `${order.column} ${order.direction.toUpperCase()}`).join(', ');\n }\n\n /**\n * Compile the having clauses\n */\n protected compileHavings(): string {\n return this._havings\n .map((having, index) => {\n const boolean = index === 0 ? '' : ' AND ';\n return `${boolean}${having.column} ${having.operator} ?`;\n })\n .join('');\n }\n\n /**\n * Get the bindings for the query\n */\n getBindings(): any[] {\n return this._bindings;\n }\n\n /**\n * Clone the query builder\n */\n clone(): Builder<T> {\n const cloned = new Builder<T>(this.adapter);\n cloned._columns = [...this._columns];\n cloned._distinct = this._distinct;\n cloned._table = this._table;\n cloned._wheres = [...this._wheres];\n cloned._joins = [...this._joins];\n cloned._orders = [...this._orders];\n cloned._groups = [...this._groups];\n cloned._havings = [...this._havings];\n cloned._limit = this._limit;\n cloned._offset = this._offset;\n cloned._bindings = [...this._bindings];\n return cloned;\n }\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- require(`../../_virtual/_rolldown/runtime.cjs`);var e=class{constructor(e){this.value=e}getValue(){return this.value}toString(){return this.value}};function t(t){return new e(t)}exports.Expression=e,exports.raw=t;
1
+ require(`../../_virtual/_rolldown/runtime.cjs`);var e=class{value;constructor(e){this.value=e}getValue(){return this.value}toString(){return this.value}};function t(t){return new e(t)}exports.Expression=e,exports.raw=t;
@@ -1,2 +1,2 @@
1
- var e=class{constructor(e){this.value=e}getValue(){return this.value}toString(){return this.value}};function t(t){return new e(t)}export{e as Expression,t as raw};
1
+ var e=class{value;constructor(e){this.value=e}getValue(){return this.value}toString(){return this.value}};function t(t){return new e(t)}export{e as Expression,t as raw};
2
2
  //# sourceMappingURL=Expression.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"Expression.mjs","names":[],"sources":["../../../src/Database/Query/Expression.ts"],"sourcesContent":["/**\n * Expression Class\n *\n * Represents a raw SQL expression\n */\n\nexport class Expression {\n constructor(private readonly value: string) {}\n\n /**\n * Get the value of the expression\n */\n getValue(): string {\n return this.value;\n }\n\n /**\n * Convert the expression to a string\n */\n toString(): string {\n return this.value;\n }\n}\n\n/**\n * Create a new raw expression\n */\nexport function raw(value: string): Expression {\n return new Expression(value);\n}\n"],"mappings":"AAMA,IAAa,EAAb,KAAwB,CACtB,YAAY,EAAgC,CAAf,KAAA,MAAA,EAK7B,UAAmB,CACjB,OAAO,KAAK,MAMd,UAAmB,CACjB,OAAO,KAAK,QAOhB,SAAgB,EAAI,EAA2B,CAC7C,OAAO,IAAI,EAAW,EAAM"}
1
+ {"version":3,"file":"Expression.mjs","names":[],"sources":["../../../src/Database/Query/Expression.ts"],"sourcesContent":["/**\n * Expression Class\n *\n * Represents a raw SQL expression\n */\n\nexport class Expression {\n constructor(private readonly value: string) {}\n\n /**\n * Get the value of the expression\n */\n getValue(): string {\n return this.value;\n }\n\n /**\n * Convert the expression to a string\n */\n toString(): string {\n return this.value;\n }\n}\n\n/**\n * Create a new raw expression\n */\nexport function raw(value: string): Expression {\n return new Expression(value);\n}\n"],"mappings":"AAMA,IAAa,EAAb,KAAwB,CACO,MAA7B,YAAY,EAAgC,CAAf,KAAA,MAAA,EAK7B,UAAmB,CACjB,OAAO,KAAK,MAMd,UAAmB,CACjB,OAAO,KAAK,QAOhB,SAAgB,EAAI,EAA2B,CAC7C,OAAO,IAAI,EAAW,EAAM"}
@@ -1 +1 @@
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,t){this.connection=e,this.paths=t}async run(e){let t;t=e?new e:new(await(this.resolveDatabaseSeeder())),t.setConnection(this.connection),await t.run()}async runByName(e){let t=await this.resolveSeeder(e);await this.run(t)}async resolveDatabaseSeeder(){for(let e of this.paths){let r=t.join(e,`DatabaseSeeder`);if(n.existsSync(r+`.ts`))return await this.importSeeder(r+`.ts`);if(n.existsSync(r+`.js`))return await this.importSeeder(r+`.js`)}throw Error(`DatabaseSeeder not found`)}async resolveSeeder(e){for(let r of this.paths){let i=t.join(r,e);if(n.existsSync(i+`.ts`))return await this.importSeeder(i+`.ts`);if(n.existsSync(i+`.js`))return await this.importSeeder(i+`.js`)}throw Error(`Seeder not found: ${e}`)}async importSeeder(e){let t=await import(e),n=t.default||Object.values(t)[0];if(!n)throw Error(`No seeder class found in: ${e}`);return n}setPaths(e){this.paths=e}getPaths(){return this.paths}};exports.SeederRunner=r;
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{connection;paths;constructor(e,t){this.connection=e,this.paths=t}async run(e){let t;t=e?new e:new(await(this.resolveDatabaseSeeder())),t.setConnection(this.connection),await t.run()}async runByName(e){let t=await this.resolveSeeder(e);await this.run(t)}async resolveDatabaseSeeder(){for(let e of this.paths){let r=t.join(e,`DatabaseSeeder`);if(n.existsSync(r+`.ts`))return await this.importSeeder(r+`.ts`);if(n.existsSync(r+`.js`))return await this.importSeeder(r+`.js`)}throw Error(`DatabaseSeeder not found`)}async resolveSeeder(e){for(let r of this.paths){let i=t.join(r,e);if(n.existsSync(i+`.ts`))return await this.importSeeder(i+`.ts`);if(n.existsSync(i+`.js`))return await this.importSeeder(i+`.js`)}throw Error(`Seeder not found: ${e}`)}async importSeeder(e){let t=await import(e),n=t.default||Object.values(t)[0];if(!n)throw Error(`No seeder class found in: ${e}`);return n}setPaths(e){this.paths=e}getPaths(){return this.paths}};exports.SeederRunner=r;
@@ -1,2 +1,2 @@
1
- import*as e from"path";import*as t from"fs";var n=class{constructor(e,t){this.connection=e,this.paths=t}async run(e){let t;t=e?new e:new(await(this.resolveDatabaseSeeder())),t.setConnection(this.connection),await t.run()}async runByName(e){let t=await this.resolveSeeder(e);await this.run(t)}async resolveDatabaseSeeder(){for(let n of this.paths){let r=e.join(n,`DatabaseSeeder`);if(t.existsSync(r+`.ts`))return await this.importSeeder(r+`.ts`);if(t.existsSync(r+`.js`))return await this.importSeeder(r+`.js`)}throw Error(`DatabaseSeeder not found`)}async resolveSeeder(n){for(let r of this.paths){let i=e.join(r,n);if(t.existsSync(i+`.ts`))return await this.importSeeder(i+`.ts`);if(t.existsSync(i+`.js`))return await this.importSeeder(i+`.js`)}throw Error(`Seeder not found: ${n}`)}async importSeeder(e){let t=await import(e),n=t.default||Object.values(t)[0];if(!n)throw Error(`No seeder class found in: ${e}`);return n}setPaths(e){this.paths=e}getPaths(){return this.paths}};export{n as SeederRunner};
1
+ import*as e from"path";import*as t from"fs";var n=class{connection;paths;constructor(e,t){this.connection=e,this.paths=t}async run(e){let t;t=e?new e:new(await(this.resolveDatabaseSeeder())),t.setConnection(this.connection),await t.run()}async runByName(e){let t=await this.resolveSeeder(e);await this.run(t)}async resolveDatabaseSeeder(){for(let n of this.paths){let r=e.join(n,`DatabaseSeeder`);if(t.existsSync(r+`.ts`))return await this.importSeeder(r+`.ts`);if(t.existsSync(r+`.js`))return await this.importSeeder(r+`.js`)}throw Error(`DatabaseSeeder not found`)}async resolveSeeder(n){for(let r of this.paths){let i=e.join(r,n);if(t.existsSync(i+`.ts`))return await this.importSeeder(i+`.ts`);if(t.existsSync(i+`.js`))return await this.importSeeder(i+`.js`)}throw Error(`Seeder not found: ${n}`)}async importSeeder(e){let t=await import(e),n=t.default||Object.values(t)[0];if(!n)throw Error(`No seeder class found in: ${e}`);return n}setPaths(e){this.paths=e}getPaths(){return this.paths}};export{n as SeederRunner};
2
2
  //# sourceMappingURL=SeederRunner.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"SeederRunner.mjs","names":[],"sources":["../../../src/Database/Seeders/SeederRunner.ts"],"sourcesContent":["/**\n * SeederRunner\n *\n * Runs database seeders\n */\n\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport { Connection } from '@/Database/Connection';\nimport { Seeder } from './Seeder';\n\nexport class SeederRunner {\n constructor(\n protected connection: Connection,\n protected paths: string[]\n ) {}\n\n /**\n * Run a specific seeder class\n */\n async run(seederClass?: new () => Seeder): Promise<void> {\n let seeder: Seeder;\n\n if (seederClass) {\n seeder = new seederClass();\n } else {\n // Try to find DatabaseSeeder\n const DatabaseSeeder = await this.resolveDatabaseSeeder();\n seeder = new DatabaseSeeder();\n }\n\n seeder.setConnection(this.connection);\n await seeder.run();\n }\n\n /**\n * Run a seeder by name\n */\n async runByName(name: string): Promise<void> {\n const SeederClass = await this.resolveSeeder(name);\n await this.run(SeederClass);\n }\n\n /**\n * Resolve the DatabaseSeeder class\n */\n protected async resolveDatabaseSeeder(): Promise<new () => Seeder> {\n for (const searchPath of this.paths) {\n const databaseSeederPath = path.join(searchPath, 'DatabaseSeeder');\n\n // Try with .ts extension\n if (fs.existsSync(databaseSeederPath + '.ts')) {\n return await this.importSeeder(databaseSeederPath + '.ts');\n }\n\n // Try with .js extension\n if (fs.existsSync(databaseSeederPath + '.js')) {\n return await this.importSeeder(databaseSeederPath + '.js');\n }\n }\n\n throw new Error('DatabaseSeeder not found');\n }\n\n /**\n * Resolve a seeder class by name\n */\n protected async resolveSeeder(name: string): Promise<new () => Seeder> {\n for (const searchPath of this.paths) {\n const seederPath = path.join(searchPath, name);\n\n // Try with .ts extension\n if (fs.existsSync(seederPath + '.ts')) {\n return await this.importSeeder(seederPath + '.ts');\n }\n\n // Try with .js extension\n if (fs.existsSync(seederPath + '.js')) {\n return await this.importSeeder(seederPath + '.js');\n }\n }\n\n throw new Error(`Seeder not found: ${name}`);\n }\n\n /**\n * Import a seeder file\n */\n protected async importSeeder(filePath: string): Promise<new () => Seeder> {\n const seederModule = await import(filePath);\n\n // Get the default export or the first class export\n const SeederClass = seederModule.default || Object.values(seederModule)[0];\n\n if (!SeederClass) {\n throw new Error(`No seeder class found in: ${filePath}`);\n }\n\n return SeederClass as new () => Seeder;\n }\n\n /**\n * Set the seeder paths\n */\n setPaths(paths: string[]): void {\n this.paths = paths;\n }\n\n /**\n * Get the seeder paths\n */\n getPaths(): string[] {\n return this.paths;\n }\n}\n"],"mappings":"4CAWA,IAAa,EAAb,KAA0B,CACxB,YACE,EACA,EACA,CAFU,KAAA,WAAA,EACA,KAAA,MAAA,EAMZ,MAAM,IAAI,EAA+C,CACvD,IAAI,EAEJ,AAKE,EALE,EACO,IAAI,EAIJ,IADc,MAAM,KAAK,uBAAuB,GAI3D,EAAO,cAAc,KAAK,WAAW,CACrC,MAAM,EAAO,KAAK,CAMpB,MAAM,UAAU,EAA6B,CAC3C,IAAM,EAAc,MAAM,KAAK,cAAc,EAAK,CAClD,MAAM,KAAK,IAAI,EAAY,CAM7B,MAAgB,uBAAmD,CACjE,IAAK,IAAM,KAAc,KAAK,MAAO,CACnC,IAAM,EAAqB,EAAK,KAAK,EAAY,iBAAiB,CAGlE,GAAI,EAAG,WAAW,EAAqB,MAAM,CAC3C,OAAO,MAAM,KAAK,aAAa,EAAqB,MAAM,CAI5D,GAAI,EAAG,WAAW,EAAqB,MAAM,CAC3C,OAAO,MAAM,KAAK,aAAa,EAAqB,MAAM,CAI9D,MAAU,MAAM,2BAA2B,CAM7C,MAAgB,cAAc,EAAyC,CACrE,IAAK,IAAM,KAAc,KAAK,MAAO,CACnC,IAAM,EAAa,EAAK,KAAK,EAAY,EAAK,CAG9C,GAAI,EAAG,WAAW,EAAa,MAAM,CACnC,OAAO,MAAM,KAAK,aAAa,EAAa,MAAM,CAIpD,GAAI,EAAG,WAAW,EAAa,MAAM,CACnC,OAAO,MAAM,KAAK,aAAa,EAAa,MAAM,CAItD,MAAU,MAAM,qBAAqB,IAAO,CAM9C,MAAgB,aAAa,EAA6C,CACxE,IAAM,EAAe,MAAM,OAAO,GAG5B,EAAc,EAAa,SAAW,OAAO,OAAO,EAAa,CAAC,GAExE,GAAI,CAAC,EACH,MAAU,MAAM,6BAA6B,IAAW,CAG1D,OAAO,EAMT,SAAS,EAAuB,CAC9B,KAAK,MAAQ,EAMf,UAAqB,CACnB,OAAO,KAAK"}
1
+ {"version":3,"file":"SeederRunner.mjs","names":[],"sources":["../../../src/Database/Seeders/SeederRunner.ts"],"sourcesContent":["/**\n * SeederRunner\n *\n * Runs database seeders\n */\n\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport { Connection } from '@/Database/Connection';\nimport { Seeder } from './Seeder';\n\nexport class SeederRunner {\n constructor(\n protected connection: Connection,\n protected paths: string[]\n ) {}\n\n /**\n * Run a specific seeder class\n */\n async run(seederClass?: new () => Seeder): Promise<void> {\n let seeder: Seeder;\n\n if (seederClass) {\n seeder = new seederClass();\n } else {\n // Try to find DatabaseSeeder\n const DatabaseSeeder = await this.resolveDatabaseSeeder();\n seeder = new DatabaseSeeder();\n }\n\n seeder.setConnection(this.connection);\n await seeder.run();\n }\n\n /**\n * Run a seeder by name\n */\n async runByName(name: string): Promise<void> {\n const SeederClass = await this.resolveSeeder(name);\n await this.run(SeederClass);\n }\n\n /**\n * Resolve the DatabaseSeeder class\n */\n protected async resolveDatabaseSeeder(): Promise<new () => Seeder> {\n for (const searchPath of this.paths) {\n const databaseSeederPath = path.join(searchPath, 'DatabaseSeeder');\n\n // Try with .ts extension\n if (fs.existsSync(databaseSeederPath + '.ts')) {\n return await this.importSeeder(databaseSeederPath + '.ts');\n }\n\n // Try with .js extension\n if (fs.existsSync(databaseSeederPath + '.js')) {\n return await this.importSeeder(databaseSeederPath + '.js');\n }\n }\n\n throw new Error('DatabaseSeeder not found');\n }\n\n /**\n * Resolve a seeder class by name\n */\n protected async resolveSeeder(name: string): Promise<new () => Seeder> {\n for (const searchPath of this.paths) {\n const seederPath = path.join(searchPath, name);\n\n // Try with .ts extension\n if (fs.existsSync(seederPath + '.ts')) {\n return await this.importSeeder(seederPath + '.ts');\n }\n\n // Try with .js extension\n if (fs.existsSync(seederPath + '.js')) {\n return await this.importSeeder(seederPath + '.js');\n }\n }\n\n throw new Error(`Seeder not found: ${name}`);\n }\n\n /**\n * Import a seeder file\n */\n protected async importSeeder(filePath: string): Promise<new () => Seeder> {\n const seederModule = await import(filePath);\n\n // Get the default export or the first class export\n const SeederClass = seederModule.default || Object.values(seederModule)[0];\n\n if (!SeederClass) {\n throw new Error(`No seeder class found in: ${filePath}`);\n }\n\n return SeederClass as new () => Seeder;\n }\n\n /**\n * Set the seeder paths\n */\n setPaths(paths: string[]): void {\n this.paths = paths;\n }\n\n /**\n * Get the seeder paths\n */\n getPaths(): string[] {\n return this.paths;\n }\n}\n"],"mappings":"4CAWA,IAAa,EAAb,KAA0B,CAEZ,WACA,MAFZ,YACE,EACA,EACA,CAFU,KAAA,WAAA,EACA,KAAA,MAAA,EAMZ,MAAM,IAAI,EAA+C,CACvD,IAAI,EAEJ,AAKE,EALE,EACO,IAAI,EAIJ,IAAI,MADgB,KAAK,uBAAuB,GAI3D,EAAO,cAAc,KAAK,WAAW,CACrC,MAAM,EAAO,KAAK,CAMpB,MAAM,UAAU,EAA6B,CAC3C,IAAM,EAAc,MAAM,KAAK,cAAc,EAAK,CAClD,MAAM,KAAK,IAAI,EAAY,CAM7B,MAAgB,uBAAmD,CACjE,IAAK,IAAM,KAAc,KAAK,MAAO,CACnC,IAAM,EAAqB,EAAK,KAAK,EAAY,iBAAiB,CAGlE,GAAI,EAAG,WAAW,EAAqB,MAAM,CAC3C,OAAO,MAAM,KAAK,aAAa,EAAqB,MAAM,CAI5D,GAAI,EAAG,WAAW,EAAqB,MAAM,CAC3C,OAAO,MAAM,KAAK,aAAa,EAAqB,MAAM,CAI9D,MAAU,MAAM,2BAA2B,CAM7C,MAAgB,cAAc,EAAyC,CACrE,IAAK,IAAM,KAAc,KAAK,MAAO,CACnC,IAAM,EAAa,EAAK,KAAK,EAAY,EAAK,CAG9C,GAAI,EAAG,WAAW,EAAa,MAAM,CACnC,OAAO,MAAM,KAAK,aAAa,EAAa,MAAM,CAIpD,GAAI,EAAG,WAAW,EAAa,MAAM,CACnC,OAAO,MAAM,KAAK,aAAa,EAAa,MAAM,CAItD,MAAU,MAAM,qBAAqB,IAAO,CAM9C,MAAgB,aAAa,EAA6C,CACxE,IAAM,EAAe,MAAM,OAAO,GAG5B,EAAc,EAAa,SAAW,OAAO,OAAO,EAAa,CAAC,GAExE,GAAI,CAAC,EACH,MAAU,MAAM,6BAA6B,IAAW,CAG1D,OAAO,EAMT,SAAS,EAAuB,CAC9B,KAAK,MAAQ,EAMf,UAAqB,CACnB,OAAO,KAAK"}
@@ -1,4 +1,4 @@
1
- require(`../_virtual/_rolldown/runtime.cjs`);const e=require(`./SSHConnection.cjs`);var t=class{constructor(e){this.client=e}async deployToServer(t,n){let{tarPath:r,timestamp:i,deploymentUuid:a,projectSlug:o,keyPath:s,migrate:c}=n,l=new e.SSHConnection({host:t.host,user:t.ssh_user,port:t.port,keyPath:s}),u=t.deploy_path,d=`${u}/releases/${i}`,f=`${u}/current`,p=`${u}/shared/.env`,m=`${u}/shared/storage`,h=`${d}/deploy.tar.gz`,g=[],_=(e,t)=>{t&&g.push(`→ ${t}`);let n=l.exec(e,{silent:!0});n.trim()&&g.push(n.trim())};try{return _(`mkdir -p "${d}"`,`Creating release directory`),g.push(`→ Uploading build artifact`),l.upload(r,h),_(`tar -xzf "${h}" -C "${d}" && rm "${h}"`,`Extracting`),_(`cd "${d}" && npm install --omit=dev --no-audit --no-fund 2>&1`,`Installing dependencies`),_(`[ -f "${p}" ] && ln -sf "${p}" "${d}/.env" || true`,`Linking .env`),_(`[ -d "${m}" ] && ln -sf "${m}" "${d}/storage" || true`,`Linking storage`),c&&_(`cd "${d}" && npx orchestr migrate 2>&1`,`Running migrations`),_(`ln -sfn "${d}" "${f}"`,`Activating release`),_(`cd "${f}" && ECOSYSTEM=$([ -f ecosystem.config.cjs ] && echo ecosystem.config.cjs || echo ecosystem.config.js) && (pm2 reload "$ECOSYSTEM" --update-env 2>&1 || pm2 start "$ECOSYSTEM" 2>&1)`,`Reloading PM2`),_(`ls -dt "${u}/releases"/*/ 2>/dev/null | tail -n +6 | xargs rm -rf 2>/dev/null || true`,`Cleaning old releases`),await this.client.updateDeployment(o,a,{status:`active`,log:g.join(`
1
+ require(`../_virtual/_rolldown/runtime.cjs`);const e=require(`./SSHConnection.cjs`);var t=class{client;constructor(e){this.client=e}async deployToServer(t,n){let{tarPath:r,timestamp:i,deploymentUuid:a,projectSlug:o,keyPath:s,migrate:c}=n,l=new e.SSHConnection({host:t.host,user:t.ssh_user,port:t.port,keyPath:s}),u=t.deploy_path,d=`${u}/releases/${i}`,f=`${u}/current`,p=`${u}/shared/.env`,m=`${u}/shared/storage`,h=`${d}/deploy.tar.gz`,g=[],_=(e,t)=>{t&&g.push(`→ ${t}`);let n=l.exec(e,{silent:!0});n.trim()&&g.push(n.trim())};try{return _(`mkdir -p "${d}"`,`Creating release directory`),g.push(`→ Uploading build artifact`),l.upload(r,h),_(`tar -xzf "${h}" -C "${d}" && rm "${h}"`,`Extracting`),_(`cd "${d}" && npm install --omit=dev --no-audit --no-fund 2>&1`,`Installing dependencies`),_(`[ -f "${p}" ] && ln -sf "${p}" "${d}/.env" || true`,`Linking .env`),_(`[ -d "${m}" ] && ln -sf "${m}" "${d}/storage" || true`,`Linking storage`),c&&_(`cd "${d}" && npx orchestr migrate 2>&1`,`Running migrations`),_(`ln -sfn "${d}" "${f}"`,`Activating release`),_(`cd "${f}" && ECOSYSTEM=$([ -f ecosystem.config.cjs ] && echo ecosystem.config.cjs || echo ecosystem.config.js) && (pm2 reload "$ECOSYSTEM" --update-env 2>&1 || pm2 start "$ECOSYSTEM" 2>&1)`,`Reloading PM2`),_(`ls -dt "${u}/releases"/*/ 2>/dev/null | tail -n +6 | xargs rm -rf 2>/dev/null || true`,`Cleaning old releases`),await this.client.updateDeployment(o,a,{status:`active`,log:g.join(`
2
2
  `)}),g.join(`
3
3
  `)}catch(e){let t=e.message;throw g.push(`✗ Error: ${t}`),await this.client.updateDeployment(o,a,{status:`failed`,log:g.join(`
4
4
  `)}).catch(()=>{}),Error(g.join(`
@@ -1,4 +1,4 @@
1
- import{SSHConnection as e}from"./SSHConnection.mjs";var t=class{constructor(e){this.client=e}async deployToServer(t,n){let{tarPath:r,timestamp:i,deploymentUuid:a,projectSlug:o,keyPath:s,migrate:c}=n,l=new e({host:t.host,user:t.ssh_user,port:t.port,keyPath:s}),u=t.deploy_path,d=`${u}/releases/${i}`,f=`${u}/current`,p=`${u}/shared/.env`,m=`${u}/shared/storage`,h=`${d}/deploy.tar.gz`,g=[],_=(e,t)=>{t&&g.push(`→ ${t}`);let n=l.exec(e,{silent:!0});n.trim()&&g.push(n.trim())};try{return _(`mkdir -p "${d}"`,`Creating release directory`),g.push(`→ Uploading build artifact`),l.upload(r,h),_(`tar -xzf "${h}" -C "${d}" && rm "${h}"`,`Extracting`),_(`cd "${d}" && npm install --omit=dev --no-audit --no-fund 2>&1`,`Installing dependencies`),_(`[ -f "${p}" ] && ln -sf "${p}" "${d}/.env" || true`,`Linking .env`),_(`[ -d "${m}" ] && ln -sf "${m}" "${d}/storage" || true`,`Linking storage`),c&&_(`cd "${d}" && npx orchestr migrate 2>&1`,`Running migrations`),_(`ln -sfn "${d}" "${f}"`,`Activating release`),_(`cd "${f}" && ECOSYSTEM=$([ -f ecosystem.config.cjs ] && echo ecosystem.config.cjs || echo ecosystem.config.js) && (pm2 reload "$ECOSYSTEM" --update-env 2>&1 || pm2 start "$ECOSYSTEM" 2>&1)`,`Reloading PM2`),_(`ls -dt "${u}/releases"/*/ 2>/dev/null | tail -n +6 | xargs rm -rf 2>/dev/null || true`,`Cleaning old releases`),await this.client.updateDeployment(o,a,{status:`active`,log:g.join(`
1
+ import{SSHConnection as e}from"./SSHConnection.mjs";var t=class{client;constructor(e){this.client=e}async deployToServer(t,n){let{tarPath:r,timestamp:i,deploymentUuid:a,projectSlug:o,keyPath:s,migrate:c}=n,l=new e({host:t.host,user:t.ssh_user,port:t.port,keyPath:s}),u=t.deploy_path,d=`${u}/releases/${i}`,f=`${u}/current`,p=`${u}/shared/.env`,m=`${u}/shared/storage`,h=`${d}/deploy.tar.gz`,g=[],_=(e,t)=>{t&&g.push(`→ ${t}`);let n=l.exec(e,{silent:!0});n.trim()&&g.push(n.trim())};try{return _(`mkdir -p "${d}"`,`Creating release directory`),g.push(`→ Uploading build artifact`),l.upload(r,h),_(`tar -xzf "${h}" -C "${d}" && rm "${h}"`,`Extracting`),_(`cd "${d}" && npm install --omit=dev --no-audit --no-fund 2>&1`,`Installing dependencies`),_(`[ -f "${p}" ] && ln -sf "${p}" "${d}/.env" || true`,`Linking .env`),_(`[ -d "${m}" ] && ln -sf "${m}" "${d}/storage" || true`,`Linking storage`),c&&_(`cd "${d}" && npx orchestr migrate 2>&1`,`Running migrations`),_(`ln -sfn "${d}" "${f}"`,`Activating release`),_(`cd "${f}" && ECOSYSTEM=$([ -f ecosystem.config.cjs ] && echo ecosystem.config.cjs || echo ecosystem.config.js) && (pm2 reload "$ECOSYSTEM" --update-env 2>&1 || pm2 start "$ECOSYSTEM" 2>&1)`,`Reloading PM2`),_(`ls -dt "${u}/releases"/*/ 2>/dev/null | tail -n +6 | xargs rm -rf 2>/dev/null || true`,`Cleaning old releases`),await this.client.updateDeployment(o,a,{status:`active`,log:g.join(`
2
2
  `)}),g.join(`
3
3
  `)}catch(e){let t=e.message;throw g.push(`✗ Error: ${t}`),await this.client.updateDeployment(o,a,{status:`failed`,log:g.join(`
4
4
  `)}).catch(()=>{}),Error(g.join(`
@@ -1 +1 @@
1
- {"version":3,"file":"Deployer.mjs","names":[],"sources":["../../src/Deploy/Deployer.ts"],"sourcesContent":["/**\n * Deployer\n *\n * SSH deployment pipeline — upload tarball, extract, npm ci,\n * symlink shared resources, atomic symlink swap, PM2 reload.\n */\n\nimport { execSync } from 'child_process';\nimport { SSHConnection } from './SSHConnection';\nimport { SymphonyClient } from './SymphonyClient';\n\nexport interface ServerConfig {\n id: number;\n name: string;\n host: string;\n port: number;\n ssh_user: string;\n deploy_path: string;\n}\n\nexport interface DeployOptions {\n projectSlug: string;\n tarPath: string;\n timestamp: string;\n deploymentUuid: string;\n keyPath?: string;\n migrate?: boolean;\n}\n\nexport class Deployer {\n constructor(private readonly client: SymphonyClient) {}\n\n /**\n * Deploy to a single server. Returns log output.\n */\n async deployToServer(server: ServerConfig, options: DeployOptions): Promise<string> {\n const { tarPath, timestamp, deploymentUuid, projectSlug, keyPath, migrate } = options;\n const ssh = new SSHConnection({\n host: server.host,\n user: server.ssh_user,\n port: server.port,\n keyPath,\n });\n\n const deployPath = server.deploy_path;\n const releasePath = `${deployPath}/releases/${timestamp}`;\n const currentPath = `${deployPath}/current`;\n const sharedEnvPath = `${deployPath}/shared/.env`;\n const sharedStoragePath = `${deployPath}/shared/storage`;\n const remoteTar = `${releasePath}/deploy.tar.gz`;\n\n const log: string[] = [];\n const run = (cmd: string, label?: string) => {\n if (label) log.push(`→ ${label}`);\n const out = ssh.exec(cmd, { silent: true });\n if (out.trim()) log.push(out.trim());\n };\n\n try {\n // 1. Create release directory\n run(`mkdir -p \"${releasePath}\"`, 'Creating release directory');\n\n // 2. Upload tarball\n log.push('→ Uploading build artifact');\n ssh.upload(tarPath, remoteTar);\n\n // 3. Extract\n run(`tar -xzf \"${remoteTar}\" -C \"${releasePath}\" && rm \"${remoteTar}\"`, 'Extracting');\n\n // 4. Install production dependencies\n run(`cd \"${releasePath}\" && npm install --omit=dev --no-audit --no-fund 2>&1`, 'Installing dependencies');\n\n // 5. Link shared .env (if exists)\n run(`[ -f \"${sharedEnvPath}\" ] && ln -sf \"${sharedEnvPath}\" \"${releasePath}/.env\" || true`, 'Linking .env');\n\n // 6. Link shared storage (if exists)\n run(\n `[ -d \"${sharedStoragePath}\" ] && ln -sf \"${sharedStoragePath}\" \"${releasePath}/storage\" || true`,\n 'Linking storage'\n );\n\n // 7. Run migrations if requested\n if (migrate) {\n run(`cd \"${releasePath}\" && npx orchestr migrate 2>&1`, 'Running migrations');\n }\n\n // 8. Atomic symlink swap\n run(`ln -sfn \"${releasePath}\" \"${currentPath}\"`, 'Activating release');\n\n // 9. Reload PM2 (or start if first deploy)\n // Detect ecosystem config — prefer .cjs (ESM projects), fall back to .js\n run(\n `cd \"${currentPath}\" && ECOSYSTEM=$([ -f ecosystem.config.cjs ] && echo ecosystem.config.cjs || echo ecosystem.config.js) && (pm2 reload \"$ECOSYSTEM\" --update-env 2>&1 || pm2 start \"$ECOSYSTEM\" 2>&1)`,\n 'Reloading PM2'\n );\n\n // 10. Clean old releases (keep last 5)\n run(\n `ls -dt \"${deployPath}/releases\"/*/ 2>/dev/null | tail -n +6 | xargs rm -rf 2>/dev/null || true`,\n 'Cleaning old releases'\n );\n\n // Update deployment status to active\n await this.client.updateDeployment(projectSlug, deploymentUuid, {\n status: 'active',\n log: log.join('\\n'),\n });\n\n return log.join('\\n');\n } catch (error) {\n const errMsg = (error as Error).message;\n log.push(`✗ Error: ${errMsg}`);\n\n // Update deployment status to failed\n await this.client\n .updateDeployment(projectSlug, deploymentUuid, {\n status: 'failed',\n log: log.join('\\n'),\n })\n .catch(() => {});\n\n throw new Error(log.join('\\n'));\n }\n }\n}\n"],"mappings":"oDA6BA,IAAa,EAAb,KAAsB,CACpB,YAAY,EAAyC,CAAxB,KAAA,OAAA,EAK7B,MAAM,eAAe,EAAsB,EAAyC,CAClF,GAAM,CAAE,UAAS,YAAW,iBAAgB,cAAa,UAAS,WAAY,EACxE,EAAM,IAAI,EAAc,CAC5B,KAAM,EAAO,KACb,KAAM,EAAO,SACb,KAAM,EAAO,KACb,UACD,CAAC,CAEI,EAAa,EAAO,YACpB,EAAc,GAAG,EAAW,YAAY,IACxC,EAAc,GAAG,EAAW,UAC5B,EAAgB,GAAG,EAAW,cAC9B,EAAoB,GAAG,EAAW,iBAClC,EAAY,GAAG,EAAY,gBAE3B,EAAgB,EAAE,CAClB,GAAO,EAAa,IAAmB,CACvC,GAAO,EAAI,KAAK,KAAK,IAAQ,CACjC,IAAM,EAAM,EAAI,KAAK,EAAK,CAAE,OAAQ,GAAM,CAAC,CACvC,EAAI,MAAM,EAAE,EAAI,KAAK,EAAI,MAAM,CAAC,EAGtC,GAAI,CAkDF,OAhDA,EAAI,aAAa,EAAY,GAAI,6BAA6B,CAG9D,EAAI,KAAK,6BAA6B,CACtC,EAAI,OAAO,EAAS,EAAU,CAG9B,EAAI,aAAa,EAAU,QAAQ,EAAY,WAAW,EAAU,GAAI,aAAa,CAGrF,EAAI,OAAO,EAAY,uDAAwD,0BAA0B,CAGzG,EAAI,SAAS,EAAc,iBAAiB,EAAc,KAAK,EAAY,gBAAiB,eAAe,CAG3G,EACE,SAAS,EAAkB,iBAAiB,EAAkB,KAAK,EAAY,mBAC/E,kBACD,CAGG,GACF,EAAI,OAAO,EAAY,gCAAiC,qBAAqB,CAI/E,EAAI,YAAY,EAAY,KAAK,EAAY,GAAI,qBAAqB,CAItE,EACE,OAAO,EAAY,sLACnB,gBACD,CAGD,EACE,WAAW,EAAW,2EACtB,wBACD,CAGD,MAAM,KAAK,OAAO,iBAAiB,EAAa,EAAgB,CAC9D,OAAQ,SACR,IAAK,EAAI,KAAK;EAAK,CACpB,CAAC,CAEK,EAAI,KAAK;EAAK,OACd,EAAO,CACd,IAAM,EAAU,EAAgB,QAWhC,MAVA,EAAI,KAAK,YAAY,IAAS,CAG9B,MAAM,KAAK,OACR,iBAAiB,EAAa,EAAgB,CAC7C,OAAQ,SACR,IAAK,EAAI,KAAK;EAAK,CACpB,CAAC,CACD,UAAY,GAAG,CAER,MAAM,EAAI,KAAK;EAAK,CAAC"}
1
+ {"version":3,"file":"Deployer.mjs","names":[],"sources":["../../src/Deploy/Deployer.ts"],"sourcesContent":["/**\n * Deployer\n *\n * SSH deployment pipeline — upload tarball, extract, npm ci,\n * symlink shared resources, atomic symlink swap, PM2 reload.\n */\n\nimport { execSync } from 'child_process';\nimport { SSHConnection } from './SSHConnection';\nimport { SymphonyClient } from './SymphonyClient';\n\nexport interface ServerConfig {\n id: number;\n name: string;\n host: string;\n port: number;\n ssh_user: string;\n deploy_path: string;\n}\n\nexport interface DeployOptions {\n projectSlug: string;\n tarPath: string;\n timestamp: string;\n deploymentUuid: string;\n keyPath?: string;\n migrate?: boolean;\n}\n\nexport class Deployer {\n constructor(private readonly client: SymphonyClient) {}\n\n /**\n * Deploy to a single server. Returns log output.\n */\n async deployToServer(server: ServerConfig, options: DeployOptions): Promise<string> {\n const { tarPath, timestamp, deploymentUuid, projectSlug, keyPath, migrate } = options;\n const ssh = new SSHConnection({\n host: server.host,\n user: server.ssh_user,\n port: server.port,\n keyPath,\n });\n\n const deployPath = server.deploy_path;\n const releasePath = `${deployPath}/releases/${timestamp}`;\n const currentPath = `${deployPath}/current`;\n const sharedEnvPath = `${deployPath}/shared/.env`;\n const sharedStoragePath = `${deployPath}/shared/storage`;\n const remoteTar = `${releasePath}/deploy.tar.gz`;\n\n const log: string[] = [];\n const run = (cmd: string, label?: string) => {\n if (label) log.push(`→ ${label}`);\n const out = ssh.exec(cmd, { silent: true });\n if (out.trim()) log.push(out.trim());\n };\n\n try {\n // 1. Create release directory\n run(`mkdir -p \"${releasePath}\"`, 'Creating release directory');\n\n // 2. Upload tarball\n log.push('→ Uploading build artifact');\n ssh.upload(tarPath, remoteTar);\n\n // 3. Extract\n run(`tar -xzf \"${remoteTar}\" -C \"${releasePath}\" && rm \"${remoteTar}\"`, 'Extracting');\n\n // 4. Install production dependencies\n run(`cd \"${releasePath}\" && npm install --omit=dev --no-audit --no-fund 2>&1`, 'Installing dependencies');\n\n // 5. Link shared .env (if exists)\n run(`[ -f \"${sharedEnvPath}\" ] && ln -sf \"${sharedEnvPath}\" \"${releasePath}/.env\" || true`, 'Linking .env');\n\n // 6. Link shared storage (if exists)\n run(\n `[ -d \"${sharedStoragePath}\" ] && ln -sf \"${sharedStoragePath}\" \"${releasePath}/storage\" || true`,\n 'Linking storage'\n );\n\n // 7. Run migrations if requested\n if (migrate) {\n run(`cd \"${releasePath}\" && npx orchestr migrate 2>&1`, 'Running migrations');\n }\n\n // 8. Atomic symlink swap\n run(`ln -sfn \"${releasePath}\" \"${currentPath}\"`, 'Activating release');\n\n // 9. Reload PM2 (or start if first deploy)\n // Detect ecosystem config — prefer .cjs (ESM projects), fall back to .js\n run(\n `cd \"${currentPath}\" && ECOSYSTEM=$([ -f ecosystem.config.cjs ] && echo ecosystem.config.cjs || echo ecosystem.config.js) && (pm2 reload \"$ECOSYSTEM\" --update-env 2>&1 || pm2 start \"$ECOSYSTEM\" 2>&1)`,\n 'Reloading PM2'\n );\n\n // 10. Clean old releases (keep last 5)\n run(\n `ls -dt \"${deployPath}/releases\"/*/ 2>/dev/null | tail -n +6 | xargs rm -rf 2>/dev/null || true`,\n 'Cleaning old releases'\n );\n\n // Update deployment status to active\n await this.client.updateDeployment(projectSlug, deploymentUuid, {\n status: 'active',\n log: log.join('\\n'),\n });\n\n return log.join('\\n');\n } catch (error) {\n const errMsg = (error as Error).message;\n log.push(`✗ Error: ${errMsg}`);\n\n // Update deployment status to failed\n await this.client\n .updateDeployment(projectSlug, deploymentUuid, {\n status: 'failed',\n log: log.join('\\n'),\n })\n .catch(() => {});\n\n throw new Error(log.join('\\n'));\n }\n }\n}\n"],"mappings":"oDA6BA,IAAa,EAAb,KAAsB,CACS,OAA7B,YAAY,EAAyC,CAAxB,KAAA,OAAA,EAK7B,MAAM,eAAe,EAAsB,EAAyC,CAClF,GAAM,CAAE,UAAS,YAAW,iBAAgB,cAAa,UAAS,WAAY,EACxE,EAAM,IAAI,EAAc,CAC5B,KAAM,EAAO,KACb,KAAM,EAAO,SACb,KAAM,EAAO,KACb,UACD,CAAC,CAEI,EAAa,EAAO,YACpB,EAAc,GAAG,EAAW,YAAY,IACxC,EAAc,GAAG,EAAW,UAC5B,EAAgB,GAAG,EAAW,cAC9B,EAAoB,GAAG,EAAW,iBAClC,EAAY,GAAG,EAAY,gBAE3B,EAAgB,EAAE,CAClB,GAAO,EAAa,IAAmB,CACvC,GAAO,EAAI,KAAK,KAAK,IAAQ,CACjC,IAAM,EAAM,EAAI,KAAK,EAAK,CAAE,OAAQ,GAAM,CAAC,CACvC,EAAI,MAAM,EAAE,EAAI,KAAK,EAAI,MAAM,CAAC,EAGtC,GAAI,CAkDF,OAhDA,EAAI,aAAa,EAAY,GAAI,6BAA6B,CAG9D,EAAI,KAAK,6BAA6B,CACtC,EAAI,OAAO,EAAS,EAAU,CAG9B,EAAI,aAAa,EAAU,QAAQ,EAAY,WAAW,EAAU,GAAI,aAAa,CAGrF,EAAI,OAAO,EAAY,uDAAwD,0BAA0B,CAGzG,EAAI,SAAS,EAAc,iBAAiB,EAAc,KAAK,EAAY,gBAAiB,eAAe,CAG3G,EACE,SAAS,EAAkB,iBAAiB,EAAkB,KAAK,EAAY,mBAC/E,kBACD,CAGG,GACF,EAAI,OAAO,EAAY,gCAAiC,qBAAqB,CAI/E,EAAI,YAAY,EAAY,KAAK,EAAY,GAAI,qBAAqB,CAItE,EACE,OAAO,EAAY,sLACnB,gBACD,CAGD,EACE,WAAW,EAAW,2EACtB,wBACD,CAGD,MAAM,KAAK,OAAO,iBAAiB,EAAa,EAAgB,CAC9D,OAAQ,SACR,IAAK,EAAI,KAAK;EAAK,CACpB,CAAC,CAEK,EAAI,KAAK;EAAK,OACd,EAAO,CACd,IAAM,EAAU,EAAgB,QAWhC,MAVA,EAAI,KAAK,YAAY,IAAS,CAG9B,MAAM,KAAK,OACR,iBAAiB,EAAa,EAAgB,CAC7C,OAAQ,SACR,IAAK,EAAI,KAAK;EAAK,CACpB,CAAC,CACD,UAAY,GAAG,CAER,MAAM,EAAI,KAAK;EAAK,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"ProjectConfig.mjs","names":[],"sources":["../../src/Deploy/ProjectConfig.ts"],"sourcesContent":["/**\n * ProjectConfig\n *\n * Manages symphony.json in the project root\n */\n\nimport { existsSync, readFileSync, writeFileSync } from 'fs';\nimport { join } from 'path';\n\nexport interface SymphonyConfig {\n project: string;\n api: string;\n}\n\nexport class ProjectConfig {\n private static readonly FILENAME = 'symphony.json';\n\n private static getPath(cwd: string = process.cwd()): string {\n return join(cwd, this.FILENAME);\n }\n\n /**\n * Load symphony.json from the current working directory. Returns null if not found.\n */\n static load(cwd: string = process.cwd()): SymphonyConfig | null {\n const path = this.getPath(cwd);\n\n if (!existsSync(path)) {\n return null;\n }\n\n try {\n const raw = readFileSync(path, 'utf-8');\n return JSON.parse(raw) as SymphonyConfig;\n } catch {\n return null;\n }\n }\n\n /**\n * Save symphony.json to the current working directory.\n */\n static save(config: SymphonyConfig, cwd: string = process.cwd()): void {\n const path = this.getPath(cwd);\n writeFileSync(path, JSON.stringify(config, null, 2) + '\\n', 'utf-8');\n }\n\n /**\n * Check if symphony.json exists in the current working directory.\n */\n static exists(cwd: string = process.cwd()): boolean {\n return existsSync(this.getPath(cwd));\n }\n}\n"],"mappings":"iGAcA,IAAa,EAAb,KAA2B,CACzB,OAAwB,SAAW,gBAEnC,OAAe,QAAQ,EAAc,QAAQ,KAAK,CAAU,CAC1D,OAAO,EAAK,EAAK,KAAK,SAAS,CAMjC,OAAO,KAAK,EAAc,QAAQ,KAAK,CAAyB,CAC9D,IAAM,EAAO,KAAK,QAAQ,EAAI,CAE9B,GAAI,CAAC,EAAW,EAAK,CACnB,OAAO,KAGT,GAAI,CACF,IAAM,EAAM,EAAa,EAAM,QAAQ,CACvC,OAAO,KAAK,MAAM,EAAI,MAChB,CACN,OAAO,MAOX,OAAO,KAAK,EAAwB,EAAc,QAAQ,KAAK,CAAQ,CAErE,EADa,KAAK,QAAQ,EAAI,CACV,KAAK,UAAU,EAAQ,KAAM,EAAE,CAAG;EAAM,QAAQ,CAMtE,OAAO,OAAO,EAAc,QAAQ,KAAK,CAAW,CAClD,OAAO,EAAW,KAAK,QAAQ,EAAI,CAAC"}
1
+ {"version":3,"file":"ProjectConfig.mjs","names":[],"sources":["../../src/Deploy/ProjectConfig.ts"],"sourcesContent":["/**\n * ProjectConfig\n *\n * Manages symphony.json in the project root\n */\n\nimport { existsSync, readFileSync, writeFileSync } from 'fs';\nimport { join } from 'path';\n\nexport interface SymphonyConfig {\n project: string;\n api: string;\n}\n\nexport class ProjectConfig {\n private static readonly FILENAME = 'symphony.json';\n\n private static getPath(cwd: string = process.cwd()): string {\n return join(cwd, this.FILENAME);\n }\n\n /**\n * Load symphony.json from the current working directory. Returns null if not found.\n */\n static load(cwd: string = process.cwd()): SymphonyConfig | null {\n const path = this.getPath(cwd);\n\n if (!existsSync(path)) {\n return null;\n }\n\n try {\n const raw = readFileSync(path, 'utf-8');\n return JSON.parse(raw) as SymphonyConfig;\n } catch {\n return null;\n }\n }\n\n /**\n * Save symphony.json to the current working directory.\n */\n static save(config: SymphonyConfig, cwd: string = process.cwd()): void {\n const path = this.getPath(cwd);\n writeFileSync(path, JSON.stringify(config, null, 2) + '\\n', 'utf-8');\n }\n\n /**\n * Check if symphony.json exists in the current working directory.\n */\n static exists(cwd: string = process.cwd()): boolean {\n return existsSync(this.getPath(cwd));\n }\n}\n"],"mappings":"iGAcA,IAAa,EAAb,KAA2B,CACzB,OAAwB,SAAW,gBAEnC,OAAe,QAAQ,EAAc,QAAQ,KAAK,CAAU,CAC1D,OAAO,EAAK,EAAK,KAAK,SAAS,CAMjC,OAAO,KAAK,EAAc,QAAQ,KAAK,CAAyB,CAC9D,IAAM,EAAO,KAAK,QAAQ,EAAI,CAE9B,GAAI,CAAC,EAAW,EAAK,CACnB,OAAO,KAGT,GAAI,CACF,IAAM,EAAM,EAAa,EAAM,QAAQ,CACvC,OAAO,KAAK,MAAM,EAAI,MAChB,CACN,OAAO,MAOX,OAAO,KAAK,EAAwB,EAAc,QAAQ,KAAK,CAAQ,CAErE,EADa,KAAK,QAAQ,EACR,CAAE,KAAK,UAAU,EAAQ,KAAM,EAAE,CAAG;EAAM,QAAQ,CAMtE,OAAO,OAAO,EAAc,QAAQ,KAAK,CAAW,CAClD,OAAO,EAAW,KAAK,QAAQ,EAAI,CAAC"}
@@ -1,4 +1,4 @@
1
- require(`../_virtual/_rolldown/runtime.cjs`);const e=require(`./SSHConnection.cjs`);var t=class{ssh;domain;certEmail;deployPath;projectName;constructor(t){this.options=t,this.ssh=new e.SSHConnection({host:t.host,user:t.rootUser??`root`,port:t.port??22,keyPath:t.keyPath}),this.domain=t.domain,this.certEmail=t.email,this.deployPath=t.deployPath??`/home/orchestr`,this.projectName=t.projectName??`app`}async provision(e){let t=(t,n)=>{e?.(t),this.ssh.exec(n,{silent:!0})};t(`Updating package list`,`apt-get update -qq`),t(`Installing Node.js 22`,[`apt-get install -y -qq curl`,`curl -fsSL https://deb.nodesource.com/setup_22.x | bash -`,`apt-get install -y -qq nodejs`].join(` && `)),t(`Installing PM2`,`npm install -g pm2 --quiet && pm2 startup systemd -u orchestr --hp /home/orchestr || true`),t(`Installing Nginx`,`apt-get install -y -qq nginx`);let n=this.buildNginxConfig();t(`Configuring Nginx`,[`cat > /etc/nginx/sites-available/${this.projectName} << 'NGINX'\n${n}\nNGINX`,`ln -sf /etc/nginx/sites-available/${this.projectName} /etc/nginx/sites-enabled/${this.projectName}`,`rm -f /etc/nginx/sites-enabled/default`,`nginx -t && systemctl reload nginx`].join(` && `)),this.domain&&this.certEmail&&(t(`Installing Certbot`,`apt-get install -y -qq certbot python3-certbot-nginx`),t(`Obtaining SSL certificate for ${this.domain}`,`certbot --nginx -d ${this.domain} --non-interactive --agree-tos --email ${this.certEmail} --redirect`)),t(`Creating orchestr user`,[`id -u orchestr &>/dev/null || useradd -m -s /bin/bash orchestr`,`mkdir -p ${this.deployPath}/${this.projectName}/releases`,`mkdir -p ${this.deployPath}/${this.projectName}/shared`,`touch ${this.deployPath}/${this.projectName}/shared/.env`,`chown -R orchestr:orchestr ${this.deployPath}`].join(` && `)),t(`Configuring UFW firewall`,[`apt-get install -y -qq ufw`,`ufw --force reset`,`ufw allow 22/tcp`,`ufw allow 80/tcp`,`ufw allow 443/tcp`,`ufw --force enable`].join(` && `)),t(`Enabling services on boot`,`systemctl enable nginx`)}testConnection(){return this.ssh.test()}buildNginxConfig(){return`server {
1
+ require(`../_virtual/_rolldown/runtime.cjs`);const e=require(`./SSHConnection.cjs`);var t=class{options;ssh;domain;certEmail;deployPath;projectName;constructor(t){this.options=t,this.ssh=new e.SSHConnection({host:t.host,user:t.rootUser??`root`,port:t.port??22,keyPath:t.keyPath}),this.domain=t.domain,this.certEmail=t.email,this.deployPath=t.deployPath??`/home/orchestr`,this.projectName=t.projectName??`app`}async provision(e){let t=(t,n)=>{e?.(t),this.ssh.exec(n,{silent:!0})};t(`Updating package list`,`apt-get update -qq`),t(`Installing Node.js 22`,[`apt-get install -y -qq curl`,`curl -fsSL https://deb.nodesource.com/setup_22.x | bash -`,`apt-get install -y -qq nodejs`].join(` && `)),t(`Installing PM2`,`npm install -g pm2 --quiet && pm2 startup systemd -u orchestr --hp /home/orchestr || true`),t(`Installing Nginx`,`apt-get install -y -qq nginx`);let n=this.buildNginxConfig();t(`Configuring Nginx`,[`cat > /etc/nginx/sites-available/${this.projectName} << 'NGINX'\n${n}\nNGINX`,`ln -sf /etc/nginx/sites-available/${this.projectName} /etc/nginx/sites-enabled/${this.projectName}`,`rm -f /etc/nginx/sites-enabled/default`,`nginx -t && systemctl reload nginx`].join(` && `)),this.domain&&this.certEmail&&(t(`Installing Certbot`,`apt-get install -y -qq certbot python3-certbot-nginx`),t(`Obtaining SSL certificate for ${this.domain}`,`certbot --nginx -d ${this.domain} --non-interactive --agree-tos --email ${this.certEmail} --redirect`)),t(`Creating orchestr user`,[`id -u orchestr &>/dev/null || useradd -m -s /bin/bash orchestr`,`mkdir -p ${this.deployPath}/${this.projectName}/releases`,`mkdir -p ${this.deployPath}/${this.projectName}/shared`,`touch ${this.deployPath}/${this.projectName}/shared/.env`,`chown -R orchestr:orchestr ${this.deployPath}`].join(` && `)),t(`Configuring UFW firewall`,[`apt-get install -y -qq ufw`,`ufw --force reset`,`ufw allow 22/tcp`,`ufw allow 80/tcp`,`ufw allow 443/tcp`,`ufw --force enable`].join(` && `)),t(`Enabling services on boot`,`systemctl enable nginx`)}testConnection(){return this.ssh.test()}buildNginxConfig(){return`server {
2
2
  listen 80;
3
3
  server_name ${this.domain??`_`};
4
4
 
@@ -1,4 +1,4 @@
1
- import{SSHConnection as e}from"./SSHConnection.mjs";var t=class{ssh;domain;certEmail;deployPath;projectName;constructor(t){this.options=t,this.ssh=new e({host:t.host,user:t.rootUser??`root`,port:t.port??22,keyPath:t.keyPath}),this.domain=t.domain,this.certEmail=t.email,this.deployPath=t.deployPath??`/home/orchestr`,this.projectName=t.projectName??`app`}async provision(e){let t=(t,n)=>{e?.(t),this.ssh.exec(n,{silent:!0})};t(`Updating package list`,`apt-get update -qq`),t(`Installing Node.js 22`,[`apt-get install -y -qq curl`,`curl -fsSL https://deb.nodesource.com/setup_22.x | bash -`,`apt-get install -y -qq nodejs`].join(` && `)),t(`Installing PM2`,`npm install -g pm2 --quiet && pm2 startup systemd -u orchestr --hp /home/orchestr || true`),t(`Installing Nginx`,`apt-get install -y -qq nginx`);let n=this.buildNginxConfig();t(`Configuring Nginx`,[`cat > /etc/nginx/sites-available/${this.projectName} << 'NGINX'\n${n}\nNGINX`,`ln -sf /etc/nginx/sites-available/${this.projectName} /etc/nginx/sites-enabled/${this.projectName}`,`rm -f /etc/nginx/sites-enabled/default`,`nginx -t && systemctl reload nginx`].join(` && `)),this.domain&&this.certEmail&&(t(`Installing Certbot`,`apt-get install -y -qq certbot python3-certbot-nginx`),t(`Obtaining SSL certificate for ${this.domain}`,`certbot --nginx -d ${this.domain} --non-interactive --agree-tos --email ${this.certEmail} --redirect`)),t(`Creating orchestr user`,[`id -u orchestr &>/dev/null || useradd -m -s /bin/bash orchestr`,`mkdir -p ${this.deployPath}/${this.projectName}/releases`,`mkdir -p ${this.deployPath}/${this.projectName}/shared`,`touch ${this.deployPath}/${this.projectName}/shared/.env`,`chown -R orchestr:orchestr ${this.deployPath}`].join(` && `)),t(`Configuring UFW firewall`,[`apt-get install -y -qq ufw`,`ufw --force reset`,`ufw allow 22/tcp`,`ufw allow 80/tcp`,`ufw allow 443/tcp`,`ufw --force enable`].join(` && `)),t(`Enabling services on boot`,`systemctl enable nginx`)}testConnection(){return this.ssh.test()}buildNginxConfig(){return`server {
1
+ import{SSHConnection as e}from"./SSHConnection.mjs";var t=class{options;ssh;domain;certEmail;deployPath;projectName;constructor(t){this.options=t,this.ssh=new e({host:t.host,user:t.rootUser??`root`,port:t.port??22,keyPath:t.keyPath}),this.domain=t.domain,this.certEmail=t.email,this.deployPath=t.deployPath??`/home/orchestr`,this.projectName=t.projectName??`app`}async provision(e){let t=(t,n)=>{e?.(t),this.ssh.exec(n,{silent:!0})};t(`Updating package list`,`apt-get update -qq`),t(`Installing Node.js 22`,[`apt-get install -y -qq curl`,`curl -fsSL https://deb.nodesource.com/setup_22.x | bash -`,`apt-get install -y -qq nodejs`].join(` && `)),t(`Installing PM2`,`npm install -g pm2 --quiet && pm2 startup systemd -u orchestr --hp /home/orchestr || true`),t(`Installing Nginx`,`apt-get install -y -qq nginx`);let n=this.buildNginxConfig();t(`Configuring Nginx`,[`cat > /etc/nginx/sites-available/${this.projectName} << 'NGINX'\n${n}\nNGINX`,`ln -sf /etc/nginx/sites-available/${this.projectName} /etc/nginx/sites-enabled/${this.projectName}`,`rm -f /etc/nginx/sites-enabled/default`,`nginx -t && systemctl reload nginx`].join(` && `)),this.domain&&this.certEmail&&(t(`Installing Certbot`,`apt-get install -y -qq certbot python3-certbot-nginx`),t(`Obtaining SSL certificate for ${this.domain}`,`certbot --nginx -d ${this.domain} --non-interactive --agree-tos --email ${this.certEmail} --redirect`)),t(`Creating orchestr user`,[`id -u orchestr &>/dev/null || useradd -m -s /bin/bash orchestr`,`mkdir -p ${this.deployPath}/${this.projectName}/releases`,`mkdir -p ${this.deployPath}/${this.projectName}/shared`,`touch ${this.deployPath}/${this.projectName}/shared/.env`,`chown -R orchestr:orchestr ${this.deployPath}`].join(` && `)),t(`Configuring UFW firewall`,[`apt-get install -y -qq ufw`,`ufw --force reset`,`ufw allow 22/tcp`,`ufw allow 80/tcp`,`ufw allow 443/tcp`,`ufw --force enable`].join(` && `)),t(`Enabling services on boot`,`systemctl enable nginx`)}testConnection(){return this.ssh.test()}buildNginxConfig(){return`server {
2
2
  listen 80;
3
3
  server_name ${this.domain??`_`};
4
4