velocious 1.0.431 → 1.0.433

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 (794) hide show
  1. package/build/application.js +229 -0
  2. package/build/authorization/ability.js +329 -0
  3. package/build/authorization/base-resource.js +143 -0
  4. package/build/background-jobs/client.js +50 -0
  5. package/build/background-jobs/cron-expression.js +277 -0
  6. package/build/background-jobs/forked-runner-child.js +86 -0
  7. package/build/background-jobs/job-record.js +13 -0
  8. package/build/background-jobs/job-registry.js +92 -0
  9. package/build/background-jobs/job-runner.js +107 -0
  10. package/build/background-jobs/job.js +77 -0
  11. package/build/background-jobs/json-socket.js +78 -0
  12. package/build/background-jobs/main.js +926 -0
  13. package/build/background-jobs/normalize-error.js +26 -0
  14. package/build/background-jobs/scheduler.js +274 -0
  15. package/build/background-jobs/socket-request.js +68 -0
  16. package/build/background-jobs/status-reporter.js +101 -0
  17. package/build/background-jobs/store.js +994 -0
  18. package/build/background-jobs/types.js +70 -0
  19. package/build/background-jobs/web/authorization.js +89 -0
  20. package/build/background-jobs/web/controller.js +280 -0
  21. package/build/background-jobs/web/index.js +57 -0
  22. package/build/background-jobs/web/path-matcher.js +74 -0
  23. package/build/background-jobs/web/registry.js +49 -0
  24. package/build/background-jobs/worker.js +683 -0
  25. package/build/beacon/client.js +330 -0
  26. package/build/beacon/in-process-broker.js +71 -0
  27. package/build/beacon/in-process-client.js +139 -0
  28. package/build/beacon/server.js +148 -0
  29. package/build/beacon/types.js +55 -0
  30. package/build/cli/base-command.js +67 -0
  31. package/build/cli/browser-cli.js +45 -0
  32. package/build/cli/commands/background-jobs-main.js +7 -0
  33. package/build/cli/commands/background-jobs-runner.js +7 -0
  34. package/build/cli/commands/background-jobs-worker.js +7 -0
  35. package/build/cli/commands/beacon.js +7 -0
  36. package/build/cli/commands/console.js +12 -0
  37. package/build/cli/commands/db/base-command.js +82 -0
  38. package/build/cli/commands/db/create.js +64 -0
  39. package/build/cli/commands/db/drop.js +75 -0
  40. package/build/cli/commands/db/migrate.js +17 -0
  41. package/build/cli/commands/db/reset.js +22 -0
  42. package/build/cli/commands/db/rollback.js +15 -0
  43. package/build/cli/commands/db/schema/dump.js +12 -0
  44. package/build/cli/commands/db/schema/load.js +12 -0
  45. package/build/cli/commands/db/seed.js +12 -0
  46. package/build/cli/commands/db/tenants/check.js +38 -0
  47. package/build/cli/commands/db/tenants/create.js +33 -0
  48. package/build/cli/commands/db/tenants/migrate.js +49 -0
  49. package/build/cli/commands/destroy/migration.js +7 -0
  50. package/build/cli/commands/generate/base-models.js +7 -0
  51. package/build/cli/commands/generate/frontend-models.js +12 -0
  52. package/build/cli/commands/generate/migration.js +7 -0
  53. package/build/cli/commands/generate/model.js +7 -0
  54. package/build/cli/commands/init.js +11 -0
  55. package/build/cli/commands/routes.js +7 -0
  56. package/build/cli/commands/run-script.js +12 -0
  57. package/build/cli/commands/runner.js +12 -0
  58. package/build/cli/commands/server.js +7 -0
  59. package/build/cli/commands/test.js +9 -0
  60. package/build/cli/index.js +152 -0
  61. package/build/cli/tenant-database-command-helper.js +198 -0
  62. package/build/cli/use-browser-cli.js +30 -0
  63. package/build/configuration-resolver.js +65 -0
  64. package/build/configuration-types.js +429 -0
  65. package/build/configuration.js +2590 -0
  66. package/build/controller.js +421 -0
  67. package/build/current-configuration.js +31 -0
  68. package/build/current.js +80 -0
  69. package/build/database/annotations-async-hooks.js +47 -0
  70. package/build/database/annotations.js +40 -0
  71. package/build/database/drivers/base-column.js +182 -0
  72. package/build/database/drivers/base-columns-index.js +81 -0
  73. package/build/database/drivers/base-foreign-key.js +104 -0
  74. package/build/database/drivers/base-table.js +156 -0
  75. package/build/database/drivers/base.js +1609 -0
  76. package/build/database/drivers/mssql/column.js +74 -0
  77. package/build/database/drivers/mssql/columns-index.js +6 -0
  78. package/build/database/drivers/mssql/connect-connection.js +16 -0
  79. package/build/database/drivers/mssql/foreign-key.js +12 -0
  80. package/build/database/drivers/mssql/index.js +590 -0
  81. package/build/database/drivers/mssql/options.js +79 -0
  82. package/build/database/drivers/mssql/query-parser.js +6 -0
  83. package/build/database/drivers/mssql/sql/alter-table.js +4 -0
  84. package/build/database/drivers/mssql/sql/create-database.js +36 -0
  85. package/build/database/drivers/mssql/sql/create-index.js +4 -0
  86. package/build/database/drivers/mssql/sql/create-table.js +4 -0
  87. package/build/database/drivers/mssql/sql/delete.js +19 -0
  88. package/build/database/drivers/mssql/sql/drop-database.js +36 -0
  89. package/build/database/drivers/mssql/sql/drop-table.js +4 -0
  90. package/build/database/drivers/mssql/sql/insert.js +4 -0
  91. package/build/database/drivers/mssql/sql/update.js +31 -0
  92. package/build/database/drivers/mssql/sql/upsert.js +23 -0
  93. package/build/database/drivers/mssql/structure-sql.js +120 -0
  94. package/build/database/drivers/mssql/table.js +145 -0
  95. package/build/database/drivers/mysql/column.js +112 -0
  96. package/build/database/drivers/mysql/columns-index.js +22 -0
  97. package/build/database/drivers/mysql/foreign-key.js +12 -0
  98. package/build/database/drivers/mysql/index.js +473 -0
  99. package/build/database/drivers/mysql/options.js +34 -0
  100. package/build/database/drivers/mysql/query-parser.js +6 -0
  101. package/build/database/drivers/mysql/query.js +37 -0
  102. package/build/database/drivers/mysql/sql/alter-table.js +6 -0
  103. package/build/database/drivers/mysql/sql/create-database.js +39 -0
  104. package/build/database/drivers/mysql/sql/create-index.js +6 -0
  105. package/build/database/drivers/mysql/sql/create-table.js +6 -0
  106. package/build/database/drivers/mysql/sql/delete.js +21 -0
  107. package/build/database/drivers/mysql/sql/drop-database.js +6 -0
  108. package/build/database/drivers/mysql/sql/drop-table.js +6 -0
  109. package/build/database/drivers/mysql/sql/insert.js +6 -0
  110. package/build/database/drivers/mysql/sql/update.js +33 -0
  111. package/build/database/drivers/mysql/sql/upsert.js +13 -0
  112. package/build/database/drivers/mysql/structure-sql.js +93 -0
  113. package/build/database/drivers/mysql/table.js +121 -0
  114. package/build/database/drivers/pgsql/column.js +90 -0
  115. package/build/database/drivers/pgsql/columns-index.js +6 -0
  116. package/build/database/drivers/pgsql/foreign-key.js +12 -0
  117. package/build/database/drivers/pgsql/index.js +441 -0
  118. package/build/database/drivers/pgsql/options.js +32 -0
  119. package/build/database/drivers/pgsql/query-parser.js +6 -0
  120. package/build/database/drivers/pgsql/sql/alter-table.js +6 -0
  121. package/build/database/drivers/pgsql/sql/create-database.js +38 -0
  122. package/build/database/drivers/pgsql/sql/create-index.js +6 -0
  123. package/build/database/drivers/pgsql/sql/create-table.js +6 -0
  124. package/build/database/drivers/pgsql/sql/delete.js +21 -0
  125. package/build/database/drivers/pgsql/sql/drop-database.js +6 -0
  126. package/build/database/drivers/pgsql/sql/drop-table.js +6 -0
  127. package/build/database/drivers/pgsql/sql/insert.js +6 -0
  128. package/build/database/drivers/pgsql/sql/update.js +33 -0
  129. package/build/database/drivers/pgsql/sql/upsert.js +14 -0
  130. package/build/database/drivers/pgsql/structure-sql.js +126 -0
  131. package/build/database/drivers/pgsql/table.js +135 -0
  132. package/build/database/drivers/sqlite/base.js +509 -0
  133. package/build/database/drivers/sqlite/column.js +75 -0
  134. package/build/database/drivers/sqlite/columns-index.js +30 -0
  135. package/build/database/drivers/sqlite/connection-sql-js.js +46 -0
  136. package/build/database/drivers/sqlite/foreign-key.js +24 -0
  137. package/build/database/drivers/sqlite/index.js +394 -0
  138. package/build/database/drivers/sqlite/index.native.js +72 -0
  139. package/build/database/drivers/sqlite/index.web.js +99 -0
  140. package/build/database/drivers/sqlite/options.js +32 -0
  141. package/build/database/drivers/sqlite/query-parser.js +6 -0
  142. package/build/database/drivers/sqlite/query.js +35 -0
  143. package/build/database/drivers/sqlite/query.native.js +35 -0
  144. package/build/database/drivers/sqlite/query.web.js +49 -0
  145. package/build/database/drivers/sqlite/sql/alter-table.js +187 -0
  146. package/build/database/drivers/sqlite/sql/create-index.js +6 -0
  147. package/build/database/drivers/sqlite/sql/create-table.js +6 -0
  148. package/build/database/drivers/sqlite/sql/delete.js +26 -0
  149. package/build/database/drivers/sqlite/sql/drop-table.js +6 -0
  150. package/build/database/drivers/sqlite/sql/insert.js +6 -0
  151. package/build/database/drivers/sqlite/sql/update.js +33 -0
  152. package/build/database/drivers/sqlite/sql/upsert.js +14 -0
  153. package/build/database/drivers/sqlite/structure-sql.js +56 -0
  154. package/build/database/drivers/sqlite/table-rebuilder.js +96 -0
  155. package/build/database/drivers/sqlite/table.js +131 -0
  156. package/build/database/drivers/structure-sql/utils.js +35 -0
  157. package/build/database/handler.js +13 -0
  158. package/build/database/initializer-from-require-context.js +101 -0
  159. package/build/database/migration/index.js +438 -0
  160. package/build/database/migrator/files-finder.js +55 -0
  161. package/build/database/migrator/types.js +31 -0
  162. package/build/database/migrator.js +557 -0
  163. package/build/database/pool/async-tracked-multi-connection.js +1164 -0
  164. package/build/database/pool/base-methods-forward.js +52 -0
  165. package/build/database/pool/base.js +380 -0
  166. package/build/database/pool/single-multi-use.js +118 -0
  167. package/build/database/query/alter-table-base.js +104 -0
  168. package/build/database/query/base.js +49 -0
  169. package/build/database/query/create-database-base.js +42 -0
  170. package/build/database/query/create-index-base.js +117 -0
  171. package/build/database/query/create-table-base.js +205 -0
  172. package/build/database/query/delete-base.js +19 -0
  173. package/build/database/query/drop-database-base.js +38 -0
  174. package/build/database/query/drop-table-base.js +58 -0
  175. package/build/database/query/from-base.js +36 -0
  176. package/build/database/query/from-plain.js +16 -0
  177. package/build/database/query/from-table.js +18 -0
  178. package/build/database/query/index.js +533 -0
  179. package/build/database/query/insert-base.js +172 -0
  180. package/build/database/query/join-base.js +43 -0
  181. package/build/database/query/join-object.js +167 -0
  182. package/build/database/query/join-plain.js +18 -0
  183. package/build/database/query/join-tracker.js +93 -0
  184. package/build/database/query/model-class-query.js +1577 -0
  185. package/build/database/query/order-base.js +33 -0
  186. package/build/database/query/order-column.js +77 -0
  187. package/build/database/query/order-plain.js +28 -0
  188. package/build/database/query/preloader/belongs-to.js +267 -0
  189. package/build/database/query/preloader/ensure-model-class-initialized.js +18 -0
  190. package/build/database/query/preloader/has-many.js +316 -0
  191. package/build/database/query/preloader/has-one.js +123 -0
  192. package/build/database/query/preloader/selection.js +152 -0
  193. package/build/database/query/preloader.js +201 -0
  194. package/build/database/query/query-data.js +305 -0
  195. package/build/database/query/select-base.js +30 -0
  196. package/build/database/query/select-plain.js +18 -0
  197. package/build/database/query/select-table-and-column.js +28 -0
  198. package/build/database/query/update-base.js +41 -0
  199. package/build/database/query/upsert-base.js +103 -0
  200. package/build/database/query/where-base.js +38 -0
  201. package/build/database/query/where-combinator.js +31 -0
  202. package/build/database/query/where-hash.js +77 -0
  203. package/build/database/query/where-model-class-hash.js +505 -0
  204. package/build/database/query/where-not.js +23 -0
  205. package/build/database/query/where-plain.js +20 -0
  206. package/build/database/query/with-count.js +219 -0
  207. package/build/database/query-parser/base-query-parser.js +40 -0
  208. package/build/database/query-parser/from-parser.js +49 -0
  209. package/build/database/query-parser/group-parser.js +55 -0
  210. package/build/database/query-parser/joins-parser.js +37 -0
  211. package/build/database/query-parser/limit-parser.js +77 -0
  212. package/build/database/query-parser/options.js +94 -0
  213. package/build/database/query-parser/order-parser.js +45 -0
  214. package/build/database/query-parser/select-parser.js +67 -0
  215. package/build/database/query-parser/where-parser.js +46 -0
  216. package/build/database/record/acts-as-list.js +374 -0
  217. package/build/database/record/attachments/download.js +49 -0
  218. package/build/database/record/attachments/handle.js +188 -0
  219. package/build/database/record/attachments/normalize-input.js +213 -0
  220. package/build/database/record/attachments/storage-drivers/filesystem.js +114 -0
  221. package/build/database/record/attachments/storage-drivers/native.js +146 -0
  222. package/build/database/record/attachments/storage-drivers/s3.js +245 -0
  223. package/build/database/record/attachments/store.js +591 -0
  224. package/build/database/record/index.js +4119 -0
  225. package/build/database/record/instance-relationships/base.js +289 -0
  226. package/build/database/record/instance-relationships/belongs-to.js +84 -0
  227. package/build/database/record/instance-relationships/has-many.js +284 -0
  228. package/build/database/record/instance-relationships/has-one.js +117 -0
  229. package/build/database/record/record-not-found-error.js +3 -0
  230. package/build/database/record/relationships/base.js +195 -0
  231. package/build/database/record/relationships/belongs-to.js +57 -0
  232. package/build/database/record/relationships/has-many.js +46 -0
  233. package/build/database/record/relationships/has-one.js +46 -0
  234. package/build/database/record/state-machine.js +278 -0
  235. package/build/database/record/user-module.js +43 -0
  236. package/build/database/record/validators/base.js +27 -0
  237. package/build/database/record/validators/format.js +50 -0
  238. package/build/database/record/validators/presence.js +24 -0
  239. package/build/database/record/validators/uniqueness.js +124 -0
  240. package/build/database/table-data/index.js +241 -0
  241. package/build/database/table-data/table-column.js +416 -0
  242. package/build/database/table-data/table-foreign-key.js +69 -0
  243. package/build/database/table-data/table-index.js +46 -0
  244. package/build/database/table-data/table-reference.js +13 -0
  245. package/build/database/use-database.js +48 -0
  246. package/build/environment-handlers/base.js +561 -0
  247. package/build/environment-handlers/browser.js +338 -0
  248. package/build/environment-handlers/node/cli/commands/background-jobs-main.js +21 -0
  249. package/build/environment-handlers/node/cli/commands/background-jobs-runner.js +24 -0
  250. package/build/environment-handlers/node/cli/commands/background-jobs-worker.js +47 -0
  251. package/build/environment-handlers/node/cli/commands/beacon.js +21 -0
  252. package/build/environment-handlers/node/cli/commands/cli-command-context.js +31 -0
  253. package/build/environment-handlers/node/cli/commands/console.js +149 -0
  254. package/build/environment-handlers/node/cli/commands/db/schema/dump.js +43 -0
  255. package/build/environment-handlers/node/cli/commands/db/schema/load.js +69 -0
  256. package/build/environment-handlers/node/cli/commands/db/seed.js +79 -0
  257. package/build/environment-handlers/node/cli/commands/destroy/migration.js +47 -0
  258. package/build/environment-handlers/node/cli/commands/generate/base-models.js +396 -0
  259. package/build/environment-handlers/node/cli/commands/generate/frontend-models.js +872 -0
  260. package/build/environment-handlers/node/cli/commands/generate/migration.js +45 -0
  261. package/build/environment-handlers/node/cli/commands/generate/model.js +45 -0
  262. package/build/environment-handlers/node/cli/commands/init.js +68 -0
  263. package/build/environment-handlers/node/cli/commands/routes.js +63 -0
  264. package/build/environment-handlers/node/cli/commands/run-script.js +85 -0
  265. package/build/environment-handlers/node/cli/commands/runner.js +84 -0
  266. package/build/environment-handlers/node/cli/commands/server.js +151 -0
  267. package/build/environment-handlers/node/cli/commands/test.js +118 -0
  268. package/build/environment-handlers/node.js +887 -0
  269. package/build/error-logger.js +30 -0
  270. package/build/frontend-model-controller.js +3491 -0
  271. package/build/frontend-model-resource/base-resource.js +939 -0
  272. package/build/frontend-models/base.js +4004 -0
  273. package/build/frontend-models/clear-pending-debounced-callback.js +16 -0
  274. package/build/frontend-models/event-hook-models.js +49 -0
  275. package/build/frontend-models/model-registry.js +28 -0
  276. package/build/frontend-models/outgoing-event-buffer.js +51 -0
  277. package/build/frontend-models/preloader.js +169 -0
  278. package/build/frontend-models/query.js +2245 -0
  279. package/build/frontend-models/resource-config-validation.js +56 -0
  280. package/build/frontend-models/resource-definition.js +399 -0
  281. package/build/frontend-models/transport-serialization.js +369 -0
  282. package/build/frontend-models/use-created-event.js +21 -0
  283. package/build/frontend-models/use-destroyed-event.js +148 -0
  284. package/build/frontend-models/use-model-class-event.js +164 -0
  285. package/build/frontend-models/use-updated-event.js +152 -0
  286. package/build/frontend-models/websocket-channel.js +494 -0
  287. package/build/frontend-models/websocket-publishers.js +224 -0
  288. package/build/http-client/header.js +17 -0
  289. package/build/http-client/index.js +139 -0
  290. package/build/http-client/request.js +94 -0
  291. package/build/http-client/response.js +151 -0
  292. package/build/http-client/websocket-client.js +27 -0
  293. package/build/http-server/client/index.js +507 -0
  294. package/build/http-server/client/params-to-object.js +152 -0
  295. package/build/http-server/client/request-buffer/form-data-part.js +139 -0
  296. package/build/http-server/client/request-buffer/header.js +19 -0
  297. package/build/http-server/client/request-buffer/index.js +535 -0
  298. package/build/http-server/client/request-parser.js +195 -0
  299. package/build/http-server/client/request-runner.js +321 -0
  300. package/build/http-server/client/request-timing.js +171 -0
  301. package/build/http-server/client/request.js +114 -0
  302. package/build/http-server/client/response.js +251 -0
  303. package/build/http-server/client/uploaded-file/memory-uploaded-file.js +32 -0
  304. package/build/http-server/client/uploaded-file/temporary-uploaded-file.js +32 -0
  305. package/build/http-server/client/uploaded-file/uploaded-file.js +36 -0
  306. package/build/http-server/client/websocket-request.js +147 -0
  307. package/build/http-server/client/websocket-session.js +1755 -0
  308. package/build/http-server/cookie.js +245 -0
  309. package/build/http-server/development-reloader.js +240 -0
  310. package/build/http-server/index.js +561 -0
  311. package/build/http-server/remote-address.js +77 -0
  312. package/build/http-server/server-client.js +222 -0
  313. package/build/http-server/server-lock.js +178 -0
  314. package/build/http-server/websocket-channel-subscribers.js +110 -0
  315. package/build/http-server/websocket-channel.js +137 -0
  316. package/build/http-server/websocket-connection.js +118 -0
  317. package/build/http-server/websocket-event-log-store.js +433 -0
  318. package/build/http-server/websocket-events-host.js +170 -0
  319. package/build/http-server/websocket-events.js +50 -0
  320. package/build/http-server/worker-handler/channel-subscriber-dispatch.js +28 -0
  321. package/build/http-server/worker-handler/in-process.js +155 -0
  322. package/build/http-server/worker-handler/index.js +370 -0
  323. package/build/http-server/worker-handler/worker-script.js +6 -0
  324. package/build/http-server/worker-handler/worker-thread.js +286 -0
  325. package/build/initializer.js +39 -0
  326. package/build/jobs/mail-delivery.js +22 -0
  327. package/build/logger/base-logger.js +34 -0
  328. package/build/logger/console-logger.js +28 -0
  329. package/build/logger/file-logger.js +36 -0
  330. package/build/logger/outputs/array-output.js +50 -0
  331. package/build/logger/outputs/console-output.js +32 -0
  332. package/build/logger/outputs/file-output.js +55 -0
  333. package/build/logger/outputs/stdout-output.js +64 -0
  334. package/build/logger.js +507 -0
  335. package/build/mailer/backends/smtp.js +197 -0
  336. package/build/mailer/base.js +337 -0
  337. package/build/mailer/delivery.js +70 -0
  338. package/build/mailer/index.js +24 -0
  339. package/build/mailer.js +15 -0
  340. package/build/plugins/sqljs-wasm-route-controller.js +70 -0
  341. package/build/plugins/sqljs-wasm-route.js +71 -0
  342. package/build/record-payload-values.js +83 -0
  343. package/build/routes/app-routes.js +17 -0
  344. package/build/routes/base-route.js +133 -0
  345. package/build/routes/basic-route.js +109 -0
  346. package/build/routes/built-in/debug/controller.js +12 -0
  347. package/build/routes/built-in/errors/controller.js +7 -0
  348. package/build/routes/get-route.js +75 -0
  349. package/build/routes/hooks/frontend-model-command-route-hook.js +100 -0
  350. package/build/routes/index.js +50 -0
  351. package/build/routes/namespace-route.js +51 -0
  352. package/build/routes/plugin-routes.js +141 -0
  353. package/build/routes/post-route.js +74 -0
  354. package/build/routes/resolver.js +535 -0
  355. package/build/routes/resource-route.js +154 -0
  356. package/build/routes/root-route.js +11 -0
  357. package/build/src/application.js +187 -214
  358. package/build/src/authorization/ability.js +250 -297
  359. package/build/src/authorization/base-resource.js +120 -136
  360. package/build/src/background-jobs/client.js +43 -47
  361. package/build/src/background-jobs/cron-expression.js +127 -166
  362. package/build/src/background-jobs/forked-runner-child.js +37 -47
  363. package/build/src/background-jobs/job-record.js +8 -10
  364. package/build/src/background-jobs/job-registry.js +72 -84
  365. package/build/src/background-jobs/job-runner.js +74 -81
  366. package/build/src/background-jobs/job.js +62 -72
  367. package/build/src/background-jobs/json-socket.js +65 -70
  368. package/build/src/background-jobs/main.js +841 -900
  369. package/build/src/background-jobs/normalize-error.js +12 -11
  370. package/build/src/background-jobs/scheduler.js +205 -247
  371. package/build/src/background-jobs/socket-request.js +60 -65
  372. package/build/src/background-jobs/status-reporter.js +86 -96
  373. package/build/src/background-jobs/store.js +862 -980
  374. package/build/src/background-jobs/types.js +2 -3
  375. package/build/src/background-jobs/web/authorization.js +38 -50
  376. package/build/src/background-jobs/web/controller.js +232 -268
  377. package/build/src/background-jobs/web/index.js +36 -40
  378. package/build/src/background-jobs/web/path-matcher.js +45 -48
  379. package/build/src/background-jobs/web/registry.js +9 -14
  380. package/build/src/background-jobs/worker.js +585 -639
  381. package/build/src/beacon/client.js +264 -293
  382. package/build/src/beacon/in-process-broker.js +20 -25
  383. package/build/src/beacon/in-process-client.js +104 -116
  384. package/build/src/beacon/server.js +110 -126
  385. package/build/src/beacon/types.js +2 -8
  386. package/build/src/cli/base-command.js +49 -57
  387. package/build/src/cli/browser-cli.js +37 -42
  388. package/build/src/cli/commands/background-jobs-main.js +5 -5
  389. package/build/src/cli/commands/background-jobs-runner.js +5 -5
  390. package/build/src/cli/commands/background-jobs-worker.js +5 -5
  391. package/build/src/cli/commands/beacon.js +5 -5
  392. package/build/src/cli/commands/console.js +10 -10
  393. package/build/src/cli/commands/db/base-command.js +71 -76
  394. package/build/src/cli/commands/db/create.js +53 -61
  395. package/build/src/cli/commands/db/drop.js +62 -71
  396. package/build/src/cli/commands/db/migrate.js +13 -15
  397. package/build/src/cli/commands/db/reset.js +16 -19
  398. package/build/src/cli/commands/db/rollback.js +12 -13
  399. package/build/src/cli/commands/db/schema/dump.js +9 -9
  400. package/build/src/cli/commands/db/schema/load.js +9 -9
  401. package/build/src/cli/commands/db/seed.js +9 -9
  402. package/build/src/cli/commands/db/tenants/check.js +32 -35
  403. package/build/src/cli/commands/db/tenants/create.js +26 -29
  404. package/build/src/cli/commands/db/tenants/migrate.js +40 -44
  405. package/build/src/cli/commands/destroy/migration.js +5 -5
  406. package/build/src/cli/commands/generate/base-models.js +5 -5
  407. package/build/src/cli/commands/generate/frontend-models.js +9 -9
  408. package/build/src/cli/commands/generate/migration.js +5 -5
  409. package/build/src/cli/commands/generate/model.js +5 -5
  410. package/build/src/cli/commands/init.js +7 -9
  411. package/build/src/cli/commands/routes.js +6 -6
  412. package/build/src/cli/commands/run-script.js +9 -9
  413. package/build/src/cli/commands/runner.js +9 -9
  414. package/build/src/cli/commands/server.js +6 -6
  415. package/build/src/cli/commands/test.js +6 -7
  416. package/build/src/cli/index.js +127 -141
  417. package/build/src/cli/tenant-database-command-helper.js +154 -185
  418. package/build/src/cli/use-browser-cli.js +15 -20
  419. package/build/src/configuration-resolver.js +47 -54
  420. package/build/src/configuration-types.d.ts +5 -3
  421. package/build/src/configuration-types.d.ts.map +1 -1
  422. package/build/src/configuration-types.js +3 -54
  423. package/build/src/configuration.js +2240 -2547
  424. package/build/src/controller.js +363 -407
  425. package/build/src/current-configuration.js +9 -12
  426. package/build/src/current.js +70 -75
  427. package/build/src/database/annotations-async-hooks.js +16 -22
  428. package/build/src/database/annotations.js +12 -18
  429. package/build/src/database/drivers/base-column.js +155 -179
  430. package/build/src/database/drivers/base-columns-index.js +69 -78
  431. package/build/src/database/drivers/base-foreign-key.js +89 -101
  432. package/build/src/database/drivers/base-table.js +124 -149
  433. package/build/src/database/drivers/base.js +1306 -1489
  434. package/build/src/database/drivers/mssql/column.js +39 -50
  435. package/build/src/database/drivers/mssql/columns-index.js +2 -3
  436. package/build/src/database/drivers/mssql/connect-connection.js +11 -9
  437. package/build/src/database/drivers/mssql/foreign-key.js +8 -9
  438. package/build/src/database/drivers/mssql/index.js +507 -587
  439. package/build/src/database/drivers/mssql/options.js +68 -75
  440. package/build/src/database/drivers/mssql/query-parser.js +2 -3
  441. package/build/src/database/drivers/mssql/sql/alter-table.js +2 -2
  442. package/build/src/database/drivers/mssql/sql/create-database.js +24 -31
  443. package/build/src/database/drivers/mssql/sql/create-index.js +2 -2
  444. package/build/src/database/drivers/mssql/sql/create-table.js +2 -2
  445. package/build/src/database/drivers/mssql/sql/delete.js +14 -16
  446. package/build/src/database/drivers/mssql/sql/drop-database.js +24 -31
  447. package/build/src/database/drivers/mssql/sql/drop-table.js +2 -2
  448. package/build/src/database/drivers/mssql/sql/insert.js +2 -2
  449. package/build/src/database/drivers/mssql/sql/update.js +24 -28
  450. package/build/src/database/drivers/mssql/sql/upsert.js +18 -20
  451. package/build/src/database/drivers/mssql/structure-sql.js +102 -114
  452. package/build/src/database/drivers/mssql/table.js +81 -96
  453. package/build/src/database/drivers/mysql/column.js +75 -92
  454. package/build/src/database/drivers/mysql/columns-index.js +16 -19
  455. package/build/src/database/drivers/mysql/foreign-key.js +8 -9
  456. package/build/src/database/drivers/mysql/index.js +396 -457
  457. package/build/src/database/drivers/mysql/options.js +26 -30
  458. package/build/src/database/drivers/mysql/query-parser.js +2 -3
  459. package/build/src/database/drivers/mysql/query.js +26 -29
  460. package/build/src/database/drivers/mysql/sql/alter-table.js +2 -3
  461. package/build/src/database/drivers/mysql/sql/create-database.js +23 -28
  462. package/build/src/database/drivers/mysql/sql/create-index.js +2 -3
  463. package/build/src/database/drivers/mysql/sql/create-table.js +2 -3
  464. package/build/src/database/drivers/mysql/sql/delete.js +14 -17
  465. package/build/src/database/drivers/mysql/sql/drop-database.js +2 -3
  466. package/build/src/database/drivers/mysql/sql/drop-table.js +2 -3
  467. package/build/src/database/drivers/mysql/sql/insert.js +2 -3
  468. package/build/src/database/drivers/mysql/sql/update.js +24 -29
  469. package/build/src/database/drivers/mysql/sql/upsert.js +8 -10
  470. package/build/src/database/drivers/mysql/structure-sql.js +79 -88
  471. package/build/src/database/drivers/mysql/table.js +83 -98
  472. package/build/src/database/drivers/pgsql/column.js +56 -72
  473. package/build/src/database/drivers/pgsql/columns-index.js +2 -3
  474. package/build/src/database/drivers/pgsql/foreign-key.js +8 -9
  475. package/build/src/database/drivers/pgsql/index.js +377 -438
  476. package/build/src/database/drivers/pgsql/options.js +25 -28
  477. package/build/src/database/drivers/pgsql/query-parser.js +2 -3
  478. package/build/src/database/drivers/pgsql/sql/alter-table.js +2 -3
  479. package/build/src/database/drivers/pgsql/sql/create-database.js +19 -23
  480. package/build/src/database/drivers/pgsql/sql/create-index.js +2 -3
  481. package/build/src/database/drivers/pgsql/sql/create-table.js +2 -3
  482. package/build/src/database/drivers/pgsql/sql/delete.js +14 -17
  483. package/build/src/database/drivers/pgsql/sql/drop-database.js +2 -3
  484. package/build/src/database/drivers/pgsql/sql/drop-table.js +2 -3
  485. package/build/src/database/drivers/pgsql/sql/insert.js +2 -3
  486. package/build/src/database/drivers/pgsql/sql/update.js +24 -29
  487. package/build/src/database/drivers/pgsql/sql/upsert.js +9 -11
  488. package/build/src/database/drivers/pgsql/structure-sql.js +108 -120
  489. package/build/src/database/drivers/pgsql/table.js +60 -77
  490. package/build/src/database/drivers/sqlite/base.js +405 -478
  491. package/build/src/database/drivers/sqlite/column.js +54 -69
  492. package/build/src/database/drivers/sqlite/columns-index.js +22 -27
  493. package/build/src/database/drivers/sqlite/connection-sql-js.js +35 -42
  494. package/build/src/database/drivers/sqlite/foreign-key.js +18 -21
  495. package/build/src/database/drivers/sqlite/index.js +330 -373
  496. package/build/src/database/drivers/sqlite/index.native.js +55 -64
  497. package/build/src/database/drivers/sqlite/index.web.js +69 -87
  498. package/build/src/database/drivers/sqlite/options.js +25 -28
  499. package/build/src/database/drivers/sqlite/query-parser.js +2 -3
  500. package/build/src/database/drivers/sqlite/query.js +21 -24
  501. package/build/src/database/drivers/sqlite/query.native.js +20 -25
  502. package/build/src/database/drivers/sqlite/query.web.js +30 -37
  503. package/build/src/database/drivers/sqlite/sql/alter-table.js +159 -179
  504. package/build/src/database/drivers/sqlite/sql/create-index.js +2 -3
  505. package/build/src/database/drivers/sqlite/sql/create-table.js +2 -3
  506. package/build/src/database/drivers/sqlite/sql/delete.js +17 -22
  507. package/build/src/database/drivers/sqlite/sql/drop-table.js +2 -3
  508. package/build/src/database/drivers/sqlite/sql/insert.js +2 -3
  509. package/build/src/database/drivers/sqlite/sql/update.js +24 -29
  510. package/build/src/database/drivers/sqlite/sql/upsert.js +9 -11
  511. package/build/src/database/drivers/sqlite/structure-sql.js +49 -52
  512. package/build/src/database/drivers/sqlite/table-rebuilder.js +62 -75
  513. package/build/src/database/drivers/sqlite/table.js +102 -125
  514. package/build/src/database/drivers/structure-sql/utils.js +14 -17
  515. package/build/src/database/handler.js +9 -10
  516. package/build/src/database/initializer-from-require-context.js +76 -87
  517. package/build/src/database/migration/index.js +332 -395
  518. package/build/src/database/migrator/files-finder.js +40 -50
  519. package/build/src/database/migrator/types.js +2 -30
  520. package/build/src/database/migrator.js +454 -526
  521. package/build/src/database/pool/async-tracked-multi-connection.js +997 -1147
  522. package/build/src/database/pool/base-methods-forward.js +40 -43
  523. package/build/src/database/pool/base.js +298 -343
  524. package/build/src/database/pool/single-multi-use.js +93 -110
  525. package/build/src/database/query/alter-table-base.js +84 -99
  526. package/build/src/database/query/base.js +39 -46
  527. package/build/src/database/query/create-database-base.js +25 -30
  528. package/build/src/database/query/create-index-base.js +75 -94
  529. package/build/src/database/query/create-table-base.js +151 -193
  530. package/build/src/database/query/delete-base.js +14 -16
  531. package/build/src/database/query/drop-database-base.js +23 -28
  532. package/build/src/database/query/drop-table-base.js +42 -53
  533. package/build/src/database/query/from-base.js +30 -33
  534. package/build/src/database/query/from-plain.js +11 -13
  535. package/build/src/database/query/from-table.js +13 -15
  536. package/build/src/database/query/index.js +410 -472
  537. package/build/src/database/query/insert-base.js +143 -164
  538. package/build/src/database/query/join-base.js +35 -40
  539. package/build/src/database/query/join-object.js +128 -153
  540. package/build/src/database/query/join-plain.js +13 -15
  541. package/build/src/database/query/join-tracker.js +76 -90
  542. package/build/src/database/query/model-class-query.js +1134 -1370
  543. package/build/src/database/query/order-base.js +27 -30
  544. package/build/src/database/query/order-column.js +44 -53
  545. package/build/src/database/query/order-plain.js +20 -24
  546. package/build/src/database/query/preloader/belongs-to.js +210 -258
  547. package/build/src/database/query/preloader/ensure-model-class-initialized.js +8 -9
  548. package/build/src/database/query/preloader/has-many.js +240 -301
  549. package/build/src/database/query/preloader/has-one.js +91 -117
  550. package/build/src/database/query/preloader/selection.js +117 -129
  551. package/build/src/database/query/preloader.js +160 -185
  552. package/build/src/database/query/query-data.js +157 -201
  553. package/build/src/database/query/select-base.js +25 -27
  554. package/build/src/database/query/select-plain.js +13 -15
  555. package/build/src/database/query/select-table-and-column.js +21 -25
  556. package/build/src/database/query/update-base.js +35 -38
  557. package/build/src/database/query/upsert-base.js +93 -100
  558. package/build/src/database/query/where-base.js +32 -35
  559. package/build/src/database/query/where-combinator.js +25 -28
  560. package/build/src/database/query/where-hash.js +61 -68
  561. package/build/src/database/query/where-model-class-hash.js +414 -469
  562. package/build/src/database/query/where-not.js +18 -20
  563. package/build/src/database/query/where-plain.js +15 -17
  564. package/build/src/database/query/with-count.js +125 -159
  565. package/build/src/database/query-parser/base-query-parser.js +32 -37
  566. package/build/src/database/query-parser/from-parser.js +36 -45
  567. package/build/src/database/query-parser/group-parser.js +42 -50
  568. package/build/src/database/query-parser/joins-parser.js +28 -33
  569. package/build/src/database/query-parser/limit-parser.js +67 -70
  570. package/build/src/database/query-parser/options.js +75 -82
  571. package/build/src/database/query-parser/order-parser.js +36 -40
  572. package/build/src/database/query-parser/select-parser.js +49 -60
  573. package/build/src/database/query-parser/where-parser.js +36 -41
  574. package/build/src/database/record/acts-as-list.js +235 -273
  575. package/build/src/database/record/attachments/download.js +44 -45
  576. package/build/src/database/record/attachments/handle.js +141 -161
  577. package/build/src/database/record/attachments/normalize-input.js +128 -138
  578. package/build/src/database/record/attachments/storage-drivers/filesystem.js +77 -91
  579. package/build/src/database/record/attachments/storage-drivers/native.js +112 -121
  580. package/build/src/database/record/attachments/storage-drivers/s3.js +177 -208
  581. package/build/src/database/record/attachments/store.js +467 -539
  582. package/build/src/database/record/index.d.ts +109 -25
  583. package/build/src/database/record/index.d.ts.map +1 -1
  584. package/build/src/database/record/index.js +3502 -3898
  585. package/build/src/database/record/instance-relationships/base.js +234 -268
  586. package/build/src/database/record/instance-relationships/belongs-to.js +58 -73
  587. package/build/src/database/record/instance-relationships/has-many.js +225 -264
  588. package/build/src/database/record/instance-relationships/has-one.js +85 -105
  589. package/build/src/database/record/record-not-found-error.js +3 -2
  590. package/build/src/database/record/relationships/base.js +144 -166
  591. package/build/src/database/record/relationships/belongs-to.js +44 -51
  592. package/build/src/database/record/relationships/has-many.js +32 -40
  593. package/build/src/database/record/relationships/has-one.js +32 -40
  594. package/build/src/database/record/state-machine.js +156 -208
  595. package/build/src/database/record/user-module.js +32 -38
  596. package/build/src/database/record/validators/base.js +22 -24
  597. package/build/src/database/record/validators/format.js +36 -46
  598. package/build/src/database/record/validators/presence.js +18 -20
  599. package/build/src/database/record/validators/uniqueness.js +99 -117
  600. package/build/src/database/table-data/index.js +199 -231
  601. package/build/src/database/table-data/table-column.js +338 -382
  602. package/build/src/database/table-data/table-foreign-key.js +57 -66
  603. package/build/src/database/table-data/table-index.js +29 -36
  604. package/build/src/database/table-data/table-reference.js +10 -10
  605. package/build/src/database/use-database.js +32 -40
  606. package/build/src/environment-handlers/base.js +484 -544
  607. package/build/src/environment-handlers/browser.js +241 -294
  608. package/build/src/environment-handlers/node/cli/commands/background-jobs-main.js +16 -19
  609. package/build/src/environment-handlers/node/cli/commands/background-jobs-runner.js +18 -21
  610. package/build/src/environment-handlers/node/cli/commands/background-jobs-worker.js +22 -29
  611. package/build/src/environment-handlers/node/cli/commands/beacon.js +16 -19
  612. package/build/src/environment-handlers/node/cli/commands/cli-command-context.js +14 -15
  613. package/build/src/environment-handlers/node/cli/commands/console.js +99 -120
  614. package/build/src/environment-handlers/node/cli/commands/db/schema/dump.js +34 -39
  615. package/build/src/environment-handlers/node/cli/commands/db/schema/load.js +57 -63
  616. package/build/src/environment-handlers/node/cli/commands/db/seed.js +51 -63
  617. package/build/src/environment-handlers/node/cli/commands/destroy/migration.js +32 -40
  618. package/build/src/environment-handlers/node/cli/commands/generate/base-models.d.ts +4 -2
  619. package/build/src/environment-handlers/node/cli/commands/generate/base-models.d.ts.map +1 -1
  620. package/build/src/environment-handlers/node/cli/commands/generate/base-models.js +326 -358
  621. package/build/src/environment-handlers/node/cli/commands/generate/frontend-models.d.ts +10 -10
  622. package/build/src/environment-handlers/node/cli/commands/generate/frontend-models.d.ts.map +1 -1
  623. package/build/src/environment-handlers/node/cli/commands/generate/frontend-models.js +729 -844
  624. package/build/src/environment-handlers/node/cli/commands/generate/migration.js +34 -38
  625. package/build/src/environment-handlers/node/cli/commands/generate/model.js +34 -38
  626. package/build/src/environment-handlers/node/cli/commands/init.js +56 -61
  627. package/build/src/environment-handlers/node/cli/commands/routes.js +51 -59
  628. package/build/src/environment-handlers/node/cli/commands/run-script.js +54 -68
  629. package/build/src/environment-handlers/node/cli/commands/runner.js +56 -74
  630. package/build/src/environment-handlers/node/cli/commands/server.js +93 -106
  631. package/build/src/environment-handlers/node/cli/commands/test.js +97 -113
  632. package/build/src/environment-handlers/node.js +753 -874
  633. package/build/src/error-logger.js +22 -21
  634. package/build/src/frontend-model-controller.js +2791 -3291
  635. package/build/src/frontend-model-resource/base-resource.d.ts +8 -3
  636. package/build/src/frontend-model-resource/base-resource.d.ts.map +1 -1
  637. package/build/src/frontend-model-resource/base-resource.js +770 -865
  638. package/build/src/frontend-models/base.js +3136 -3593
  639. package/build/src/frontend-models/clear-pending-debounced-callback.js +7 -8
  640. package/build/src/frontend-models/event-hook-models.js +16 -21
  641. package/build/src/frontend-models/model-registry.js +9 -11
  642. package/build/src/frontend-models/outgoing-event-buffer.js +10 -17
  643. package/build/src/frontend-models/preloader.js +131 -149
  644. package/build/src/frontend-models/query.js +1557 -1855
  645. package/build/src/frontend-models/resource-config-validation.js +27 -37
  646. package/build/src/frontend-models/resource-definition.d.ts +6 -7
  647. package/build/src/frontend-models/resource-definition.d.ts.map +1 -1
  648. package/build/src/frontend-models/resource-definition.js +237 -291
  649. package/build/src/frontend-models/transport-serialization.js +203 -266
  650. package/build/src/frontend-models/use-created-event.js +5 -7
  651. package/build/src/frontend-models/use-destroyed-event.js +80 -93
  652. package/build/src/frontend-models/use-model-class-event.js +79 -91
  653. package/build/src/frontend-models/use-updated-event.js +84 -97
  654. package/build/src/frontend-models/websocket-channel.js +381 -441
  655. package/build/src/frontend-models/websocket-publishers.js +142 -175
  656. package/build/src/http-client/header.js +13 -14
  657. package/build/src/http-client/index.js +116 -132
  658. package/build/src/http-client/request.js +71 -87
  659. package/build/src/http-client/response.js +122 -140
  660. package/build/src/http-client/websocket-client.js +15 -17
  661. package/build/src/http-server/client/index.js +409 -465
  662. package/build/src/http-server/client/params-to-object.js +124 -135
  663. package/build/src/http-server/client/request-buffer/form-data-part.js +111 -132
  664. package/build/src/http-server/client/request-buffer/header.js +15 -16
  665. package/build/src/http-server/client/request-buffer/index.js +446 -506
  666. package/build/src/http-server/client/request-parser.js +163 -186
  667. package/build/src/http-server/client/request-runner.js +226 -259
  668. package/build/src/http-server/client/request-timing.js +132 -151
  669. package/build/src/http-server/client/request.js +96 -108
  670. package/build/src/http-server/client/response.js +213 -235
  671. package/build/src/http-server/client/uploaded-file/memory-uploaded-file.js +25 -29
  672. package/build/src/http-server/client/uploaded-file/temporary-uploaded-file.js +25 -29
  673. package/build/src/http-server/client/uploaded-file/uploaded-file.js +33 -33
  674. package/build/src/http-server/client/websocket-request.js +114 -137
  675. package/build/src/http-server/client/websocket-session.js +1452 -1657
  676. package/build/src/http-server/cookie.js +216 -236
  677. package/build/src/http-server/development-reloader.js +190 -221
  678. package/build/src/http-server/index.js +451 -525
  679. package/build/src/http-server/remote-address.js +38 -50
  680. package/build/src/http-server/server-client.js +181 -208
  681. package/build/src/http-server/server-lock.js +153 -167
  682. package/build/src/http-server/websocket-channel-subscribers.js +81 -93
  683. package/build/src/http-server/websocket-channel.js +104 -117
  684. package/build/src/http-server/websocket-connection.js +96 -104
  685. package/build/src/http-server/websocket-event-log-store.js +350 -404
  686. package/build/src/http-server/websocket-events-host.js +145 -164
  687. package/build/src/http-server/websocket-events.js +47 -47
  688. package/build/src/http-server/worker-handler/channel-subscriber-dispatch.js +13 -14
  689. package/build/src/http-server/worker-handler/in-process.js +123 -141
  690. package/build/src/http-server/worker-handler/index.js +313 -349
  691. package/build/src/http-server/worker-handler/worker-script.js +4 -5
  692. package/build/src/http-server/worker-handler/worker-thread.js +240 -269
  693. package/build/src/initializer.js +31 -36
  694. package/build/src/jobs/mail-delivery.js +13 -15
  695. package/build/src/logger/base-logger.js +24 -26
  696. package/build/src/logger/console-logger.js +21 -23
  697. package/build/src/logger/file-logger.js +29 -31
  698. package/build/src/logger/outputs/array-output.js +37 -42
  699. package/build/src/logger/outputs/console-output.js +20 -24
  700. package/build/src/logger/outputs/file-output.js +43 -48
  701. package/build/src/logger/outputs/stdout-output.js +39 -48
  702. package/build/src/logger.js +338 -394
  703. package/build/src/mailer/backends/smtp.js +134 -163
  704. package/build/src/mailer/base.js +211 -251
  705. package/build/src/mailer/delivery.js +56 -64
  706. package/build/src/mailer/index.js +4 -22
  707. package/build/src/mailer.js +4 -13
  708. package/build/src/plugins/sqljs-wasm-route-controller.js +42 -52
  709. package/build/src/plugins/sqljs-wasm-route.js +28 -38
  710. package/build/src/record-payload-values.js +25 -28
  711. package/build/src/routes/app-routes.js +12 -14
  712. package/build/src/routes/base-route.js +112 -130
  713. package/build/src/routes/basic-route.js +83 -102
  714. package/build/src/routes/built-in/debug/controller.js +10 -10
  715. package/build/src/routes/built-in/errors/controller.js +5 -5
  716. package/build/src/routes/get-route.js +50 -63
  717. package/build/src/routes/hooks/frontend-model-command-route-hook.js +66 -80
  718. package/build/src/routes/index.js +36 -43
  719. package/build/src/routes/namespace-route.js +38 -47
  720. package/build/src/routes/plugin-routes.js +107 -124
  721. package/build/src/routes/post-route.js +51 -62
  722. package/build/src/routes/resolver.js +422 -494
  723. package/build/src/routes/resource-route.js +124 -143
  724. package/build/src/routes/root-route.js +7 -8
  725. package/build/src/testing/base-expect.js +13 -14
  726. package/build/src/testing/browser-frontend-model-event-hook-scenarios.js +329 -405
  727. package/build/src/testing/browser-test-app.js +23 -29
  728. package/build/src/testing/expect-to-change.js +41 -50
  729. package/build/src/testing/expect-utils.js +139 -184
  730. package/build/src/testing/expect.js +638 -731
  731. package/build/src/testing/request-client.js +70 -85
  732. package/build/src/testing/test-files-finder.js +285 -339
  733. package/build/src/testing/test-filter-parser.js +124 -155
  734. package/build/src/testing/test-runner.js +883 -1020
  735. package/build/src/testing/test-suite-splitter.js +114 -142
  736. package/build/src/testing/test.js +216 -256
  737. package/build/src/utils/backtrace-cleaner-node.js +62 -69
  738. package/build/src/utils/backtrace-cleaner.js +188 -216
  739. package/build/src/utils/ensure-error.js +7 -7
  740. package/build/src/utils/event-emitter.js +4 -6
  741. package/build/src/utils/file-exists.js +9 -10
  742. package/build/src/utils/format-value.js +67 -76
  743. package/build/src/utils/model-scope.js +27 -31
  744. package/build/src/utils/nest-callbacks.js +10 -13
  745. package/build/src/utils/plain-object.js +5 -6
  746. package/build/src/utils/ransack.js +448 -563
  747. package/build/src/utils/rest-args-error.js +5 -6
  748. package/build/src/utils/singularize-model-name.js +9 -11
  749. package/build/src/utils/split-sql-statements.js +68 -79
  750. package/build/src/utils/to-import-specifier.js +24 -30
  751. package/build/src/utils/with-tracked-stack-async-hooks.js +60 -74
  752. package/build/src/utils/with-tracked-stack.js +14 -18
  753. package/build/src/velocious-error.js +27 -30
  754. package/build/templates/configuration.js +61 -0
  755. package/build/templates/generate-migration.js +11 -0
  756. package/build/templates/generate-model.js +6 -0
  757. package/build/templates/routes.js +11 -0
  758. package/build/testing/base-expect.js +17 -0
  759. package/build/testing/browser-frontend-model-event-hook-scenarios.js +520 -0
  760. package/build/testing/browser-test-app.js +32 -0
  761. package/build/testing/expect-to-change.js +55 -0
  762. package/build/testing/expect-utils.js +269 -0
  763. package/build/testing/expect.js +763 -0
  764. package/build/testing/request-client.js +90 -0
  765. package/build/testing/test-files-finder.js +364 -0
  766. package/build/testing/test-filter-parser.js +198 -0
  767. package/build/testing/test-runner.js +1168 -0
  768. package/build/testing/test-suite-splitter.js +177 -0
  769. package/build/testing/test.js +370 -0
  770. package/build/utils/backtrace-cleaner-node.js +87 -0
  771. package/build/utils/backtrace-cleaner.js +266 -0
  772. package/build/utils/ensure-error.js +15 -0
  773. package/build/utils/event-emitter.js +8 -0
  774. package/build/utils/file-exists.js +18 -0
  775. package/build/utils/format-value.js +101 -0
  776. package/build/utils/model-scope.js +56 -0
  777. package/build/utils/nest-callbacks.js +22 -0
  778. package/build/utils/plain-object.js +14 -0
  779. package/build/utils/ransack.js +859 -0
  780. package/build/utils/rest-args-error.js +14 -0
  781. package/build/utils/singularize-model-name.js +18 -0
  782. package/build/utils/split-sql-statements.js +88 -0
  783. package/build/utils/to-import-specifier.js +53 -0
  784. package/build/utils/with-tracked-stack-async-hooks.js +103 -0
  785. package/build/utils/with-tracked-stack.js +38 -0
  786. package/build/velocious-error.js +34 -0
  787. package/package.json +3 -3
  788. package/src/configuration-types.js +1 -1
  789. package/src/database/record/index.js +174 -25
  790. package/src/environment-handlers/node/cli/commands/generate/base-models.js +50 -21
  791. package/src/environment-handlers/node/cli/commands/generate/frontend-models.js +5 -5
  792. package/src/frontend-model-resource/base-resource.js +6 -2
  793. package/src/frontend-models/resource-definition.js +3 -3
  794. package/src/frontend-models/websocket-publishers.js +6 -6
