velocious 1.0.429 → 1.0.431

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 (812) hide show
  1. package/bin/velocious.js +48 -0
  2. package/build/bin/velocious.js +39 -34
  3. package/build/index.js +1 -2
  4. package/build/src/application.js +214 -187
  5. package/build/src/authorization/ability.d.ts +24 -23
  6. package/build/src/authorization/ability.d.ts.map +1 -1
  7. package/build/src/authorization/ability.js +300 -252
  8. package/build/src/authorization/base-resource.d.ts +20 -26
  9. package/build/src/authorization/base-resource.d.ts.map +1 -1
  10. package/build/src/authorization/base-resource.js +136 -118
  11. package/build/src/background-jobs/client.js +47 -43
  12. package/build/src/background-jobs/cron-expression.js +166 -127
  13. package/build/src/background-jobs/forked-runner-child.js +47 -37
  14. package/build/src/background-jobs/job-record.js +10 -8
  15. package/build/src/background-jobs/job-registry.js +84 -72
  16. package/build/src/background-jobs/job-runner.js +81 -74
  17. package/build/src/background-jobs/job.js +72 -62
  18. package/build/src/background-jobs/json-socket.js +70 -65
  19. package/build/src/background-jobs/main.js +900 -841
  20. package/build/src/background-jobs/normalize-error.js +11 -12
  21. package/build/src/background-jobs/scheduler.js +247 -205
  22. package/build/src/background-jobs/socket-request.js +65 -60
  23. package/build/src/background-jobs/status-reporter.js +96 -86
  24. package/build/src/background-jobs/store.js +980 -862
  25. package/build/src/background-jobs/types.js +3 -2
  26. package/build/src/background-jobs/web/authorization.js +50 -38
  27. package/build/src/background-jobs/web/controller.js +268 -232
  28. package/build/src/background-jobs/web/index.js +40 -36
  29. package/build/src/background-jobs/web/path-matcher.js +48 -45
  30. package/build/src/background-jobs/web/registry.js +14 -9
  31. package/build/src/background-jobs/worker.js +639 -585
  32. package/build/src/beacon/client.js +293 -264
  33. package/build/src/beacon/in-process-broker.js +25 -20
  34. package/build/src/beacon/in-process-client.js +116 -104
  35. package/build/src/beacon/server.js +126 -110
  36. package/build/src/beacon/types.js +8 -2
  37. package/build/src/cli/base-command.js +57 -49
  38. package/build/src/cli/browser-cli.js +42 -37
  39. package/build/src/cli/commands/background-jobs-main.js +5 -5
  40. package/build/src/cli/commands/background-jobs-runner.js +5 -5
  41. package/build/src/cli/commands/background-jobs-worker.js +5 -5
  42. package/build/src/cli/commands/beacon.js +5 -5
  43. package/build/src/cli/commands/console.js +10 -10
  44. package/build/src/cli/commands/db/base-command.js +76 -71
  45. package/build/src/cli/commands/db/create.js +61 -53
  46. package/build/src/cli/commands/db/drop.js +71 -62
  47. package/build/src/cli/commands/db/migrate.js +15 -13
  48. package/build/src/cli/commands/db/reset.js +19 -16
  49. package/build/src/cli/commands/db/rollback.js +13 -12
  50. package/build/src/cli/commands/db/schema/dump.js +9 -9
  51. package/build/src/cli/commands/db/schema/load.js +9 -9
  52. package/build/src/cli/commands/db/seed.js +9 -9
  53. package/build/src/cli/commands/db/tenants/check.js +35 -32
  54. package/build/src/cli/commands/db/tenants/create.js +29 -26
  55. package/build/src/cli/commands/db/tenants/migrate.js +44 -40
  56. package/build/src/cli/commands/destroy/migration.js +5 -5
  57. package/build/src/cli/commands/generate/base-models.js +5 -5
  58. package/build/src/cli/commands/generate/frontend-models.js +9 -9
  59. package/build/src/cli/commands/generate/migration.js +5 -5
  60. package/build/src/cli/commands/generate/model.js +5 -5
  61. package/build/src/cli/commands/init.js +9 -7
  62. package/build/src/cli/commands/routes.js +6 -6
  63. package/build/src/cli/commands/run-script.js +9 -9
  64. package/build/src/cli/commands/runner.js +9 -9
  65. package/build/src/cli/commands/server.js +6 -6
  66. package/build/src/cli/commands/test.js +7 -6
  67. package/build/src/cli/index.js +141 -127
  68. package/build/src/cli/tenant-database-command-helper.js +185 -154
  69. package/build/src/cli/use-browser-cli.js +20 -15
  70. package/build/src/configuration-resolver.js +54 -47
  71. package/build/src/configuration-types.d.ts +21 -2
  72. package/build/src/configuration-types.d.ts.map +1 -1
  73. package/build/src/configuration-types.js +60 -3
  74. package/build/src/configuration.js +2547 -2240
  75. package/build/src/controller.js +407 -363
  76. package/build/src/current-configuration.js +12 -9
  77. package/build/src/current.js +75 -70
  78. package/build/src/database/annotations-async-hooks.js +22 -16
  79. package/build/src/database/annotations.js +18 -12
  80. package/build/src/database/drivers/base-column.js +179 -155
  81. package/build/src/database/drivers/base-columns-index.js +78 -69
  82. package/build/src/database/drivers/base-foreign-key.js +101 -89
  83. package/build/src/database/drivers/base-table.js +149 -124
  84. package/build/src/database/drivers/base.js +1489 -1306
  85. package/build/src/database/drivers/mssql/column.js +50 -39
  86. package/build/src/database/drivers/mssql/columns-index.js +3 -2
  87. package/build/src/database/drivers/mssql/connect-connection.js +9 -11
  88. package/build/src/database/drivers/mssql/foreign-key.js +9 -8
  89. package/build/src/database/drivers/mssql/index.js +587 -507
  90. package/build/src/database/drivers/mssql/options.js +75 -68
  91. package/build/src/database/drivers/mssql/query-parser.js +3 -2
  92. package/build/src/database/drivers/mssql/sql/alter-table.js +2 -2
  93. package/build/src/database/drivers/mssql/sql/create-database.js +31 -24
  94. package/build/src/database/drivers/mssql/sql/create-index.js +2 -2
  95. package/build/src/database/drivers/mssql/sql/create-table.js +2 -2
  96. package/build/src/database/drivers/mssql/sql/delete.js +16 -14
  97. package/build/src/database/drivers/mssql/sql/drop-database.js +31 -24
  98. package/build/src/database/drivers/mssql/sql/drop-table.js +2 -2
  99. package/build/src/database/drivers/mssql/sql/insert.js +2 -2
  100. package/build/src/database/drivers/mssql/sql/update.js +28 -24
  101. package/build/src/database/drivers/mssql/sql/upsert.js +20 -18
  102. package/build/src/database/drivers/mssql/structure-sql.js +114 -102
  103. package/build/src/database/drivers/mssql/table.js +96 -81
  104. package/build/src/database/drivers/mysql/column.js +92 -75
  105. package/build/src/database/drivers/mysql/columns-index.js +19 -16
  106. package/build/src/database/drivers/mysql/foreign-key.js +9 -8
  107. package/build/src/database/drivers/mysql/index.js +457 -396
  108. package/build/src/database/drivers/mysql/options.js +30 -26
  109. package/build/src/database/drivers/mysql/query-parser.js +3 -2
  110. package/build/src/database/drivers/mysql/query.js +29 -26
  111. package/build/src/database/drivers/mysql/sql/alter-table.js +3 -2
  112. package/build/src/database/drivers/mysql/sql/create-database.js +28 -23
  113. package/build/src/database/drivers/mysql/sql/create-index.js +3 -2
  114. package/build/src/database/drivers/mysql/sql/create-table.js +3 -2
  115. package/build/src/database/drivers/mysql/sql/delete.js +17 -14
  116. package/build/src/database/drivers/mysql/sql/drop-database.js +3 -2
  117. package/build/src/database/drivers/mysql/sql/drop-table.js +3 -2
  118. package/build/src/database/drivers/mysql/sql/insert.js +3 -2
  119. package/build/src/database/drivers/mysql/sql/update.js +29 -24
  120. package/build/src/database/drivers/mysql/sql/upsert.js +10 -8
  121. package/build/src/database/drivers/mysql/structure-sql.js +88 -79
  122. package/build/src/database/drivers/mysql/table.js +98 -83
  123. package/build/src/database/drivers/pgsql/column.js +72 -56
  124. package/build/src/database/drivers/pgsql/columns-index.js +3 -2
  125. package/build/src/database/drivers/pgsql/foreign-key.js +9 -8
  126. package/build/src/database/drivers/pgsql/index.js +438 -377
  127. package/build/src/database/drivers/pgsql/options.js +28 -25
  128. package/build/src/database/drivers/pgsql/query-parser.js +3 -2
  129. package/build/src/database/drivers/pgsql/sql/alter-table.js +3 -2
  130. package/build/src/database/drivers/pgsql/sql/create-database.js +23 -19
  131. package/build/src/database/drivers/pgsql/sql/create-index.js +3 -2
  132. package/build/src/database/drivers/pgsql/sql/create-table.js +3 -2
  133. package/build/src/database/drivers/pgsql/sql/delete.js +17 -14
  134. package/build/src/database/drivers/pgsql/sql/drop-database.js +3 -2
  135. package/build/src/database/drivers/pgsql/sql/drop-table.js +3 -2
  136. package/build/src/database/drivers/pgsql/sql/insert.js +3 -2
  137. package/build/src/database/drivers/pgsql/sql/update.js +29 -24
  138. package/build/src/database/drivers/pgsql/sql/upsert.js +11 -9
  139. package/build/src/database/drivers/pgsql/structure-sql.js +120 -108
  140. package/build/src/database/drivers/pgsql/table.js +77 -60
  141. package/build/src/database/drivers/sqlite/base.js +478 -405
  142. package/build/src/database/drivers/sqlite/column.js +69 -54
  143. package/build/src/database/drivers/sqlite/columns-index.js +27 -22
  144. package/build/src/database/drivers/sqlite/connection-sql-js.js +42 -35
  145. package/build/src/database/drivers/sqlite/foreign-key.js +21 -18
  146. package/build/src/database/drivers/sqlite/index.js +373 -330
  147. package/build/src/database/drivers/sqlite/index.native.js +64 -55
  148. package/build/src/database/drivers/sqlite/index.web.js +87 -69
  149. package/build/src/database/drivers/sqlite/options.js +28 -25
  150. package/build/src/database/drivers/sqlite/query-parser.js +3 -2
  151. package/build/src/database/drivers/sqlite/query.js +24 -21
  152. package/build/src/database/drivers/sqlite/query.native.js +25 -20
  153. package/build/src/database/drivers/sqlite/query.web.js +37 -30
  154. package/build/src/database/drivers/sqlite/sql/alter-table.js +179 -159
  155. package/build/src/database/drivers/sqlite/sql/create-index.js +3 -2
  156. package/build/src/database/drivers/sqlite/sql/create-table.js +3 -2
  157. package/build/src/database/drivers/sqlite/sql/delete.js +22 -17
  158. package/build/src/database/drivers/sqlite/sql/drop-table.js +3 -2
  159. package/build/src/database/drivers/sqlite/sql/insert.js +3 -2
  160. package/build/src/database/drivers/sqlite/sql/update.js +29 -24
  161. package/build/src/database/drivers/sqlite/sql/upsert.js +11 -9
  162. package/build/src/database/drivers/sqlite/structure-sql.js +52 -49
  163. package/build/src/database/drivers/sqlite/table-rebuilder.js +75 -62
  164. package/build/src/database/drivers/sqlite/table.js +125 -102
  165. package/build/src/database/drivers/structure-sql/utils.js +17 -14
  166. package/build/src/database/handler.js +10 -9
  167. package/build/src/database/initializer-from-require-context.js +87 -76
  168. package/build/src/database/migration/index.js +395 -332
  169. package/build/src/database/migrator/files-finder.js +50 -40
  170. package/build/src/database/migrator/types.js +30 -2
  171. package/build/src/database/migrator.js +526 -454
  172. package/build/src/database/pool/async-tracked-multi-connection.js +1147 -997
  173. package/build/src/database/pool/base-methods-forward.js +43 -40
  174. package/build/src/database/pool/base.js +343 -298
  175. package/build/src/database/pool/single-multi-use.js +110 -93
  176. package/build/src/database/query/alter-table-base.js +99 -84
  177. package/build/src/database/query/base.js +46 -39
  178. package/build/src/database/query/create-database-base.js +30 -25
  179. package/build/src/database/query/create-index-base.js +94 -75
  180. package/build/src/database/query/create-table-base.js +193 -151
  181. package/build/src/database/query/delete-base.js +16 -14
  182. package/build/src/database/query/drop-database-base.js +28 -23
  183. package/build/src/database/query/drop-table-base.js +53 -42
  184. package/build/src/database/query/from-base.js +33 -30
  185. package/build/src/database/query/from-plain.js +13 -11
  186. package/build/src/database/query/from-table.js +15 -13
  187. package/build/src/database/query/index.js +472 -410
  188. package/build/src/database/query/insert-base.js +164 -143
  189. package/build/src/database/query/join-base.js +40 -35
  190. package/build/src/database/query/join-object.js +153 -128
  191. package/build/src/database/query/join-plain.js +15 -13
  192. package/build/src/database/query/join-tracker.js +90 -76
  193. package/build/src/database/query/model-class-query.js +1370 -1134
  194. package/build/src/database/query/order-base.js +30 -27
  195. package/build/src/database/query/order-column.js +53 -44
  196. package/build/src/database/query/order-plain.js +24 -20
  197. package/build/src/database/query/preloader/belongs-to.js +258 -210
  198. package/build/src/database/query/preloader/ensure-model-class-initialized.js +9 -8
  199. package/build/src/database/query/preloader/has-many.js +301 -240
  200. package/build/src/database/query/preloader/has-one.js +117 -91
  201. package/build/src/database/query/preloader/selection.js +129 -117
  202. package/build/src/database/query/preloader.js +185 -160
  203. package/build/src/database/query/query-data.js +201 -157
  204. package/build/src/database/query/select-base.js +27 -25
  205. package/build/src/database/query/select-plain.js +15 -13
  206. package/build/src/database/query/select-table-and-column.js +25 -21
  207. package/build/src/database/query/update-base.js +38 -35
  208. package/build/src/database/query/upsert-base.js +100 -93
  209. package/build/src/database/query/where-base.js +35 -32
  210. package/build/src/database/query/where-combinator.d.ts.map +1 -1
  211. package/build/src/database/query/where-combinator.js +28 -26
  212. package/build/src/database/query/where-hash.js +68 -61
  213. package/build/src/database/query/where-model-class-hash.js +469 -414
  214. package/build/src/database/query/where-not.js +20 -18
  215. package/build/src/database/query/where-plain.js +17 -15
  216. package/build/src/database/query/with-count.js +159 -125
  217. package/build/src/database/query-parser/base-query-parser.js +37 -32
  218. package/build/src/database/query-parser/from-parser.js +45 -36
  219. package/build/src/database/query-parser/group-parser.js +50 -42
  220. package/build/src/database/query-parser/joins-parser.js +33 -28
  221. package/build/src/database/query-parser/limit-parser.js +70 -67
  222. package/build/src/database/query-parser/options.js +82 -75
  223. package/build/src/database/query-parser/order-parser.js +40 -36
  224. package/build/src/database/query-parser/select-parser.js +60 -49
  225. package/build/src/database/query-parser/where-parser.js +41 -36
  226. package/build/src/database/record/acts-as-list.d.ts.map +1 -1
  227. package/build/src/database/record/acts-as-list.js +273 -229
  228. package/build/src/database/record/attachments/download.js +45 -44
  229. package/build/src/database/record/attachments/handle.js +161 -141
  230. package/build/src/database/record/attachments/normalize-input.js +138 -128
  231. package/build/src/database/record/attachments/storage-drivers/filesystem.js +91 -77
  232. package/build/src/database/record/attachments/storage-drivers/native.js +121 -112
  233. package/build/src/database/record/attachments/storage-drivers/s3.js +208 -177
  234. package/build/src/database/record/attachments/store.d.ts +1 -1
  235. package/build/src/database/record/attachments/store.d.ts.map +1 -1
  236. package/build/src/database/record/attachments/store.js +540 -468
  237. package/build/src/database/record/index.d.ts +23 -15
  238. package/build/src/database/record/index.d.ts.map +1 -1
  239. package/build/src/database/record/index.js +3894 -3350
  240. package/build/src/database/record/instance-relationships/base.js +268 -234
  241. package/build/src/database/record/instance-relationships/belongs-to.js +73 -58
  242. package/build/src/database/record/instance-relationships/has-many.js +264 -225
  243. package/build/src/database/record/instance-relationships/has-one.js +105 -85
  244. package/build/src/database/record/record-not-found-error.js +2 -3
  245. package/build/src/database/record/relationships/base.d.ts +2 -2
  246. package/build/src/database/record/relationships/base.d.ts.map +1 -1
  247. package/build/src/database/record/relationships/base.js +167 -145
  248. package/build/src/database/record/relationships/belongs-to.js +51 -44
  249. package/build/src/database/record/relationships/has-many.js +40 -32
  250. package/build/src/database/record/relationships/has-one.js +40 -32
  251. package/build/src/database/record/state-machine.js +208 -156
  252. package/build/src/database/record/user-module.js +38 -32
  253. package/build/src/database/record/validators/base.js +24 -22
  254. package/build/src/database/record/validators/format.js +46 -36
  255. package/build/src/database/record/validators/presence.js +20 -18
  256. package/build/src/database/record/validators/uniqueness.js +117 -99
  257. package/build/src/database/table-data/index.js +231 -199
  258. package/build/src/database/table-data/table-column.js +382 -338
  259. package/build/src/database/table-data/table-foreign-key.js +66 -57
  260. package/build/src/database/table-data/table-index.js +36 -29
  261. package/build/src/database/table-data/table-reference.js +10 -10
  262. package/build/src/database/use-database.js +40 -32
  263. package/build/src/environment-handlers/base.js +544 -484
  264. package/build/src/environment-handlers/browser.js +294 -241
  265. package/build/src/environment-handlers/node/cli/commands/background-jobs-main.js +19 -16
  266. package/build/src/environment-handlers/node/cli/commands/background-jobs-runner.js +21 -18
  267. package/build/src/environment-handlers/node/cli/commands/background-jobs-worker.js +29 -22
  268. package/build/src/environment-handlers/node/cli/commands/beacon.js +19 -16
  269. package/build/src/environment-handlers/node/cli/commands/cli-command-context.js +15 -14
  270. package/build/src/environment-handlers/node/cli/commands/console.js +120 -99
  271. package/build/src/environment-handlers/node/cli/commands/db/schema/dump.js +39 -34
  272. package/build/src/environment-handlers/node/cli/commands/db/schema/load.js +63 -57
  273. package/build/src/environment-handlers/node/cli/commands/db/seed.js +63 -51
  274. package/build/src/environment-handlers/node/cli/commands/destroy/migration.js +40 -32
  275. package/build/src/environment-handlers/node/cli/commands/generate/base-models.d.ts.map +1 -1
  276. package/build/src/environment-handlers/node/cli/commands/generate/base-models.js +353 -298
  277. package/build/src/environment-handlers/node/cli/commands/generate/frontend-models.js +844 -729
  278. package/build/src/environment-handlers/node/cli/commands/generate/migration.js +38 -34
  279. package/build/src/environment-handlers/node/cli/commands/generate/model.js +38 -34
  280. package/build/src/environment-handlers/node/cli/commands/init.js +61 -56
  281. package/build/src/environment-handlers/node/cli/commands/routes.js +59 -51
  282. package/build/src/environment-handlers/node/cli/commands/run-script.js +68 -54
  283. package/build/src/environment-handlers/node/cli/commands/runner.js +74 -56
  284. package/build/src/environment-handlers/node/cli/commands/server.js +106 -93
  285. package/build/src/environment-handlers/node/cli/commands/test.js +113 -97
  286. package/build/src/environment-handlers/node.js +874 -753
  287. package/build/src/error-logger.js +21 -22
  288. package/build/src/frontend-model-controller.d.ts +6 -6
  289. package/build/src/frontend-model-controller.d.ts.map +1 -1
  290. package/build/src/frontend-model-controller.js +3288 -2788
  291. package/build/src/frontend-model-resource/base-resource.d.ts +18 -17
  292. package/build/src/frontend-model-resource/base-resource.d.ts.map +1 -1
  293. package/build/src/frontend-model-resource/base-resource.js +869 -759
  294. package/build/src/frontend-models/base.d.ts +19 -12
  295. package/build/src/frontend-models/base.d.ts.map +1 -1
  296. package/build/src/frontend-models/base.js +3602 -3114
  297. package/build/src/frontend-models/clear-pending-debounced-callback.js +8 -7
  298. package/build/src/frontend-models/event-hook-models.js +21 -16
  299. package/build/src/frontend-models/model-registry.js +11 -9
  300. package/build/src/frontend-models/outgoing-event-buffer.js +17 -10
  301. package/build/src/frontend-models/preloader.d.ts +6 -6
  302. package/build/src/frontend-models/preloader.d.ts.map +1 -1
  303. package/build/src/frontend-models/preloader.js +149 -131
  304. package/build/src/frontend-models/query.d.ts.map +1 -1
  305. package/build/src/frontend-models/query.js +1855 -1560
  306. package/build/src/frontend-models/resource-config-validation.js +37 -27
  307. package/build/src/frontend-models/resource-definition.js +288 -234
  308. package/build/src/frontend-models/transport-serialization.js +266 -203
  309. package/build/src/frontend-models/use-created-event.js +7 -5
  310. package/build/src/frontend-models/use-destroyed-event.js +93 -80
  311. package/build/src/frontend-models/use-model-class-event.js +91 -79
  312. package/build/src/frontend-models/use-updated-event.js +97 -84
  313. package/build/src/frontend-models/websocket-channel.js +441 -381
  314. package/build/src/frontend-models/websocket-publishers.js +173 -140
  315. package/build/src/http-client/header.js +14 -13
  316. package/build/src/http-client/index.js +132 -116
  317. package/build/src/http-client/request.js +87 -71
  318. package/build/src/http-client/response.js +140 -122
  319. package/build/src/http-client/websocket-client.js +17 -15
  320. package/build/src/http-server/client/index.js +465 -409
  321. package/build/src/http-server/client/params-to-object.js +135 -124
  322. package/build/src/http-server/client/request-buffer/form-data-part.js +132 -111
  323. package/build/src/http-server/client/request-buffer/header.js +16 -15
  324. package/build/src/http-server/client/request-buffer/index.js +506 -446
  325. package/build/src/http-server/client/request-parser.js +186 -163
  326. package/build/src/http-server/client/request-runner.js +259 -226
  327. package/build/src/http-server/client/request-timing.js +151 -132
  328. package/build/src/http-server/client/request.js +108 -96
  329. package/build/src/http-server/client/response.js +235 -213
  330. package/build/src/http-server/client/uploaded-file/memory-uploaded-file.js +29 -25
  331. package/build/src/http-server/client/uploaded-file/temporary-uploaded-file.js +29 -25
  332. package/build/src/http-server/client/uploaded-file/uploaded-file.js +33 -33
  333. package/build/src/http-server/client/websocket-request.js +137 -114
  334. package/build/src/http-server/client/websocket-session.js +1657 -1452
  335. package/build/src/http-server/cookie.js +236 -216
  336. package/build/src/http-server/development-reloader.js +221 -190
  337. package/build/src/http-server/index.js +525 -451
  338. package/build/src/http-server/remote-address.js +50 -38
  339. package/build/src/http-server/server-client.js +208 -181
  340. package/build/src/http-server/server-lock.js +167 -153
  341. package/build/src/http-server/websocket-channel-subscribers.js +93 -81
  342. package/build/src/http-server/websocket-channel.js +117 -104
  343. package/build/src/http-server/websocket-connection.js +104 -96
  344. package/build/src/http-server/websocket-event-log-store.js +404 -350
  345. package/build/src/http-server/websocket-events-host.js +164 -145
  346. package/build/src/http-server/websocket-events.js +47 -47
  347. package/build/src/http-server/worker-handler/channel-subscriber-dispatch.js +14 -13
  348. package/build/src/http-server/worker-handler/in-process.js +141 -123
  349. package/build/src/http-server/worker-handler/index.js +349 -313
  350. package/build/src/http-server/worker-handler/worker-script.js +5 -4
  351. package/build/src/http-server/worker-handler/worker-thread.js +269 -240
  352. package/build/src/initializer.js +36 -31
  353. package/build/src/jobs/mail-delivery.js +15 -13
  354. package/build/src/logger/base-logger.js +26 -24
  355. package/build/src/logger/console-logger.js +23 -21
  356. package/build/src/logger/file-logger.js +31 -29
  357. package/build/src/logger/outputs/array-output.js +42 -37
  358. package/build/src/logger/outputs/console-output.js +24 -20
  359. package/build/src/logger/outputs/file-output.js +48 -43
  360. package/build/src/logger/outputs/stdout-output.js +48 -39
  361. package/build/src/logger.js +394 -338
  362. package/build/src/mailer/backends/smtp.js +163 -134
  363. package/build/src/mailer/base.js +251 -211
  364. package/build/src/mailer/delivery.js +64 -56
  365. package/build/src/mailer/index.js +22 -4
  366. package/build/src/mailer.js +13 -4
  367. package/build/src/plugins/sqljs-wasm-route-controller.js +52 -42
  368. package/build/src/plugins/sqljs-wasm-route.js +38 -28
  369. package/build/src/record-payload-values.js +28 -25
  370. package/build/src/routes/app-routes.js +14 -12
  371. package/build/src/routes/base-route.js +130 -112
  372. package/build/src/routes/basic-route.js +102 -83
  373. package/build/src/routes/built-in/debug/controller.js +10 -10
  374. package/build/src/routes/built-in/errors/controller.js +5 -5
  375. package/build/src/routes/get-route.js +63 -50
  376. package/build/src/routes/hooks/frontend-model-command-route-hook.js +80 -66
  377. package/build/src/routes/index.js +43 -36
  378. package/build/src/routes/namespace-route.js +47 -38
  379. package/build/src/routes/plugin-routes.js +124 -107
  380. package/build/src/routes/post-route.js +62 -51
  381. package/build/src/routes/resolver.js +494 -422
  382. package/build/src/routes/resource-route.js +143 -124
  383. package/build/src/routes/root-route.js +8 -7
  384. package/build/src/testing/base-expect.js +14 -13
  385. package/build/src/testing/browser-frontend-model-event-hook-scenarios.js +405 -329
  386. package/build/src/testing/browser-test-app.js +29 -23
  387. package/build/src/testing/expect-to-change.js +50 -41
  388. package/build/src/testing/expect-utils.js +184 -139
  389. package/build/src/testing/expect.js +731 -638
  390. package/build/src/testing/request-client.js +85 -70
  391. package/build/src/testing/test-files-finder.js +339 -285
  392. package/build/src/testing/test-filter-parser.js +155 -124
  393. package/build/src/testing/test-runner.js +1020 -883
  394. package/build/src/testing/test-suite-splitter.js +142 -114
  395. package/build/src/testing/test.js +256 -216
  396. package/build/src/utils/backtrace-cleaner-node.js +69 -62
  397. package/build/src/utils/backtrace-cleaner.js +216 -188
  398. package/build/src/utils/ensure-error.js +7 -7
  399. package/build/src/utils/event-emitter.js +6 -4
  400. package/build/src/utils/file-exists.js +10 -9
  401. package/build/src/utils/format-value.js +76 -67
  402. package/build/src/utils/model-scope.js +31 -27
  403. package/build/src/utils/nest-callbacks.js +13 -10
  404. package/build/src/utils/plain-object.js +6 -5
  405. package/build/src/utils/ransack.d.ts.map +1 -1
  406. package/build/src/utils/ransack.js +563 -449
  407. package/build/src/utils/rest-args-error.js +6 -5
  408. package/build/src/utils/singularize-model-name.js +11 -9
  409. package/build/src/utils/split-sql-statements.js +79 -68
  410. package/build/src/utils/to-import-specifier.js +30 -24
  411. package/build/src/utils/with-tracked-stack-async-hooks.js +74 -60
  412. package/build/src/utils/with-tracked-stack.js +18 -14
  413. package/build/src/velocious-error.js +30 -27
  414. package/index.js +1 -0
  415. package/package.json +10 -4
  416. package/scripts/clean-build.js +8 -0
  417. package/scripts/ensure-bin-executable.js +13 -0
  418. package/scripts/run-tests.js +37 -0
  419. package/scripts/test-browser.js +486 -0
  420. package/src/application.js +229 -0
  421. package/src/authorization/ability.js +329 -0
  422. package/src/authorization/base-resource.js +143 -0
  423. package/src/background-jobs/client.js +50 -0
  424. package/src/background-jobs/cron-expression.js +277 -0
  425. package/src/background-jobs/forked-runner-child.js +86 -0
  426. package/src/background-jobs/job-record.js +13 -0
  427. package/src/background-jobs/job-registry.js +92 -0
  428. package/src/background-jobs/job-runner.js +107 -0
  429. package/src/background-jobs/job.js +77 -0
  430. package/src/background-jobs/json-socket.js +78 -0
  431. package/src/background-jobs/main.js +926 -0
  432. package/src/background-jobs/normalize-error.js +26 -0
  433. package/src/background-jobs/scheduler.js +274 -0
  434. package/src/background-jobs/socket-request.js +68 -0
  435. package/src/background-jobs/status-reporter.js +101 -0
  436. package/src/background-jobs/store.js +994 -0
  437. package/src/background-jobs/types.js +70 -0
  438. package/src/background-jobs/web/authorization.js +89 -0
  439. package/src/background-jobs/web/controller.js +280 -0
  440. package/src/background-jobs/web/index.js +57 -0
  441. package/src/background-jobs/web/path-matcher.js +74 -0
  442. package/src/background-jobs/web/registry.js +49 -0
  443. package/src/background-jobs/worker.js +683 -0
  444. package/src/beacon/client.js +330 -0
  445. package/src/beacon/in-process-broker.js +71 -0
  446. package/src/beacon/in-process-client.js +139 -0
  447. package/src/beacon/server.js +148 -0
  448. package/src/beacon/types.js +55 -0
  449. package/src/cli/base-command.js +67 -0
  450. package/src/cli/browser-cli.js +45 -0
  451. package/src/cli/commands/background-jobs-main.js +7 -0
  452. package/src/cli/commands/background-jobs-runner.js +7 -0
  453. package/src/cli/commands/background-jobs-worker.js +7 -0
  454. package/src/cli/commands/beacon.js +7 -0
  455. package/src/cli/commands/console.js +12 -0
  456. package/src/cli/commands/db/base-command.js +82 -0
  457. package/src/cli/commands/db/create.js +64 -0
  458. package/src/cli/commands/db/drop.js +75 -0
  459. package/src/cli/commands/db/migrate.js +17 -0
  460. package/src/cli/commands/db/reset.js +22 -0
  461. package/src/cli/commands/db/rollback.js +15 -0
  462. package/src/cli/commands/db/schema/dump.js +12 -0
  463. package/src/cli/commands/db/schema/load.js +12 -0
  464. package/src/cli/commands/db/seed.js +12 -0
  465. package/src/cli/commands/db/tenants/check.js +38 -0
  466. package/src/cli/commands/db/tenants/create.js +33 -0
  467. package/src/cli/commands/db/tenants/migrate.js +49 -0
  468. package/src/cli/commands/destroy/migration.js +7 -0
  469. package/src/cli/commands/generate/base-models.js +7 -0
  470. package/src/cli/commands/generate/frontend-models.js +12 -0
  471. package/src/cli/commands/generate/migration.js +7 -0
  472. package/src/cli/commands/generate/model.js +7 -0
  473. package/src/cli/commands/init.js +11 -0
  474. package/src/cli/commands/routes.js +7 -0
  475. package/src/cli/commands/run-script.js +12 -0
  476. package/src/cli/commands/runner.js +12 -0
  477. package/src/cli/commands/server.js +7 -0
  478. package/src/cli/commands/test.js +9 -0
  479. package/src/cli/index.js +152 -0
  480. package/src/cli/tenant-database-command-helper.js +198 -0
  481. package/src/cli/use-browser-cli.js +30 -0
  482. package/src/configuration-resolver.js +65 -0
  483. package/src/configuration-types.js +429 -0
  484. package/src/configuration.js +2590 -0
  485. package/src/controller.js +421 -0
  486. package/src/current-configuration.js +31 -0
  487. package/src/current.js +80 -0
  488. package/src/database/annotations-async-hooks.js +47 -0
  489. package/src/database/annotations.js +40 -0
  490. package/src/database/drivers/base-column.js +182 -0
  491. package/src/database/drivers/base-columns-index.js +81 -0
  492. package/src/database/drivers/base-foreign-key.js +104 -0
  493. package/src/database/drivers/base-table.js +156 -0
  494. package/src/database/drivers/base.js +1609 -0
  495. package/src/database/drivers/mssql/column.js +74 -0
  496. package/src/database/drivers/mssql/columns-index.js +6 -0
  497. package/src/database/drivers/mssql/connect-connection.js +16 -0
  498. package/src/database/drivers/mssql/foreign-key.js +12 -0
  499. package/src/database/drivers/mssql/index.js +590 -0
  500. package/src/database/drivers/mssql/options.js +79 -0
  501. package/src/database/drivers/mssql/query-parser.js +6 -0
  502. package/src/database/drivers/mssql/sql/alter-table.js +4 -0
  503. package/src/database/drivers/mssql/sql/create-database.js +36 -0
  504. package/src/database/drivers/mssql/sql/create-index.js +4 -0
  505. package/src/database/drivers/mssql/sql/create-table.js +4 -0
  506. package/src/database/drivers/mssql/sql/delete.js +19 -0
  507. package/src/database/drivers/mssql/sql/drop-database.js +36 -0
  508. package/src/database/drivers/mssql/sql/drop-table.js +4 -0
  509. package/src/database/drivers/mssql/sql/insert.js +4 -0
  510. package/src/database/drivers/mssql/sql/update.js +31 -0
  511. package/src/database/drivers/mssql/sql/upsert.js +23 -0
  512. package/src/database/drivers/mssql/structure-sql.js +120 -0
  513. package/src/database/drivers/mssql/table.js +145 -0
  514. package/src/database/drivers/mysql/column.js +112 -0
  515. package/src/database/drivers/mysql/columns-index.js +22 -0
  516. package/src/database/drivers/mysql/foreign-key.js +12 -0
  517. package/src/database/drivers/mysql/index.js +473 -0
  518. package/src/database/drivers/mysql/options.js +34 -0
  519. package/src/database/drivers/mysql/query-parser.js +6 -0
  520. package/src/database/drivers/mysql/query.js +37 -0
  521. package/src/database/drivers/mysql/sql/alter-table.js +6 -0
  522. package/src/database/drivers/mysql/sql/create-database.js +39 -0
  523. package/src/database/drivers/mysql/sql/create-index.js +6 -0
  524. package/src/database/drivers/mysql/sql/create-table.js +6 -0
  525. package/src/database/drivers/mysql/sql/delete.js +21 -0
  526. package/src/database/drivers/mysql/sql/drop-database.js +6 -0
  527. package/src/database/drivers/mysql/sql/drop-table.js +6 -0
  528. package/src/database/drivers/mysql/sql/insert.js +6 -0
  529. package/src/database/drivers/mysql/sql/update.js +33 -0
  530. package/src/database/drivers/mysql/sql/upsert.js +13 -0
  531. package/src/database/drivers/mysql/structure-sql.js +93 -0
  532. package/src/database/drivers/mysql/table.js +121 -0
  533. package/src/database/drivers/pgsql/column.js +90 -0
  534. package/src/database/drivers/pgsql/columns-index.js +6 -0
  535. package/src/database/drivers/pgsql/foreign-key.js +12 -0
  536. package/src/database/drivers/pgsql/index.js +441 -0
  537. package/src/database/drivers/pgsql/options.js +32 -0
  538. package/src/database/drivers/pgsql/query-parser.js +6 -0
  539. package/src/database/drivers/pgsql/sql/alter-table.js +6 -0
  540. package/src/database/drivers/pgsql/sql/create-database.js +38 -0
  541. package/src/database/drivers/pgsql/sql/create-index.js +6 -0
  542. package/src/database/drivers/pgsql/sql/create-table.js +6 -0
  543. package/src/database/drivers/pgsql/sql/delete.js +21 -0
  544. package/src/database/drivers/pgsql/sql/drop-database.js +6 -0
  545. package/src/database/drivers/pgsql/sql/drop-table.js +6 -0
  546. package/src/database/drivers/pgsql/sql/insert.js +6 -0
  547. package/src/database/drivers/pgsql/sql/update.js +33 -0
  548. package/src/database/drivers/pgsql/sql/upsert.js +14 -0
  549. package/src/database/drivers/pgsql/structure-sql.js +126 -0
  550. package/src/database/drivers/pgsql/table.js +135 -0
  551. package/src/database/drivers/sqlite/base.js +509 -0
  552. package/src/database/drivers/sqlite/column.js +75 -0
  553. package/src/database/drivers/sqlite/columns-index.js +30 -0
  554. package/src/database/drivers/sqlite/connection-sql-js.js +46 -0
  555. package/src/database/drivers/sqlite/foreign-key.js +24 -0
  556. package/src/database/drivers/sqlite/index.js +394 -0
  557. package/src/database/drivers/sqlite/index.native.js +72 -0
  558. package/src/database/drivers/sqlite/index.web.js +99 -0
  559. package/src/database/drivers/sqlite/options.js +32 -0
  560. package/src/database/drivers/sqlite/query-parser.js +6 -0
  561. package/src/database/drivers/sqlite/query.js +35 -0
  562. package/src/database/drivers/sqlite/query.native.js +35 -0
  563. package/src/database/drivers/sqlite/query.web.js +49 -0
  564. package/src/database/drivers/sqlite/sql/alter-table.js +187 -0
  565. package/src/database/drivers/sqlite/sql/create-index.js +6 -0
  566. package/src/database/drivers/sqlite/sql/create-table.js +6 -0
  567. package/src/database/drivers/sqlite/sql/delete.js +26 -0
  568. package/src/database/drivers/sqlite/sql/drop-table.js +6 -0
  569. package/src/database/drivers/sqlite/sql/insert.js +6 -0
  570. package/src/database/drivers/sqlite/sql/update.js +33 -0
  571. package/src/database/drivers/sqlite/sql/upsert.js +14 -0
  572. package/src/database/drivers/sqlite/structure-sql.js +56 -0
  573. package/src/database/drivers/sqlite/table-rebuilder.js +96 -0
  574. package/src/database/drivers/sqlite/table.js +131 -0
  575. package/src/database/drivers/structure-sql/utils.js +35 -0
  576. package/src/database/handler.js +13 -0
  577. package/src/database/initializer-from-require-context.js +101 -0
  578. package/src/database/migration/index.js +438 -0
  579. package/src/database/migrator/files-finder.js +55 -0
  580. package/src/database/migrator/types.js +31 -0
  581. package/src/database/migrator.js +557 -0
  582. package/src/database/pool/async-tracked-multi-connection.js +1164 -0
  583. package/src/database/pool/base-methods-forward.js +52 -0
  584. package/src/database/pool/base.js +380 -0
  585. package/src/database/pool/single-multi-use.js +118 -0
  586. package/src/database/query/alter-table-base.js +104 -0
  587. package/src/database/query/base.js +49 -0
  588. package/src/database/query/create-database-base.js +42 -0
  589. package/src/database/query/create-index-base.js +117 -0
  590. package/src/database/query/create-table-base.js +205 -0
  591. package/src/database/query/delete-base.js +19 -0
  592. package/src/database/query/drop-database-base.js +38 -0
  593. package/src/database/query/drop-table-base.js +58 -0
  594. package/src/database/query/from-base.js +36 -0
  595. package/src/database/query/from-plain.js +16 -0
  596. package/src/database/query/from-table.js +18 -0
  597. package/src/database/query/index.js +533 -0
  598. package/src/database/query/insert-base.js +172 -0
  599. package/src/database/query/join-base.js +43 -0
  600. package/src/database/query/join-object.js +167 -0
  601. package/src/database/query/join-plain.js +18 -0
  602. package/src/database/query/join-tracker.js +93 -0
  603. package/src/database/query/model-class-query.js +1577 -0
  604. package/src/database/query/order-base.js +33 -0
  605. package/src/database/query/order-column.js +77 -0
  606. package/src/database/query/order-plain.js +28 -0
  607. package/src/database/query/preloader/belongs-to.js +267 -0
  608. package/src/database/query/preloader/ensure-model-class-initialized.js +18 -0
  609. package/src/database/query/preloader/has-many.js +316 -0
  610. package/src/database/query/preloader/has-one.js +123 -0
  611. package/src/database/query/preloader/selection.js +152 -0
  612. package/src/database/query/preloader.js +201 -0
  613. package/src/database/query/query-data.js +305 -0
  614. package/src/database/query/select-base.js +30 -0
  615. package/src/database/query/select-plain.js +18 -0
  616. package/src/database/query/select-table-and-column.js +28 -0
  617. package/src/database/query/update-base.js +41 -0
  618. package/src/database/query/upsert-base.js +103 -0
  619. package/src/database/query/where-base.js +38 -0
  620. package/src/database/query/where-combinator.js +31 -0
  621. package/src/database/query/where-hash.js +77 -0
  622. package/src/database/query/where-model-class-hash.js +505 -0
  623. package/src/database/query/where-not.js +23 -0
  624. package/src/database/query/where-plain.js +20 -0
  625. package/src/database/query/with-count.js +219 -0
  626. package/src/database/query-parser/base-query-parser.js +40 -0
  627. package/src/database/query-parser/from-parser.js +49 -0
  628. package/src/database/query-parser/group-parser.js +55 -0
  629. package/src/database/query-parser/joins-parser.js +37 -0
  630. package/src/database/query-parser/limit-parser.js +77 -0
  631. package/src/database/query-parser/options.js +94 -0
  632. package/src/database/query-parser/order-parser.js +45 -0
  633. package/src/database/query-parser/select-parser.js +67 -0
  634. package/src/database/query-parser/where-parser.js +46 -0
  635. package/src/database/record/acts-as-list.js +374 -0
  636. package/src/database/record/attachments/download.js +49 -0
  637. package/src/database/record/attachments/handle.js +188 -0
  638. package/src/database/record/attachments/normalize-input.js +213 -0
  639. package/src/database/record/attachments/storage-drivers/filesystem.js +114 -0
  640. package/src/database/record/attachments/storage-drivers/native.js +146 -0
  641. package/src/database/record/attachments/storage-drivers/s3.js +245 -0
  642. package/src/database/record/attachments/store.js +591 -0
  643. package/src/database/record/index.js +3970 -0
  644. package/src/database/record/instance-relationships/base.js +289 -0
  645. package/src/database/record/instance-relationships/belongs-to.js +84 -0
  646. package/src/database/record/instance-relationships/has-many.js +284 -0
  647. package/src/database/record/instance-relationships/has-one.js +117 -0
  648. package/src/database/record/record-not-found-error.js +3 -0
  649. package/src/database/record/relationships/base.js +195 -0
  650. package/src/database/record/relationships/belongs-to.js +57 -0
  651. package/src/database/record/relationships/has-many.js +46 -0
  652. package/src/database/record/relationships/has-one.js +46 -0
  653. package/src/database/record/state-machine.js +278 -0
  654. package/src/database/record/user-module.js +43 -0
  655. package/src/database/record/validators/base.js +27 -0
  656. package/src/database/record/validators/format.js +50 -0
  657. package/src/database/record/validators/presence.js +24 -0
  658. package/src/database/record/validators/uniqueness.js +124 -0
  659. package/src/database/table-data/index.js +241 -0
  660. package/src/database/table-data/table-column.js +416 -0
  661. package/src/database/table-data/table-foreign-key.js +69 -0
  662. package/src/database/table-data/table-index.js +46 -0
  663. package/src/database/table-data/table-reference.js +13 -0
  664. package/src/database/use-database.js +48 -0
  665. package/src/environment-handlers/base.js +561 -0
  666. package/src/environment-handlers/browser.js +338 -0
  667. package/src/environment-handlers/node/cli/commands/background-jobs-main.js +21 -0
  668. package/src/environment-handlers/node/cli/commands/background-jobs-runner.js +24 -0
  669. package/src/environment-handlers/node/cli/commands/background-jobs-worker.js +47 -0
  670. package/src/environment-handlers/node/cli/commands/beacon.js +21 -0
  671. package/src/environment-handlers/node/cli/commands/cli-command-context.js +31 -0
  672. package/src/environment-handlers/node/cli/commands/console.js +149 -0
  673. package/src/environment-handlers/node/cli/commands/db/schema/dump.js +43 -0
  674. package/src/environment-handlers/node/cli/commands/db/schema/load.js +69 -0
  675. package/src/environment-handlers/node/cli/commands/db/seed.js +79 -0
  676. package/src/environment-handlers/node/cli/commands/destroy/migration.js +47 -0
  677. package/src/environment-handlers/node/cli/commands/generate/base-models.js +367 -0
  678. package/src/environment-handlers/node/cli/commands/generate/frontend-models.js +872 -0
  679. package/src/environment-handlers/node/cli/commands/generate/migration.js +45 -0
  680. package/src/environment-handlers/node/cli/commands/generate/model.js +45 -0
  681. package/src/environment-handlers/node/cli/commands/init.js +68 -0
  682. package/src/environment-handlers/node/cli/commands/routes.js +63 -0
  683. package/src/environment-handlers/node/cli/commands/run-script.js +85 -0
  684. package/src/environment-handlers/node/cli/commands/runner.js +84 -0
  685. package/src/environment-handlers/node/cli/commands/server.js +151 -0
  686. package/src/environment-handlers/node/cli/commands/test.js +118 -0
  687. package/src/environment-handlers/node.js +887 -0
  688. package/src/error-logger.js +30 -0
  689. package/src/frontend-model-controller.js +3491 -0
  690. package/src/frontend-model-resource/base-resource.js +935 -0
  691. package/src/frontend-models/base.js +4004 -0
  692. package/src/frontend-models/clear-pending-debounced-callback.js +16 -0
  693. package/src/frontend-models/event-hook-models.js +49 -0
  694. package/src/frontend-models/model-registry.js +28 -0
  695. package/src/frontend-models/outgoing-event-buffer.js +51 -0
  696. package/src/frontend-models/preloader.js +169 -0
  697. package/src/frontend-models/query.js +2245 -0
  698. package/src/frontend-models/resource-config-validation.js +56 -0
  699. package/src/frontend-models/resource-definition.js +399 -0
  700. package/src/frontend-models/transport-serialization.js +369 -0
  701. package/src/frontend-models/use-created-event.js +21 -0
  702. package/src/frontend-models/use-destroyed-event.js +148 -0
  703. package/src/frontend-models/use-model-class-event.js +164 -0
  704. package/src/frontend-models/use-updated-event.js +152 -0
  705. package/src/frontend-models/websocket-channel.js +494 -0
  706. package/src/frontend-models/websocket-publishers.js +224 -0
  707. package/src/http-client/header.js +17 -0
  708. package/src/http-client/index.js +139 -0
  709. package/src/http-client/request.js +94 -0
  710. package/src/http-client/response.js +151 -0
  711. package/src/http-client/websocket-client.js +27 -0
  712. package/src/http-server/client/index.js +507 -0
  713. package/src/http-server/client/params-to-object.js +152 -0
  714. package/src/http-server/client/request-buffer/form-data-part.js +139 -0
  715. package/src/http-server/client/request-buffer/header.js +19 -0
  716. package/src/http-server/client/request-buffer/index.js +535 -0
  717. package/src/http-server/client/request-parser.js +195 -0
  718. package/src/http-server/client/request-runner.js +321 -0
  719. package/src/http-server/client/request-timing.js +171 -0
  720. package/src/http-server/client/request.js +114 -0
  721. package/src/http-server/client/response.js +251 -0
  722. package/src/http-server/client/uploaded-file/memory-uploaded-file.js +32 -0
  723. package/src/http-server/client/uploaded-file/temporary-uploaded-file.js +32 -0
  724. package/src/http-server/client/uploaded-file/uploaded-file.js +36 -0
  725. package/src/http-server/client/websocket-request.js +147 -0
  726. package/src/http-server/client/websocket-session.js +1755 -0
  727. package/src/http-server/cookie.js +245 -0
  728. package/src/http-server/development-reloader.js +240 -0
  729. package/src/http-server/index.js +561 -0
  730. package/src/http-server/remote-address.js +77 -0
  731. package/src/http-server/server-client.js +222 -0
  732. package/src/http-server/server-lock.js +178 -0
  733. package/src/http-server/websocket-channel-subscribers.js +110 -0
  734. package/src/http-server/websocket-channel.js +137 -0
  735. package/src/http-server/websocket-connection.js +118 -0
  736. package/src/http-server/websocket-event-log-store.js +433 -0
  737. package/src/http-server/websocket-events-host.js +170 -0
  738. package/src/http-server/websocket-events.js +50 -0
  739. package/src/http-server/worker-handler/channel-subscriber-dispatch.js +28 -0
  740. package/src/http-server/worker-handler/in-process.js +155 -0
  741. package/src/http-server/worker-handler/index.js +370 -0
  742. package/src/http-server/worker-handler/worker-script.js +6 -0
  743. package/src/http-server/worker-handler/worker-thread.js +286 -0
  744. package/src/initializer.js +39 -0
  745. package/src/jobs/.gitkeep +1 -0
  746. package/src/jobs/mail-delivery.js +22 -0
  747. package/src/logger/base-logger.js +34 -0
  748. package/src/logger/console-logger.js +28 -0
  749. package/src/logger/file-logger.js +36 -0
  750. package/src/logger/outputs/array-output.js +50 -0
  751. package/src/logger/outputs/console-output.js +32 -0
  752. package/src/logger/outputs/file-output.js +55 -0
  753. package/src/logger/outputs/stdout-output.js +64 -0
  754. package/src/logger.js +507 -0
  755. package/src/mailer/backends/smtp.js +197 -0
  756. package/src/mailer/base.js +337 -0
  757. package/src/mailer/delivery.js +70 -0
  758. package/src/mailer/index.js +24 -0
  759. package/src/mailer.js +15 -0
  760. package/src/plugins/sqljs-wasm-route-controller.js +70 -0
  761. package/src/plugins/sqljs-wasm-route.js +71 -0
  762. package/src/record-payload-values.js +83 -0
  763. package/src/routes/app-routes.js +17 -0
  764. package/src/routes/base-route.js +133 -0
  765. package/src/routes/basic-route.js +109 -0
  766. package/src/routes/built-in/debug/controller.js +12 -0
  767. package/src/routes/built-in/errors/controller.js +7 -0
  768. package/src/routes/built-in/errors/not-found.ejs +1 -0
  769. package/src/routes/get-route.js +75 -0
  770. package/src/routes/hooks/frontend-model-command-route-hook.js +100 -0
  771. package/src/routes/index.js +50 -0
  772. package/src/routes/namespace-route.js +51 -0
  773. package/src/routes/plugin-routes.js +141 -0
  774. package/src/routes/post-route.js +74 -0
  775. package/src/routes/resolver.js +535 -0
  776. package/src/routes/resource-route.js +154 -0
  777. package/src/routes/root-route.js +11 -0
  778. package/src/templates/configuration.js +61 -0
  779. package/src/templates/generate-migration.js +11 -0
  780. package/src/templates/generate-model.js +6 -0
  781. package/src/templates/routes.js +11 -0
  782. package/src/testing/base-expect.js +17 -0
  783. package/src/testing/browser-frontend-model-event-hook-scenarios.js +520 -0
  784. package/src/testing/browser-test-app.js +32 -0
  785. package/src/testing/expect-to-change.js +55 -0
  786. package/src/testing/expect-utils.js +269 -0
  787. package/src/testing/expect.js +763 -0
  788. package/src/testing/request-client.js +90 -0
  789. package/src/testing/test-files-finder.js +364 -0
  790. package/src/testing/test-filter-parser.js +198 -0
  791. package/src/testing/test-runner.js +1168 -0
  792. package/src/testing/test-suite-splitter.js +177 -0
  793. package/src/testing/test.js +370 -0
  794. package/src/types/external-modules.d.ts +57 -0
  795. package/src/utils/backtrace-cleaner-node.js +87 -0
  796. package/src/utils/backtrace-cleaner.js +266 -0
  797. package/src/utils/ensure-error.js +15 -0
  798. package/src/utils/event-emitter.js +8 -0
  799. package/src/utils/file-exists.js +18 -0
  800. package/src/utils/format-value.js +101 -0
  801. package/src/utils/model-scope.js +56 -0
  802. package/src/utils/nest-callbacks.js +22 -0
  803. package/src/utils/plain-object.js +14 -0
  804. package/src/utils/ransack.js +859 -0
  805. package/src/utils/rest-args-error.js +14 -0
  806. package/src/utils/singularize-model-name.js +18 -0
  807. package/src/utils/split-sql-statements.js +88 -0
  808. package/src/utils/to-import-specifier.js +53 -0
  809. package/src/utils/with-tracked-stack-async-hooks.js +103 -0
  810. package/src/utils/with-tracked-stack.js +38 -0
  811. package/src/velocious-error.js +34 -0
  812. package/tsconfig.json +16 -0
