velocious 1.0.430 → 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 (831) hide show
  1. package/bin/velocious.js +48 -0
  2. package/build/application.js +229 -0
  3. package/build/authorization/ability.js +329 -0
  4. package/build/authorization/base-resource.js +143 -0
  5. package/build/background-jobs/client.js +50 -0
  6. package/build/background-jobs/cron-expression.js +277 -0
  7. package/build/background-jobs/forked-runner-child.js +86 -0
  8. package/build/background-jobs/job-record.js +13 -0
  9. package/build/background-jobs/job-registry.js +92 -0
  10. package/build/background-jobs/job-runner.js +107 -0
  11. package/build/background-jobs/job.js +77 -0
  12. package/build/background-jobs/json-socket.js +78 -0
  13. package/build/background-jobs/main.js +926 -0
  14. package/build/background-jobs/normalize-error.js +26 -0
  15. package/build/background-jobs/scheduler.js +274 -0
  16. package/build/background-jobs/socket-request.js +68 -0
  17. package/build/background-jobs/status-reporter.js +101 -0
  18. package/build/background-jobs/store.js +994 -0
  19. package/build/background-jobs/types.js +70 -0
  20. package/build/background-jobs/web/authorization.js +89 -0
  21. package/build/background-jobs/web/controller.js +280 -0
  22. package/build/background-jobs/web/index.js +57 -0
  23. package/build/background-jobs/web/path-matcher.js +74 -0
  24. package/build/background-jobs/web/registry.js +49 -0
  25. package/build/background-jobs/worker.js +683 -0
  26. package/build/beacon/client.js +330 -0
  27. package/build/beacon/in-process-broker.js +71 -0
  28. package/build/beacon/in-process-client.js +139 -0
  29. package/build/beacon/server.js +148 -0
  30. package/build/beacon/types.js +55 -0
  31. package/build/bin/velocious.js +39 -34
  32. package/build/cli/base-command.js +67 -0
  33. package/build/cli/browser-cli.js +45 -0
  34. package/build/cli/commands/background-jobs-main.js +7 -0
  35. package/build/cli/commands/background-jobs-runner.js +7 -0
  36. package/build/cli/commands/background-jobs-worker.js +7 -0
  37. package/build/cli/commands/beacon.js +7 -0
  38. package/build/cli/commands/console.js +12 -0
  39. package/build/cli/commands/db/base-command.js +82 -0
  40. package/build/cli/commands/db/create.js +64 -0
  41. package/build/cli/commands/db/drop.js +75 -0
  42. package/build/cli/commands/db/migrate.js +17 -0
  43. package/build/cli/commands/db/reset.js +22 -0
  44. package/build/cli/commands/db/rollback.js +15 -0
  45. package/build/cli/commands/db/schema/dump.js +12 -0
  46. package/build/cli/commands/db/schema/load.js +12 -0
  47. package/build/cli/commands/db/seed.js +12 -0
  48. package/build/cli/commands/db/tenants/check.js +38 -0
  49. package/build/cli/commands/db/tenants/create.js +33 -0
  50. package/build/cli/commands/db/tenants/migrate.js +49 -0
  51. package/build/cli/commands/destroy/migration.js +7 -0
  52. package/build/cli/commands/generate/base-models.js +7 -0
  53. package/build/cli/commands/generate/frontend-models.js +12 -0
  54. package/build/cli/commands/generate/migration.js +7 -0
  55. package/build/cli/commands/generate/model.js +7 -0
  56. package/build/cli/commands/init.js +11 -0
  57. package/build/cli/commands/routes.js +7 -0
  58. package/build/cli/commands/run-script.js +12 -0
  59. package/build/cli/commands/runner.js +12 -0
  60. package/build/cli/commands/server.js +7 -0
  61. package/build/cli/commands/test.js +9 -0
  62. package/build/cli/index.js +152 -0
  63. package/build/cli/tenant-database-command-helper.js +198 -0
  64. package/build/cli/use-browser-cli.js +30 -0
  65. package/build/configuration-resolver.js +65 -0
  66. package/build/configuration-types.js +429 -0
  67. package/build/configuration.js +2590 -0
  68. package/build/controller.js +421 -0
  69. package/build/current-configuration.js +31 -0
  70. package/build/current.js +80 -0
  71. package/build/database/annotations-async-hooks.js +47 -0
  72. package/build/database/annotations.js +40 -0
  73. package/build/database/drivers/base-column.js +182 -0
  74. package/build/database/drivers/base-columns-index.js +81 -0
  75. package/build/database/drivers/base-foreign-key.js +104 -0
  76. package/build/database/drivers/base-table.js +156 -0
  77. package/build/database/drivers/base.js +1609 -0
  78. package/build/database/drivers/mssql/column.js +74 -0
  79. package/build/database/drivers/mssql/columns-index.js +6 -0
  80. package/build/database/drivers/mssql/connect-connection.js +16 -0
  81. package/build/database/drivers/mssql/foreign-key.js +12 -0
  82. package/build/database/drivers/mssql/index.js +590 -0
  83. package/build/database/drivers/mssql/options.js +79 -0
  84. package/build/database/drivers/mssql/query-parser.js +6 -0
  85. package/build/database/drivers/mssql/sql/alter-table.js +4 -0
  86. package/build/database/drivers/mssql/sql/create-database.js +36 -0
  87. package/build/database/drivers/mssql/sql/create-index.js +4 -0
  88. package/build/database/drivers/mssql/sql/create-table.js +4 -0
  89. package/build/database/drivers/mssql/sql/delete.js +19 -0
  90. package/build/database/drivers/mssql/sql/drop-database.js +36 -0
  91. package/build/database/drivers/mssql/sql/drop-table.js +4 -0
  92. package/build/database/drivers/mssql/sql/insert.js +4 -0
  93. package/build/database/drivers/mssql/sql/update.js +31 -0
  94. package/build/database/drivers/mssql/sql/upsert.js +23 -0
  95. package/build/database/drivers/mssql/structure-sql.js +120 -0
  96. package/build/database/drivers/mssql/table.js +145 -0
  97. package/build/database/drivers/mysql/column.js +112 -0
  98. package/build/database/drivers/mysql/columns-index.js +22 -0
  99. package/build/database/drivers/mysql/foreign-key.js +12 -0
  100. package/build/database/drivers/mysql/index.js +473 -0
  101. package/build/database/drivers/mysql/options.js +34 -0
  102. package/build/database/drivers/mysql/query-parser.js +6 -0
  103. package/build/database/drivers/mysql/query.js +37 -0
  104. package/build/database/drivers/mysql/sql/alter-table.js +6 -0
  105. package/build/database/drivers/mysql/sql/create-database.js +39 -0
  106. package/build/database/drivers/mysql/sql/create-index.js +6 -0
  107. package/build/database/drivers/mysql/sql/create-table.js +6 -0
  108. package/build/database/drivers/mysql/sql/delete.js +21 -0
  109. package/build/database/drivers/mysql/sql/drop-database.js +6 -0
  110. package/build/database/drivers/mysql/sql/drop-table.js +6 -0
  111. package/build/database/drivers/mysql/sql/insert.js +6 -0
  112. package/build/database/drivers/mysql/sql/update.js +33 -0
  113. package/build/database/drivers/mysql/sql/upsert.js +13 -0
  114. package/build/database/drivers/mysql/structure-sql.js +93 -0
  115. package/build/database/drivers/mysql/table.js +121 -0
  116. package/build/database/drivers/pgsql/column.js +90 -0
  117. package/build/database/drivers/pgsql/columns-index.js +6 -0
  118. package/build/database/drivers/pgsql/foreign-key.js +12 -0
  119. package/build/database/drivers/pgsql/index.js +441 -0
  120. package/build/database/drivers/pgsql/options.js +32 -0
  121. package/build/database/drivers/pgsql/query-parser.js +6 -0
  122. package/build/database/drivers/pgsql/sql/alter-table.js +6 -0
  123. package/build/database/drivers/pgsql/sql/create-database.js +38 -0
  124. package/build/database/drivers/pgsql/sql/create-index.js +6 -0
  125. package/build/database/drivers/pgsql/sql/create-table.js +6 -0
  126. package/build/database/drivers/pgsql/sql/delete.js +21 -0
  127. package/build/database/drivers/pgsql/sql/drop-database.js +6 -0
  128. package/build/database/drivers/pgsql/sql/drop-table.js +6 -0
  129. package/build/database/drivers/pgsql/sql/insert.js +6 -0
  130. package/build/database/drivers/pgsql/sql/update.js +33 -0
  131. package/build/database/drivers/pgsql/sql/upsert.js +14 -0
  132. package/build/database/drivers/pgsql/structure-sql.js +126 -0
  133. package/build/database/drivers/pgsql/table.js +135 -0
  134. package/build/database/drivers/sqlite/base.js +509 -0
  135. package/build/database/drivers/sqlite/column.js +75 -0
  136. package/build/database/drivers/sqlite/columns-index.js +30 -0
  137. package/build/database/drivers/sqlite/connection-sql-js.js +46 -0
  138. package/build/database/drivers/sqlite/foreign-key.js +24 -0
  139. package/build/database/drivers/sqlite/index.js +394 -0
  140. package/build/database/drivers/sqlite/index.native.js +72 -0
  141. package/build/database/drivers/sqlite/index.web.js +99 -0
  142. package/build/database/drivers/sqlite/options.js +32 -0
  143. package/build/database/drivers/sqlite/query-parser.js +6 -0
  144. package/build/database/drivers/sqlite/query.js +35 -0
  145. package/build/database/drivers/sqlite/query.native.js +35 -0
  146. package/build/database/drivers/sqlite/query.web.js +49 -0
  147. package/build/database/drivers/sqlite/sql/alter-table.js +187 -0
  148. package/build/database/drivers/sqlite/sql/create-index.js +6 -0
  149. package/build/database/drivers/sqlite/sql/create-table.js +6 -0
  150. package/build/database/drivers/sqlite/sql/delete.js +26 -0
  151. package/build/database/drivers/sqlite/sql/drop-table.js +6 -0
  152. package/build/database/drivers/sqlite/sql/insert.js +6 -0
  153. package/build/database/drivers/sqlite/sql/update.js +33 -0
  154. package/build/database/drivers/sqlite/sql/upsert.js +14 -0
  155. package/build/database/drivers/sqlite/structure-sql.js +56 -0
  156. package/build/database/drivers/sqlite/table-rebuilder.js +96 -0
  157. package/build/database/drivers/sqlite/table.js +131 -0
  158. package/build/database/drivers/structure-sql/utils.js +35 -0
  159. package/build/database/handler.js +13 -0
  160. package/build/database/initializer-from-require-context.js +101 -0
  161. package/build/database/migration/index.js +438 -0
  162. package/build/database/migrator/files-finder.js +55 -0
  163. package/build/database/migrator/types.js +31 -0
  164. package/build/database/migrator.js +557 -0
  165. package/build/database/pool/async-tracked-multi-connection.js +1164 -0
  166. package/build/database/pool/base-methods-forward.js +52 -0
  167. package/build/database/pool/base.js +380 -0
  168. package/build/database/pool/single-multi-use.js +118 -0
  169. package/build/database/query/alter-table-base.js +104 -0
  170. package/build/database/query/base.js +49 -0
  171. package/build/database/query/create-database-base.js +42 -0
  172. package/build/database/query/create-index-base.js +117 -0
  173. package/build/database/query/create-table-base.js +205 -0
  174. package/build/database/query/delete-base.js +19 -0
  175. package/build/database/query/drop-database-base.js +38 -0
  176. package/build/database/query/drop-table-base.js +58 -0
  177. package/build/database/query/from-base.js +36 -0
  178. package/build/database/query/from-plain.js +16 -0
  179. package/build/database/query/from-table.js +18 -0
  180. package/build/database/query/index.js +533 -0
  181. package/build/database/query/insert-base.js +172 -0
  182. package/build/database/query/join-base.js +43 -0
  183. package/build/database/query/join-object.js +167 -0
  184. package/build/database/query/join-plain.js +18 -0
  185. package/build/database/query/join-tracker.js +93 -0
  186. package/build/database/query/model-class-query.js +1577 -0
  187. package/build/database/query/order-base.js +33 -0
  188. package/build/database/query/order-column.js +77 -0
  189. package/build/database/query/order-plain.js +28 -0
  190. package/build/database/query/preloader/belongs-to.js +267 -0
  191. package/build/database/query/preloader/ensure-model-class-initialized.js +18 -0
  192. package/build/database/query/preloader/has-many.js +316 -0
  193. package/build/database/query/preloader/has-one.js +123 -0
  194. package/build/database/query/preloader/selection.js +152 -0
  195. package/build/database/query/preloader.js +201 -0
  196. package/build/database/query/query-data.js +305 -0
  197. package/build/database/query/select-base.js +30 -0
  198. package/build/database/query/select-plain.js +18 -0
  199. package/build/database/query/select-table-and-column.js +28 -0
  200. package/build/database/query/update-base.js +41 -0
  201. package/build/database/query/upsert-base.js +103 -0
  202. package/build/database/query/where-base.js +38 -0
  203. package/build/database/query/where-combinator.js +31 -0
  204. package/build/database/query/where-hash.js +77 -0
  205. package/build/database/query/where-model-class-hash.js +505 -0
  206. package/build/database/query/where-not.js +23 -0
  207. package/build/database/query/where-plain.js +20 -0
  208. package/build/database/query/with-count.js +219 -0
  209. package/build/database/query-parser/base-query-parser.js +40 -0
  210. package/build/database/query-parser/from-parser.js +49 -0
  211. package/build/database/query-parser/group-parser.js +55 -0
  212. package/build/database/query-parser/joins-parser.js +37 -0
  213. package/build/database/query-parser/limit-parser.js +77 -0
  214. package/build/database/query-parser/options.js +94 -0
  215. package/build/database/query-parser/order-parser.js +45 -0
  216. package/build/database/query-parser/select-parser.js +67 -0
  217. package/build/database/query-parser/where-parser.js +46 -0
  218. package/build/database/record/acts-as-list.js +374 -0
  219. package/build/database/record/attachments/download.js +49 -0
  220. package/build/database/record/attachments/handle.js +188 -0
  221. package/build/database/record/attachments/normalize-input.js +213 -0
  222. package/build/database/record/attachments/storage-drivers/filesystem.js +114 -0
  223. package/build/database/record/attachments/storage-drivers/native.js +146 -0
  224. package/build/database/record/attachments/storage-drivers/s3.js +245 -0
  225. package/build/database/record/attachments/store.js +591 -0
  226. package/build/database/record/index.js +4094 -0
  227. package/build/database/record/instance-relationships/base.js +289 -0
  228. package/build/database/record/instance-relationships/belongs-to.js +84 -0
  229. package/build/database/record/instance-relationships/has-many.js +284 -0
  230. package/build/database/record/instance-relationships/has-one.js +117 -0
  231. package/build/database/record/record-not-found-error.js +3 -0
  232. package/build/database/record/relationships/base.js +195 -0
  233. package/build/database/record/relationships/belongs-to.js +57 -0
  234. package/build/database/record/relationships/has-many.js +46 -0
  235. package/build/database/record/relationships/has-one.js +46 -0
  236. package/build/database/record/state-machine.js +278 -0
  237. package/build/database/record/user-module.js +43 -0
  238. package/build/database/record/validators/base.js +27 -0
  239. package/build/database/record/validators/format.js +50 -0
  240. package/build/database/record/validators/presence.js +24 -0
  241. package/build/database/record/validators/uniqueness.js +124 -0
  242. package/build/database/table-data/index.js +241 -0
  243. package/build/database/table-data/table-column.js +416 -0
  244. package/build/database/table-data/table-foreign-key.js +69 -0
  245. package/build/database/table-data/table-index.js +46 -0
  246. package/build/database/table-data/table-reference.js +13 -0
  247. package/build/database/use-database.js +48 -0
  248. package/build/environment-handlers/base.js +561 -0
  249. package/build/environment-handlers/browser.js +338 -0
  250. package/build/environment-handlers/node/cli/commands/background-jobs-main.js +21 -0
  251. package/build/environment-handlers/node/cli/commands/background-jobs-runner.js +24 -0
  252. package/build/environment-handlers/node/cli/commands/background-jobs-worker.js +47 -0
  253. package/build/environment-handlers/node/cli/commands/beacon.js +21 -0
  254. package/build/environment-handlers/node/cli/commands/cli-command-context.js +31 -0
  255. package/build/environment-handlers/node/cli/commands/console.js +149 -0
  256. package/build/environment-handlers/node/cli/commands/db/schema/dump.js +43 -0
  257. package/build/environment-handlers/node/cli/commands/db/schema/load.js +69 -0
  258. package/build/environment-handlers/node/cli/commands/db/seed.js +79 -0
  259. package/build/environment-handlers/node/cli/commands/destroy/migration.js +47 -0
  260. package/build/environment-handlers/node/cli/commands/generate/base-models.js +396 -0
  261. package/build/environment-handlers/node/cli/commands/generate/frontend-models.js +872 -0
  262. package/build/environment-handlers/node/cli/commands/generate/migration.js +45 -0
  263. package/build/environment-handlers/node/cli/commands/generate/model.js +45 -0
  264. package/build/environment-handlers/node/cli/commands/init.js +68 -0
  265. package/build/environment-handlers/node/cli/commands/routes.js +63 -0
  266. package/build/environment-handlers/node/cli/commands/run-script.js +85 -0
  267. package/build/environment-handlers/node/cli/commands/runner.js +84 -0
  268. package/build/environment-handlers/node/cli/commands/server.js +151 -0
  269. package/build/environment-handlers/node/cli/commands/test.js +118 -0
  270. package/build/environment-handlers/node.js +887 -0
  271. package/build/error-logger.js +30 -0
  272. package/build/frontend-model-controller.js +3491 -0
  273. package/build/frontend-model-resource/base-resource.js +935 -0
  274. package/build/frontend-models/base.js +4004 -0
  275. package/build/frontend-models/clear-pending-debounced-callback.js +16 -0
  276. package/build/frontend-models/event-hook-models.js +49 -0
  277. package/build/frontend-models/model-registry.js +28 -0
  278. package/build/frontend-models/outgoing-event-buffer.js +51 -0
  279. package/build/frontend-models/preloader.js +169 -0
  280. package/build/frontend-models/query.js +2245 -0
  281. package/build/frontend-models/resource-config-validation.js +56 -0
  282. package/build/frontend-models/resource-definition.js +399 -0
  283. package/build/frontend-models/transport-serialization.js +369 -0
  284. package/build/frontend-models/use-created-event.js +21 -0
  285. package/build/frontend-models/use-destroyed-event.js +148 -0
  286. package/build/frontend-models/use-model-class-event.js +164 -0
  287. package/build/frontend-models/use-updated-event.js +152 -0
  288. package/build/frontend-models/websocket-channel.js +494 -0
  289. package/build/frontend-models/websocket-publishers.js +224 -0
  290. package/build/http-client/header.js +17 -0
  291. package/build/http-client/index.js +139 -0
  292. package/build/http-client/request.js +94 -0
  293. package/build/http-client/response.js +151 -0
  294. package/build/http-client/websocket-client.js +27 -0
  295. package/build/http-server/client/index.js +507 -0
  296. package/build/http-server/client/params-to-object.js +152 -0
  297. package/build/http-server/client/request-buffer/form-data-part.js +139 -0
  298. package/build/http-server/client/request-buffer/header.js +19 -0
  299. package/build/http-server/client/request-buffer/index.js +535 -0
  300. package/build/http-server/client/request-parser.js +195 -0
  301. package/build/http-server/client/request-runner.js +321 -0
  302. package/build/http-server/client/request-timing.js +171 -0
  303. package/build/http-server/client/request.js +114 -0
  304. package/build/http-server/client/response.js +251 -0
  305. package/build/http-server/client/uploaded-file/memory-uploaded-file.js +32 -0
  306. package/build/http-server/client/uploaded-file/temporary-uploaded-file.js +32 -0
  307. package/build/http-server/client/uploaded-file/uploaded-file.js +36 -0
  308. package/build/http-server/client/websocket-request.js +147 -0
  309. package/build/http-server/client/websocket-session.js +1755 -0
  310. package/build/http-server/cookie.js +245 -0
  311. package/build/http-server/development-reloader.js +240 -0
  312. package/build/http-server/index.js +561 -0
  313. package/build/http-server/remote-address.js +77 -0
  314. package/build/http-server/server-client.js +222 -0
  315. package/build/http-server/server-lock.js +178 -0
  316. package/build/http-server/websocket-channel-subscribers.js +110 -0
  317. package/build/http-server/websocket-channel.js +137 -0
  318. package/build/http-server/websocket-connection.js +118 -0
  319. package/build/http-server/websocket-event-log-store.js +433 -0
  320. package/build/http-server/websocket-events-host.js +170 -0
  321. package/build/http-server/websocket-events.js +50 -0
  322. package/build/http-server/worker-handler/channel-subscriber-dispatch.js +28 -0
  323. package/build/http-server/worker-handler/in-process.js +155 -0
  324. package/build/http-server/worker-handler/index.js +370 -0
  325. package/build/http-server/worker-handler/worker-script.js +6 -0
  326. package/build/http-server/worker-handler/worker-thread.js +286 -0
  327. package/build/index.js +1 -2
  328. package/build/initializer.js +39 -0
  329. package/build/jobs/mail-delivery.js +22 -0
  330. package/build/logger/base-logger.js +34 -0
  331. package/build/logger/console-logger.js +28 -0
  332. package/build/logger/file-logger.js +36 -0
  333. package/build/logger/outputs/array-output.js +50 -0
  334. package/build/logger/outputs/console-output.js +32 -0
  335. package/build/logger/outputs/file-output.js +55 -0
  336. package/build/logger/outputs/stdout-output.js +64 -0
  337. package/build/logger.js +507 -0
  338. package/build/mailer/backends/smtp.js +197 -0
  339. package/build/mailer/base.js +337 -0
  340. package/build/mailer/delivery.js +70 -0
  341. package/build/mailer/index.js +24 -0
  342. package/build/mailer.js +15 -0
  343. package/build/plugins/sqljs-wasm-route-controller.js +70 -0
  344. package/build/plugins/sqljs-wasm-route.js +71 -0
  345. package/build/record-payload-values.js +83 -0
  346. package/build/routes/app-routes.js +17 -0
  347. package/build/routes/base-route.js +133 -0
  348. package/build/routes/basic-route.js +109 -0
  349. package/build/routes/built-in/debug/controller.js +12 -0
  350. package/build/routes/built-in/errors/controller.js +7 -0
  351. package/build/routes/get-route.js +75 -0
  352. package/build/routes/hooks/frontend-model-command-route-hook.js +100 -0
  353. package/build/routes/index.js +50 -0
  354. package/build/routes/namespace-route.js +51 -0
  355. package/build/routes/plugin-routes.js +141 -0
  356. package/build/routes/post-route.js +74 -0
  357. package/build/routes/resolver.js +535 -0
  358. package/build/routes/resource-route.js +154 -0
  359. package/build/routes/root-route.js +11 -0
  360. package/build/src/authorization/ability.d.ts +24 -23
  361. package/build/src/authorization/ability.d.ts.map +1 -1
  362. package/build/src/authorization/ability.js +14 -13
  363. package/build/src/authorization/base-resource.d.ts +20 -26
  364. package/build/src/authorization/base-resource.d.ts.map +1 -1
  365. package/build/src/authorization/base-resource.js +13 -11
  366. package/build/src/configuration-types.d.ts +21 -2
  367. package/build/src/configuration-types.d.ts.map +1 -1
  368. package/build/src/configuration-types.js +8 -2
  369. package/build/src/database/query/where-combinator.d.ts.map +1 -1
  370. package/build/src/database/query/where-combinator.js +1 -2
  371. package/build/src/database/record/acts-as-list.js +2 -2
  372. package/build/src/database/record/attachments/store.d.ts +1 -1
  373. package/build/src/database/record/attachments/store.d.ts.map +1 -1
  374. package/build/src/database/record/attachments/store.js +2 -2
  375. package/build/src/database/record/index.d.ts +82 -20
  376. package/build/src/database/record/index.d.ts.map +1 -1
  377. package/build/src/database/record/index.js +126 -13
  378. package/build/src/database/record/relationships/base.d.ts +2 -2
  379. package/build/src/database/record/relationships/base.d.ts.map +1 -1
  380. package/build/src/database/record/relationships/base.js +3 -3
  381. package/build/src/environment-handlers/node/cli/commands/generate/base-models.d.ts +4 -2
  382. package/build/src/environment-handlers/node/cli/commands/generate/base-models.d.ts.map +1 -1
  383. package/build/src/environment-handlers/node/cli/commands/generate/base-models.js +59 -36
  384. package/build/src/frontend-model-controller.d.ts +6 -6
  385. package/build/src/frontend-model-controller.d.ts.map +1 -1
  386. package/build/src/frontend-model-controller.js +4 -4
  387. package/build/src/frontend-model-resource/base-resource.d.ts +18 -17
  388. package/build/src/frontend-model-resource/base-resource.d.ts.map +1 -1
  389. package/build/src/frontend-model-resource/base-resource.js +22 -10
  390. package/build/src/frontend-models/base.d.ts +19 -12
  391. package/build/src/frontend-models/base.d.ts.map +1 -1
  392. package/build/src/frontend-models/base.js +79 -48
  393. package/build/src/frontend-models/preloader.d.ts +6 -6
  394. package/build/src/frontend-models/preloader.d.ts.map +1 -1
  395. package/build/src/frontend-models/preloader.js +5 -5
  396. package/build/src/frontend-models/query.d.ts.map +1 -1
  397. package/build/src/frontend-models/query.js +1 -4
  398. package/build/src/utils/ransack.d.ts.map +1 -1
  399. package/build/src/utils/ransack.js +1 -2
  400. package/build/templates/configuration.js +61 -0
  401. package/build/templates/generate-migration.js +11 -0
  402. package/build/templates/generate-model.js +6 -0
  403. package/build/templates/routes.js +11 -0
  404. package/build/testing/base-expect.js +17 -0
  405. package/build/testing/browser-frontend-model-event-hook-scenarios.js +520 -0
  406. package/build/testing/browser-test-app.js +32 -0
  407. package/build/testing/expect-to-change.js +55 -0
  408. package/build/testing/expect-utils.js +269 -0
  409. package/build/testing/expect.js +763 -0
  410. package/build/testing/request-client.js +90 -0
  411. package/build/testing/test-files-finder.js +364 -0
  412. package/build/testing/test-filter-parser.js +198 -0
  413. package/build/testing/test-runner.js +1168 -0
  414. package/build/testing/test-suite-splitter.js +177 -0
  415. package/build/testing/test.js +370 -0
  416. package/build/utils/backtrace-cleaner-node.js +87 -0
  417. package/build/utils/backtrace-cleaner.js +266 -0
  418. package/build/utils/ensure-error.js +15 -0
  419. package/build/utils/event-emitter.js +8 -0
  420. package/build/utils/file-exists.js +18 -0
  421. package/build/utils/format-value.js +101 -0
  422. package/build/utils/model-scope.js +56 -0
  423. package/build/utils/nest-callbacks.js +22 -0
  424. package/build/utils/plain-object.js +14 -0
  425. package/build/utils/ransack.js +859 -0
  426. package/build/utils/rest-args-error.js +14 -0
  427. package/build/utils/singularize-model-name.js +18 -0
  428. package/build/utils/split-sql-statements.js +88 -0
  429. package/build/utils/to-import-specifier.js +53 -0
  430. package/build/utils/with-tracked-stack-async-hooks.js +103 -0
  431. package/build/utils/with-tracked-stack.js +38 -0
  432. package/build/velocious-error.js +34 -0
  433. package/index.js +1 -0
  434. package/package.json +10 -4
  435. package/scripts/clean-build.js +8 -0
  436. package/scripts/ensure-bin-executable.js +13 -0
  437. package/scripts/run-tests.js +37 -0
  438. package/scripts/test-browser.js +486 -0
  439. package/src/application.js +229 -0
  440. package/src/authorization/ability.js +329 -0
  441. package/src/authorization/base-resource.js +143 -0
  442. package/src/background-jobs/client.js +50 -0
  443. package/src/background-jobs/cron-expression.js +277 -0
  444. package/src/background-jobs/forked-runner-child.js +86 -0
  445. package/src/background-jobs/job-record.js +13 -0
  446. package/src/background-jobs/job-registry.js +92 -0
  447. package/src/background-jobs/job-runner.js +107 -0
  448. package/src/background-jobs/job.js +77 -0
  449. package/src/background-jobs/json-socket.js +78 -0
  450. package/src/background-jobs/main.js +926 -0
  451. package/src/background-jobs/normalize-error.js +26 -0
  452. package/src/background-jobs/scheduler.js +274 -0
  453. package/src/background-jobs/socket-request.js +68 -0
  454. package/src/background-jobs/status-reporter.js +101 -0
  455. package/src/background-jobs/store.js +994 -0
  456. package/src/background-jobs/types.js +70 -0
  457. package/src/background-jobs/web/authorization.js +89 -0
  458. package/src/background-jobs/web/controller.js +280 -0
  459. package/src/background-jobs/web/index.js +57 -0
  460. package/src/background-jobs/web/path-matcher.js +74 -0
  461. package/src/background-jobs/web/registry.js +49 -0
  462. package/src/background-jobs/worker.js +683 -0
  463. package/src/beacon/client.js +330 -0
  464. package/src/beacon/in-process-broker.js +71 -0
  465. package/src/beacon/in-process-client.js +139 -0
  466. package/src/beacon/server.js +148 -0
  467. package/src/beacon/types.js +55 -0
  468. package/src/cli/base-command.js +67 -0
  469. package/src/cli/browser-cli.js +45 -0
  470. package/src/cli/commands/background-jobs-main.js +7 -0
  471. package/src/cli/commands/background-jobs-runner.js +7 -0
  472. package/src/cli/commands/background-jobs-worker.js +7 -0
  473. package/src/cli/commands/beacon.js +7 -0
  474. package/src/cli/commands/console.js +12 -0
  475. package/src/cli/commands/db/base-command.js +82 -0
  476. package/src/cli/commands/db/create.js +64 -0
  477. package/src/cli/commands/db/drop.js +75 -0
  478. package/src/cli/commands/db/migrate.js +17 -0
  479. package/src/cli/commands/db/reset.js +22 -0
  480. package/src/cli/commands/db/rollback.js +15 -0
  481. package/src/cli/commands/db/schema/dump.js +12 -0
  482. package/src/cli/commands/db/schema/load.js +12 -0
  483. package/src/cli/commands/db/seed.js +12 -0
  484. package/src/cli/commands/db/tenants/check.js +38 -0
  485. package/src/cli/commands/db/tenants/create.js +33 -0
  486. package/src/cli/commands/db/tenants/migrate.js +49 -0
  487. package/src/cli/commands/destroy/migration.js +7 -0
  488. package/src/cli/commands/generate/base-models.js +7 -0
  489. package/src/cli/commands/generate/frontend-models.js +12 -0
  490. package/src/cli/commands/generate/migration.js +7 -0
  491. package/src/cli/commands/generate/model.js +7 -0
  492. package/src/cli/commands/init.js +11 -0
  493. package/src/cli/commands/routes.js +7 -0
  494. package/src/cli/commands/run-script.js +12 -0
  495. package/src/cli/commands/runner.js +12 -0
  496. package/src/cli/commands/server.js +7 -0
  497. package/src/cli/commands/test.js +9 -0
  498. package/src/cli/index.js +152 -0
  499. package/src/cli/tenant-database-command-helper.js +198 -0
  500. package/src/cli/use-browser-cli.js +30 -0
  501. package/src/configuration-resolver.js +65 -0
  502. package/src/configuration-types.js +429 -0
  503. package/src/configuration.js +2590 -0
  504. package/src/controller.js +421 -0
  505. package/src/current-configuration.js +31 -0
  506. package/src/current.js +80 -0
  507. package/src/database/annotations-async-hooks.js +47 -0
  508. package/src/database/annotations.js +40 -0
  509. package/src/database/drivers/base-column.js +182 -0
  510. package/src/database/drivers/base-columns-index.js +81 -0
  511. package/src/database/drivers/base-foreign-key.js +104 -0
  512. package/src/database/drivers/base-table.js +156 -0
  513. package/src/database/drivers/base.js +1609 -0
  514. package/src/database/drivers/mssql/column.js +74 -0
  515. package/src/database/drivers/mssql/columns-index.js +6 -0
  516. package/src/database/drivers/mssql/connect-connection.js +16 -0
  517. package/src/database/drivers/mssql/foreign-key.js +12 -0
  518. package/src/database/drivers/mssql/index.js +590 -0
  519. package/src/database/drivers/mssql/options.js +79 -0
  520. package/src/database/drivers/mssql/query-parser.js +6 -0
  521. package/src/database/drivers/mssql/sql/alter-table.js +4 -0
  522. package/src/database/drivers/mssql/sql/create-database.js +36 -0
  523. package/src/database/drivers/mssql/sql/create-index.js +4 -0
  524. package/src/database/drivers/mssql/sql/create-table.js +4 -0
  525. package/src/database/drivers/mssql/sql/delete.js +19 -0
  526. package/src/database/drivers/mssql/sql/drop-database.js +36 -0
  527. package/src/database/drivers/mssql/sql/drop-table.js +4 -0
  528. package/src/database/drivers/mssql/sql/insert.js +4 -0
  529. package/src/database/drivers/mssql/sql/update.js +31 -0
  530. package/src/database/drivers/mssql/sql/upsert.js +23 -0
  531. package/src/database/drivers/mssql/structure-sql.js +120 -0
  532. package/src/database/drivers/mssql/table.js +145 -0
  533. package/src/database/drivers/mysql/column.js +112 -0
  534. package/src/database/drivers/mysql/columns-index.js +22 -0
  535. package/src/database/drivers/mysql/foreign-key.js +12 -0
  536. package/src/database/drivers/mysql/index.js +473 -0
  537. package/src/database/drivers/mysql/options.js +34 -0
  538. package/src/database/drivers/mysql/query-parser.js +6 -0
  539. package/src/database/drivers/mysql/query.js +37 -0
  540. package/src/database/drivers/mysql/sql/alter-table.js +6 -0
  541. package/src/database/drivers/mysql/sql/create-database.js +39 -0
  542. package/src/database/drivers/mysql/sql/create-index.js +6 -0
  543. package/src/database/drivers/mysql/sql/create-table.js +6 -0
  544. package/src/database/drivers/mysql/sql/delete.js +21 -0
  545. package/src/database/drivers/mysql/sql/drop-database.js +6 -0
  546. package/src/database/drivers/mysql/sql/drop-table.js +6 -0
  547. package/src/database/drivers/mysql/sql/insert.js +6 -0
  548. package/src/database/drivers/mysql/sql/update.js +33 -0
  549. package/src/database/drivers/mysql/sql/upsert.js +13 -0
  550. package/src/database/drivers/mysql/structure-sql.js +93 -0
  551. package/src/database/drivers/mysql/table.js +121 -0
  552. package/src/database/drivers/pgsql/column.js +90 -0
  553. package/src/database/drivers/pgsql/columns-index.js +6 -0
  554. package/src/database/drivers/pgsql/foreign-key.js +12 -0
  555. package/src/database/drivers/pgsql/index.js +441 -0
  556. package/src/database/drivers/pgsql/options.js +32 -0
  557. package/src/database/drivers/pgsql/query-parser.js +6 -0
  558. package/src/database/drivers/pgsql/sql/alter-table.js +6 -0
  559. package/src/database/drivers/pgsql/sql/create-database.js +38 -0
  560. package/src/database/drivers/pgsql/sql/create-index.js +6 -0
  561. package/src/database/drivers/pgsql/sql/create-table.js +6 -0
  562. package/src/database/drivers/pgsql/sql/delete.js +21 -0
  563. package/src/database/drivers/pgsql/sql/drop-database.js +6 -0
  564. package/src/database/drivers/pgsql/sql/drop-table.js +6 -0
  565. package/src/database/drivers/pgsql/sql/insert.js +6 -0
  566. package/src/database/drivers/pgsql/sql/update.js +33 -0
  567. package/src/database/drivers/pgsql/sql/upsert.js +14 -0
  568. package/src/database/drivers/pgsql/structure-sql.js +126 -0
  569. package/src/database/drivers/pgsql/table.js +135 -0
  570. package/src/database/drivers/sqlite/base.js +509 -0
  571. package/src/database/drivers/sqlite/column.js +75 -0
  572. package/src/database/drivers/sqlite/columns-index.js +30 -0
  573. package/src/database/drivers/sqlite/connection-sql-js.js +46 -0
  574. package/src/database/drivers/sqlite/foreign-key.js +24 -0
  575. package/src/database/drivers/sqlite/index.js +394 -0
  576. package/src/database/drivers/sqlite/index.native.js +72 -0
  577. package/src/database/drivers/sqlite/index.web.js +99 -0
  578. package/src/database/drivers/sqlite/options.js +32 -0
  579. package/src/database/drivers/sqlite/query-parser.js +6 -0
  580. package/src/database/drivers/sqlite/query.js +35 -0
  581. package/src/database/drivers/sqlite/query.native.js +35 -0
  582. package/src/database/drivers/sqlite/query.web.js +49 -0
  583. package/src/database/drivers/sqlite/sql/alter-table.js +187 -0
  584. package/src/database/drivers/sqlite/sql/create-index.js +6 -0
  585. package/src/database/drivers/sqlite/sql/create-table.js +6 -0
  586. package/src/database/drivers/sqlite/sql/delete.js +26 -0
  587. package/src/database/drivers/sqlite/sql/drop-table.js +6 -0
  588. package/src/database/drivers/sqlite/sql/insert.js +6 -0
  589. package/src/database/drivers/sqlite/sql/update.js +33 -0
  590. package/src/database/drivers/sqlite/sql/upsert.js +14 -0
  591. package/src/database/drivers/sqlite/structure-sql.js +56 -0
  592. package/src/database/drivers/sqlite/table-rebuilder.js +96 -0
  593. package/src/database/drivers/sqlite/table.js +131 -0
  594. package/src/database/drivers/structure-sql/utils.js +35 -0
  595. package/src/database/handler.js +13 -0
  596. package/src/database/initializer-from-require-context.js +101 -0
  597. package/src/database/migration/index.js +438 -0
  598. package/src/database/migrator/files-finder.js +55 -0
  599. package/src/database/migrator/types.js +31 -0
  600. package/src/database/migrator.js +557 -0
  601. package/src/database/pool/async-tracked-multi-connection.js +1164 -0
  602. package/src/database/pool/base-methods-forward.js +52 -0
  603. package/src/database/pool/base.js +380 -0
  604. package/src/database/pool/single-multi-use.js +118 -0
  605. package/src/database/query/alter-table-base.js +104 -0
  606. package/src/database/query/base.js +49 -0
  607. package/src/database/query/create-database-base.js +42 -0
  608. package/src/database/query/create-index-base.js +117 -0
  609. package/src/database/query/create-table-base.js +205 -0
  610. package/src/database/query/delete-base.js +19 -0
  611. package/src/database/query/drop-database-base.js +38 -0
  612. package/src/database/query/drop-table-base.js +58 -0
  613. package/src/database/query/from-base.js +36 -0
  614. package/src/database/query/from-plain.js +16 -0
  615. package/src/database/query/from-table.js +18 -0
  616. package/src/database/query/index.js +533 -0
  617. package/src/database/query/insert-base.js +172 -0
  618. package/src/database/query/join-base.js +43 -0
  619. package/src/database/query/join-object.js +167 -0
  620. package/src/database/query/join-plain.js +18 -0
  621. package/src/database/query/join-tracker.js +93 -0
  622. package/src/database/query/model-class-query.js +1577 -0
  623. package/src/database/query/order-base.js +33 -0
  624. package/src/database/query/order-column.js +77 -0
  625. package/src/database/query/order-plain.js +28 -0
  626. package/src/database/query/preloader/belongs-to.js +267 -0
  627. package/src/database/query/preloader/ensure-model-class-initialized.js +18 -0
  628. package/src/database/query/preloader/has-many.js +316 -0
  629. package/src/database/query/preloader/has-one.js +123 -0
  630. package/src/database/query/preloader/selection.js +152 -0
  631. package/src/database/query/preloader.js +201 -0
  632. package/src/database/query/query-data.js +305 -0
  633. package/src/database/query/select-base.js +30 -0
  634. package/src/database/query/select-plain.js +18 -0
  635. package/src/database/query/select-table-and-column.js +28 -0
  636. package/src/database/query/update-base.js +41 -0
  637. package/src/database/query/upsert-base.js +103 -0
  638. package/src/database/query/where-base.js +38 -0
  639. package/src/database/query/where-combinator.js +31 -0
  640. package/src/database/query/where-hash.js +77 -0
  641. package/src/database/query/where-model-class-hash.js +505 -0
  642. package/src/database/query/where-not.js +23 -0
  643. package/src/database/query/where-plain.js +20 -0
  644. package/src/database/query/with-count.js +219 -0
  645. package/src/database/query-parser/base-query-parser.js +40 -0
  646. package/src/database/query-parser/from-parser.js +49 -0
  647. package/src/database/query-parser/group-parser.js +55 -0
  648. package/src/database/query-parser/joins-parser.js +37 -0
  649. package/src/database/query-parser/limit-parser.js +77 -0
  650. package/src/database/query-parser/options.js +94 -0
  651. package/src/database/query-parser/order-parser.js +45 -0
  652. package/src/database/query-parser/select-parser.js +67 -0
  653. package/src/database/query-parser/where-parser.js +46 -0
  654. package/src/database/record/acts-as-list.js +374 -0
  655. package/src/database/record/attachments/download.js +49 -0
  656. package/src/database/record/attachments/handle.js +188 -0
  657. package/src/database/record/attachments/normalize-input.js +213 -0
  658. package/src/database/record/attachments/storage-drivers/filesystem.js +114 -0
  659. package/src/database/record/attachments/storage-drivers/native.js +146 -0
  660. package/src/database/record/attachments/storage-drivers/s3.js +245 -0
  661. package/src/database/record/attachments/store.js +591 -0
  662. package/src/database/record/index.js +4094 -0
  663. package/src/database/record/instance-relationships/base.js +289 -0
  664. package/src/database/record/instance-relationships/belongs-to.js +84 -0
  665. package/src/database/record/instance-relationships/has-many.js +284 -0
  666. package/src/database/record/instance-relationships/has-one.js +117 -0
  667. package/src/database/record/record-not-found-error.js +3 -0
  668. package/src/database/record/relationships/base.js +195 -0
  669. package/src/database/record/relationships/belongs-to.js +57 -0
  670. package/src/database/record/relationships/has-many.js +46 -0
  671. package/src/database/record/relationships/has-one.js +46 -0
  672. package/src/database/record/state-machine.js +278 -0
  673. package/src/database/record/user-module.js +43 -0
  674. package/src/database/record/validators/base.js +27 -0
  675. package/src/database/record/validators/format.js +50 -0
  676. package/src/database/record/validators/presence.js +24 -0
  677. package/src/database/record/validators/uniqueness.js +124 -0
  678. package/src/database/table-data/index.js +241 -0
  679. package/src/database/table-data/table-column.js +416 -0
  680. package/src/database/table-data/table-foreign-key.js +69 -0
  681. package/src/database/table-data/table-index.js +46 -0
  682. package/src/database/table-data/table-reference.js +13 -0
  683. package/src/database/use-database.js +48 -0
  684. package/src/environment-handlers/base.js +561 -0
  685. package/src/environment-handlers/browser.js +338 -0
  686. package/src/environment-handlers/node/cli/commands/background-jobs-main.js +21 -0
  687. package/src/environment-handlers/node/cli/commands/background-jobs-runner.js +24 -0
  688. package/src/environment-handlers/node/cli/commands/background-jobs-worker.js +47 -0
  689. package/src/environment-handlers/node/cli/commands/beacon.js +21 -0
  690. package/src/environment-handlers/node/cli/commands/cli-command-context.js +31 -0
  691. package/src/environment-handlers/node/cli/commands/console.js +149 -0
  692. package/src/environment-handlers/node/cli/commands/db/schema/dump.js +43 -0
  693. package/src/environment-handlers/node/cli/commands/db/schema/load.js +69 -0
  694. package/src/environment-handlers/node/cli/commands/db/seed.js +79 -0
  695. package/src/environment-handlers/node/cli/commands/destroy/migration.js +47 -0
  696. package/src/environment-handlers/node/cli/commands/generate/base-models.js +396 -0
  697. package/src/environment-handlers/node/cli/commands/generate/frontend-models.js +872 -0
  698. package/src/environment-handlers/node/cli/commands/generate/migration.js +45 -0
  699. package/src/environment-handlers/node/cli/commands/generate/model.js +45 -0
  700. package/src/environment-handlers/node/cli/commands/init.js +68 -0
  701. package/src/environment-handlers/node/cli/commands/routes.js +63 -0
  702. package/src/environment-handlers/node/cli/commands/run-script.js +85 -0
  703. package/src/environment-handlers/node/cli/commands/runner.js +84 -0
  704. package/src/environment-handlers/node/cli/commands/server.js +151 -0
  705. package/src/environment-handlers/node/cli/commands/test.js +118 -0
  706. package/src/environment-handlers/node.js +887 -0
  707. package/src/error-logger.js +30 -0
  708. package/src/frontend-model-controller.js +3491 -0
  709. package/src/frontend-model-resource/base-resource.js +935 -0
  710. package/src/frontend-models/base.js +4004 -0
  711. package/src/frontend-models/clear-pending-debounced-callback.js +16 -0
  712. package/src/frontend-models/event-hook-models.js +49 -0
  713. package/src/frontend-models/model-registry.js +28 -0
  714. package/src/frontend-models/outgoing-event-buffer.js +51 -0
  715. package/src/frontend-models/preloader.js +169 -0
  716. package/src/frontend-models/query.js +2245 -0
  717. package/src/frontend-models/resource-config-validation.js +56 -0
  718. package/src/frontend-models/resource-definition.js +399 -0
  719. package/src/frontend-models/transport-serialization.js +369 -0
  720. package/src/frontend-models/use-created-event.js +21 -0
  721. package/src/frontend-models/use-destroyed-event.js +148 -0
  722. package/src/frontend-models/use-model-class-event.js +164 -0
  723. package/src/frontend-models/use-updated-event.js +152 -0
  724. package/src/frontend-models/websocket-channel.js +494 -0
  725. package/src/frontend-models/websocket-publishers.js +224 -0
  726. package/src/http-client/header.js +17 -0
  727. package/src/http-client/index.js +139 -0
  728. package/src/http-client/request.js +94 -0
  729. package/src/http-client/response.js +151 -0
  730. package/src/http-client/websocket-client.js +27 -0
  731. package/src/http-server/client/index.js +507 -0
  732. package/src/http-server/client/params-to-object.js +152 -0
  733. package/src/http-server/client/request-buffer/form-data-part.js +139 -0
  734. package/src/http-server/client/request-buffer/header.js +19 -0
  735. package/src/http-server/client/request-buffer/index.js +535 -0
  736. package/src/http-server/client/request-parser.js +195 -0
  737. package/src/http-server/client/request-runner.js +321 -0
  738. package/src/http-server/client/request-timing.js +171 -0
  739. package/src/http-server/client/request.js +114 -0
  740. package/src/http-server/client/response.js +251 -0
  741. package/src/http-server/client/uploaded-file/memory-uploaded-file.js +32 -0
  742. package/src/http-server/client/uploaded-file/temporary-uploaded-file.js +32 -0
  743. package/src/http-server/client/uploaded-file/uploaded-file.js +36 -0
  744. package/src/http-server/client/websocket-request.js +147 -0
  745. package/src/http-server/client/websocket-session.js +1755 -0
  746. package/src/http-server/cookie.js +245 -0
  747. package/src/http-server/development-reloader.js +240 -0
  748. package/src/http-server/index.js +561 -0
  749. package/src/http-server/remote-address.js +77 -0
  750. package/src/http-server/server-client.js +222 -0
  751. package/src/http-server/server-lock.js +178 -0
  752. package/src/http-server/websocket-channel-subscribers.js +110 -0
  753. package/src/http-server/websocket-channel.js +137 -0
  754. package/src/http-server/websocket-connection.js +118 -0
  755. package/src/http-server/websocket-event-log-store.js +433 -0
  756. package/src/http-server/websocket-events-host.js +170 -0
  757. package/src/http-server/websocket-events.js +50 -0
  758. package/src/http-server/worker-handler/channel-subscriber-dispatch.js +28 -0
  759. package/src/http-server/worker-handler/in-process.js +155 -0
  760. package/src/http-server/worker-handler/index.js +370 -0
  761. package/src/http-server/worker-handler/worker-script.js +6 -0
  762. package/src/http-server/worker-handler/worker-thread.js +286 -0
  763. package/src/initializer.js +39 -0
  764. package/src/jobs/.gitkeep +1 -0
  765. package/src/jobs/mail-delivery.js +22 -0
  766. package/src/logger/base-logger.js +34 -0
  767. package/src/logger/console-logger.js +28 -0
  768. package/src/logger/file-logger.js +36 -0
  769. package/src/logger/outputs/array-output.js +50 -0
  770. package/src/logger/outputs/console-output.js +32 -0
  771. package/src/logger/outputs/file-output.js +55 -0
  772. package/src/logger/outputs/stdout-output.js +64 -0
  773. package/src/logger.js +507 -0
  774. package/src/mailer/backends/smtp.js +197 -0
  775. package/src/mailer/base.js +337 -0
  776. package/src/mailer/delivery.js +70 -0
  777. package/src/mailer/index.js +24 -0
  778. package/src/mailer.js +15 -0
  779. package/src/plugins/sqljs-wasm-route-controller.js +70 -0
  780. package/src/plugins/sqljs-wasm-route.js +71 -0
  781. package/src/record-payload-values.js +83 -0
  782. package/src/routes/app-routes.js +17 -0
  783. package/src/routes/base-route.js +133 -0
  784. package/src/routes/basic-route.js +109 -0
  785. package/src/routes/built-in/debug/controller.js +12 -0
  786. package/src/routes/built-in/errors/controller.js +7 -0
  787. package/src/routes/built-in/errors/not-found.ejs +1 -0
  788. package/src/routes/get-route.js +75 -0
  789. package/src/routes/hooks/frontend-model-command-route-hook.js +100 -0
  790. package/src/routes/index.js +50 -0
  791. package/src/routes/namespace-route.js +51 -0
  792. package/src/routes/plugin-routes.js +141 -0
  793. package/src/routes/post-route.js +74 -0
  794. package/src/routes/resolver.js +535 -0
  795. package/src/routes/resource-route.js +154 -0
  796. package/src/routes/root-route.js +11 -0
  797. package/src/templates/configuration.js +61 -0
  798. package/src/templates/generate-migration.js +11 -0
  799. package/src/templates/generate-model.js +6 -0
  800. package/src/templates/routes.js +11 -0
  801. package/src/testing/base-expect.js +17 -0
  802. package/src/testing/browser-frontend-model-event-hook-scenarios.js +520 -0
  803. package/src/testing/browser-test-app.js +32 -0
  804. package/src/testing/expect-to-change.js +55 -0
  805. package/src/testing/expect-utils.js +269 -0
  806. package/src/testing/expect.js +763 -0
  807. package/src/testing/request-client.js +90 -0
  808. package/src/testing/test-files-finder.js +364 -0
  809. package/src/testing/test-filter-parser.js +198 -0
  810. package/src/testing/test-runner.js +1168 -0
  811. package/src/testing/test-suite-splitter.js +177 -0
  812. package/src/testing/test.js +370 -0
  813. package/src/types/external-modules.d.ts +57 -0
  814. package/src/utils/backtrace-cleaner-node.js +87 -0
  815. package/src/utils/backtrace-cleaner.js +266 -0
  816. package/src/utils/ensure-error.js +15 -0
  817. package/src/utils/event-emitter.js +8 -0
  818. package/src/utils/file-exists.js +18 -0
  819. package/src/utils/format-value.js +101 -0
  820. package/src/utils/model-scope.js +56 -0
  821. package/src/utils/nest-callbacks.js +22 -0
  822. package/src/utils/plain-object.js +14 -0
  823. package/src/utils/ransack.js +859 -0
  824. package/src/utils/rest-args-error.js +14 -0
  825. package/src/utils/singularize-model-name.js +18 -0
  826. package/src/utils/split-sql-statements.js +88 -0
  827. package/src/utils/to-import-specifier.js +53 -0
  828. package/src/utils/with-tracked-stack-async-hooks.js +103 -0
  829. package/src/utils/with-tracked-stack.js +38 -0
  830. package/src/velocious-error.js +34 -0
  831. package/tsconfig.json +16 -0
@@ -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
package/src/mailer.js ADDED
@@ -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
+ }