@@ -0,0 +1,79 @@
1
+ // @ts-check
2
+
3
+ import QueryParserOptions from "../../query-parser/options.js"
4
+
5
+ export default class VelociousDatabaseDriversMssqlOptions extends QueryParserOptions {
6
+ /**
7
+ * Runs constructor.
8
+ * @param {object} args - Options object.
9
+ * @param {import("../base.js").default} args.driver - Database driver instance.
10
+ */
11
+ constructor({driver}) {
12
+ const options = {
13
+ driver,
14
+ columnQuote: "\"",
15
+ indexQuote: "\"",
16
+ stringQuote: "'",
17
+ tableQuote: "\""
18
+ }
19
+
20
+ super(options)
21
+ }
22
+
23
+ /**
24
+ * Runs quote.
25
+ * @param {?} string - String.
26
+ * @returns {number | string} - The quote.
27
+ */
28
+ quote(string) {
29
+ if (!this.driver) throw new Error("Driver not set")
30
+
31
+ return this.driver.quote(string)
32
+ }
33
+
34
+ /**
35
+ * Runs quote column name.
36
+ * @param {string} string - String.
37
+ * @returns {string} - The quote column name.
38
+ */
39
+ quoteColumnName(string) {
40
+ if (string.includes("[") || string.includes("]")) throw new Error(`Possible SQL injection in column name: ${string}`)
41
+
42
+ return `[${string}]`
43
+ }
44
+
45
+ /**
46
+ * Runs quote database name.
47
+ * @param {string} databaseName - Database name.
48
+ * @returns {string} - The quote database name.
49
+ */
50
+ quoteDatabaseName(databaseName) {
51
+ if (typeof databaseName != "string") throw new Error(`Invalid database name given: ${databaseName}`)
52
+ if (databaseName.includes("[") || databaseName.includes("]")) throw new Error(`Possible SQL injection in database name: ${databaseName}`)
53
+
54
+ return `[${databaseName}]`
55
+ }
56
+
57
+ /**
58
+ * Runs quote index name.
59
+ * @param {string} string - String.
60
+ * @returns {string} - The quote index name.
61
+ */
62
+ quoteIndexName(string) {
63
+ if (string.includes("[") || string.includes("]")) throw new Error(`Possible SQL injection in index name: ${string}`)
64
+
65
+ return `[${string}]`
66
+ }
67
+
68
+ /**
69
+ * Runs quote table name.
70
+ * @param {string} string - String.
71
+ * @returns {string} - The quote table name.
72
+ */
73
+ quoteTableName(string) {
74
+ if (string.includes("[") || string.includes("]")) throw new Error(`Possible SQL injection in table name: ${string}`)
75
+
76
+ return `[${string}]`
77
+ }
78
+ }
79
+
@@ -0,0 +1,6 @@
1
+ // @ts-check
2
+
3
+ import BaseQueryParser from "../../query-parser/base-query-parser.js"
4
+
5
+ export default class VelociousDatabaseConnectionDriversMssqlQueryParser extends BaseQueryParser {
6
+ }
@@ -0,0 +1,4 @@
1
+ import AlterTableBase from "../../../query/alter-table-base.js"
2
+
3
+ export default class VelociousDatabaseConnectionDriversMssqlSqlAlterTable extends AlterTableBase {
4
+ }
@@ -0,0 +1,36 @@
1
+ // @ts-check
2
+
3
+ import CreateDatabaseBase from "../../../query/create-database-base.js"
4
+
5
+ export default class VelociousDatabaseConnectionDriversMssqlSqlCreateDatabase extends CreateDatabaseBase {
6
+ /**
7
+ * Runs constructor.
8
+ * @param {object} args - Options object.
9
+ * @param {import("../../base.js").default} args.driver - Database driver instance.
10
+ * @param {string} args.databaseName - Database name.
11
+ * @param {boolean} [args.ifNotExists] - Whether if not exists.
12
+ */
13
+ constructor({driver, databaseName, ifNotExists}) {
14
+ super({databaseName, driver})
15
+ this.ifNotExists = ifNotExists
16
+ }
17
+
18
+ toSql() {
19
+ const {databaseName} = this
20
+ const options = this.getOptions()
21
+
22
+ let sql = ""
23
+
24
+ if (this.ifNotExists) {
25
+ sql += `IF NOT EXISTS(SELECT * FROM [sys].[databases] WHERE [name] = ${options.quote(databaseName)}) BEGIN `
26
+ }
27
+
28
+ sql += `CREATE DATABASE ${options.quoteDatabaseName(databaseName)}`
29
+
30
+ if (this.ifNotExists) {
31
+ sql += " END"
32
+ }
33
+
34
+ return [sql]
35
+ }
36
+ }
@@ -0,0 +1,4 @@
1
+ import CreateIndexBase from "../../../query/create-index-base.js"
2
+
3
+ export default class VelociousDatabaseConnectionDriversMssqlSqlCreateIndex extends CreateIndexBase {
4
+ }
@@ -0,0 +1,4 @@
1
+ import CreateTableBase from "../../../query/create-table-base.js"
2
+
3
+ export default class VelociousDatabaseConnectionDriversMssqlSqlCreateTable extends CreateTableBase {
4
+ }
@@ -0,0 +1,19 @@
1
+ import DeleteBase from "../../../query/delete-base.js"
2
+
3
+ export default class VelociousDatabaseConnectionDriversMssqlSqlDelete extends DeleteBase {
4
+ toSql() {
5
+ let sql = `DELETE FROM ${this.getOptions().quoteTableName(this.tableName)} WHERE `
6
+ let count = 0
7
+
8
+ for (let columnName in this.conditions) {
9
+ if (count > 0) sql += " AND "
10
+
11
+ sql += this.getOptions().quoteColumnName(columnName)
12
+ sql += " = "
13
+ sql += this.getOptions().quote(this.conditions[columnName])
14
+ count++
15
+ }
16
+
17
+ return sql
18
+ }
19
+ }
@@ -0,0 +1,36 @@
1
+ // @ts-check
2
+
3
+ import DropDatabaseBase from "../../../query/drop-database-base.js"
4
+
5
+ export default class VelociousDatabaseConnectionDriversMssqlSqlDropDatabase extends DropDatabaseBase {
6
+ /**
7
+ * Runs constructor.
8
+ * @param {object} args - Options object.
9
+ * @param {import("../../base.js").default} args.driver - Database driver instance.
10
+ * @param {string} args.databaseName - Database name.
11
+ * @param {boolean} [args.ifExists] - Whether if exists.
12
+ */
13
+ constructor({driver, databaseName, ifExists}) {
14
+ super({databaseName, driver})
15
+ this.ifExists = ifExists
16
+ }
17
+
18
+ toSql() {
19
+ const {databaseName} = this
20
+ const options = this.getOptions()
21
+
22
+ let sql = ""
23
+
24
+ if (this.ifExists) {
25
+ sql += `IF EXISTS(SELECT * FROM [sys].[databases] WHERE [name] = ${options.quote(databaseName)}) BEGIN `
26
+ }
27
+
28
+ sql += `DROP DATABASE ${options.quoteDatabaseName(databaseName)}`
29
+
30
+ if (this.ifExists) {
31
+ sql += " END"
32
+ }
33
+
34
+ return [sql]
35
+ }
36
+ }
@@ -0,0 +1,4 @@
1
+ import DropTableBase from "../../../query/drop-table-base.js"
2
+
3
+ export default class VelociousDatabaseConnectionDriversMssqlSqlDropTable extends DropTableBase {
4
+ }
@@ -0,0 +1,4 @@
1
+ import InsertBase from "../../../query/insert-base.js"
2
+
3
+ export default class VelociousDatabaseConnectionDriversMssqlSqlInsert extends InsertBase {
4
+ }
@@ -0,0 +1,31 @@
1
+ import UpdateBase from "../../../query/update-base.js"
2
+
3
+ export default class VelociousDatabaseConnectionDriversMssqlSqlUpdate extends UpdateBase {
4
+ toSql() {
5
+ let sql = `UPDATE ${this.getOptions().quoteTableName(this.tableName)} SET `
6
+ let count = 0
7
+
8
+ for (let columnName in this.data) {
9
+ if (count > 0) sql += ", "
10
+
11
+ sql += this.getOptions().quoteColumnName(columnName)
12
+ sql += " = "
13
+ sql += this.formatValue(this.data[columnName])
14
+ count++
15
+ }
16
+
17
+ sql += " WHERE "
18
+ count = 0
19
+
20
+ for (let columnName in this.conditions) {
21
+ if (count > 0) sql += " AND "
22
+
23
+ sql += this.getOptions().quoteColumnName(columnName)
24
+ sql += " = "
25
+ sql += this.formatValue(this.conditions[columnName])
26
+ count++
27
+ }
28
+
29
+ return sql
30
+ }
31
+ }
@@ -0,0 +1,23 @@
1
+ // @ts-check
2
+
3
+ import UpsertBase from "../../../query/upsert-base.js"
4
+
5
+ export default class VelociousDatabaseConnectionDriversMssqlSqlUpsert extends UpsertBase {
6
+ toSql() {
7
+ const sourceColumnsSql = this.dataColumns().map((columnName) => {
8
+ return `${this.formatColumnValue(columnName)} AS ${this.quotedColumn(columnName)}`
9
+ }).join(", ")
10
+ const conflictSql = this.conflictColumns.map((columnName) => {
11
+ return `target.${this.quotedColumn(columnName)} = source.${this.quotedColumn(columnName)}`
12
+ }).join(" AND ")
13
+ const updateSql = this.updateColumns.map((columnName) => {
14
+ return `${this.quotedColumn(columnName)} = source.${this.quotedColumn(columnName)}`
15
+ }).join(", ")
16
+ const insertColumnsSql = this.dataColumns().map((columnName) => this.quotedColumn(columnName)).join(", ")
17
+ const insertValuesSql = this.dataColumns().map((columnName) => `source.${this.quotedColumn(columnName)}`).join(", ")
18
+
19
+ // HOLDLOCK prevents the race where two concurrent MERGEs both
20
+ // see NOT MATCHED and both try to INSERT, causing a PK violation.
21
+ return `MERGE ${this.quotedTableName()} WITH (HOLDLOCK) AS target USING (SELECT ${sourceColumnsSql}) AS source ON ${conflictSql} WHEN MATCHED THEN UPDATE SET ${updateSql} WHEN NOT MATCHED THEN INSERT (${insertColumnsSql}) VALUES (${insertValuesSql});`
22
+ }
23
+ }
@@ -0,0 +1,120 @@
1
+ // @ts-check
2
+
3
+ import {normalizeCreateStatement, normalizeSqlStatement} from "../structure-sql/utils.js"
4
+
5
+ export default class VelociousDatabaseDriversMssqlStructureSql {
6
+ /**
7
+ * Runs constructor.
8
+ * @param {object} args - Options object.
9
+ * @param {import("../base.js").default} args.driver - Database driver instance.
10
+ */
11
+ constructor({driver}) {
12
+ this.driver = driver
13
+ }
14
+
15
+ /**
16
+ * Runs to sql.
17
+ * @returns {Promise<string | null>} - Resolves with SQL string.
18
+ */
19
+ async toSql() {
20
+ const {driver} = this
21
+ const rows = await driver.query("SELECT TABLE_NAME AS table_name, TABLE_TYPE AS table_type FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'dbo' ORDER BY TABLE_TYPE, TABLE_NAME")
22
+ const statements = []
23
+
24
+ for (const row of rows) {
25
+ const tableNameValue = row.table_name || row.TABLE_NAME
26
+ const tableTypeValue = row.table_type || row.TABLE_TYPE
27
+ const tableName = tableNameValue ? String(tableNameValue) : ""
28
+ const tableType = tableTypeValue ? String(tableTypeValue) : ""
29
+
30
+ if (!tableName || !tableType) continue
31
+
32
+ if (tableType == "BASE TABLE") {
33
+ const columns = await driver.query(`SELECT COLUMN_NAME AS column_name, DATA_TYPE AS data_type, IS_NULLABLE AS is_nullable, COLUMN_DEFAULT AS column_default, CHARACTER_MAXIMUM_LENGTH AS character_maximum_length, NUMERIC_PRECISION AS numeric_precision, NUMERIC_SCALE AS numeric_scale FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = 'dbo' AND TABLE_NAME = ${driver.quote(tableName)} ORDER BY ORDINAL_POSITION`)
34
+ const primaryKeys = await driver.query(`SELECT kcu.COLUMN_NAME AS column_name FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS tc JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE kcu ON tc.CONSTRAINT_NAME = kcu.CONSTRAINT_NAME WHERE tc.CONSTRAINT_TYPE = 'PRIMARY KEY' AND tc.TABLE_SCHEMA = 'dbo' AND tc.TABLE_NAME = ${driver.quote(tableName)} ORDER BY kcu.ORDINAL_POSITION`)
35
+ const columnSql = columns
36
+ .map((column) => this._columnDefinition(column))
37
+ .filter((column) => Boolean(column))
38
+ const primaryKeyColumns = primaryKeys
39
+ .map((primaryKeyRow) => primaryKeyRow.column_name || primaryKeyRow.COLUMN_NAME)
40
+ .filter((column) => Boolean(column))
41
+
42
+ if (primaryKeyColumns.length > 0) {
43
+ columnSql.push(`PRIMARY KEY (${primaryKeyColumns.map((name) => driver.quoteColumn(String(name))).join(", ")})`)
44
+ }
45
+
46
+ if (columnSql.length == 0) continue
47
+
48
+ statements.push(normalizeSqlStatement(`CREATE TABLE ${driver.quoteTable(tableName)} (${columnSql.join(", ")})`))
49
+ } else if (tableType == "VIEW") {
50
+ const viewRows = await driver.query(`SELECT m.definition AS definition FROM sys.sql_modules m JOIN sys.objects o ON m.object_id = o.object_id WHERE o.type = 'V' AND o.name = ${driver.quote(tableName)}`)
51
+ const viewDefValue = viewRows?.[0]?.definition || viewRows?.[0]?.DEFINITION
52
+ const viewDef = viewDefValue ? String(viewDefValue) : ""
53
+
54
+ if (!viewDef) continue
55
+
56
+ const createStatement = normalizeCreateStatement({
57
+ db: driver,
58
+ statement: viewDef,
59
+ objectName: tableName,
60
+ type: "VIEW"
61
+ })
62
+
63
+ statements.push(normalizeSqlStatement(createStatement))
64
+ }
65
+ }
66
+
67
+ if (statements.length == 0) return null
68
+
69
+ return `${statements.join("\n\n")}\n`
70
+ }
71
+
72
+ /**
73
+ * Runs column definition.
74
+ * @param {Record<string, ?>} column - Column.
75
+ * @returns {string | null} - The column definition.
76
+ */
77
+ _columnDefinition(column) {
78
+ const {driver} = this
79
+ const columnNameValue = column.column_name || column.COLUMN_NAME
80
+ const dataTypeValue = column.data_type || column.DATA_TYPE
81
+ const columnName = columnNameValue ? String(columnNameValue) : ""
82
+ const dataType = dataTypeValue ? String(dataTypeValue) : ""
83
+
84
+ if (!columnName || !dataType) return null
85
+
86
+ let typeSql = dataType
87
+ const charLengthValue = column.character_maximum_length || column.CHARACTER_MAXIMUM_LENGTH
88
+ const numericPrecisionValue = column.numeric_precision || column.NUMERIC_PRECISION
89
+ const numericScaleValue = column.numeric_scale || column.NUMERIC_SCALE
90
+ const charLength = charLengthValue === undefined || charLengthValue === null ? null : Number(charLengthValue)
91
+ const numericPrecision = numericPrecisionValue === undefined || numericPrecisionValue === null ? null : Number(numericPrecisionValue)
92
+ const numericScale = numericScaleValue === undefined || numericScaleValue === null ? null : Number(numericScaleValue)
93
+
94
+ if ((dataType == "varchar" || dataType == "nvarchar" || dataType == "char" || dataType == "nchar")) {
95
+ if (charLength == -1) {
96
+ typeSql = `${dataType}(max)`
97
+ } else if (charLength) {
98
+ typeSql = `${dataType}(${charLength})`
99
+ }
100
+ } else if ((dataType == "decimal" || dataType == "numeric") && numericPrecision) {
101
+ if (numericScale != null) {
102
+ typeSql = `${dataType}(${numericPrecision}, ${numericScale})`
103
+ } else {
104
+ typeSql = `${dataType}(${numericPrecision})`
105
+ }
106
+ }
107
+
108
+ const parts = [`${driver.quoteColumn(columnName)} ${typeSql}`]
109
+ const defaultValue = column.column_default || column.COLUMN_DEFAULT
110
+
111
+ if (defaultValue) parts.push(`DEFAULT ${defaultValue}`)
112
+
113
+ const isNullable = column.is_nullable || column.IS_NULLABLE
114
+
115
+ if (isNullable == "NO") parts.push("NOT NULL")
116
+
117
+ return parts.join(" ")
118
+ }
119
+ }
120
+
@@ -0,0 +1,145 @@
1
+ // @ts-check
2
+
3
+ import BaseTable from "../base-table.js"
4
+ import Column from "./column.js"
5
+ import ColumnsIndex from "./columns-index.js"
6
+ import {digg} from "diggerize"
7
+ import ForeignKey from "./foreign-key.js"
8
+
9
+ export default class VelociousDatabaseDriversMssqlTable extends BaseTable {
10
+ /**
11
+ * Runs constructor.
12
+ * @param {import("../base.js").default} driver - Database driver instance.
13
+ * @param {Record<string, string>} data - Data payload.
14
+ */
15
+ constructor(driver, data) {
16
+ super()
17
+ this.data = data
18
+ this.driver = driver
19
+ }
20
+
21
+ async getColumns() {
22
+ return await this.getDriver()._cachedTableSchemaMetadata(this.getName(), "columns", async () => {
23
+ const result = await this.driver.query(`
24
+ SELECT
25
+ *,
26
+ COLUMNPROPERTY(object_id(TABLE_SCHEMA + '.' + TABLE_NAME), COLUMN_NAME, 'IsIdentity') AS isIdentity
27
+ FROM [INFORMATION_SCHEMA].[COLUMNS]
28
+ WHERE [TABLE_NAME] = ${this.driver.quote(this.getName())}
29
+ `)
30
+ const columns = []
31
+
32
+ for (const data of result) {
33
+ const column = new Column(this, data)
34
+
35
+ columns.push(column)
36
+ }
37
+
38
+ return columns
39
+ })
40
+ }
41
+
42
+ async getForeignKeys() {
43
+ return await this.getDriver()._cachedTableSchemaMetadata(this.getName(), "foreignKeys", async () => {
44
+ const sql = `
45
+ SELECT
46
+ fk.name AS ForeignKeyName,
47
+ tp.name AS ParentTable,
48
+ ref.name AS ReferencedTable,
49
+ cp.name AS ParentColumn,
50
+ cref.name AS ReferencedColumn,
51
+ tp.name AS TableName
52
+ FROM sys.foreign_keys fk
53
+ INNER JOIN sys.foreign_key_columns fkc
54
+ ON fkc.constraint_object_id = fk.object_id
55
+ INNER JOIN sys.tables tp
56
+ ON fkc.parent_object_id = tp.object_id
57
+ INNER JOIN sys.columns cp
58
+ ON fkc.parent_object_id = cp.object_id
59
+ AND fkc.parent_column_id = cp.column_id
60
+ INNER JOIN sys.tables ref
61
+ ON fkc.referenced_object_id = ref.object_id
62
+ INNER JOIN sys.columns cref
63
+ ON fkc.referenced_object_id = cref.object_id
64
+ AND fkc.referenced_column_id = cref.column_id
65
+ WHERE tp.name = ${this.driver.quote(this.getName())}
66
+ ORDER BY ForeignKeyName, ParentTable, ReferencedTable;
67
+ `
68
+
69
+ const foreignKeyRows = await this.driver.query(sql)
70
+ const foreignKeys = []
71
+
72
+ for (const foreignKeyRow of foreignKeyRows) {
73
+ const foreignKey = new ForeignKey(foreignKeyRow)
74
+
75
+ foreignKeys.push(foreignKey)
76
+ }
77
+
78
+ return foreignKeys
79
+ })
80
+ }
81
+
82
+ async getIndexes() {
83
+ return await this.getDriver()._cachedTableSchemaMetadata(this.getName(), "indexes", async () => {
84
+ const options = this.getOptions()
85
+ const sql = `
86
+ SELECT
87
+ sys.tables.name AS TableName,
88
+ sys.columns.name AS ColumnName,
89
+ sys.indexes.name AS index_name,
90
+ sys.indexes.type_desc AS IndexType,
91
+ sys.index_columns.is_included_column AS IsIncludedColumn,
92
+ sys.indexes.is_unique,
93
+ sys.indexes.is_primary_key,
94
+ sys.indexes.is_unique_constraint
95
+ FROM sys.indexes
96
+ INNER JOIN sys.index_columns ON sys.indexes.object_id = sys.index_columns.object_id AND sys.indexes.index_id = sys.index_columns.index_id
97
+ INNER JOIN sys.columns ON sys.index_columns.object_id = sys.columns.object_id AND sys.index_columns.column_id = sys.columns.column_id
98
+ INNER JOIN sys.tables ON sys.indexes.object_id = sys.tables.object_id
99
+ WHERE
100
+ sys.tables.name = ${options.quote(this.getName())}
101
+ ORDER BY
102
+ sys.indexes.name,
103
+ sys.index_columns.key_ordinal
104
+ `
105
+
106
+ const rows = await this.getDriver().query(sql)
107
+ const indexes = []
108
+
109
+ for (const row of rows) {
110
+ const index = new ColumnsIndex(this, row)
111
+
112
+ indexes.push(index)
113
+ }
114
+
115
+ return indexes
116
+ })
117
+ }
118
+
119
+ /**
120
+ * Runs get name.
121
+ * @returns {string} - The table name.
122
+ */
123
+ getName() {
124
+ return /** Narrows the runtime value to the documented type. @type {string} */ (digg(this.data, "TABLE_NAME"))
125
+ }
126
+
127
+ /**
128
+ * Runs truncate.
129
+ * @param {{cascade: boolean}} [args] - Truncate options.
130
+ * @returns {Promise<Array<Record<string, ?>>>} - Resolves with the truncate.
131
+ */
132
+ async truncate(args) { // eslint-disable-line no-unused-vars
133
+ this.getDriver()._assertNotReadOnly()
134
+ try {
135
+ return await this.getDriver().query(`TRUNCATE TABLE ${this.getOptions().quoteTableName(this.getName())}`)
136
+ } catch (error) {
137
+ if (error instanceof Error && error.message.startsWith("Query failed 'Cannot truncate table")) {
138
+ // Truncate table is really buggy for some reason - fall back to delete all rows instead
139
+ return await this.getDriver().query(`DELETE FROM ${this.getOptions().quoteTableName(this.getName())}`)
140
+ } else {
141
+ throw error
142
+ }
143
+ }
144
+ }
145
+ }
@@ -0,0 +1,112 @@
1
+ // @ts-check
2
+
3
+ import BaseColumn from "../base-column.js"
4
+ import ColumnsIndex from "./columns-index.js"
5
+ import {digg} from "diggerize"
6
+
7
+ export default class VelociousDatabaseDriversMysqlColumn extends BaseColumn {
8
+ /**
9
+ * Runs constructor.
10
+ * @param {import("../base-table.js").default} table - Table.
11
+ * @param {Record<string, ?>} data - Data payload.
12
+ */
13
+ constructor(table, data) {
14
+ super()
15
+ this.data = data
16
+ this.table = table
17
+ }
18
+
19
+ getAutoIncrement() { return digg(this, "data", "Extra").includes("auto_increment") }
20
+
21
+ async getIndexes() {
22
+ const options = this.getOptions()
23
+ const sql = `
24
+ SELECT
25
+ TABLE_SCHEMA,
26
+ TABLE_NAME,
27
+ INDEX_NAME AS index_name,
28
+ COLUMN_NAME,
29
+ SEQ_IN_INDEX,
30
+ NON_UNIQUE,
31
+ INDEX_TYPE
32
+ FROM INFORMATION_SCHEMA.STATISTICS
33
+ WHERE
34
+ TABLE_SCHEMA = DATABASE() AND
35
+ TABLE_NAME = ${options.quote(this.table.getName())} AND
36
+ COLUMN_NAME = ${options.quote(this.getName())}
37
+ `
38
+ const indexesRows = await this.getDriver().query(sql)
39
+ const indexes = []
40
+
41
+ for (const indexRow of indexesRows) {
42
+ if (indexRow.NON_UNIQUE == 1) {
43
+ indexRow.is_unique = false
44
+ } else {
45
+ indexRow.is_unique = true
46
+ }
47
+
48
+ if (indexRow.index_name == "PRIMARY") {
49
+ indexRow.is_primary_key = true
50
+ } else {
51
+ indexRow.is_primary_key = false
52
+ }
53
+
54
+ const index = new ColumnsIndex(this.getTable(), indexRow)
55
+
56
+ indexes.push(index)
57
+ }
58
+
59
+ return indexes
60
+ }
61
+
62
+ getDefault() { return digg(this, "data", "Default") }
63
+
64
+ getMaxLength() {
65
+ const type = digg(this, "data", "Type")
66
+ const match = type.match(/\((\d+)\)$/)
67
+
68
+ if (match) {
69
+ const maxLength = parseInt(match[1])
70
+
71
+ return maxLength
72
+ }
73
+ }
74
+
75
+ getName() { return digg(this, "data", "Field") }
76
+ getNotes() { return digg(this, "data", "Comment") || undefined }
77
+
78
+ getNull() {
79
+ const nullValue = digg(this, "data", "Null")
80
+
81
+ if (nullValue == "NO") {
82
+ return false
83
+ } else if (nullValue == "YES") {
84
+ return true
85
+ } else {
86
+ throw new Error(`Unknown null value: ${nullValue}`)
87
+ }
88
+ }
89
+
90
+ getPrimaryKey() { return digg(this, "data", "Key") == "PRI" }
91
+
92
+ getType() {
93
+ const typeHint = this.getTypeHintFromNotes()
94
+
95
+ if (typeHint == "boolean") return "boolean"
96
+
97
+ const type = digg(this, "data", "Type")
98
+ const tinyintMatch = type.match(/^tinyint\((\d+)\)/i)
99
+
100
+ if (tinyintMatch && tinyintMatch[1] == "1") return "boolean"
101
+
102
+ if (type.match(/^[a-z]+$/i)) {
103
+ return type.toLowerCase()
104
+ }
105
+
106
+ const match = type.match(/^([a-z]+)(?:\((\d+)\))*/i)
107
+
108
+ if (!match) throw new Error(`Couldn't match column type from: ${type}`)
109
+
110
+ return match[1].toLowerCase()
111
+ }
112
+ }
@@ -0,0 +1,22 @@
1
+ // @ts-check
2
+
3
+ import BaseColumnsIndex from "../base-columns-index.js"
4
+ import {digg} from "diggerize"
5
+ import TableIndex from "../../table-data/table-index.js"
6
+
7
+ export default class VelociousDatabaseDriversMysqlColumnsIndex extends BaseColumnsIndex {
8
+ getColumnNames() {
9
+ const columnNames = digg(this, "data", "column_names")
10
+
11
+ if (columnNames) return columnNames
12
+
13
+ return [digg(this, "data", "COLUMN_NAME")]
14
+ }
15
+
16
+ getTableDataIndex() {
17
+ return new TableIndex(this.getColumnNames(), {
18
+ name: this.getName(),
19
+ unique: this.isUnique()
20
+ })
21
+ }
22
+ }
@@ -0,0 +1,12 @@
1
+ // @ts-check
2
+
3
+ import BaseForeignKey from "../base-foreign-key.js"
4
+ import {digg} from "diggerize"
5
+
6
+ export default class VelociousDatabaseDriversMysqlForeignKey extends BaseForeignKey {
7
+ getColumnName() { return digg(this, "data", "COLUMN_NAME") }
8
+ getName() { return digg(this, "data", "CONSTRAINT_NAME") }
9
+ getTableName() { return digg(this, "data", "TABLE_NAME") }
10
+ getReferencedColumnName() { return digg(this, "data", "REFERENCED_COLUMN_NAME") }
11
+ getReferencedTableName() { return digg(this, "data", "REFERENCED_TABLE_NAME") }
12
+ }