@@ -0,0 +1,52 @@
1
+ // @ts-check
2
+
3
+ /**
4
+ * Runs base methods forward.
5
+ * @param {typeof import("./base.js").default} PoolBase - Pool base.
6
+ * @returns {void} - No return value.
7
+ */
8
+ export default function baseMethodsForward(PoolBase) {
9
+ const forwardMethods = [
10
+ "alterTable",
11
+ "alterTableSQLs",
12
+ "createIndex",
13
+ "createIndexSQLs",
14
+ "createTable",
15
+ "createTableSql",
16
+ "delete",
17
+ "deleteSql",
18
+ "getTables",
19
+ "insert",
20
+ "insertSql",
21
+ "primaryKeyType",
22
+ "query",
23
+ "quote",
24
+ "quoteColumn",
25
+ "quoteTable",
26
+ "select",
27
+ "update",
28
+ "updateSql"
29
+ ]
30
+
31
+ const prototype = /**
32
+ * Narrows the runtime value to the documented type.
33
+ @type {Record<string, (...args: Array<?>) => ?>} */ (/**
34
+ * Narrows the runtime value to the documented type.
35
+ @type {?} */ (PoolBase.prototype))
36
+
37
+ for (const forwardMethod of forwardMethods) {
38
+ prototype[forwardMethod] = function(...args) {
39
+ const connection = this.getCurrentConnection()
40
+ const connectionRecord = /**
41
+ * Narrows the runtime value to the documented type.
42
+ @type {Record<string, (...args: Array<?>) => ?>} */ (/**
43
+ * Narrows the runtime value to the documented type.
44
+ @type {?} */ (connection))
45
+ const connectionMethod = connectionRecord[forwardMethod]
46
+
47
+ if (!connectionMethod) throw new Error(`${forwardMethod} isn't defined on driver`)
48
+
49
+ return connectionMethod.apply(connection, args)
50
+ }
51
+ }
52
+ }
@@ -0,0 +1,380 @@
1
+ // @ts-check
2
+
3
+ import Configuration from "../../configuration.js"
4
+ import Logger from "../../logger.js"
5
+ import baseMethodsForward from "./base-methods-forward.js"
6
+
7
+ export const POOL_CONFIGURATION_KEY = Symbol("velociousPoolConfigurationKey")
8
+
9
+ /**
10
+ * ConnectionCheckoutOptions type.
11
+ * @typedef {object} ConnectionCheckoutOptions
12
+ * @property {string} [name] - Human-readable name for the checked-out connection.
13
+ */
14
+
15
+ /**
16
+ * DatabasePoolDebugSnapshot type.
17
+ * @typedef {object} DatabasePoolDebugSnapshot
18
+ * @property {Record<string, ?>} configuration - Sanitized resolved database configuration.
19
+ * @property {Array<Record<string, ?>>} connections - Live connection snapshots.
20
+ * @property {number} connectionsBeingSpawned - Number of in-progress connection spawns.
21
+ * @property {number} idleCount - Number of idle connections.
22
+ * @property {string} identifier - Database identifier.
23
+ * @property {number} inUseCount - Number of checked-out connections.
24
+ * @property {Array<Record<string, ?>>} [pendingCheckouts] - Waiting checkout snapshots.
25
+ * @property {number} pendingCheckoutCount - Number of queued checkout requests.
26
+ * @property {string} poolClass - Pool class name.
27
+ */
28
+
29
+ /**
30
+ * Shared.
31
+ @type {{currentPool: VelociousDatabasePoolBase | null}} */
32
+ const shared = {
33
+ currentPool: null
34
+ }
35
+
36
+ /**
37
+ * Runs stable stringify.
38
+ * @param {?} value - Value to stringify.
39
+ * @returns {string} - Stable JSON string.
40
+ */
41
+ function stableStringify(value) {
42
+ if (Array.isArray(value)) {
43
+ return `[${value.map((entry) => stableStringify(entry)).join(",")}]`
44
+ }
45
+
46
+ if (value && typeof value === "object") {
47
+ const entries = Object
48
+ .keys(/**
49
+ * Narrows the runtime value to the documented type.
50
+ @type {Record<string, ?>} */ (value))
51
+ .sort()
52
+ .map((key) => `${JSON.stringify(key)}:${stableStringify(/**
53
+ * Narrows the runtime value to the documented type.
54
+ @type {Record<string, ?>} */ (value)[key])}`)
55
+
56
+ return `{${entries.join(",")}}`
57
+ }
58
+
59
+ return JSON.stringify(value)
60
+ }
61
+
62
+ class VelociousDatabasePoolBase {
63
+ /**
64
+ * Without current connection context.
65
+ @type {undefined | ((callback: () => ?) => ?)} */
66
+ _withoutCurrentConnectionContext = undefined
67
+
68
+ /**
69
+ * Runs current.
70
+ * @returns {VelociousDatabasePoolBase} - The current.
71
+ */
72
+ static current() {
73
+ if (!shared.currentPool) throw new Error("A database pool hasn't been set")
74
+
75
+ return shared.currentPool
76
+ }
77
+
78
+ /**
79
+ * Clears any global connections for the given configuration.
80
+ * @returns {void} - No return value.
81
+ */
82
+ static clearGlobalConnections() {}
83
+
84
+ /**
85
+ * Runs constructor.
86
+ * @param {object} args - Options object.
87
+ * @param {Configuration} args.configuration - Configuration instance.
88
+ * @param {string} args.identifier - Identifier.
89
+ */
90
+ constructor({configuration, identifier}) {
91
+ this.configuration = configuration || Configuration.current()
92
+
93
+ if (!this.configuration) throw new Error("No configuration given")
94
+ if (!identifier) throw new Error("No identifier was given")
95
+
96
+ this.identifier = identifier
97
+ this.logger = new Logger(this)
98
+ }
99
+
100
+ /**
101
+ * Runs checkin.
102
+ * @abstract
103
+ * @param {import("../drivers/base.js").default} _connection - Connection.
104
+ */
105
+ checkin(_connection) {
106
+ throw new Error("'checkin' not implemented")
107
+ }
108
+
109
+ /**
110
+ * Runs checkout.
111
+ * @abstract
112
+ * @param {ConnectionCheckoutOptions} [_options] - Checkout options.
113
+ * @returns {Promise<import("../drivers/base.js").default>} - Resolves with the checkout.
114
+ */
115
+ checkout(_options) {
116
+ throw new Error("'checkout' not implemented")
117
+ }
118
+
119
+ /**
120
+ * Runs get current connection.
121
+ * @abstract
122
+ * @returns {import("../drivers/base.js").default} - The current connection.
123
+ */
124
+ getCurrentConnection() {
125
+ throw new Error("'getCurrentConnection' not implemented")
126
+ }
127
+
128
+ /**
129
+ * Returns the connection pinned to the current context, if any.
130
+ * Default implementation defers to `getCurrentConnection`.
131
+ * @returns {import("../drivers/base.js").default | undefined} - The current context connection.
132
+ */
133
+ getCurrentContextConnection() {
134
+ return this.getCurrentConnection()
135
+ }
136
+
137
+ /**
138
+ * Runs without current connection context.
139
+ * @template T
140
+ * @param {() => T} callback - Callback to run without ? current connection context.
141
+ * @returns {T} - Callback result.
142
+ */
143
+ withoutCurrentConnectionContext(callback) {
144
+ if (this._withoutCurrentConnectionContext) return /** Narrows the runtime value to the documented type. @type {T} */ (this._withoutCurrentConnectionContext(callback))
145
+
146
+ return callback()
147
+ }
148
+
149
+ /**
150
+ * Runs get configuration.
151
+ * @returns {import("../../configuration-types.js").DatabaseConfigurationType} - Resolved database configuration for the pool identifier.
152
+ */
153
+ getConfiguration() {
154
+ return this.configuration.resolveDatabaseConfiguration(this.identifier)
155
+ }
156
+
157
+ /**
158
+ * Runs get configuration reuse key.
159
+ * @returns {string} - Reuse key for the currently resolved database configuration.
160
+ */
161
+ getConfigurationReuseKey() {
162
+ const databaseConfiguration = this.getConfiguration()
163
+
164
+ return stableStringify({
165
+ database: databaseConfiguration.database,
166
+ host: databaseConfiguration.host,
167
+ name: databaseConfiguration.name,
168
+ port: databaseConfiguration.port,
169
+ schema: databaseConfiguration.schema,
170
+ schemaCache: databaseConfiguration.schemaCache,
171
+ sqlConfig: databaseConfiguration.sqlConfig,
172
+ type: databaseConfiguration.type,
173
+ useDatabase: databaseConfiguration.useDatabase,
174
+ username: databaseConfiguration.username
175
+ })
176
+ }
177
+
178
+ /**
179
+ * Runs connection matches current configuration.
180
+ * @param {import("../drivers/base.js").default} connection - Connection.
181
+ * @returns {boolean} - Whether connection matches current resolved configuration.
182
+ */
183
+ connectionMatchesCurrentConfiguration(connection) {
184
+ const connectionWithPoolKey = /**
185
+ * Narrows the runtime value to the documented type.
186
+ @type {import("../drivers/base.js").default & {[POOL_CONFIGURATION_KEY]?: string}} */ (connection)
187
+
188
+ return connectionWithPoolKey[POOL_CONFIGURATION_KEY] === this.getConfigurationReuseKey()
189
+ }
190
+
191
+ /**
192
+ * Clears schema metadata cached by this pool's current connection.
193
+ * Pools that keep multiple connections alive should override this to clear every live connection.
194
+ * @returns {void} - No return value.
195
+ */
196
+ clearSchemaCache() {
197
+ this._clearConnectionSchemaCache(this.getCurrentConnection())
198
+ }
199
+
200
+ /**
201
+ * Runs clear connection schema cache.
202
+ * @param {import("../drivers/base.js").default} connection - Connection whose local schema cache should be cleared.
203
+ * @returns {void} - No return value.
204
+ */
205
+ _clearConnectionSchemaCache(connection) {
206
+ connection._clearLocalSchemaCache()
207
+ }
208
+
209
+ /**
210
+ * Runs primary key type.
211
+ * @abstract
212
+ * @returns {string} - The primary key type.
213
+ */
214
+ primaryKeyType() {
215
+ throw new Error("'primaryKeyType' not implemented")
216
+ }
217
+
218
+ /**
219
+ * Runs set current.
220
+ * @returns {void} - No return value.
221
+ */
222
+ setCurrent() {
223
+ shared.currentPool = this
224
+ }
225
+
226
+ /**
227
+ * Runs set driver class.
228
+ * @param {typeof import("../drivers/base.js").default} driverClass - Driver class.
229
+ */
230
+ setDriverClass(driverClass) {
231
+ this.driverClass = driverClass
232
+ }
233
+
234
+ /**
235
+ * Runs spawn connection.
236
+ * @returns {Promise<import("../drivers/base.js").default>} - Resolves with the spawn connection.
237
+ */
238
+ async spawnConnection() {
239
+ const databaseConfig = this.getConfiguration()
240
+
241
+ this.logger.debug("spawnConnection", {identifier: this.identifier, databaseConfig})
242
+
243
+ const connection = await this.spawnConnectionWithConfiguration(databaseConfig)
244
+
245
+ const connectionWithPoolKey = /**
246
+ * Narrows the runtime value to the documented type.
247
+ @type {import("../drivers/base.js").default & {[POOL_CONFIGURATION_KEY]?: string}} */ (connection)
248
+ connectionWithPoolKey[POOL_CONFIGURATION_KEY] = this.getConfigurationReuseKey()
249
+ connection.setSchemaCacheInvalidator(() => {
250
+ this.clearSchemaCache()
251
+ this.configuration.clearSchemaCachesForReuseKey(this.getConfigurationReuseKey())
252
+ })
253
+
254
+ return connection
255
+ }
256
+
257
+ /**
258
+ * Runs spawn connection with configuration.
259
+ * @param {import("../../configuration-types.js").DatabaseConfigurationType} config - Configuration object.
260
+ * @returns {Promise<import("../drivers/base.js").default>} - Resolves with the spawn connection with configuration.
261
+ */
262
+ async spawnConnectionWithConfiguration(config) {
263
+ const DriverClass = config.driver || this.driverClass
264
+
265
+ if (!DriverClass) throw new Error("No driver class set in database pool or in given config")
266
+
267
+ const connection = new DriverClass(config, this.configuration)
268
+
269
+ try {
270
+ await connection.connect()
271
+ } catch (error) {
272
+ await this.closeConnectionAfterFailedConnect(connection)
273
+ throw error
274
+ }
275
+
276
+ return connection
277
+ }
278
+
279
+ /**
280
+ * Runs close connection after failed connect.
281
+ * @param {import("../drivers/base.js").default} connection - Connection to close.
282
+ * @returns {Promise<void>} - Resolves when cleanup has been attempted.
283
+ */
284
+ async closeConnectionAfterFailedConnect(connection) {
285
+ try {
286
+ await connection.close()
287
+ } catch (error) {
288
+ this.logger.warn("Failed to close database connection after connect failed", {error})
289
+ }
290
+ }
291
+
292
+ /**
293
+ * Runs with connection.
294
+ * @template T
295
+ * @abstract
296
+ * @param {ConnectionCheckoutOptions | function(import("../drivers/base.js").default) : Promise<T>} _optionsOrCallback - Checkout options or callback function.
297
+ * @param {function(import("../drivers/base.js").default) : Promise<T>} [_callback] - Callback function.
298
+ * @returns {Promise<T>} - Resolves with the callback result.
299
+ */
300
+ withConnection(_optionsOrCallback, _callback) {
301
+ throw new Error("'withConnection' not implemented")
302
+ }
303
+
304
+ /**
305
+ * Ensures a reusable connection exists for contexts where AsyncLocalStorage isn't set.
306
+ * Default implementation just checks out a connection.
307
+ * @returns {Promise<import("../drivers/base.js").default>} - Resolves with the global connection.
308
+ */
309
+ async ensureGlobalConnection() {
310
+ return await this.checkout()
311
+ }
312
+
313
+ /**
314
+ * Runs get debug snapshot.
315
+ * @returns {DatabasePoolDebugSnapshot} - Diagnostic snapshot for this pool.
316
+ */
317
+ getDebugSnapshot() {
318
+ return {
319
+ configuration: this.debugConfigurationSnapshot(),
320
+ connections: [],
321
+ connectionsBeingSpawned: 0,
322
+ identifier: this.identifier,
323
+ idleCount: 0,
324
+ inUseCount: 0,
325
+ pendingCheckoutCount: 0,
326
+ poolClass: this.constructor.name
327
+ }
328
+ }
329
+
330
+ /**
331
+ * Runs debug configuration snapshot.
332
+ * @returns {Record<string, ?>} - Sanitized resolved database configuration.
333
+ */
334
+ debugConfigurationSnapshot() {
335
+ const databaseConfig = this.getConfiguration()
336
+ const poolConfig = databaseConfig.pool
337
+
338
+ return {
339
+ database: databaseConfig.database,
340
+ driver: databaseConfig.driver?.name,
341
+ host: databaseConfig.host,
342
+ migrations: databaseConfig.migrations,
343
+ name: databaseConfig.name,
344
+ pool: poolConfig ? {idleTimeoutMillis: poolConfig.idleTimeoutMillis, max: poolConfig.max} : undefined,
345
+ port: databaseConfig.port,
346
+ schema: databaseConfig.schema,
347
+ type: databaseConfig.type,
348
+ useDatabase: databaseConfig.useDatabase,
349
+ username: databaseConfig.username
350
+ }
351
+ }
352
+
353
+ /**
354
+ * Runs debug connection snapshot.
355
+ * @param {import("../drivers/base.js").default} connection - Database connection.
356
+ * @param {Record<string, ?>} details - Extra diagnostic fields.
357
+ * @returns {Record<string, ?>} - Connection diagnostic snapshot.
358
+ */
359
+ debugConnectionSnapshot(connection, details = {}) {
360
+ const connectionWithPoolKey = /**
361
+ * Narrows the runtime value to the documented type.
362
+ @type {import("../drivers/base.js").default & {[POOL_CONFIGURATION_KEY]?: string}} */ (connection)
363
+
364
+ return {
365
+ ...connection.getDebugSnapshot(),
366
+ ...details,
367
+ reuseKey: connectionWithPoolKey[POOL_CONFIGURATION_KEY]
368
+ }
369
+ }
370
+
371
+ /**
372
+ * Closes all connections for this pool.
373
+ * @returns {Promise<void>} - Resolves when complete.
374
+ */
375
+ async closeAll() {}
376
+ }
377
+
378
+ baseMethodsForward(VelociousDatabasePoolBase)
379
+
380
+ export default VelociousDatabasePoolBase
@@ -0,0 +1,118 @@
1
+ // @ts-check
2
+
3
+ import BasePool from "./base.js"
4
+
5
+ export default class VelociousDatabasePoolSingleMultiUser extends BasePool {
6
+ /**
7
+ * Runs checkin.
8
+ * @param {import("../drivers/base.js").default} connection - Connection.
9
+ * @returns {Promise<void>} - Resolves when complete.
10
+ */
11
+ async checkin(connection) {
12
+ await connection.clearConnectionCheckoutName()
13
+ }
14
+
15
+ /**
16
+ * Runs checkout.
17
+ * @param {import("./base.js").ConnectionCheckoutOptions} [options] - Checkout options.
18
+ * @returns {Promise<import("../drivers/base.js").default>} - Resolves with the checkout.
19
+ */
20
+ async checkout(options = {}) {
21
+ if (this.connection && !this.connectionMatchesCurrentConfiguration(this.connection)) {
22
+ const previousConnection = this.connection
23
+
24
+ this.connection = undefined
25
+
26
+ await previousConnection.close()
27
+ }
28
+
29
+ if (!this.connection) {
30
+ this.connection = await this.spawnConnection()
31
+ }
32
+
33
+ await this.connection.setConnectionCheckoutName(options.name)
34
+
35
+ return this.connection
36
+ }
37
+
38
+ /**
39
+ * Runs with connection.
40
+ * @template T
41
+ * @param {import("./base.js").ConnectionCheckoutOptions | function(import("../drivers/base.js").default) : Promise<T>} optionsOrCallback - Checkout options or callback function.
42
+ * @param {function(import("../drivers/base.js").default) : Promise<T>} [callback] - Callback function.
43
+ * @returns {Promise<T>} - Resolves with the callback result.
44
+ */
45
+ async withConnection(optionsOrCallback, callback) {
46
+ const options = typeof optionsOrCallback == "function" ? {} : optionsOrCallback
47
+
48
+ const connection = await this.checkout(options)
49
+
50
+ try {
51
+ if (typeof optionsOrCallback == "function") return await optionsOrCallback(connection)
52
+
53
+ if (!callback) throw new Error("withConnection requires a callback")
54
+
55
+ return await callback(connection)
56
+ } finally {
57
+ await this.checkin(connection)
58
+ }
59
+ }
60
+
61
+ /**
62
+ * Clears schema metadata cached by the reusable connection if it exists.
63
+ * @returns {void} - No return value.
64
+ */
65
+ clearSchemaCache() {
66
+ if (this.connection) this._clearConnectionSchemaCache(this.connection)
67
+ }
68
+
69
+ /**
70
+ * Closes the cached connection if it exists.
71
+ * @returns {Promise<void>} - Resolves when complete.
72
+ */
73
+ async closeAll() {
74
+ if (!this.connection) return
75
+
76
+ const connection = this.connection
77
+
78
+ this.connection = undefined
79
+
80
+ await connection.close()
81
+ }
82
+
83
+ /**
84
+ * Runs get current connection.
85
+ * @returns {import("../drivers/base.js").default} - The current connection.
86
+ */
87
+ getCurrentConnection() {
88
+ if (!this.connection) {
89
+ throw new Error("A connection hasn't been made yet")
90
+ }
91
+
92
+ return this.connection
93
+ }
94
+
95
+ /**
96
+ * Runs get current context connection.
97
+ * @returns {import("../drivers/base.js").default | undefined} - The current context connection.
98
+ */
99
+ getCurrentContextConnection() {
100
+ return this.connection
101
+ }
102
+
103
+ /**
104
+ * Runs get debug snapshot.
105
+ * @returns {import("./base.js").DatabasePoolDebugSnapshot} - Diagnostic snapshot for this pool.
106
+ */
107
+ getDebugSnapshot() {
108
+ const connections = this.connection
109
+ ? [this.debugConnectionSnapshot(this.connection, {state: "shared"})]
110
+ : []
111
+
112
+ return {
113
+ ...super.getDebugSnapshot(),
114
+ connections,
115
+ idleCount: this.connection ? 1 : 0
116
+ }
117
+ }
118
+ }
@@ -0,0 +1,104 @@
1
+ // @ts-check
2
+
3
+ import QueryBase from "./base.js"
4
+ import restArgsError from "../../utils/rest-args-error.js"
5
+ import TableData from "../table-data/index.js"
6
+
7
+ export default class VelociousDatabaseQueryAlterTableBase extends QueryBase {
8
+ /**
9
+ * Runs constructor.
10
+ * @param {object} args - Options object.
11
+ * @param {import("../drivers/base.js").default} args.driver - Database driver instance.
12
+ * @param {TableData} args.tableData - Table data.
13
+ */
14
+ constructor({driver, tableData, ...restArgs}) {
15
+ restArgsError(restArgs)
16
+
17
+ if (!(tableData instanceof TableData)) throw new Error("Invalid table data was given")
18
+
19
+ super({driver})
20
+ this.tableData = tableData
21
+ }
22
+
23
+ /**
24
+ * Runs to sqls.
25
+ * @returns {Promise<string[]>} - Resolves with SQL statements.
26
+ */
27
+ async toSQLs() {
28
+ const databaseType = this.getDriver().getType()
29
+ const sqls = []
30
+ const {tableData} = this
31
+ const options = this.getOptions()
32
+
33
+ let sql = `ALTER TABLE ${options.quoteTableName(tableData.getName())} `
34
+ let actionCount = 0
35
+
36
+ for (const column of tableData.getColumns()) {
37
+ if (actionCount > 0) sql += ", "
38
+
39
+ if (column.isNewColumn()) {
40
+ sql += databaseType == "mssql" ? "ADD " : "ADD COLUMN "
41
+ sql += column.getSQL({driver: this.getDriver(), forAlterTable: false})
42
+ } else if (column.getNewName()) {
43
+ const newColumnName = column.getNewName()
44
+
45
+ if (!newColumnName) throw new Error(`Expected new column name for ${column.getName()}`)
46
+
47
+ sql += `RENAME COLUMN ${options.quoteColumnName(column.getName())} TO ${options.quoteColumnName(newColumnName)}`
48
+ } else if (column.getDropColumn()) {
49
+ sql += `DROP COLUMN ${options.quoteColumnName(column.getName())}`
50
+ } else {
51
+ if (databaseType == "mssql" || databaseType == "pgsql") {
52
+ sql += "ALTER COLUMN "
53
+ } else {
54
+ sql += "MODIFY "
55
+ }
56
+
57
+ sql += column.getSQL({driver: this.getDriver(), forAlterTable: true})
58
+ }
59
+
60
+
61
+ actionCount++
62
+ }
63
+
64
+ // SQLite's ALTER TABLE does not support adding constraints; the SQLite driver overrides
65
+ // alterTableSQLs entirely (via TableRebuilder) so this base path is never invoked there.
66
+ for (const foreignKey of tableData.getForeignKeys()) {
67
+ if (!foreignKey.getIsNewForeignKey()) continue
68
+
69
+ if (actionCount > 0) sql += ", "
70
+
71
+ sql += "ADD"
72
+
73
+ if (foreignKey.getName()) {
74
+ sql += ` CONSTRAINT ${options.quoteIndexName(foreignKey.getName())}`
75
+ }
76
+
77
+ sql += ` FOREIGN KEY (${options.quoteColumnName(foreignKey.getColumnName())})`
78
+ sql += ` REFERENCES ${options.quoteTableName(foreignKey.getReferencedTableName())} (${options.quoteColumnName(foreignKey.getReferencedColumnName())})`
79
+
80
+ actionCount++
81
+ }
82
+
83
+ if (actionCount > 0) {
84
+ sqls.push(sql)
85
+ }
86
+
87
+ if (databaseType == "pgsql") {
88
+ for (const column of tableData.getColumns()) {
89
+ if (!column.isNewColumn() || column.getDropColumn()) continue
90
+
91
+ const notes = column.getNotesForDatabase(databaseType)
92
+ const actualName = column.getActualName()
93
+
94
+ if (!notes || !actualName) continue
95
+
96
+ sqls.push(
97
+ `COMMENT ON COLUMN ${options.quoteTableName(tableData.getName())}.${options.quoteColumnName(actualName)} IS ${options.quote(notes)}`
98
+ )
99
+ }
100
+ }
101
+
102
+ return sqls
103
+ }
104
+ }
@@ -0,0 +1,49 @@
1
+ // @ts-check
2
+
3
+ import restArgsError from "../../utils/rest-args-error.js"
4
+
5
+ export default class VelociousDatabaseQueryBase {
6
+ /**
7
+ * Runs constructor.
8
+ * @param {object} args - Options object.
9
+ * @param {import("../drivers/base.js").default} args.driver - Database driver instance.
10
+ * @param {import("../query-parser/options.js").default} [args.options] - Options object.
11
+ */
12
+ constructor({driver, options, ...restArgs}) {
13
+ restArgsError(restArgs)
14
+
15
+ this._driver = driver
16
+ this._options = options || driver.options()
17
+
18
+ if (!this._options) throw new Error("No database options was given or could be gotten from driver")
19
+ }
20
+
21
+ getConfiguration() {
22
+ return this.getDriver().getConfiguration()
23
+ }
24
+
25
+ getDriver() {
26
+ return this._driver
27
+ }
28
+
29
+ /**
30
+ * Runs get options.
31
+ * @returns {import("../query-parser/options.js").default} - The options options.
32
+ */
33
+ getOptions() {
34
+ return this._options
35
+ }
36
+
37
+ getDatabaseType() {
38
+ return this.getDriver().getType()
39
+ }
40
+
41
+ /**
42
+ * Runs to sqls.
43
+ * @abstract
44
+ * @returns {Promise<string[]>} - Resolves with SQL statements.
45
+ */
46
+ async toSQLs() {
47
+ throw new Error("'toSQLs' wasn't implemented")
48
+ }
49
+ }