velocious 1.0.431 → 1.0.432

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 (781) 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 +4094 -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 +935 -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.js +2 -53
  421. package/build/src/configuration.js +2240 -2547
  422. package/build/src/controller.js +363 -407
  423. package/build/src/current-configuration.js +9 -12
  424. package/build/src/current.js +70 -75
  425. package/build/src/database/annotations-async-hooks.js +16 -22
  426. package/build/src/database/annotations.js +12 -18
  427. package/build/src/database/drivers/base-column.js +155 -179
  428. package/build/src/database/drivers/base-columns-index.js +69 -78
  429. package/build/src/database/drivers/base-foreign-key.js +89 -101
  430. package/build/src/database/drivers/base-table.js +124 -149
  431. package/build/src/database/drivers/base.js +1306 -1489
  432. package/build/src/database/drivers/mssql/column.js +39 -50
  433. package/build/src/database/drivers/mssql/columns-index.js +2 -3
  434. package/build/src/database/drivers/mssql/connect-connection.js +11 -9
  435. package/build/src/database/drivers/mssql/foreign-key.js +8 -9
  436. package/build/src/database/drivers/mssql/index.js +507 -587
  437. package/build/src/database/drivers/mssql/options.js +68 -75
  438. package/build/src/database/drivers/mssql/query-parser.js +2 -3
  439. package/build/src/database/drivers/mssql/sql/alter-table.js +2 -2
  440. package/build/src/database/drivers/mssql/sql/create-database.js +24 -31
  441. package/build/src/database/drivers/mssql/sql/create-index.js +2 -2
  442. package/build/src/database/drivers/mssql/sql/create-table.js +2 -2
  443. package/build/src/database/drivers/mssql/sql/delete.js +14 -16
  444. package/build/src/database/drivers/mssql/sql/drop-database.js +24 -31
  445. package/build/src/database/drivers/mssql/sql/drop-table.js +2 -2
  446. package/build/src/database/drivers/mssql/sql/insert.js +2 -2
  447. package/build/src/database/drivers/mssql/sql/update.js +24 -28
  448. package/build/src/database/drivers/mssql/sql/upsert.js +18 -20
  449. package/build/src/database/drivers/mssql/structure-sql.js +102 -114
  450. package/build/src/database/drivers/mssql/table.js +81 -96
  451. package/build/src/database/drivers/mysql/column.js +75 -92
  452. package/build/src/database/drivers/mysql/columns-index.js +16 -19
  453. package/build/src/database/drivers/mysql/foreign-key.js +8 -9
  454. package/build/src/database/drivers/mysql/index.js +396 -457
  455. package/build/src/database/drivers/mysql/options.js +26 -30
  456. package/build/src/database/drivers/mysql/query-parser.js +2 -3
  457. package/build/src/database/drivers/mysql/query.js +26 -29
  458. package/build/src/database/drivers/mysql/sql/alter-table.js +2 -3
  459. package/build/src/database/drivers/mysql/sql/create-database.js +23 -28
  460. package/build/src/database/drivers/mysql/sql/create-index.js +2 -3
  461. package/build/src/database/drivers/mysql/sql/create-table.js +2 -3
  462. package/build/src/database/drivers/mysql/sql/delete.js +14 -17
  463. package/build/src/database/drivers/mysql/sql/drop-database.js +2 -3
  464. package/build/src/database/drivers/mysql/sql/drop-table.js +2 -3
  465. package/build/src/database/drivers/mysql/sql/insert.js +2 -3
  466. package/build/src/database/drivers/mysql/sql/update.js +24 -29
  467. package/build/src/database/drivers/mysql/sql/upsert.js +8 -10
  468. package/build/src/database/drivers/mysql/structure-sql.js +79 -88
  469. package/build/src/database/drivers/mysql/table.js +83 -98
  470. package/build/src/database/drivers/pgsql/column.js +56 -72
  471. package/build/src/database/drivers/pgsql/columns-index.js +2 -3
  472. package/build/src/database/drivers/pgsql/foreign-key.js +8 -9
  473. package/build/src/database/drivers/pgsql/index.js +377 -438
  474. package/build/src/database/drivers/pgsql/options.js +25 -28
  475. package/build/src/database/drivers/pgsql/query-parser.js +2 -3
  476. package/build/src/database/drivers/pgsql/sql/alter-table.js +2 -3
  477. package/build/src/database/drivers/pgsql/sql/create-database.js +19 -23
  478. package/build/src/database/drivers/pgsql/sql/create-index.js +2 -3
  479. package/build/src/database/drivers/pgsql/sql/create-table.js +2 -3
  480. package/build/src/database/drivers/pgsql/sql/delete.js +14 -17
  481. package/build/src/database/drivers/pgsql/sql/drop-database.js +2 -3
  482. package/build/src/database/drivers/pgsql/sql/drop-table.js +2 -3
  483. package/build/src/database/drivers/pgsql/sql/insert.js +2 -3
  484. package/build/src/database/drivers/pgsql/sql/update.js +24 -29
  485. package/build/src/database/drivers/pgsql/sql/upsert.js +9 -11
  486. package/build/src/database/drivers/pgsql/structure-sql.js +108 -120
  487. package/build/src/database/drivers/pgsql/table.js +60 -77
  488. package/build/src/database/drivers/sqlite/base.js +405 -478
  489. package/build/src/database/drivers/sqlite/column.js +54 -69
  490. package/build/src/database/drivers/sqlite/columns-index.js +22 -27
  491. package/build/src/database/drivers/sqlite/connection-sql-js.js +35 -42
  492. package/build/src/database/drivers/sqlite/foreign-key.js +18 -21
  493. package/build/src/database/drivers/sqlite/index.js +330 -373
  494. package/build/src/database/drivers/sqlite/index.native.js +55 -64
  495. package/build/src/database/drivers/sqlite/index.web.js +69 -87
  496. package/build/src/database/drivers/sqlite/options.js +25 -28
  497. package/build/src/database/drivers/sqlite/query-parser.js +2 -3
  498. package/build/src/database/drivers/sqlite/query.js +21 -24
  499. package/build/src/database/drivers/sqlite/query.native.js +20 -25
  500. package/build/src/database/drivers/sqlite/query.web.js +30 -37
  501. package/build/src/database/drivers/sqlite/sql/alter-table.js +159 -179
  502. package/build/src/database/drivers/sqlite/sql/create-index.js +2 -3
  503. package/build/src/database/drivers/sqlite/sql/create-table.js +2 -3
  504. package/build/src/database/drivers/sqlite/sql/delete.js +17 -22
  505. package/build/src/database/drivers/sqlite/sql/drop-table.js +2 -3
  506. package/build/src/database/drivers/sqlite/sql/insert.js +2 -3
  507. package/build/src/database/drivers/sqlite/sql/update.js +24 -29
  508. package/build/src/database/drivers/sqlite/sql/upsert.js +9 -11
  509. package/build/src/database/drivers/sqlite/structure-sql.js +49 -52
  510. package/build/src/database/drivers/sqlite/table-rebuilder.js +62 -75
  511. package/build/src/database/drivers/sqlite/table.js +102 -125
  512. package/build/src/database/drivers/structure-sql/utils.js +14 -17
  513. package/build/src/database/handler.js +9 -10
  514. package/build/src/database/initializer-from-require-context.js +76 -87
  515. package/build/src/database/migration/index.js +332 -395
  516. package/build/src/database/migrator/files-finder.js +40 -50
  517. package/build/src/database/migrator/types.js +2 -30
  518. package/build/src/database/migrator.js +454 -526
  519. package/build/src/database/pool/async-tracked-multi-connection.js +997 -1147
  520. package/build/src/database/pool/base-methods-forward.js +40 -43
  521. package/build/src/database/pool/base.js +298 -343
  522. package/build/src/database/pool/single-multi-use.js +93 -110
  523. package/build/src/database/query/alter-table-base.js +84 -99
  524. package/build/src/database/query/base.js +39 -46
  525. package/build/src/database/query/create-database-base.js +25 -30
  526. package/build/src/database/query/create-index-base.js +75 -94
  527. package/build/src/database/query/create-table-base.js +151 -193
  528. package/build/src/database/query/delete-base.js +14 -16
  529. package/build/src/database/query/drop-database-base.js +23 -28
  530. package/build/src/database/query/drop-table-base.js +42 -53
  531. package/build/src/database/query/from-base.js +30 -33
  532. package/build/src/database/query/from-plain.js +11 -13
  533. package/build/src/database/query/from-table.js +13 -15
  534. package/build/src/database/query/index.js +410 -472
  535. package/build/src/database/query/insert-base.js +143 -164
  536. package/build/src/database/query/join-base.js +35 -40
  537. package/build/src/database/query/join-object.js +128 -153
  538. package/build/src/database/query/join-plain.js +13 -15
  539. package/build/src/database/query/join-tracker.js +76 -90
  540. package/build/src/database/query/model-class-query.js +1134 -1370
  541. package/build/src/database/query/order-base.js +27 -30
  542. package/build/src/database/query/order-column.js +44 -53
  543. package/build/src/database/query/order-plain.js +20 -24
  544. package/build/src/database/query/preloader/belongs-to.js +210 -258
  545. package/build/src/database/query/preloader/ensure-model-class-initialized.js +8 -9
  546. package/build/src/database/query/preloader/has-many.js +240 -301
  547. package/build/src/database/query/preloader/has-one.js +91 -117
  548. package/build/src/database/query/preloader/selection.js +117 -129
  549. package/build/src/database/query/preloader.js +160 -185
  550. package/build/src/database/query/query-data.js +157 -201
  551. package/build/src/database/query/select-base.js +25 -27
  552. package/build/src/database/query/select-plain.js +13 -15
  553. package/build/src/database/query/select-table-and-column.js +21 -25
  554. package/build/src/database/query/update-base.js +35 -38
  555. package/build/src/database/query/upsert-base.js +93 -100
  556. package/build/src/database/query/where-base.js +32 -35
  557. package/build/src/database/query/where-combinator.js +25 -28
  558. package/build/src/database/query/where-hash.js +61 -68
  559. package/build/src/database/query/where-model-class-hash.js +414 -469
  560. package/build/src/database/query/where-not.js +18 -20
  561. package/build/src/database/query/where-plain.js +15 -17
  562. package/build/src/database/query/with-count.js +125 -159
  563. package/build/src/database/query-parser/base-query-parser.js +32 -37
  564. package/build/src/database/query-parser/from-parser.js +36 -45
  565. package/build/src/database/query-parser/group-parser.js +42 -50
  566. package/build/src/database/query-parser/joins-parser.js +28 -33
  567. package/build/src/database/query-parser/limit-parser.js +67 -70
  568. package/build/src/database/query-parser/options.js +75 -82
  569. package/build/src/database/query-parser/order-parser.js +36 -40
  570. package/build/src/database/query-parser/select-parser.js +49 -60
  571. package/build/src/database/query-parser/where-parser.js +36 -41
  572. package/build/src/database/record/acts-as-list.js +235 -273
  573. package/build/src/database/record/attachments/download.js +44 -45
  574. package/build/src/database/record/attachments/handle.js +141 -161
  575. package/build/src/database/record/attachments/normalize-input.js +128 -138
  576. package/build/src/database/record/attachments/storage-drivers/filesystem.js +77 -91
  577. package/build/src/database/record/attachments/storage-drivers/native.js +112 -121
  578. package/build/src/database/record/attachments/storage-drivers/s3.js +177 -208
  579. package/build/src/database/record/attachments/store.js +467 -539
  580. package/build/src/database/record/index.d.ts +66 -6
  581. package/build/src/database/record/index.d.ts.map +1 -1
  582. package/build/src/database/record/index.js +3477 -3897
  583. package/build/src/database/record/instance-relationships/base.js +234 -268
  584. package/build/src/database/record/instance-relationships/belongs-to.js +58 -73
  585. package/build/src/database/record/instance-relationships/has-many.js +225 -264
  586. package/build/src/database/record/instance-relationships/has-one.js +85 -105
  587. package/build/src/database/record/record-not-found-error.js +3 -2
  588. package/build/src/database/record/relationships/base.js +144 -166
  589. package/build/src/database/record/relationships/belongs-to.js +44 -51
  590. package/build/src/database/record/relationships/has-many.js +32 -40
  591. package/build/src/database/record/relationships/has-one.js +32 -40
  592. package/build/src/database/record/state-machine.js +156 -208
  593. package/build/src/database/record/user-module.js +32 -38
  594. package/build/src/database/record/validators/base.js +22 -24
  595. package/build/src/database/record/validators/format.js +36 -46
  596. package/build/src/database/record/validators/presence.js +18 -20
  597. package/build/src/database/record/validators/uniqueness.js +99 -117
  598. package/build/src/database/table-data/index.js +199 -231
  599. package/build/src/database/table-data/table-column.js +338 -382
  600. package/build/src/database/table-data/table-foreign-key.js +57 -66
  601. package/build/src/database/table-data/table-index.js +29 -36
  602. package/build/src/database/table-data/table-reference.js +10 -10
  603. package/build/src/database/use-database.js +32 -40
  604. package/build/src/environment-handlers/base.js +484 -544
  605. package/build/src/environment-handlers/browser.js +241 -294
  606. package/build/src/environment-handlers/node/cli/commands/background-jobs-main.js +16 -19
  607. package/build/src/environment-handlers/node/cli/commands/background-jobs-runner.js +18 -21
  608. package/build/src/environment-handlers/node/cli/commands/background-jobs-worker.js +22 -29
  609. package/build/src/environment-handlers/node/cli/commands/beacon.js +16 -19
  610. package/build/src/environment-handlers/node/cli/commands/cli-command-context.js +14 -15
  611. package/build/src/environment-handlers/node/cli/commands/console.js +99 -120
  612. package/build/src/environment-handlers/node/cli/commands/db/schema/dump.js +34 -39
  613. package/build/src/environment-handlers/node/cli/commands/db/schema/load.js +57 -63
  614. package/build/src/environment-handlers/node/cli/commands/db/seed.js +51 -63
  615. package/build/src/environment-handlers/node/cli/commands/destroy/migration.js +32 -40
  616. package/build/src/environment-handlers/node/cli/commands/generate/base-models.d.ts +4 -2
  617. package/build/src/environment-handlers/node/cli/commands/generate/base-models.d.ts.map +1 -1
  618. package/build/src/environment-handlers/node/cli/commands/generate/base-models.js +326 -358
  619. package/build/src/environment-handlers/node/cli/commands/generate/frontend-models.js +729 -844
  620. package/build/src/environment-handlers/node/cli/commands/generate/migration.js +34 -38
  621. package/build/src/environment-handlers/node/cli/commands/generate/model.js +34 -38
  622. package/build/src/environment-handlers/node/cli/commands/init.js +56 -61
  623. package/build/src/environment-handlers/node/cli/commands/routes.js +51 -59
  624. package/build/src/environment-handlers/node/cli/commands/run-script.js +54 -68
  625. package/build/src/environment-handlers/node/cli/commands/runner.js +56 -74
  626. package/build/src/environment-handlers/node/cli/commands/server.js +93 -106
  627. package/build/src/environment-handlers/node/cli/commands/test.js +97 -113
  628. package/build/src/environment-handlers/node.js +753 -874
  629. package/build/src/error-logger.js +22 -21
  630. package/build/src/frontend-model-controller.js +2791 -3291
  631. package/build/src/frontend-model-resource/base-resource.js +767 -865
  632. package/build/src/frontend-models/base.js +3136 -3593
  633. package/build/src/frontend-models/clear-pending-debounced-callback.js +7 -8
  634. package/build/src/frontend-models/event-hook-models.js +16 -21
  635. package/build/src/frontend-models/model-registry.js +9 -11
  636. package/build/src/frontend-models/outgoing-event-buffer.js +10 -17
  637. package/build/src/frontend-models/preloader.js +131 -149
  638. package/build/src/frontend-models/query.js +1557 -1855
  639. package/build/src/frontend-models/resource-config-validation.js +27 -37
  640. package/build/src/frontend-models/resource-definition.js +234 -288
  641. package/build/src/frontend-models/transport-serialization.js +203 -266
  642. package/build/src/frontend-models/use-created-event.js +5 -7
  643. package/build/src/frontend-models/use-destroyed-event.js +80 -93
  644. package/build/src/frontend-models/use-model-class-event.js +79 -91
  645. package/build/src/frontend-models/use-updated-event.js +84 -97
  646. package/build/src/frontend-models/websocket-channel.js +381 -441
  647. package/build/src/frontend-models/websocket-publishers.js +140 -173
  648. package/build/src/http-client/header.js +13 -14
  649. package/build/src/http-client/index.js +116 -132
  650. package/build/src/http-client/request.js +71 -87
  651. package/build/src/http-client/response.js +122 -140
  652. package/build/src/http-client/websocket-client.js +15 -17
  653. package/build/src/http-server/client/index.js +409 -465
  654. package/build/src/http-server/client/params-to-object.js +124 -135
  655. package/build/src/http-server/client/request-buffer/form-data-part.js +111 -132
  656. package/build/src/http-server/client/request-buffer/header.js +15 -16
  657. package/build/src/http-server/client/request-buffer/index.js +446 -506
  658. package/build/src/http-server/client/request-parser.js +163 -186
  659. package/build/src/http-server/client/request-runner.js +226 -259
  660. package/build/src/http-server/client/request-timing.js +132 -151
  661. package/build/src/http-server/client/request.js +96 -108
  662. package/build/src/http-server/client/response.js +213 -235
  663. package/build/src/http-server/client/uploaded-file/memory-uploaded-file.js +25 -29
  664. package/build/src/http-server/client/uploaded-file/temporary-uploaded-file.js +25 -29
  665. package/build/src/http-server/client/uploaded-file/uploaded-file.js +33 -33
  666. package/build/src/http-server/client/websocket-request.js +114 -137
  667. package/build/src/http-server/client/websocket-session.js +1452 -1657
  668. package/build/src/http-server/cookie.js +216 -236
  669. package/build/src/http-server/development-reloader.js +190 -221
  670. package/build/src/http-server/index.js +451 -525
  671. package/build/src/http-server/remote-address.js +38 -50
  672. package/build/src/http-server/server-client.js +181 -208
  673. package/build/src/http-server/server-lock.js +153 -167
  674. package/build/src/http-server/websocket-channel-subscribers.js +81 -93
  675. package/build/src/http-server/websocket-channel.js +104 -117
  676. package/build/src/http-server/websocket-connection.js +96 -104
  677. package/build/src/http-server/websocket-event-log-store.js +350 -404
  678. package/build/src/http-server/websocket-events-host.js +145 -164
  679. package/build/src/http-server/websocket-events.js +47 -47
  680. package/build/src/http-server/worker-handler/channel-subscriber-dispatch.js +13 -14
  681. package/build/src/http-server/worker-handler/in-process.js +123 -141
  682. package/build/src/http-server/worker-handler/index.js +313 -349
  683. package/build/src/http-server/worker-handler/worker-script.js +4 -5
  684. package/build/src/http-server/worker-handler/worker-thread.js +240 -269
  685. package/build/src/initializer.js +31 -36
  686. package/build/src/jobs/mail-delivery.js +13 -15
  687. package/build/src/logger/base-logger.js +24 -26
  688. package/build/src/logger/console-logger.js +21 -23
  689. package/build/src/logger/file-logger.js +29 -31
  690. package/build/src/logger/outputs/array-output.js +37 -42
  691. package/build/src/logger/outputs/console-output.js +20 -24
  692. package/build/src/logger/outputs/file-output.js +43 -48
  693. package/build/src/logger/outputs/stdout-output.js +39 -48
  694. package/build/src/logger.js +338 -394
  695. package/build/src/mailer/backends/smtp.js +134 -163
  696. package/build/src/mailer/base.js +211 -251
  697. package/build/src/mailer/delivery.js +56 -64
  698. package/build/src/mailer/index.js +4 -22
  699. package/build/src/mailer.js +4 -13
  700. package/build/src/plugins/sqljs-wasm-route-controller.js +42 -52
  701. package/build/src/plugins/sqljs-wasm-route.js +28 -38
  702. package/build/src/record-payload-values.js +25 -28
  703. package/build/src/routes/app-routes.js +12 -14
  704. package/build/src/routes/base-route.js +112 -130
  705. package/build/src/routes/basic-route.js +83 -102
  706. package/build/src/routes/built-in/debug/controller.js +10 -10
  707. package/build/src/routes/built-in/errors/controller.js +5 -5
  708. package/build/src/routes/get-route.js +50 -63
  709. package/build/src/routes/hooks/frontend-model-command-route-hook.js +66 -80
  710. package/build/src/routes/index.js +36 -43
  711. package/build/src/routes/namespace-route.js +38 -47
  712. package/build/src/routes/plugin-routes.js +107 -124
  713. package/build/src/routes/post-route.js +51 -62
  714. package/build/src/routes/resolver.js +422 -494
  715. package/build/src/routes/resource-route.js +124 -143
  716. package/build/src/routes/root-route.js +7 -8
  717. package/build/src/testing/base-expect.js +13 -14
  718. package/build/src/testing/browser-frontend-model-event-hook-scenarios.js +329 -405
  719. package/build/src/testing/browser-test-app.js +23 -29
  720. package/build/src/testing/expect-to-change.js +41 -50
  721. package/build/src/testing/expect-utils.js +139 -184
  722. package/build/src/testing/expect.js +638 -731
  723. package/build/src/testing/request-client.js +70 -85
  724. package/build/src/testing/test-files-finder.js +285 -339
  725. package/build/src/testing/test-filter-parser.js +124 -155
  726. package/build/src/testing/test-runner.js +883 -1020
  727. package/build/src/testing/test-suite-splitter.js +114 -142
  728. package/build/src/testing/test.js +216 -256
  729. package/build/src/utils/backtrace-cleaner-node.js +62 -69
  730. package/build/src/utils/backtrace-cleaner.js +188 -216
  731. package/build/src/utils/ensure-error.js +7 -7
  732. package/build/src/utils/event-emitter.js +4 -6
  733. package/build/src/utils/file-exists.js +9 -10
  734. package/build/src/utils/format-value.js +67 -76
  735. package/build/src/utils/model-scope.js +27 -31
  736. package/build/src/utils/nest-callbacks.js +10 -13
  737. package/build/src/utils/plain-object.js +5 -6
  738. package/build/src/utils/ransack.js +448 -563
  739. package/build/src/utils/rest-args-error.js +5 -6
  740. package/build/src/utils/singularize-model-name.js +9 -11
  741. package/build/src/utils/split-sql-statements.js +68 -79
  742. package/build/src/utils/to-import-specifier.js +24 -30
  743. package/build/src/utils/with-tracked-stack-async-hooks.js +60 -74
  744. package/build/src/utils/with-tracked-stack.js +14 -18
  745. package/build/src/velocious-error.js +27 -30
  746. package/build/templates/configuration.js +61 -0
  747. package/build/templates/generate-migration.js +11 -0
  748. package/build/templates/generate-model.js +6 -0
  749. package/build/templates/routes.js +11 -0
  750. package/build/testing/base-expect.js +17 -0
  751. package/build/testing/browser-frontend-model-event-hook-scenarios.js +520 -0
  752. package/build/testing/browser-test-app.js +32 -0
  753. package/build/testing/expect-to-change.js +55 -0
  754. package/build/testing/expect-utils.js +269 -0
  755. package/build/testing/expect.js +763 -0
  756. package/build/testing/request-client.js +90 -0
  757. package/build/testing/test-files-finder.js +364 -0
  758. package/build/testing/test-filter-parser.js +198 -0
  759. package/build/testing/test-runner.js +1168 -0
  760. package/build/testing/test-suite-splitter.js +177 -0
  761. package/build/testing/test.js +370 -0
  762. package/build/utils/backtrace-cleaner-node.js +87 -0
  763. package/build/utils/backtrace-cleaner.js +266 -0
  764. package/build/utils/ensure-error.js +15 -0
  765. package/build/utils/event-emitter.js +8 -0
  766. package/build/utils/file-exists.js +18 -0
  767. package/build/utils/format-value.js +101 -0
  768. package/build/utils/model-scope.js +56 -0
  769. package/build/utils/nest-callbacks.js +22 -0
  770. package/build/utils/plain-object.js +14 -0
  771. package/build/utils/ransack.js +859 -0
  772. package/build/utils/rest-args-error.js +14 -0
  773. package/build/utils/singularize-model-name.js +18 -0
  774. package/build/utils/split-sql-statements.js +88 -0
  775. package/build/utils/to-import-specifier.js +53 -0
  776. package/build/utils/with-tracked-stack-async-hooks.js +103 -0
  777. package/build/utils/with-tracked-stack.js +38 -0
  778. package/build/velocious-error.js +34 -0
  779. package/package.json +2 -2
  780. package/src/database/record/index.js +130 -6
  781. package/src/environment-handlers/node/cli/commands/generate/base-models.js +50 -21
