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,370 @@
1
+ // @ts-check
2
+
3
+ import Logger from "../../logger.js"
4
+ import {Worker} from "worker_threads"
5
+ import ensureError from "../../utils/ensure-error.js"
6
+ import websocketEventsHost from "../websocket-events-host.js"
7
+
8
+ /**
9
+ * Runs summarize worker message.
10
+ * @param {object} data - Worker message payload.
11
+ * @param {string} data.command - Command name.
12
+ * @param {number} [data.clientCount] - Client count.
13
+ * @param {string | Uint8Array} [data.output] - Output chunk.
14
+ * @returns {object} - Log-safe message details.
15
+ */
16
+ function summarizeWorkerMessage(data) {
17
+ const {output, ...rest} = data
18
+
19
+ if (output === undefined) {
20
+ return rest
21
+ }
22
+
23
+ const outputType = typeof output
24
+ const outputLength = typeof output === "string"
25
+ ? output.length
26
+ : (output instanceof Uint8Array ? output.byteLength : undefined)
27
+
28
+ return {
29
+ ...rest,
30
+ output: {
31
+ length: outputLength,
32
+ type: outputType
33
+ }
34
+ }
35
+ }
36
+
37
+ export default class VelociousHttpServerWorker {
38
+ /**
39
+ * Runs constructor.
40
+ * @param {object} args - Options object.
41
+ * @param {import("../../configuration.js").default} args.configuration - Configuration instance.
42
+ * @param {number} args.workerCount - Worker count.
43
+ */
44
+ constructor({configuration, workerCount}) {
45
+ this.configuration = configuration
46
+
47
+ /**
48
+ * Narrows the runtime value to the documented type.
49
+ @type {Record<number, import("../server-client.js").default>} */
50
+ this.clients = {}
51
+
52
+ this.logger = new Logger(this)
53
+ this.workerCount = workerCount
54
+ this.workerStarted = false
55
+ this._stopping = false
56
+ this._debugRequestId = 0
57
+ /**
58
+ * Narrows the runtime value to the documented type.
59
+ @type {Map<number, {resolve: (snapshot: Record<string, ?>) => void}>} */
60
+ this._debugSnapshotRequests = new Map()
61
+ }
62
+
63
+ start() {
64
+ return new Promise((resolve) => {
65
+ this.onStartCallback = resolve
66
+ this._spawnWorker()
67
+ })
68
+ }
69
+
70
+ async _spawnWorker() {
71
+ const debug = this.configuration.debug
72
+ const directory = this.configuration.getDirectory()
73
+ const velociousPath = await this.configuration.getEnvironmentHandler().getVelociousPath()
74
+
75
+ this.worker = new Worker(`${velociousPath}/src/http-server/worker-handler/worker-script.js`, {
76
+ workerData: {
77
+ debug,
78
+ directory,
79
+ environment: this.configuration.getEnvironment(),
80
+ workerCount: this.workerCount
81
+ }
82
+ })
83
+ this.worker.on("error", this.onWorkerError)
84
+ this.worker.on("exit", this.onWorkerExit)
85
+ this.worker.on("message", this.onWorkerMessage)
86
+ }
87
+
88
+ /**
89
+ * Runs add socket connection.
90
+ * @param {import("../server-client.js").default} client - Client instance.
91
+ * @returns {void} - No return value.
92
+ */
93
+ addSocketConnection(client) {
94
+ const clientCount = client.clientCount
95
+
96
+ if (!this.worker) throw new Error("Worker not initialized")
97
+
98
+ client.setWorker(this.worker)
99
+ client.listen()
100
+
101
+ this.clients[clientCount] = client
102
+ this.worker.postMessage({command: "newClient", clientCount, remoteAddress: client.remoteAddress})
103
+ }
104
+
105
+ /**
106
+ * On worker error.
107
+ * @param {?} error - Error instance.
108
+ */
109
+ onWorkerError = (error) => {
110
+ this.logger.error(`Velocious worker ${this.workerCount} error`, error)
111
+ void this._closeAllClients()
112
+ throw ensureError(error) // Throws original error with backtrace and everything into the console
113
+ }
114
+
115
+ /**
116
+ * On worker exit.
117
+ * @param {number} code - Code.
118
+ * @returns {void} - No return value.
119
+ */
120
+ onWorkerExit = (code) => {
121
+ this._hasExited = true
122
+ this.workerStarted = false
123
+
124
+ if (code !== 0 && !this._stopping) {
125
+ this.logger.error(`Velocious worker ${this.workerCount} exited unexpectedly with code ${code}`)
126
+ void this._closeAllClients()
127
+ throw new Error(`Client worker stopped with exit code ${code}`)
128
+ } else {
129
+ this.logger.debug(() => `Client worker stopped with exit code ${code}`)
130
+ }
131
+
132
+ this.unregisterFromEventsHostIfNeeded()
133
+ if (this._stopResolve) {
134
+ this._stopResolve()
135
+ }
136
+ this._stopResolve = null
137
+ }
138
+
139
+ /**
140
+ * Runs close all clients.
141
+ * @returns {void} - No return value.
142
+ */
143
+ _closeAllClients() {
144
+ const clients = Object.values(this.clients)
145
+ this.clients = {}
146
+
147
+ for (const client of clients) {
148
+ try {
149
+ void client.end()
150
+ } catch (error) {
151
+ this.logger.warn("Failed to close client after worker exit", error)
152
+ }
153
+ }
154
+ }
155
+
156
+ /**
157
+ * On worker message.
158
+ * @param {object} data - Data payload.
159
+ * @param {string} data.command - Command.
160
+ * @param {number} [data.clientCount] - Client count.
161
+ * @param {string | Uint8Array} [data.output] - Output.
162
+ * @param {string} [data.channel] - Channel name.
163
+ * @param {number} [data.requestId] - Debug request id.
164
+ * @param {Record<string, ?>} [data.snapshot] - Worker debug snapshot.
165
+ * @param {?} [data.payload] - Payload data.
166
+ * @param {Record<string, ?>} [data.broadcastParams] - V2 broadcast filter params.
167
+ * @param {?} [data.body] - V2 broadcast body.
168
+ * @returns {void} - No return value.
169
+ */
170
+ onWorkerMessage = (data) => {
171
+ this.logger.debug("Worker message", summarizeWorkerMessage(data))
172
+
173
+ const {command} = data
174
+
175
+
176
+ if (command == "started") {
177
+ this.workerStarted = true
178
+ this.registerWithEventsHost()
179
+
180
+ if (this.onStartCallback) {
181
+ this.onStartCallback(null)
182
+ }
183
+
184
+ this.onStartCallback = null
185
+ } else if (command == "clientOutput") {
186
+ this.logger.debug("CLIENT OUTPUT", summarizeWorkerMessage(data))
187
+
188
+ const {clientCount, output} = data
189
+ const client = typeof clientCount === "number" ? this.clients[clientCount] : undefined
190
+
191
+ if (!client) {
192
+ this.logger.warn(() => [`Velocious worker ${this.workerCount} produced output for missing client ${clientCount}`, data])
193
+ return
194
+ }
195
+
196
+ if (output !== null && output !== undefined) {
197
+ const outputLength = typeof output === "string" ? output.length : output.byteLength
198
+
199
+ void client.send(output).then(() => {
200
+ this.logger.debug(() => ["Client output delivered", {
201
+ clientCount,
202
+ outputLength,
203
+ workerCount: this.workerCount
204
+ }])
205
+ }).catch((error) => {
206
+ this.logger.error(() => ["Failed to deliver client output", {
207
+ clientCount,
208
+ workerCount: this.workerCount
209
+ }, error])
210
+ })
211
+ }
212
+ } else if (command == "clientClose") {
213
+ const {clientCount} = data
214
+ const client = typeof clientCount === "number" ? this.clients[clientCount] : undefined
215
+
216
+ if (!client) {
217
+ this.logger.error(() => [`Velocious worker ${this.workerCount} requested close for missing client ${clientCount}`, data])
218
+ return
219
+ }
220
+
221
+ void client.end()
222
+
223
+ if (typeof clientCount === "number") {
224
+ delete this.clients[clientCount]
225
+ }
226
+ } else if (command == "debugSnapshot") {
227
+ const {requestId, snapshot} = data
228
+ if (typeof requestId !== "number") throw new Error("debugSnapshot requestId must be a number")
229
+ const request = this._debugSnapshotRequests.get(requestId)
230
+
231
+ if (request) {
232
+ this._debugSnapshotRequests.delete(requestId)
233
+ request.resolve(snapshot || {})
234
+ }
235
+ } else if (command == "shutdownComplete") {
236
+ this._stopResolve?.()
237
+ this._stopResolve = null
238
+ } else if (command == "websocketPublish") {
239
+ const {channel, payload} = data
240
+
241
+ if (typeof channel !== "string") {
242
+ throw new Error("Worker websocket publish channel must be a string")
243
+ }
244
+
245
+ websocketEventsHost.publish({channel, payload})
246
+ } else if (command == "websocketV2Broadcast") {
247
+ const {body, broadcastParams, channel} = data
248
+
249
+ if (typeof channel !== "string") {
250
+ throw new Error("Worker websocket v2-broadcast channel must be a string")
251
+ }
252
+
253
+ websocketEventsHost.broadcastV2({body, broadcastParams: broadcastParams || {}, channel})
254
+ } else {
255
+ throw new Error(`Unknown command: ${command}`)
256
+ }
257
+ }
258
+
259
+ /**
260
+ * Runs get debug snapshot.
261
+ * @returns {Promise<Record<string, ?>>} - Worker-local debug snapshot.
262
+ */
263
+ getDebugSnapshot() {
264
+ if (!this.workerStarted || !this.worker) {
265
+ return Promise.resolve({active: false, workerCount: this.workerCount})
266
+ }
267
+
268
+ const requestId = ++this._debugRequestId
269
+
270
+ return new Promise((resolve) => {
271
+ const timeout = setTimeout(() => {
272
+ this._debugSnapshotRequests.delete(requestId)
273
+ resolve({active: true, error: "Timed out waiting for worker debug snapshot", workerCount: this.workerCount})
274
+ }, 2000)
275
+
276
+ if (typeof timeout.unref === "function") timeout.unref()
277
+
278
+ const worker = this.worker
279
+
280
+ if (!worker) {
281
+ clearTimeout(timeout)
282
+ resolve({active: false, workerCount: this.workerCount})
283
+ return
284
+ }
285
+
286
+ this._debugSnapshotRequests.set(requestId, {
287
+ resolve: (snapshot) => {
288
+ clearTimeout(timeout)
289
+ resolve({active: true, snapshot, workerCount: this.workerCount})
290
+ }
291
+ })
292
+ worker.postMessage({command: "debugSnapshot", requestId})
293
+ })
294
+ }
295
+
296
+ /**
297
+ * Runs stop.
298
+ * @returns {Promise<void>} - Resolves when stopped.
299
+ */
300
+ stop() {
301
+ if (!this.worker) return Promise.resolve()
302
+ if (this._hasExited) return Promise.resolve()
303
+
304
+ this._stopping = true
305
+ this.workerStarted = false
306
+ this.unregisterFromEventsHostIfNeeded()
307
+ const worker = this.worker
308
+
309
+ if (!worker) return Promise.resolve()
310
+
311
+ return new Promise((resolve) => {
312
+ this._stopResolve = resolve
313
+ worker.postMessage({command: "shutdown"})
314
+ })
315
+ }
316
+
317
+ /**
318
+ * Runs dispatch websocket event.
319
+ * @param {object} args - Options object.
320
+ * @param {string} args.channel - Channel name.
321
+ * @param {string} [args.createdAt] - Event creation time.
322
+ * @param {string} [args.eventId] - Event identifier.
323
+ * @param {?} args.payload - Payload data.
324
+ * @returns {void} - No return value.
325
+ */
326
+ dispatchWebsocketEvent({channel, createdAt, eventId, payload}) {
327
+ // Test and shutdown paths can leave a registered handler without a live worker-thread transport.
328
+ if (!this.workerStarted) return
329
+ if (!this.worker || typeof this.worker.postMessage !== "function") return
330
+
331
+ this.worker.postMessage({channel, command: "websocketEvent", createdAt, eventId, payload})
332
+ }
333
+
334
+ /**
335
+ * Forwards a V2 channel broadcast to this worker's thread so it can
336
+ * dispatch to any locally-registered V2 subscriptions.
337
+ * @param {object} args - Options object.
338
+ * @param {string} args.channel - Channel name.
339
+ * @param {Record<string, ?>} args.broadcastParams - Routing filter params.
340
+ * @param {?} args.body - Message body.
341
+ * @param {string} [args.eventId] - Persisted event id for replay.
342
+ * @param {string} [args.createdAt] - Event creation timestamp.
343
+ * @returns {void}
344
+ */
345
+ dispatchWebsocketV2Broadcast({body, broadcastParams, channel, eventId, createdAt}) {
346
+ if (!this.workerStarted) return
347
+ if (!this.worker || typeof this.worker.postMessage !== "function") return
348
+
349
+ this.worker.postMessage({body, broadcastParams, channel, command: "websocketV2Broadcast", eventId, createdAt})
350
+ }
351
+
352
+ /**
353
+ * Runs register with events host.
354
+ @returns {void} */
355
+ registerWithEventsHost() {
356
+ if (this.unregisterFromEventsHost) return
357
+
358
+ this.unregisterFromEventsHost = websocketEventsHost.register(this)
359
+ }
360
+
361
+ /**
362
+ * Runs unregister from events host if needed.
363
+ @returns {void} */
364
+ unregisterFromEventsHostIfNeeded() {
365
+ if (!this.unregisterFromEventsHost) return
366
+
367
+ this.unregisterFromEventsHost()
368
+ this.unregisterFromEventsHost = null
369
+ }
370
+ }
@@ -0,0 +1,6 @@
1
+ // @ts-check
2
+
3
+ import {workerData, parentPort} from "worker_threads"
4
+ import WorkerThread from "./worker-thread.js"
5
+
6
+ new WorkerThread({parentPort, workerData})
@@ -0,0 +1,286 @@
1
+ // @ts-check
2
+
3
+ import Application from "../../application.js"
4
+ import Client from "../client/index.js"
5
+ import dispatchChannelSubscribers from "./channel-subscriber-dispatch.js"
6
+ import {digg} from "diggerize"
7
+ import errorLogger from "../../error-logger.js"
8
+ import Logger from "../../logger.js"
9
+ import toImportSpecifier from "../../utils/to-import-specifier.js"
10
+ import WebsocketEvents from "../websocket-events.js"
11
+
12
+ /**
13
+ * Runs summarize client write chunk.
14
+ * @param {Buffer | Uint8Array | string} chunk - Client input payload.
15
+ * @returns {{length: number, preview: string}} - Chunk summary for logging.
16
+ */
17
+ function summarizeClientWriteChunk(chunk) {
18
+ const normalizedChunk = typeof chunk === "string" ? Buffer.from(chunk) : Buffer.from(chunk)
19
+ const preview = normalizedChunk.toString("latin1", 0, Math.min(normalizedChunk.length, 160)).replaceAll("\r", "\\r").replaceAll("\n", "\\n")
20
+
21
+ return {length: normalizedChunk.length, preview}
22
+ }
23
+
24
+ export default class VelociousHttpServerWorkerHandlerWorkerThread {
25
+ /**
26
+ * Runs constructor.
27
+ * @param {object} args - Options object.
28
+ * @param {import("worker_threads").parentPort} args.parentPort - Parent port.
29
+ * @param {{debug: boolean, directory: string, environment: string, workerCount: number}} args.workerData - Worker configuration details.
30
+ */
31
+ constructor({parentPort, workerData}) {
32
+ if (!parentPort) throw new Error("parentPort is required")
33
+
34
+ const {workerCount} = workerData
35
+
36
+ /**
37
+ * Narrows the runtime value to the documented type.
38
+ @type {Record<number, Client>} */
39
+ this.clients = {}
40
+
41
+ this.logger = new Logger(this)
42
+ this.parentPort = parentPort
43
+ this.workerData = workerData
44
+ this.workerCount = workerCount
45
+
46
+ parentPort.on("message", errorLogger(this.onCommand))
47
+
48
+ this.initialize().then(() => {
49
+ if (!this.application) throw new Error("Application not initialized")
50
+
51
+ this.application.initialize().then(() => {
52
+ this.logger.debugLowLevel(() => `Worker ${workerCount} started`)
53
+ parentPort.postMessage({command: "started"})
54
+ })
55
+ })
56
+ }
57
+
58
+ /**
59
+ * Runs initialize.
60
+ * @returns {Promise<void>} - Resolves when complete.
61
+ */
62
+ async initialize() {
63
+ const {debug, directory, environment} = this.workerData
64
+ const configurationPath = `${directory}/src/config/configuration.js`
65
+ const configurationImport = await import(toImportSpecifier(configurationPath))
66
+
67
+ /**
68
+ * Narrows the runtime value to the documented type.
69
+ @type {import("../../configuration.js").default} */
70
+ this.configuration = configurationImport.default
71
+
72
+ if (!this.configuration) throw new Error(`Configuration couldn't be loaded from: ${configurationPath}`)
73
+
74
+ const configuration = this.configuration
75
+
76
+ configuration.debug = debug === true
77
+ configuration.setEnvironment(environment)
78
+ configuration.setCurrent()
79
+ await this.logger.debug(() => ["Worker thread configuration loaded", {debug: configuration.debug, workerCount: this.workerCount}])
80
+ this.websocketEvents = new WebsocketEvents({parentPort: this.parentPort, workerCount: this.workerCount})
81
+ configuration.setWebsocketEvents(this.websocketEvents)
82
+
83
+ this.application = new Application({configuration, type: "worker-handler"})
84
+
85
+ if (!configuration.isInitialized()) {
86
+ await configuration.initialize({type: "worker-handler"})
87
+ }
88
+ }
89
+
90
+ /**
91
+ * On command.
92
+ * @param {object} data - Data payload.
93
+ * @param {string} data.command - Command.
94
+ * @param {Buffer | Uint8Array | string} [data.chunk] - Chunk.
95
+ * @param {string} [data.remoteAddress] - Remote address.
96
+ * @param {number} [data.clientCount] - Client count.
97
+ * @param {string} [data.channel] - Channel name.
98
+ * @param {string} [data.createdAt] - Event creation time.
99
+ * @param {string} [data.eventId] - Event identifier.
100
+ * @param {number} [data.requestId] - Debug request id.
101
+ * @param {?} [data.payload] - Payload data.
102
+ * @param {Record<string, ?>} [data.broadcastParams] - V2 broadcast filter params.
103
+ * @param {?} [data.body] - V2 broadcast body.
104
+ */
105
+ onCommand = async (data) => {
106
+ await this.logger.debugLowLevel(() => [`Worker ${this.workerCount} received command`, data])
107
+
108
+ const command = data.command
109
+
110
+ if (command == "newClient") {
111
+ this.handleNewClient(data)
112
+ } else if (command == "clientWrite") {
113
+ await this.handleClientWrite(data)
114
+ } else if (command == "websocketEvent") {
115
+ await this.handleWebsocketEvent(data)
116
+ } else if (command == "websocketV2Broadcast") {
117
+ this.handleWebsocketV2Broadcast(data)
118
+ } else if (command == "debugSnapshot") {
119
+ this.handleDebugSnapshot(data)
120
+ } else if (command == "shutdown") {
121
+ await this.handleShutdown()
122
+ } else {
123
+ throw new Error(`Unknown command: ${command}`)
124
+ }
125
+ }
126
+
127
+ /**
128
+ * Runs handle new client.
129
+ * @param {object} data - Data payload.
130
+ * @param {number} [data.clientCount] - Client count.
131
+ * @param {string} [data.remoteAddress] - Remote address.
132
+ * @returns {void}
133
+ */
134
+ handleNewClient(data) {
135
+ if (!this.configuration) throw new Error("Configuration not initialized")
136
+
137
+ const {clientCount, remoteAddress} = data
138
+
139
+ if (typeof clientCount !== "number") throw new Error("clientCount must be a number")
140
+
141
+ const client = new Client({
142
+ clientCount,
143
+ configuration: this.configuration,
144
+ remoteAddress
145
+ })
146
+
147
+ client.events.on("output", (output) => {
148
+ this.parentPort.postMessage({command: "clientOutput", clientCount, output})
149
+ })
150
+
151
+ client.events.on("close", (output) => {
152
+ this.logger.debugLowLevel(() => "Close received from client in worker - forwarding to worker parent")
153
+ this.parentPort.postMessage({command: "clientClose", clientCount, output})
154
+ })
155
+
156
+ this.clients[clientCount] = client
157
+ }
158
+
159
+ /**
160
+ * Runs handle client write.
161
+ * @param {object} data - Data payload.
162
+ * @param {Buffer | Uint8Array | string} [data.chunk] - Chunk.
163
+ * @param {number} [data.clientCount] - Client count.
164
+ * @returns {Promise<void>} Resolves when the client write is dispatched.
165
+ */
166
+ async handleClientWrite(data) {
167
+ await this.logger.debugLowLevel("Looking up client")
168
+
169
+ const {chunk, clientCount} = data
170
+ if (!chunk) throw new Error("No chunk given")
171
+ const client = /**
172
+ * Narrows the runtime value to the documented type.
173
+ @type {Client | undefined} */ (digg(this.clients, clientCount))
174
+
175
+ if (!client) throw new Error(`Client not found for clientWrite: ${clientCount}`)
176
+
177
+ const clientChunk = typeof chunk === "string" ? Buffer.from(chunk) : Buffer.from(chunk)
178
+
179
+ await this.logger.debug(() => ["Sending clientWrite to parser", {clientCount, ...summarizeClientWriteChunk(clientChunk)}])
180
+
181
+ client.onWrite(clientChunk)
182
+ }
183
+
184
+ /**
185
+ * Runs handle websocket event.
186
+ * @param {object} data - Data payload.
187
+ * @param {string} [data.channel] - Channel name.
188
+ * @param {string} [data.createdAt] - Event creation time.
189
+ * @param {string} [data.eventId] - Event identifier.
190
+ * @param {?} [data.payload] - Payload data.
191
+ * @returns {Promise<void>} Resolves when the websocket event is dispatched.
192
+ */
193
+ async handleWebsocketEvent(data) {
194
+ const {channel, createdAt, eventId, payload} = data
195
+
196
+ if (typeof channel !== "string") throw new Error("No channel given")
197
+
198
+ await this.broadcastWebsocketEvent({channel, createdAt, eventId, payload})
199
+ }
200
+
201
+ /**
202
+ * Runs handle websocket v2 broadcast.
203
+ * @param {object} data - Data payload.
204
+ * @param {Record<string, ?>} [data.broadcastParams] - V2 broadcast filter params.
205
+ * @param {?} [data.body] - V2 broadcast body.
206
+ * @param {string} [data.channel] - Channel name.
207
+ * @param {string} [data.eventId] - Event identifier.
208
+ * @returns {void}
209
+ */
210
+ handleWebsocketV2Broadcast(data) {
211
+ const {body, broadcastParams, channel, eventId} = data
212
+
213
+ if (typeof channel !== "string") throw new Error("No channel given")
214
+ if (!this.configuration) throw new Error("Configuration not initialized")
215
+
216
+ this.configuration._broadcastToChannelLocal(channel, broadcastParams || {}, body, {eventId})
217
+ }
218
+
219
+ /**
220
+ * Runs handle debug snapshot.
221
+ * @param {object} data - Data payload.
222
+ * @param {number} [data.requestId] - Debug request id.
223
+ * @returns {void}
224
+ */
225
+ handleDebugSnapshot(data) {
226
+ const {requestId} = data
227
+
228
+ if (typeof requestId !== "number") throw new Error("debugSnapshot requestId must be a number")
229
+ if (!this.configuration) throw new Error("Configuration not initialized")
230
+
231
+ this.parentPort.postMessage({
232
+ command: "debugSnapshot",
233
+ requestId,
234
+ snapshot: this.configuration.getLocalDebugSnapshot()
235
+ })
236
+ }
237
+
238
+ /**
239
+ * Runs handle shutdown.
240
+ * @returns {Promise<void>} Resolves after worker shutdown has been requested.
241
+ */
242
+ async handleShutdown() {
243
+ if (this.configuration?.closeDatabaseConnections) {
244
+ await this.configuration.closeDatabaseConnections()
245
+ }
246
+
247
+ this.parentPort.postMessage({command: "shutdownComplete"})
248
+ process.exit(0)
249
+ }
250
+
251
+ /**
252
+ * Runs broadcast websocket event.
253
+ * @param {object} args - Options object.
254
+ * @param {string} args.channel - Channel name.
255
+ * @param {string | undefined} args.createdAt - Event creation time.
256
+ * @param {string | undefined} args.eventId - Event identifier.
257
+ * @param {?} args.payload - Payload data.
258
+ * @returns {Promise<void>} - Resolves when complete.
259
+ */
260
+ async broadcastWebsocketEvent({channel, createdAt, eventId, payload}) {
261
+ const sendTasks = []
262
+
263
+ for (const clientKey of Object.keys(this.clients)) {
264
+ const client = this.clients[Number(clientKey)]
265
+ if (!client) continue
266
+ const session = client.websocketSession
267
+
268
+ if (!session) continue
269
+
270
+ sendTasks.push(session.sendEvent(channel, payload, {
271
+ createdAt,
272
+ eventId
273
+ }))
274
+ }
275
+
276
+ if (this.configuration) {
277
+ // Isolate channel subscriber failures so a buggy in-process callback
278
+ // cannot reject this command and crash the worker thread, but still
279
+ // surface the error to the framework error events so bug reporters
280
+ // can pick it up.
281
+ sendTasks.push(dispatchChannelSubscribers({channel, configuration: this.configuration, createdAt, eventId, logger: this.logger, payload}))
282
+ }
283
+
284
+ await Promise.all(sendTasks)
285
+ }
286
+ }
@@ -0,0 +1,39 @@
1
+ // @ts-check
2
+
3
+ import restArgsError from "./utils/rest-args-error.js"
4
+
5
+ export default class VelociousInitializer {
6
+ /**
7
+ * Runs constructor.
8
+ * @param {object} args - Options object.
9
+ * @param {import("./configuration.js").default} args.configuration - Configuration instance.
10
+ * @param {string} args.type - Type identifier.
11
+ */
12
+ constructor({configuration, type, ...restArgs}) {
13
+ restArgsError(restArgs)
14
+
15
+ this._configuration = configuration
16
+ this._type = type
17
+ }
18
+
19
+ /**
20
+ * Runs get configuration.
21
+ * @returns {import("./configuration.js").default} - The configuration.
22
+ */
23
+ getConfiguration() { return this._configuration }
24
+
25
+ /**
26
+ * Runs get type.
27
+ * @returns {string} - The type.
28
+ */
29
+ getType() { return this._type }
30
+
31
+ /**
32
+ * Runs run.
33
+ * @abstract
34
+ * @returns {Promise<void>} - Resolves when complete.
35
+ */
36
+ run() {
37
+ throw new Error(`'run' hasn't been implemented on ${this.constructor.name})`)
38
+ }
39
+ }