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,337 @@
1
+ // @ts-check
2
+
3
+ import ejs from "ejs"
4
+ import {incorporate} from "incorporator"
5
+ import * as inflection from "inflection"
6
+ import configurationResolver from "../configuration-resolver.js"
7
+ import restArgsError from "../utils/rest-args-error.js"
8
+ import MailerDelivery from "./delivery.js"
9
+
10
+ /**
11
+ * Deliveries store.
12
+ @type {import("./index.js").MailerDeliveryPayload[]} */
13
+ const deliveriesStore = []
14
+ /**
15
+ * Delivery handler.
16
+ @type {((payload: import("./index.js").MailerDeliveryPayload) => Promise<?> | ?) | null} */
17
+ let deliveryHandler = null
18
+
19
+ /**
20
+ * Runs view file name.
21
+ * @param {string} actionName - Mailer action name.
22
+ * @returns {string} - View file name.
23
+ */
24
+ function viewFileName(actionName) {
25
+ return inflection.dasherize(inflection.underscore(actionName))
26
+ }
27
+
28
+ /**
29
+ * Runs mailer directory name.
30
+ * @param {string} className - Mailer class name.
31
+ * @returns {string} - Mailer directory name.
32
+ */
33
+ function mailerDirectoryName(className) {
34
+ const baseName = className.replace(/Mailer$/, "")
35
+
36
+ return inflection.dasherize(inflection.underscore(baseName))
37
+ }
38
+
39
+ /**
40
+ * Runs the inferActionName helper.
41
+ * @param {typeof VelociousMailerBase} mailerClass - Mailer class.
42
+ * @param {string} stack - Error stack.
43
+ * @returns {string | null} - Inferred action name.
44
+ */
45
+ // fallow-ignore-next-line complexity
46
+ function inferActionName(mailerClass, stack) {
47
+ const prototype = mailerClass.prototype
48
+ let actionName = null
49
+
50
+ for (const line of stack.split("\n")) {
51
+ const match = line.match(/\bat (?:async )?(?:new )?[^\s.]+\.([^\s.]+) /)
52
+
53
+ if (!match) continue
54
+
55
+ const frameActionName = match[1]
56
+
57
+ if (frameActionName === "mail") continue
58
+ if (frameActionName.startsWith("_")) continue
59
+ if (frameActionName === "constructor") continue
60
+ if (Object.prototype.hasOwnProperty.call(VelociousMailerBase.prototype, frameActionName)) continue
61
+ if (typeof /**
62
+ * Narrows the runtime value to the documented type.
63
+ @type {Record<string, ?>} */ (/**
64
+ * Narrows the runtime value to the documented type.
65
+ @type {?} */ (prototype))[frameActionName] !== "function") continue
66
+
67
+ actionName = frameActionName
68
+ }
69
+
70
+ return actionName
71
+ }
72
+
73
+ /**
74
+ * Runs is testing environment.
75
+ * @returns {Promise<boolean>} - Whether the current environment is test.
76
+ */
77
+ async function isTestingEnvironment() {
78
+ const configuration = await configurationResolver()
79
+
80
+ return configuration.getEnvironment() === "test"
81
+ }
82
+
83
+ /**
84
+ * Base mailer with view rendering and delivery helpers.
85
+ */
86
+ export class VelociousMailerBase {
87
+ /**
88
+ * Runs constructor.
89
+ * @param {object} [args] - Constructor args.
90
+ * @param {import("../configuration.js").default} [args.configuration] - Configuration instance.
91
+ */
92
+ constructor({configuration} = {}) {
93
+ this._actionName = null
94
+ this._mailOptions = null
95
+ this._viewParams = {}
96
+ this._configurationPromise = configuration ? Promise.resolve(configuration) : configurationResolver()
97
+ }
98
+
99
+ /**
100
+ * Runs assign view.
101
+ * @param {Record<string, ?>} params - View params.
102
+ * @returns {void} - No return value.
103
+ */
104
+ assignView(params) {
105
+ this._viewParams = Object.assign(this._viewParams, params || {})
106
+ }
107
+
108
+ /**
109
+ * Runs mail.
110
+ * @param {object} args - Mail options.
111
+ * @param {?} args.to - Recipient.
112
+ * @param {string} args.subject - Subject line.
113
+ * @param {?} [args.from] - Sender.
114
+ * @param {?} [args.cc] - CC recipients.
115
+ * @param {?} [args.bcc] - BCC recipients.
116
+ * @param {?} [args.replyTo] - Reply-to address.
117
+ * @param {Record<string, string>} [args.headers] - Custom headers.
118
+ * @param {string} [args.actionName] - Mailer action name.
119
+ * @param {Promise<?> | ?} [args.actionPromise] - Action completion promise.
120
+ * @returns {MailerDelivery} - Delivery wrapper.
121
+ */
122
+ mail({to, subject, from, cc, bcc, replyTo, headers, actionName, actionPromise, ...restArgs}) {
123
+ restArgsError(restArgs)
124
+
125
+ const resolvedActionName = actionName || inferActionName(/**
126
+ * Narrows the runtime value to the documented type.
127
+ @type {typeof VelociousMailerBase} */ (this.constructor), new Error().stack || "")
128
+
129
+ if (!resolvedActionName) {
130
+ throw new Error(`Missing actionName for ${this.constructor.name}.mail()`)
131
+ }
132
+
133
+ this._actionName = resolvedActionName
134
+ this._mailOptions = {to, subject, from, cc, bcc, replyTo, headers}
135
+ const resolvedActionPromise = actionPromise === undefined ? Promise.resolve() : Promise.resolve(actionPromise)
136
+
137
+ return new MailerDelivery({
138
+ mailer: this,
139
+ actionPromise: resolvedActionPromise,
140
+ actionName: resolvedActionName
141
+ })
142
+ }
143
+
144
+ /**
145
+ * Runs get configuration.
146
+ * @returns {Promise<import("../configuration.js").default>} - Configuration instance.
147
+ */
148
+ async _getConfiguration() {
149
+ return await this._configurationPromise
150
+ }
151
+
152
+ /**
153
+ * Runs get action name.
154
+ * @returns {string} - Action name.
155
+ */
156
+ _getActionName() {
157
+ if (!this._actionName) {
158
+ throw new Error(`No mailer action set on ${this.constructor.name}`)
159
+ }
160
+
161
+ return this._actionName
162
+ }
163
+
164
+ /**
165
+ * Runs build payload sync.
166
+ * @param {string} html - Rendered HTML.
167
+ * @returns {import("./index.js").MailerDeliveryPayload} - Delivery payload.
168
+ */
169
+ _buildPayloadSync(html) {
170
+ const mailOptions = this._mailOptions
171
+
172
+ if (!mailOptions) {
173
+ throw new Error(`Missing mail() options for ${this.constructor.name}#${this._getActionName()}. Got: ${String(mailOptions)}`)
174
+ }
175
+
176
+ if (!mailOptions.to) {
177
+ throw new Error(`Missing "to" for ${this.constructor.name}#${this._getActionName()}. Got: ${String(mailOptions.to)}`)
178
+ }
179
+
180
+ if (!mailOptions.subject) {
181
+ throw new Error(`Missing "subject" for ${this.constructor.name}#${this._getActionName()}. Got: ${String(mailOptions.subject)}`)
182
+ }
183
+
184
+ return {
185
+ to: mailOptions.to,
186
+ subject: mailOptions.subject,
187
+ from: mailOptions.from,
188
+ cc: mailOptions.cc,
189
+ bcc: mailOptions.bcc,
190
+ replyTo: mailOptions.replyTo,
191
+ headers: mailOptions.headers,
192
+ html,
193
+ mailer: this.constructor.name,
194
+ action: this._getActionName()
195
+ }
196
+ }
197
+
198
+ /**
199
+ * Runs build payload.
200
+ * @returns {Promise<import("./index.js").MailerDeliveryPayload>} - Delivery payload.
201
+ */
202
+ async _buildPayload() {
203
+ const html = await this._renderView()
204
+
205
+ return this._buildPayloadSync(html)
206
+ }
207
+
208
+ /**
209
+ * Runs render view.
210
+ * @returns {Promise<string>} - Rendered HTML.
211
+ */
212
+ async _renderView() {
213
+ const configuration = await this._getConfiguration()
214
+ const mailerDir = mailerDirectoryName(this.constructor.name)
215
+ const actionName = this._getActionName()
216
+ const fileName = viewFileName(actionName)
217
+ const viewPath = `${configuration.getDirectory()}/src/mailers/${mailerDir}/${fileName}.ejs`
218
+ const translate = (/**
219
+ * Narrows the runtime value to the documented type.
220
+ @type {string} */ msgID, /**
221
+ * Narrows the runtime value to the documented type.
222
+ @type {Record<string, ?> | undefined} */ args) => configuration.getTranslator()(msgID, args)
223
+ const viewParams = incorporate({mailer: this, _: translate}, this._viewParams)
224
+
225
+ return await new Promise((resolve, reject) => {
226
+ ejs.renderFile(viewPath, viewParams, {}, (err, str) => {
227
+ if (err) {
228
+ const errorCode = /**
229
+ * Narrows the runtime value to the documented type.
230
+ @type {{code?: string}} */ (err).code
231
+
232
+ if (errorCode === "ENOENT") {
233
+ reject(new Error(`Missing mailer view file: ${viewPath}`))
234
+ } else {
235
+ reject(err)
236
+ }
237
+ } else {
238
+ resolve(str)
239
+ }
240
+ })
241
+ })
242
+ }
243
+
244
+ /**
245
+ * Runs deliver payload.
246
+ * @param {import("./index.js").MailerDeliveryPayload} payload - Mail delivery payload.
247
+ * @returns {Promise<import("./index.js").MailerDeliveryPayload | ?>} - Handler result.
248
+ */
249
+ async _deliverPayload(payload) {
250
+ return await deliverPayload(payload)
251
+ }
252
+
253
+ /**
254
+ * Runs enqueue payload.
255
+ * @param {import("./index.js").MailerDeliveryPayload} payload - Mail delivery payload.
256
+ * @returns {Promise<string | import("./index.js").MailerDeliveryPayload | null>} - Job id or payload in test mode.
257
+ */
258
+ async _enqueuePayload(payload) {
259
+ return await enqueuePayload(payload)
260
+ }
261
+ }
262
+
263
+ /**
264
+ * Runs the deliveries helper.
265
+ * @returns {import("./index.js").MailerDeliveryPayload[]} - Delivered payloads.
266
+ */
267
+ export function deliveries() {
268
+ return deliveriesStore.slice()
269
+ }
270
+
271
+ /**
272
+ * Runs the clearDeliveries helper.
273
+ * @returns {void} - No return value.
274
+ */
275
+ export function clearDeliveries() {
276
+ deliveriesStore.length = 0
277
+ }
278
+
279
+ /**
280
+ * Runs the setDeliveryHandler helper.
281
+ * @param {(payload: import("./index.js").MailerDeliveryPayload) => Promise<?> | ?} handler - Delivery handler.
282
+ * @returns {void} - No return value.
283
+ */
284
+ export function setDeliveryHandler(handler) {
285
+ deliveryHandler = handler
286
+ }
287
+
288
+ /**
289
+ * Runs the getDeliveryHandler helper.
290
+ * @returns {((payload: import("./index.js").MailerDeliveryPayload) => Promise<?> | ?) | null} - Handler or null.
291
+ */
292
+ export function getDeliveryHandler() {
293
+ return deliveryHandler
294
+ }
295
+
296
+ /**
297
+ * Runs the deliverPayload helper.
298
+ * @param {import("./index.js").MailerDeliveryPayload} payload - Mail delivery payload.
299
+ * @returns {Promise<import("./index.js").MailerDeliveryPayload | ?>} - Handler result.
300
+ */
301
+ export async function deliverPayload(payload) {
302
+ if (await isTestingEnvironment()) {
303
+ deliveriesStore.push(payload)
304
+ return payload
305
+ }
306
+
307
+ const configuration = await configurationResolver()
308
+ const backend = configuration.getMailerBackend()
309
+
310
+ if (backend?.deliver) {
311
+ return await backend.deliver({payload, configuration})
312
+ }
313
+
314
+ const handler = deliveryHandler
315
+
316
+ if (!handler) {
317
+ throw new Error(`No mail delivery handler configured for "${payload.subject}" to "${payload.to}"`)
318
+ }
319
+
320
+ return await handler(payload)
321
+ }
322
+
323
+ /**
324
+ * Runs the enqueuePayload helper.
325
+ * @param {import("./index.js").MailerDeliveryPayload} payload - Mail delivery payload.
326
+ * @returns {Promise<string | import("./index.js").MailerDeliveryPayload | null>} - Job id or payload in test mode.
327
+ */
328
+ export async function enqueuePayload(payload) {
329
+ if (await isTestingEnvironment()) {
330
+ deliveriesStore.push(payload)
331
+ return payload
332
+ }
333
+
334
+ const {default: mailDeliveryJob} = await import("../jobs/mail-delivery.js")
335
+
336
+ return await mailDeliveryJob.performLater(payload)
337
+ }
@@ -0,0 +1,70 @@
1
+ // @ts-check
2
+
3
+ /**
4
+ * Represents a prepared mail delivery.
5
+ */
6
+ export default class MailerDelivery {
7
+ /**
8
+ * Narrows the runtime value to the documented type.
9
+ @type {import("./base.js").VelociousMailerBase} */
10
+ mailer
11
+ /**
12
+ * Narrows the runtime value to the documented type.
13
+ @type {Promise<?>} */
14
+ actionPromise
15
+ /**
16
+ * Narrows the runtime value to the documented type.
17
+ @type {string} */
18
+ actionName
19
+
20
+ /**
21
+ * Runs constructor.
22
+ * @param {object} args - Constructor args.
23
+ * @param {import("./base.js").VelociousMailerBase} args.mailer - Mailer instance.
24
+ * @param {Promise<?>} args.actionPromise - Action promise.
25
+ * @param {string} args.actionName - Action name.
26
+ */
27
+ constructor({mailer, actionPromise, actionName}) {
28
+ this.mailer = mailer
29
+ this.actionPromise = actionPromise
30
+ this.actionName = actionName
31
+ }
32
+
33
+ /**
34
+ * Runs build payload.
35
+ * @returns {Promise<import("./index.js").MailerDeliveryPayload>} - Rendered mailer payload.
36
+ */
37
+ async buildPayload() {
38
+ await this.actionPromise
39
+
40
+ return /** Narrows the runtime value to the documented type. @type {import("./index.js").MailerDeliveryPayload} */ (await this.mailer._buildPayload())
41
+ }
42
+
43
+ /**
44
+ * Runs deliver now.
45
+ * @returns {Promise<import("./index.js").MailerDeliveryPayload | ?>} - Delivered payload or handler result.
46
+ */
47
+ async deliverNow() {
48
+ const payload = await this.buildPayload()
49
+
50
+ return await this.mailer._deliverPayload(payload)
51
+ }
52
+
53
+ /**
54
+ * Runs deliver later.
55
+ * @returns {Promise<string | import("./index.js").MailerDeliveryPayload | null>} - Job id or payload in test mode.
56
+ */
57
+ async deliverLater() {
58
+ const payload = await this.buildPayload()
59
+
60
+ return await this.mailer._enqueuePayload(payload)
61
+ }
62
+
63
+ /**
64
+ * Runs deliver laver.
65
+ * @returns {Promise<string | import("./index.js").MailerDeliveryPayload | null>} - Job id or payload in test mode.
66
+ */
67
+ async deliverLaver() {
68
+ return await this.deliverLater()
69
+ }
70
+ }
@@ -0,0 +1,24 @@
1
+ // @ts-check
2
+
3
+ /** @typedef {{to: ?, subject: string, from?: ?, cc?: ?, bcc?: ?, replyTo?: ?, headers?: Record<string, string>, html: string, mailer: string, action: string}} MailerDeliveryPayload */
4
+
5
+ import {
6
+ clearDeliveries,
7
+ deliverPayload,
8
+ deliveries,
9
+ enqueuePayload,
10
+ getDeliveryHandler,
11
+ setDeliveryHandler,
12
+ VelociousMailerBase
13
+ } from "./base.js"
14
+
15
+ export {
16
+ VelociousMailerBase,
17
+ clearDeliveries,
18
+ deliverPayload,
19
+ deliveries,
20
+ enqueuePayload,
21
+ getDeliveryHandler,
22
+ setDeliveryHandler
23
+ }
24
+ export default VelociousMailerBase
@@ -0,0 +1,15 @@
1
+ // @ts-check
2
+
3
+ /** @typedef {{to: ?, subject: string, from?: ?, cc?: ?, bcc?: ?, replyTo?: ?, headers?: Record<string, string>, html: string, mailer: string, action: string}} MailerDeliveryPayload */
4
+
5
+ export {
6
+ VelociousMailerBase,
7
+ clearDeliveries,
8
+ deliverPayload,
9
+ deliveries,
10
+ enqueuePayload,
11
+ getDeliveryHandler,
12
+ setDeliveryHandler
13
+ } from "./mailer/index.js"
14
+ export {default as SmtpMailerBackend} from "./mailer/backends/smtp.js"
15
+ export {default} from "./mailer/index.js"
@@ -0,0 +1,70 @@
1
+ import fs from "node:fs/promises"
2
+ import path from "node:path"
3
+
4
+ import Controller from "../controller.js"
5
+
6
+ /**
7
+ * Runs valid asset file name.
8
+ * @param {?} assetFileName - Asset file name.
9
+ * @returns {boolean} - Whether asset file name is safe.
10
+ */
11
+ function validAssetFileName(assetFileName) {
12
+ return typeof assetFileName === "string"
13
+ && assetFileName.length > 0
14
+ && !assetFileName.includes("/")
15
+ && !assetFileName.includes("\\")
16
+ && !assetFileName.includes("..")
17
+ }
18
+
19
+ /**
20
+ * Runs normalize sql js asset file name.
21
+ * @param {string} assetFileName - Requested sql.js asset file name.
22
+ * @returns {string} - Normalized sql.js asset file name.
23
+ */
24
+ function normalizeSqlJsAssetFileName(assetFileName) {
25
+ if (assetFileName === "sql-wasm-browser.wasm") {
26
+ return "sql-wasm.wasm"
27
+ }
28
+
29
+ return assetFileName
30
+ }
31
+
32
+ /** Serves sql.js assets from the backend for sqlite-web locateFile callbacks. */
33
+ export default class SqlJsWasmRouteController extends Controller {
34
+ /**
35
+ * Runs show.
36
+ * @returns {Promise<void>} - Resolves when complete.
37
+ */
38
+ async show() {
39
+ const {sqlJsAssetFileName, sqlJsDistDirectory} = this.params()
40
+
41
+ if (!validAssetFileName(sqlJsAssetFileName)) {
42
+ throw new Error(`Invalid sql.js asset file name: ${String(sqlJsAssetFileName)}`)
43
+ }
44
+
45
+ if (typeof sqlJsDistDirectory !== "string" || sqlJsDistDirectory.length < 1) {
46
+ throw new Error(`Expected sql.js dist directory path to be a string, got: ${String(sqlJsDistDirectory)}`)
47
+ }
48
+
49
+ const normalizedSqlJsAssetFileName = normalizeSqlJsAssetFileName(sqlJsAssetFileName)
50
+ const assetPath = path.join(sqlJsDistDirectory, normalizedSqlJsAssetFileName)
51
+
52
+ try {
53
+ await fs.access(assetPath)
54
+ } catch (error) {
55
+ const ensuredError = /**
56
+ * Narrows the runtime value to the documented type.
57
+ @type {{code?: string}} */ (error)
58
+
59
+ if (ensuredError.code === "ENOENT") {
60
+ await this.render({json: {errorMessage: "Not found", status: "error"}, status: "not-found"})
61
+ return
62
+ }
63
+
64
+ throw error
65
+ }
66
+
67
+ this.response().setHeader("Cache-Control", "public, max-age=3600")
68
+ this.sendFile(assetPath)
69
+ }
70
+ }
@@ -0,0 +1,71 @@
1
+ import {createRequire} from "node:module"
2
+ import path from "node:path"
3
+ import SqlJsWasmRouteController from "./sqljs-wasm-route-controller.js"
4
+
5
+ const require = createRequire(import.meta.url)
6
+ const sqlJsEntryPath = require.resolve("sql.js")
7
+ const sqlJsDistDirectory = path.dirname(sqlJsEntryPath)
8
+
9
+ /**
10
+ * InstallSqlJsWasmRouteArgs type.
11
+ * @typedef {object} InstallSqlJsWasmRouteArgs
12
+ * @property {import("../configuration.js").default} configuration - Velocious configuration instance.
13
+ * @property {string} [routePrefix] - Route prefix used for sql.js asset serving.
14
+ */
15
+
16
+ /**
17
+ * SqlJsLocateFileFromBackendArgs type.
18
+ * @typedef {object} SqlJsLocateFileFromBackendArgs
19
+ * @property {string} backendBaseUrl - Backend base URL (for example `https://api.example.com`).
20
+ * @property {string} [routePrefix] - Route prefix used for sql.js asset serving.
21
+ */
22
+
23
+ /**
24
+ * Runs normalize route prefix.
25
+ * @param {string} routePrefix - Route prefix input.
26
+ * @returns {string} - Normalized route prefix.
27
+ */
28
+ function normalizeRoutePrefix(routePrefix) {
29
+ if (!routePrefix.startsWith("/")) {
30
+ throw new Error(`Expected route prefix to start with '/', got: ${routePrefix}`)
31
+ }
32
+
33
+ if (routePrefix.length > 1 && routePrefix.endsWith("/")) {
34
+ return routePrefix.slice(0, -1)
35
+ }
36
+
37
+ return routePrefix
38
+ }
39
+
40
+ /**
41
+ * Installs a route-resolver hook that serves `sql.js/dist/*` files from the running Velocious backend.
42
+ * @param {InstallSqlJsWasmRouteArgs} args - Options object.
43
+ * @returns {void} - No return value.
44
+ */
45
+ export default function installSqlJsWasmRoute(args) {
46
+ const {configuration, routePrefix = "/velocious/sqljs"} = args
47
+
48
+ if (!configuration) throw new Error("No configuration given")
49
+
50
+ const normalizedRoutePrefix = normalizeRoutePrefix(routePrefix)
51
+
52
+ configuration.routes((routes) => {
53
+ routes.get(`${normalizedRoutePrefix}/:sqlJsAssetFileName`, {
54
+ params: {sqlJsDistDirectory},
55
+ to: [SqlJsWasmRouteController, "show"]
56
+ })
57
+ })
58
+ }
59
+
60
+ /**
61
+ * Creates a sqlite-web `locateFile(file)` callback pointing to a Velocious backend route.
62
+ * @param {SqlJsLocateFileFromBackendArgs} args - Options object.
63
+ * @returns {(file: string) => string} - sql.js locateFile callback.
64
+ */
65
+ export function sqlJsLocateFileFromBackend(args) {
66
+ const {backendBaseUrl, routePrefix = "/velocious/sqljs"} = args
67
+ const normalizedRoutePrefix = normalizeRoutePrefix(routePrefix)
68
+ const baseUrl = backendBaseUrl.replace(/\/+$/, "")
69
+
70
+ return (file) => `${baseUrl}${normalizedRoutePrefix}/${encodeURIComponent(file)}`
71
+ }
@@ -0,0 +1,83 @@
1
+ // @ts-check
2
+
3
+ /**
4
+ * @typedef {{_associationCounts?: Map<string, number>, _computedAbilities?: Map<string, boolean>, _queryDataValues?: Map<string, ?>}} RecordPayloadValuesTarget
5
+ */
6
+
7
+ /**
8
+ * Read an association count attached to a record/frontend-model payload.
9
+ * @param {RecordPayloadValuesTarget} target - Record-like object holding association count payload values.
10
+ * @param {string} attributeName - Association count attribute name.
11
+ * @returns {number} Attached count value, or 0 when it was not loaded.
12
+ */
13
+ export function readPayloadAssociationCount(target, attributeName) {
14
+ if (!target._associationCounts) return 0
15
+ if (!target._associationCounts.has(attributeName)) return 0
16
+
17
+ return /** @type {number} */ (target._associationCounts.get(attributeName))
18
+ }
19
+
20
+ /**
21
+ * Store an association count attached to a record/frontend-model payload.
22
+ * @param {RecordPayloadValuesTarget} target - Record-like object holding association count payload values.
23
+ * @param {string} attributeName - Association count attribute name.
24
+ * @param {number} value - Count value.
25
+ * @returns {void}
26
+ */
27
+ export function setPayloadAssociationCount(target, attributeName, value) {
28
+ if (!target._associationCounts) target._associationCounts = new Map()
29
+
30
+ target._associationCounts.set(attributeName, value)
31
+ }
32
+
33
+ /**
34
+ * Read a computed ability attached to a record/frontend-model payload.
35
+ * @param {RecordPayloadValuesTarget} target - Record-like object holding ability payload values.
36
+ * @param {string} action - Ability action name.
37
+ * @returns {boolean} Attached ability value, or false when it was not loaded.
38
+ */
39
+ export function readPayloadComputedAbility(target, action) {
40
+ if (!target._computedAbilities) return false
41
+ if (!target._computedAbilities.has(action)) return false
42
+
43
+ return Boolean(target._computedAbilities.get(action))
44
+ }
45
+
46
+ /**
47
+ * Store a computed ability attached to a record/frontend-model payload.
48
+ * @param {RecordPayloadValuesTarget} target - Record-like object holding ability payload values.
49
+ * @param {string} action - Ability action name.
50
+ * @param {boolean} value - Whether the current ability permits the action on this record.
51
+ * @returns {void}
52
+ */
53
+ export function setPayloadComputedAbility(target, action, value) {
54
+ if (!target._computedAbilities) target._computedAbilities = new Map()
55
+
56
+ target._computedAbilities.set(action, Boolean(value))
57
+ }
58
+
59
+ /**
60
+ * Read a queryData value attached to a record/frontend-model payload.
61
+ * @param {RecordPayloadValuesTarget} target - Record-like object holding queryData payload values.
62
+ * @param {string} name - queryData alias name.
63
+ * @returns {?} Attached queryData value, or null when it was not loaded.
64
+ */
65
+ export function readPayloadQueryData(target, name) {
66
+ if (!target._queryDataValues) return null
67
+ if (!target._queryDataValues.has(name)) return null
68
+
69
+ return target._queryDataValues.get(name)
70
+ }
71
+
72
+ /**
73
+ * Store a queryData value attached to a record/frontend-model payload.
74
+ * @param {RecordPayloadValuesTarget} target - Record-like object holding queryData payload values.
75
+ * @param {string} name - queryData alias name.
76
+ * @param {?} value - Attached queryData value.
77
+ * @returns {void}
78
+ */
79
+ export function setPayloadQueryData(target, name, value) {
80
+ if (!target._queryDataValues) target._queryDataValues = new Map()
81
+
82
+ target._queryDataValues.set(name, value)
83
+ }
@@ -0,0 +1,17 @@
1
+ // @ts-check
2
+
3
+ import {digg} from "diggerize"
4
+
5
+ export default class VelociousRoutesAppRoutes {
6
+ /**
7
+ * Runs get routes.
8
+ * @param {import("../configuration.js").default} configuration - Configuration instance.
9
+ * @returns {Promise<import("./index.js").default>} - Resolves with the routes.
10
+ */
11
+ static async getRoutes(configuration) {
12
+ // Every client need to make their own routes because they probably can't be shared across different worker threads
13
+ const routesImport = await configuration.getEnvironmentHandler().importApplicationRoutes()
14
+
15
+ return digg(routesImport, "routes")
16
+ }
17
+ }