@@ -0,0 +1,229 @@
1
+ // @ts-check
2
+
3
+ import AppRoutes from "./routes/app-routes.js"
4
+ import Logger from "./logger.js"
5
+ import HttpServer from "./http-server/index.js"
6
+ import HttpServerLock from "./http-server/server-lock.js"
7
+ import websocketEventsHost from "./http-server/websocket-events-host.js"
8
+ import restArgsError from "./utils/rest-args-error.js"
9
+
10
+ /**
11
+ * HttpServerConfiguration type.
12
+ @typedef {import("./configuration-types.js").HttpServerConfiguration} HttpServerConfiguration */
13
+
14
+ export default class VelociousApplication {
15
+ /**
16
+ * Runs constructor.
17
+ * @param {object} args - Options object.
18
+ * @param {import("./configuration.js").default} args.configuration - Configuration instance.
19
+ * @param {HttpServerConfiguration} [args.httpServer] - Http server.
20
+ * @param {string} args.type - Type identifier.
21
+ */
22
+ constructor({configuration, httpServer, type, ...restArgs}) {
23
+ restArgsError(restArgs)
24
+
25
+ if (!configuration) throw new Error("configuration is required")
26
+
27
+ this.configuration = configuration
28
+
29
+ /**
30
+ * Stores the http server configuration value.
31
+ @type {HttpServerConfiguration} */
32
+ this.httpServerConfiguration = httpServer ?? {}
33
+
34
+ this.logger = new Logger(this)
35
+ this._type = type
36
+ /**
37
+ * Stores the http server lock value.
38
+ @type {HttpServerLock | undefined} */
39
+ this.httpServerLock = undefined
40
+ }
41
+
42
+ /**
43
+ * Runs get type.
44
+ * @returns {string} - The type.
45
+ */
46
+ getType() { return this._type }
47
+
48
+ /**
49
+ * Runs initialize.
50
+ * @returns {Promise<void>} - Resolves when complete.
51
+ */
52
+ async initialize() {
53
+ const routes = await AppRoutes.getRoutes(this.configuration)
54
+
55
+ await this.configuration.initialize({type: this.getType()})
56
+
57
+ this.configuration.setRoutes(routes)
58
+
59
+ if (!this.configuration.isDatabasePoolInitialized()) {
60
+ await this.configuration.initializeDatabasePool()
61
+ }
62
+
63
+ }
64
+
65
+ /**
66
+ * Runs is active.
67
+ * @returns {boolean} - Whether active.
68
+ */
69
+ isActive() {
70
+ if (this.httpServer) {
71
+ return this.httpServer?.isActive()
72
+ }
73
+
74
+ return false
75
+ }
76
+
77
+ /**
78
+ * Runs run.
79
+ * @param {function() : void} callback - Callback function.
80
+ * @returns {Promise<void>} - Resolves when complete.
81
+ */
82
+ async run(callback) {
83
+ await this.startHttpServer()
84
+
85
+ try {
86
+ await callback()
87
+ } finally {
88
+ await this.stop()
89
+ }
90
+ }
91
+
92
+ /**
93
+ * Runs start http server.
94
+ * @returns {Promise<void>} - Resolves when complete.
95
+ */
96
+ async startHttpServer() {
97
+ const {configuration} = this
98
+ const httpServerConfiguration = {
99
+ ...configuration.httpServer,
100
+ ...this.httpServerConfiguration
101
+ }
102
+ const port = httpServerConfiguration.port ?? 3006
103
+ const host = httpServerConfiguration.host
104
+
105
+ await this.logger.debug(`Starting server on port ${port}`)
106
+ await this.acquireHttpServerLock({configuration, host: host ?? "0.0.0.0", port})
107
+ await this.startLockedHttpServer({configuration, host, httpServerConfiguration, port})
108
+ }
109
+
110
+ /**
111
+ * Runs start locked http server.
112
+ * @param {object} args - HTTP server startup arguments.
113
+ * @param {import("./configuration.js").default} args.configuration - Configuration instance.
114
+ * @param {string} [args.host] - HTTP server host.
115
+ * @param {Record<string, ?>} args.httpServerConfiguration - Merged HTTP server configuration.
116
+ * @param {number} args.port - HTTP server port.
117
+ * @returns {Promise<void>} - Resolves after the HTTP server has started.
118
+ */
119
+ async startLockedHttpServer({configuration, host, httpServerConfiguration, port}) {
120
+ try {
121
+ if (!configuration.getWebsocketEvents()) {
122
+ configuration.setWebsocketEvents(/**
123
+ * Types the following value.
124
+ @type {?} */ (websocketEventsHost))
125
+ }
126
+
127
+ await configuration.connectBeacon({peerType: "server"})
128
+
129
+ this.httpServer = this.createHttpServer({
130
+ configuration,
131
+ host,
132
+ inProcess: httpServerConfiguration.inProcess,
133
+ maxWorkers: httpServerConfiguration.maxWorkers,
134
+ port,
135
+ workers: httpServerConfiguration.workers
136
+ })
137
+ this.httpServer.events.on("close", this.onHttpServerClose)
138
+ configuration._httpServerInstance = this.httpServer
139
+
140
+ await this.httpServer.start()
141
+ } catch (error) {
142
+ await this.releaseHttpServerLock()
143
+ configuration._httpServerInstance = undefined
144
+
145
+ throw error
146
+ }
147
+ }
148
+
149
+ /**
150
+ * Runs acquire http server lock.
151
+ * @param {object} args - Lock acquisition arguments.
152
+ * @param {import("./configuration.js").default} args.configuration - Configuration instance.
153
+ * @param {string} args.host - HTTP server host.
154
+ * @param {number} args.port - HTTP server port.
155
+ * @returns {Promise<void>} - Resolves after acquiring the server lock when needed.
156
+ */
157
+ async acquireHttpServerLock({configuration, host, port}) {
158
+ if (this.getType() === "test-runner") return
159
+
160
+ const httpServerLock = new HttpServerLock({configuration, host, port})
161
+ await httpServerLock.acquire()
162
+ this.httpServerLock = httpServerLock
163
+ }
164
+
165
+ /**
166
+ * Runs create http server.
167
+ * @param {object} args - HTTP server arguments.
168
+ * @param {import("./configuration.js").default} args.configuration - Configuration instance.
169
+ * @param {string} [args.host] - Host.
170
+ * @param {boolean} [args.inProcess] - Run HTTP handlers in the main thread.
171
+ * @param {number} [args.maxWorkers] - Max workers.
172
+ * @param {number} args.port - Port.
173
+ * @param {number} [args.workers] - Worker count.
174
+ * @returns {HttpServer} - HTTP server instance.
175
+ */
176
+ createHttpServer({configuration, host, inProcess, maxWorkers, port, workers}) {
177
+ return new HttpServer({configuration, host, inProcess, maxWorkers, port, workers})
178
+ }
179
+
180
+ /**
181
+ * Runs stop.
182
+ * @returns {Promise<void>} - Resolves when complete.
183
+ */
184
+ async stop() {
185
+ await this.logger.debug("Stopping server")
186
+
187
+ try {
188
+ await this.httpServer?.stop()
189
+ this.configuration._httpServerInstance = undefined
190
+ await this.configuration.disconnectBeacon()
191
+ await this.configuration.closeDatabaseConnections()
192
+ } finally {
193
+ await this.releaseHttpServerLock()
194
+ }
195
+ }
196
+
197
+ /**
198
+ * Runs release http server lock.
199
+ * @returns {Promise<void>} - Resolves after the HTTP server lock has been released.
200
+ */
201
+ async releaseHttpServerLock() {
202
+ const {httpServerLock} = this
203
+
204
+ this.httpServerLock = undefined
205
+ if (httpServerLock) await httpServerLock.release()
206
+ }
207
+
208
+ /**
209
+ * On http server close.
210
+ * @returns {void} - No return value.
211
+ */
212
+ onHttpServerClose = () => {
213
+ this.logger.debug("HTTP server closed")
214
+
215
+ if (this.waitResolve) {
216
+ this.waitResolve()
217
+ }
218
+ }
219
+
220
+ /**
221
+ * Runs wait.
222
+ * @returns {Promise<void>} - Resolves when complete.
223
+ */
224
+ wait() {
225
+ return new Promise((resolve) => {
226
+ this.waitResolve = resolve
227
+ })
228
+ }
229
+ }
@@ -0,0 +1,329 @@
1
+ // @ts-check
2
+
3
+ /**
4
+ * Defines this typedef.
5
+ * @template {typeof import("../database/record/index.js").default} [MC=typeof import("../database/record/index.js").default]
6
+ * @typedef {Record<string, ?> | string | ((query: import("../database/query/model-class-query.js").default<MC>, args: {ability: VelociousAuthorizationAbility, action: string, modelClass: MC}) => void | import("../database/query/model-class-query.js").default<MC>)} AbilityConditionsType
7
+ */
8
+
9
+ /**
10
+ * AbilityRuleType type.
11
+ * @typedef {object} AbilityRuleType
12
+ * @property {string[]} actions - Actions covered by rule.
13
+ * @property {typeof import("../database/record/index.js").default} modelClass - Model class.
14
+ * @property {AbilityConditionsType | undefined} conditions - Conditions.
15
+ * @property {"allow" | "deny"} effect - Rule effect.
16
+ */
17
+
18
+ /** CanCan-style ability object for query-level access control. */
19
+ export default class VelociousAuthorizationAbility {
20
+ /**
21
+ * Create.
22
+ @type {string[]} */
23
+ static CREATE = ["create"]
24
+
25
+ /**
26
+ * Read.
27
+ @type {string[]} */
28
+ static READ = ["read"]
29
+
30
+ /**
31
+ * Update.
32
+ @type {string[]} */
33
+ static UPDATE = ["update"]
34
+
35
+ /**
36
+ * Destroy.
37
+ @type {string[]} */
38
+ static DESTROY = ["destroy"]
39
+
40
+ /**
41
+ * Crud.
42
+ @type {string[]} */
43
+ static CRUD = ["create", "read", "update", "destroy"]
44
+
45
+ /**
46
+ * Runs constructor.
47
+ * @param {object} args - Ability args.
48
+ * @param {Record<string, ?>} [args.context] - Ability context.
49
+ * @param {Record<string, ?>} [args.locals] - Ability locals.
50
+ * @param {Array<typeof import("./base-resource.js").default>} [args.resources] - Resource classes.
51
+ */
52
+ constructor({context = {}, locals = {}, resources} = {}) {
53
+ this.context = context
54
+ this.locals = locals
55
+ this.resources = resources || this._resolveResourcesFromConfiguration()
56
+
57
+ /**
58
+ * Narrows the runtime value to the documented type.
59
+ @type {AbilityRuleType[]} */
60
+ this.rules = []
61
+
62
+ /**
63
+ * Narrows the runtime value to the documented type.
64
+ @type {Record<string, boolean>} */
65
+ this.loadedModelClassAbilities = {}
66
+ }
67
+
68
+ /**
69
+ * Auto-resolves resource classes from the configuration's backendProjects when no explicit resources are provided.
70
+ * @returns {Array<typeof import("./base-resource.js").default>} Resolved resource classes.
71
+ */
72
+ _resolveResourcesFromConfiguration() {
73
+ const configuration = this.context?.configuration
74
+
75
+ if (!configuration || typeof configuration.getBackendProjects !== "function") {
76
+ return []
77
+ }
78
+
79
+ /**
80
+ * Resolved.
81
+ @type {Array<typeof import("./base-resource.js").default>} */
82
+ const resolved = []
83
+ const backendProjects = configuration.getBackendProjects()
84
+
85
+ for (const backendProject of backendProjects) {
86
+ const frontendModels = backendProject.frontendModels
87
+
88
+ if (!frontendModels || typeof frontendModels !== "object") continue
89
+
90
+ for (const resourceDefinition of Object.values(frontendModels)) {
91
+ if (typeof resourceDefinition === "function" && typeof resourceDefinition.modelClass === "function") {
92
+ resolved.push(resourceDefinition)
93
+ }
94
+ }
95
+ }
96
+
97
+ return resolved
98
+ }
99
+
100
+ /**
101
+ * Runs get context.
102
+ * @returns {Record<string, ?>} - Context.
103
+ */
104
+ getContext() {
105
+ return this.context
106
+ }
107
+
108
+ /**
109
+ * Runs get locals.
110
+ * @returns {Record<string, ?>} - Locals.
111
+ */
112
+ getLocals() {
113
+ return this.locals
114
+ }
115
+
116
+ /**
117
+ * Runs current user.
118
+ * @returns {?} - Current user from context.
119
+ */
120
+ currentUser() {
121
+ return this.context.currentUser
122
+ }
123
+
124
+ /**
125
+ * Runs can.
126
+ * @param {string | string[]} actions - Action(s).
127
+ * @param {typeof import("../database/record/index.js").default} modelClass - Model class.
128
+ * @param {AbilityConditionsType} [conditions] - Conditions.
129
+ * @returns {void} - No return value.
130
+ */
131
+ can(actions, modelClass, conditions) {
132
+ this.addRule({actions, conditions, effect: "allow", modelClass})
133
+ }
134
+
135
+ /**
136
+ * Runs cannot.
137
+ * @param {string | string[]} actions - Action(s).
138
+ * @param {typeof import("../database/record/index.js").default} modelClass - Model class.
139
+ * @param {AbilityConditionsType} [conditions] - Conditions.
140
+ * @returns {void} - No return value.
141
+ */
142
+ cannot(actions, modelClass, conditions) {
143
+ this.addRule({actions, conditions, effect: "deny", modelClass})
144
+ }
145
+
146
+ /**
147
+ * Runs add rule.
148
+ * @param {object} args - Rule args.
149
+ * @param {string | string[]} args.actions - Action(s).
150
+ * @param {AbilityConditionsType} [args.conditions] - Conditions.
151
+ * @param {"allow" | "deny"} args.effect - Effect.
152
+ * @param {typeof import("../database/record/index.js").default} args.modelClass - Model class.
153
+ * @returns {void} - No return value.
154
+ */
155
+ addRule({actions, conditions, effect, modelClass}) {
156
+ const normalizedActions = Array.isArray(actions) ? actions : [actions]
157
+
158
+ this.rules.push({actions: normalizedActions, conditions, effect, modelClass})
159
+ }
160
+
161
+ /**
162
+ * Runs load abilities for model class.
163
+ * @param {typeof import("../database/record/index.js").default} modelClass - Model class.
164
+ * @returns {void} - No return value.
165
+ */
166
+ loadAbilitiesForModelClass(modelClass) {
167
+ const key = modelClass.getModelName()
168
+
169
+ if (this.loadedModelClassAbilities[key]) return
170
+
171
+ this.loadedModelClassAbilities[key] = true
172
+
173
+ for (const ResourceClass of this.resources) {
174
+ const resourceModelClass = ResourceClass.modelClass()
175
+
176
+ if (!resourceModelClass) continue
177
+ if (resourceModelClass !== modelClass) continue
178
+
179
+ const resourceInstance = new ResourceClass({
180
+ ability: this,
181
+ context: this.context,
182
+ locals: this.locals
183
+ })
184
+
185
+ resourceInstance.abilities()
186
+ }
187
+ }
188
+
189
+ /**
190
+ * Runs apply to query.
191
+ * @param {object} args - Query args.
192
+ * @param {string} args.action - Requested action.
193
+ * @param {typeof import("../database/record/index.js").default} args.modelClass - Model class.
194
+ * @param {import("../database/query/model-class-query.js").default<typeof import("../database/record/index.js").default>} args.query - Query.
195
+ * @returns {import("../database/query/model-class-query.js").default<typeof import("../database/record/index.js").default>} - Authorized query.
196
+ */
197
+ applyToQuery({action, modelClass, query}) {
198
+ this.loadAbilitiesForModelClass(modelClass)
199
+
200
+ const applicableRules = this.rulesFor({action, modelClass})
201
+ const allowRules = applicableRules.filter((rule) => rule.effect === "allow")
202
+ const denyRules = applicableRules.filter((rule) => rule.effect === "deny")
203
+
204
+ if (allowRules.length === 0) {
205
+ return query.where("1=0")
206
+ }
207
+
208
+ if (allowRules.some((rule) => !rule.conditions)) {
209
+ this.applyDenyRules({action, denyRules, modelClass, query})
210
+ return query
211
+ }
212
+
213
+ const allowSqlParts = this.conditionSqlParts({action, modelClass, query, rules: allowRules})
214
+
215
+ if (allowSqlParts.length === 0) {
216
+ return query.where("1=0")
217
+ }
218
+
219
+ query.where(`(${allowSqlParts.join(" OR ")})`)
220
+ this.applyDenyRules({action, denyRules, modelClass, query})
221
+
222
+ return query
223
+ }
224
+
225
+ /**
226
+ * Runs rules for.
227
+ * @param {object} args - Rule lookup args.
228
+ * @param {string} args.action - Action.
229
+ * @param {typeof import("../database/record/index.js").default} args.modelClass - Model class.
230
+ * @returns {AbilityRuleType[]} - Matching rules.
231
+ */
232
+ rulesFor({action, modelClass}) {
233
+ return this.rules.filter((rule) => {
234
+ if (rule.modelClass !== modelClass) return false
235
+
236
+ return rule.actions.includes(action) || rule.actions.includes("manage")
237
+ })
238
+ }
239
+
240
+ /**
241
+ * Runs condition sql parts.
242
+ * @param {object} args - SQL args.
243
+ * @param {string} args.action - Action.
244
+ * @param {typeof import("../database/record/index.js").default} args.modelClass - Model class.
245
+ * @param {import("../database/query/model-class-query.js").default<typeof import("../database/record/index.js").default>} args.query - Base query.
246
+ * @param {AbilityRuleType[]} args.rules - Rules.
247
+ * @returns {string[]} - SQL condition parts.
248
+ */
249
+ conditionSqlParts({action, modelClass, query, rules}) {
250
+ const pk = modelClass.primaryKey()
251
+ const quotedBaseTable = query.driver.quoteTable(modelClass.tableName())
252
+ const quotedPk = query.driver.quoteColumn(pk)
253
+ const sqlParts = []
254
+
255
+ for (const rule of rules) {
256
+ if (!rule.conditions) continue
257
+
258
+ const scopedQuery = modelClass._newQuery()
259
+ const resultQuery = this.applyRuleCondition({
260
+ action,
261
+ conditions: rule.conditions,
262
+ modelClass,
263
+ query: scopedQuery
264
+ })
265
+ const finalQuery = resultQuery || scopedQuery
266
+ const selectedPkSql = `${quotedBaseTable}.${quotedPk}`
267
+
268
+ if (finalQuery._distinct) {
269
+ query.distinct(true)
270
+ }
271
+
272
+ finalQuery.select(selectedPkSql)
273
+
274
+ sqlParts.push(`${quotedBaseTable}.${quotedPk} IN (${finalQuery.toSql()})`)
275
+ }
276
+
277
+ return sqlParts
278
+ }
279
+
280
+ /**
281
+ * Runs apply deny rules.
282
+ * @param {object} args - Deny args.
283
+ * @param {string} args.action - Action.
284
+ * @param {AbilityRuleType[]} args.denyRules - Deny rules.
285
+ * @param {typeof import("../database/record/index.js").default} args.modelClass - Model class.
286
+ * @param {import("../database/query/model-class-query.js").default<typeof import("../database/record/index.js").default>} args.query - Query.
287
+ * @returns {void} - No return value.
288
+ */
289
+ applyDenyRules({action, denyRules, modelClass, query}) {
290
+ if (denyRules.length === 0) return
291
+
292
+ if (denyRules.some((rule) => !rule.conditions)) {
293
+ query.where("1=0")
294
+ return
295
+ }
296
+
297
+ const denySqlParts = this.conditionSqlParts({action, modelClass, query, rules: denyRules})
298
+
299
+ if (denySqlParts.length > 0) {
300
+ query.where(`NOT (${denySqlParts.join(" OR ")})`)
301
+ }
302
+ }
303
+
304
+ /**
305
+ * Runs apply rule condition.
306
+ * @param {object} args - Condition args.
307
+ * @param {string} args.action - Action.
308
+ * @param {AbilityConditionsType} args.conditions - Rule conditions.
309
+ * @param {typeof import("../database/record/index.js").default} args.modelClass - Model class.
310
+ * @param {import("../database/query/model-class-query.js").default<typeof import("../database/record/index.js").default>} args.query - Query.
311
+ * @returns {void | import("../database/query/model-class-query.js").default<typeof import("../database/record/index.js").default>} - Optional replacement query.
312
+ */
313
+ applyRuleCondition({action, conditions, modelClass, query}) {
314
+ if (typeof conditions === "string") {
315
+ query.where(conditions)
316
+ return
317
+ }
318
+
319
+ if (typeof conditions === "function") {
320
+ return conditions(query, {
321
+ ability: this,
322
+ action,
323
+ modelClass
324
+ })
325
+ }
326
+
327
+ query.where(conditions)
328
+ }
329
+ }
@@ -0,0 +1,143 @@
1
+ // @ts-check
2
+
3
+ /** Base class for authorization resources defining abilities for a model. */
4
+ export default class AuthorizationBaseResource {
5
+ /**
6
+ * Model class.
7
+ @type {typeof import("../database/record/index.js").default | undefined} */
8
+ static ModelClass = undefined
9
+
10
+ /**
11
+ * Runs constructor.
12
+ * @param {object} args - Resource args.
13
+ * @param {import("./ability.js").default} [args.ability] - Ability instance.
14
+ * @param {import("../configuration-types.js").VelociousLooseObject} [args.context] - Ability context.
15
+ * @param {import("../configuration-types.js").VelociousLooseObject} [args.locals] - Ability locals.
16
+ */
17
+ constructor({ability, context = {}, locals = {}}) {
18
+ this.ability = ability
19
+ this.context = context
20
+ this.locals = locals
21
+ }
22
+
23
+ /**
24
+ * Runs model class.
25
+ * @returns {typeof import("../database/record/index.js").default | undefined} - Model class handled by this resource.
26
+ */
27
+ static modelClass() {
28
+ return this.ModelClass
29
+ }
30
+
31
+ /**
32
+ * Runs can.
33
+ * @template {typeof import("../database/record/index.js").default} MC
34
+ * @param {string | string[]} actions - Ability action(s).
35
+ * @param {import("./ability.js").AbilityConditionsType<MC>} [conditions] - Conditions.
36
+ * @returns {void} - No return value.
37
+ */
38
+ can(actions, conditions) {
39
+ this.assertResourceConditionsSignature({conditions, methodName: "can"})
40
+ this.requiredAbility().can(actions, this.requiredModelClass(), /** Narrows conditions to the runtime resource model class. @type {import("./ability.js").AbilityConditionsType<typeof import("../database/record/index.js").default> | undefined} */ (conditions))
41
+ }
42
+
43
+ /**
44
+ * Runs cannot.
45
+ * @template {typeof import("../database/record/index.js").default} MC
46
+ * @param {string | string[]} actions - Ability action(s).
47
+ * @param {import("./ability.js").AbilityConditionsType<MC>} [conditions] - Conditions.
48
+ * @returns {void} - No return value.
49
+ */
50
+ cannot(actions, conditions) {
51
+ this.assertResourceConditionsSignature({conditions, methodName: "cannot"})
52
+ this.requiredAbility().cannot(actions, this.requiredModelClass(), /** Narrows conditions to the runtime resource model class. @type {import("./ability.js").AbilityConditionsType<typeof import("../database/record/index.js").default> | undefined} */ (conditions))
53
+ }
54
+
55
+ /**
56
+ * Runs required ability.
57
+ * @returns {import("./ability.js").default} - Ability instance.
58
+ */
59
+ requiredAbility() {
60
+ if (!this.ability) {
61
+ throw new Error(`${this.constructor.name} requires an ability instance before defining abilities.`)
62
+ }
63
+
64
+ return this.ability
65
+ }
66
+
67
+ /**
68
+ * Runs required model class.
69
+ * @returns {typeof import("../database/record/index.js").default} - Model class handled by this resource.
70
+ */
71
+ requiredModelClass() {
72
+ const modelClass = /**
73
+ * Narrows the runtime value to the documented type.
74
+ @type {typeof AuthorizationBaseResource} */ (this.constructor).modelClass()
75
+
76
+ if (!modelClass) {
77
+ throw new Error(`${this.constructor.name} must define static ModelClass before calling ability helpers.`)
78
+ }
79
+
80
+ return modelClass
81
+ }
82
+
83
+ /**
84
+ * Runs assert resource conditions signature.
85
+ * @param {object} args - Signature args.
86
+ * @param {?} args.conditions - Conditions value.
87
+ * @param {"can" | "cannot"} args.methodName - Method name.
88
+ * @returns {void}
89
+ */
90
+ assertResourceConditionsSignature({conditions, methodName}) {
91
+ if (typeof conditions === "function" && "primaryKey" in conditions && "_newQuery" in conditions) {
92
+ throw new Error(`${this.constructor.name}.${methodName}(...) no longer accepts a model class. Define static ModelClass and pass only conditions.`)
93
+ }
94
+ }
95
+
96
+ /**
97
+ * Runs get context.
98
+ * @returns {import("../configuration-types.js").VelociousLooseObject} - Ability context.
99
+ */
100
+ getContext() {
101
+ return this.context
102
+ }
103
+
104
+ /**
105
+ * Runs get locals.
106
+ * @returns {import("../configuration-types.js").VelociousLooseObject} - Ability locals.
107
+ */
108
+ getLocals() {
109
+ return this.locals
110
+ }
111
+
112
+ /**
113
+ * Runs current user.
114
+ * @returns {import("../configuration-types.js").VelociousLooseObject | null | undefined} - Current user from context.
115
+ */
116
+ currentUser() {
117
+ return this.context.currentUser
118
+ }
119
+
120
+ /**
121
+ * Runs request.
122
+ * @returns {import("../http-server/client/request.js").default | import("../http-server/client/websocket-request.js").default | undefined} - Request from context.
123
+ */
124
+ request() {
125
+ return this.context.request
126
+ }
127
+
128
+ /**
129
+ * Runs params.
130
+ * @returns {import("../configuration-types.js").VelociousLooseObject | undefined} - Params from context.
131
+ */
132
+ params() {
133
+ return this.context.params
134
+ }
135
+
136
+ /**
137
+ * Runs abilities.
138
+ * @returns {void} - Implement in subclasses to define abilities.
139
+ */
140
+ abilities() {
141
+ // No-op by default.
142
+ }
143
+ }