velocious 1.0.449 → 1.0.451

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 (636) hide show
  1. package/README.md +1 -1
  2. package/build/application.js +4 -4
  3. package/build/authorization/ability.js +8 -8
  4. package/build/authorization/base-resource.js +4 -4
  5. package/build/background-jobs/cron-expression.js +1 -1
  6. package/build/background-jobs/forked-runner-child.js +1 -1
  7. package/build/background-jobs/job-registry.js +1 -1
  8. package/build/background-jobs/job-runner.js +1 -1
  9. package/build/background-jobs/job.js +1 -1
  10. package/build/background-jobs/json-socket.js +4 -4
  11. package/build/background-jobs/main.js +21 -21
  12. package/build/background-jobs/scheduler.js +7 -7
  13. package/build/background-jobs/store.js +7 -7
  14. package/build/background-jobs/web/controller.js +2 -2
  15. package/build/background-jobs/worker.js +12 -12
  16. package/build/beacon/client.js +11 -8
  17. package/build/beacon/in-process-broker.js +2 -2
  18. package/build/beacon/in-process-client.js +2 -2
  19. package/build/beacon/server.js +3 -3
  20. package/build/cli/browser-cli.js +1 -1
  21. package/build/cli/commands/db/base-command.js +2 -2
  22. package/build/cli/index.js +2 -2
  23. package/build/cli/tenant-database-command-helper.js +3 -3
  24. package/build/cli/use-browser-cli.js +1 -1
  25. package/build/configuration-types.js +3 -1
  26. package/build/configuration.js +38 -38
  27. package/build/controller.js +8 -8
  28. package/build/current-configuration.js +1 -1
  29. package/build/database/annotations-async-hooks.js +2 -2
  30. package/build/database/annotations.js +3 -3
  31. package/build/database/drivers/base-column.js +1 -1
  32. package/build/database/drivers/base-foreign-key.js +1 -1
  33. package/build/database/drivers/base-table.js +1 -1
  34. package/build/database/drivers/base.js +10 -10
  35. package/build/database/drivers/mssql/index.js +1 -1
  36. package/build/database/drivers/mssql/table.js +1 -1
  37. package/build/database/drivers/mysql/index.js +3 -3
  38. package/build/database/drivers/mysql/query.js +1 -1
  39. package/build/database/drivers/mysql/table.js +1 -1
  40. package/build/database/drivers/pgsql/index.js +2 -2
  41. package/build/database/drivers/sqlite/base.js +16 -16
  42. package/build/database/drivers/sqlite/index.js +11 -11
  43. package/build/database/drivers/sqlite/index.native.js +1 -1
  44. package/build/database/drivers/sqlite/index.web.js +3 -3
  45. package/build/database/drivers/sqlite/query.js +1 -1
  46. package/build/database/drivers/sqlite/query.web.js +1 -1
  47. package/build/database/drivers/sqlite/sql/alter-table.js +2 -2
  48. package/build/database/drivers/sqlite/table.js +1 -1
  49. package/build/database/migrator/files-finder.js +1 -1
  50. package/build/database/migrator.js +6 -6
  51. package/build/database/pool/async-tracked-multi-connection.js +27 -27
  52. package/build/database/pool/base-methods-forward.js +4 -4
  53. package/build/database/pool/base.js +8 -8
  54. package/build/database/query/from-base.js +1 -1
  55. package/build/database/query/index.js +10 -10
  56. package/build/database/query/join-object.js +3 -3
  57. package/build/database/query/model-class-query.js +39 -39
  58. package/build/database/query/preloader/belongs-to.js +22 -22
  59. package/build/database/query/preloader/has-many.js +20 -20
  60. package/build/database/query/preloader/has-one.js +8 -8
  61. package/build/database/query/preloader/selection.js +3 -3
  62. package/build/database/query/preloader.js +8 -8
  63. package/build/database/query/query-data.js +9 -9
  64. package/build/database/query/where-model-class-hash.js +7 -7
  65. package/build/database/query/with-count.js +9 -9
  66. package/build/database/record/acts-as-list.js +15 -15
  67. package/build/database/record/attachments/handle.js +2 -2
  68. package/build/database/record/attachments/normalize-input.js +12 -12
  69. package/build/database/record/attachments/storage-drivers/s3.js +6 -6
  70. package/build/database/record/attachments/store.js +13 -13
  71. package/build/database/record/index.js +115 -121
  72. package/build/database/record/instance-relationships/base.js +11 -11
  73. package/build/database/record/instance-relationships/belongs-to.js +3 -3
  74. package/build/database/record/instance-relationships/has-many.js +8 -8
  75. package/build/database/record/instance-relationships/has-one.js +7 -7
  76. package/build/database/record/relationships/base.js +2 -2
  77. package/build/database/record/state-machine.js +7 -7
  78. package/build/database/record/validators/presence.js +1 -1
  79. package/build/database/record/validators/uniqueness.js +5 -5
  80. package/build/database/table-data/index.js +4 -4
  81. package/build/environment-handlers/base.js +2 -2
  82. package/build/environment-handlers/browser.js +7 -7
  83. package/build/environment-handlers/node/cli/commands/cli-command-context.js +1 -1
  84. package/build/environment-handlers/node/cli/commands/console.js +4 -4
  85. package/build/environment-handlers/node/cli/commands/db/schema/dump.js +1 -1
  86. package/build/environment-handlers/node/cli/commands/db/schema/load.js +3 -3
  87. package/build/environment-handlers/node/cli/commands/generate/frontend-models.js +836 -60
  88. package/build/environment-handlers/node.js +6 -6
  89. package/build/frontend-model-controller.js +81 -82
  90. package/build/frontend-model-resource/base-resource.js +78 -115
  91. package/build/frontend-models/base.js +162 -149
  92. package/build/frontend-models/clear-pending-debounced-callback.js +1 -1
  93. package/build/frontend-models/event-hook-models.js +2 -2
  94. package/build/frontend-models/outgoing-event-buffer.js +2 -2
  95. package/build/frontend-models/preloader.js +5 -5
  96. package/build/frontend-models/query.js +43 -38
  97. package/build/frontend-models/resource-definition.js +6 -6
  98. package/build/frontend-models/transport-serialization.js +11 -11
  99. package/build/frontend-models/use-destroyed-event.js +10 -10
  100. package/build/frontend-models/use-model-class-event.js +11 -11
  101. package/build/frontend-models/use-updated-event.js +11 -11
  102. package/build/frontend-models/websocket-channel.js +26 -17
  103. package/build/frontend-models/websocket-publishers.js +9 -9
  104. package/build/http-client/response.js +2 -2
  105. package/build/http-server/client/index.js +8 -8
  106. package/build/http-server/client/params-to-object.js +10 -10
  107. package/build/http-server/client/request-buffer/form-data-part.js +2 -2
  108. package/build/http-server/client/request-buffer/index.js +8 -8
  109. package/build/http-server/client/request-parser.js +3 -3
  110. package/build/http-server/client/request-runner.js +6 -6
  111. package/build/http-server/client/request-timing.js +5 -5
  112. package/build/http-server/client/request.js +1 -1
  113. package/build/http-server/client/response.js +5 -5
  114. package/build/http-server/client/websocket-request.js +4 -4
  115. package/build/http-server/client/websocket-session.js +18 -18
  116. package/build/http-server/development-reloader.js +5 -5
  117. package/build/http-server/index.js +12 -12
  118. package/build/http-server/remote-address.js +4 -4
  119. package/build/http-server/server-client.js +3 -3
  120. package/build/http-server/server-lock.js +4 -4
  121. package/build/http-server/websocket-channel-subscribers.js +3 -3
  122. package/build/http-server/websocket-channel.js +1 -1
  123. package/build/http-server/websocket-connection.js +1 -1
  124. package/build/http-server/websocket-event-log-store.js +6 -6
  125. package/build/http-server/websocket-events-host.js +2 -2
  126. package/build/http-server/worker-handler/in-process.js +7 -7
  127. package/build/http-server/worker-handler/index.js +4 -4
  128. package/build/http-server/worker-handler/worker-thread.js +3 -3
  129. package/build/logger/outputs/array-output.js +3 -3
  130. package/build/logger/outputs/console-output.js +1 -1
  131. package/build/logger/outputs/file-output.js +4 -4
  132. package/build/logger/outputs/stdout-output.js +1 -1
  133. package/build/logger.js +10 -10
  134. package/build/mailer/backends/smtp.js +3 -3
  135. package/build/mailer/base.js +8 -8
  136. package/build/mailer/delivery.js +4 -4
  137. package/build/plugins/sqljs-wasm-route-controller.js +1 -1
  138. package/build/routes/base-route.js +6 -6
  139. package/build/routes/basic-route.js +1 -1
  140. package/build/routes/hooks/frontend-model-command-route-hook.js +1 -1
  141. package/build/routes/index.js +1 -1
  142. package/build/routes/plugin-routes.js +1 -1
  143. package/build/routes/resolver.js +11 -11
  144. package/build/routes/resource-route.js +1 -1
  145. package/build/src/application.d.ts +3 -3
  146. package/build/src/application.d.ts.map +1 -1
  147. package/build/src/application.js +5 -5
  148. package/build/src/authorization/ability.d.ts +7 -7
  149. package/build/src/authorization/ability.d.ts.map +1 -1
  150. package/build/src/authorization/ability.js +9 -9
  151. package/build/src/authorization/base-resource.d.ts +1 -1
  152. package/build/src/authorization/base-resource.d.ts.map +1 -1
  153. package/build/src/authorization/base-resource.js +5 -5
  154. package/build/src/background-jobs/cron-expression.js +2 -2
  155. package/build/src/background-jobs/forked-runner-child.js +2 -2
  156. package/build/src/background-jobs/job-registry.d.ts +1 -1
  157. package/build/src/background-jobs/job-registry.d.ts.map +1 -1
  158. package/build/src/background-jobs/job-registry.js +2 -2
  159. package/build/src/background-jobs/job-runner.js +2 -2
  160. package/build/src/background-jobs/job.js +2 -2
  161. package/build/src/background-jobs/json-socket.d.ts +4 -4
  162. package/build/src/background-jobs/json-socket.d.ts.map +1 -1
  163. package/build/src/background-jobs/json-socket.js +5 -5
  164. package/build/src/background-jobs/main.d.ts +18 -18
  165. package/build/src/background-jobs/main.d.ts.map +1 -1
  166. package/build/src/background-jobs/main.js +22 -22
  167. package/build/src/background-jobs/scheduler.d.ts +5 -5
  168. package/build/src/background-jobs/scheduler.d.ts.map +1 -1
  169. package/build/src/background-jobs/scheduler.js +8 -8
  170. package/build/src/background-jobs/store.js +8 -8
  171. package/build/src/background-jobs/web/controller.js +3 -3
  172. package/build/src/background-jobs/worker.d.ts +6 -6
  173. package/build/src/background-jobs/worker.d.ts.map +1 -1
  174. package/build/src/background-jobs/worker.js +13 -13
  175. package/build/src/beacon/client.d.ts +4 -4
  176. package/build/src/beacon/client.d.ts.map +1 -1
  177. package/build/src/beacon/client.js +12 -9
  178. package/build/src/beacon/in-process-broker.d.ts.map +1 -1
  179. package/build/src/beacon/in-process-broker.js +3 -3
  180. package/build/src/beacon/in-process-client.d.ts +1 -1
  181. package/build/src/beacon/in-process-client.d.ts.map +1 -1
  182. package/build/src/beacon/in-process-client.js +3 -3
  183. package/build/src/beacon/server.d.ts +2 -2
  184. package/build/src/beacon/server.d.ts.map +1 -1
  185. package/build/src/beacon/server.js +4 -4
  186. package/build/src/cli/browser-cli.js +2 -2
  187. package/build/src/cli/commands/db/base-command.d.ts +2 -2
  188. package/build/src/cli/commands/db/base-command.d.ts.map +1 -1
  189. package/build/src/cli/commands/db/base-command.js +3 -3
  190. package/build/src/cli/index.js +3 -3
  191. package/build/src/cli/tenant-database-command-helper.d.ts +1 -1
  192. package/build/src/cli/tenant-database-command-helper.d.ts.map +1 -1
  193. package/build/src/cli/tenant-database-command-helper.js +4 -4
  194. package/build/src/cli/use-browser-cli.js +2 -2
  195. package/build/src/configuration-types.d.ts +12 -2
  196. package/build/src/configuration-types.d.ts.map +1 -1
  197. package/build/src/configuration-types.js +4 -2
  198. package/build/src/configuration.d.ts +14 -14
  199. package/build/src/configuration.d.ts.map +1 -1
  200. package/build/src/configuration.js +39 -39
  201. package/build/src/controller.js +10 -10
  202. package/build/src/current-configuration.js +2 -2
  203. package/build/src/database/annotations-async-hooks.js +3 -3
  204. package/build/src/database/annotations.d.ts.map +1 -1
  205. package/build/src/database/annotations.js +4 -4
  206. package/build/src/database/drivers/base-column.d.ts +1 -1
  207. package/build/src/database/drivers/base-column.d.ts.map +1 -1
  208. package/build/src/database/drivers/base-column.js +2 -2
  209. package/build/src/database/drivers/base-foreign-key.d.ts +1 -1
  210. package/build/src/database/drivers/base-foreign-key.d.ts.map +1 -1
  211. package/build/src/database/drivers/base-foreign-key.js +2 -2
  212. package/build/src/database/drivers/base-table.d.ts +1 -1
  213. package/build/src/database/drivers/base-table.d.ts.map +1 -1
  214. package/build/src/database/drivers/base-table.js +2 -2
  215. package/build/src/database/drivers/base.d.ts +6 -6
  216. package/build/src/database/drivers/base.d.ts.map +1 -1
  217. package/build/src/database/drivers/base.js +11 -11
  218. package/build/src/database/drivers/mssql/index.js +2 -2
  219. package/build/src/database/drivers/mssql/table.js +2 -2
  220. package/build/src/database/drivers/mysql/index.js +4 -4
  221. package/build/src/database/drivers/mysql/query.js +2 -2
  222. package/build/src/database/drivers/mysql/table.js +2 -2
  223. package/build/src/database/drivers/pgsql/index.js +3 -3
  224. package/build/src/database/drivers/sqlite/base.d.ts +3 -3
  225. package/build/src/database/drivers/sqlite/base.d.ts.map +1 -1
  226. package/build/src/database/drivers/sqlite/base.js +17 -17
  227. package/build/src/database/drivers/sqlite/index.d.ts +4 -4
  228. package/build/src/database/drivers/sqlite/index.d.ts.map +1 -1
  229. package/build/src/database/drivers/sqlite/index.js +12 -12
  230. package/build/src/database/drivers/sqlite/index.native.js +2 -2
  231. package/build/src/database/drivers/sqlite/index.web.d.ts +2 -2
  232. package/build/src/database/drivers/sqlite/index.web.d.ts.map +1 -1
  233. package/build/src/database/drivers/sqlite/index.web.js +4 -4
  234. package/build/src/database/drivers/sqlite/query.js +2 -2
  235. package/build/src/database/drivers/sqlite/query.web.js +2 -2
  236. package/build/src/database/drivers/sqlite/sql/alter-table.js +3 -3
  237. package/build/src/database/drivers/sqlite/table.js +2 -2
  238. package/build/src/database/migrator/files-finder.js +2 -2
  239. package/build/src/database/migrator.d.ts +1 -1
  240. package/build/src/database/migrator.d.ts.map +1 -1
  241. package/build/src/database/migrator.js +7 -7
  242. package/build/src/database/pool/async-tracked-multi-connection.d.ts +9 -9
  243. package/build/src/database/pool/async-tracked-multi-connection.d.ts.map +1 -1
  244. package/build/src/database/pool/async-tracked-multi-connection.js +28 -28
  245. package/build/src/database/pool/base-methods-forward.js +7 -7
  246. package/build/src/database/pool/base.d.ts +1 -1
  247. package/build/src/database/pool/base.d.ts.map +1 -1
  248. package/build/src/database/pool/base.js +9 -9
  249. package/build/src/database/query/from-base.d.ts +1 -1
  250. package/build/src/database/query/from-base.d.ts.map +1 -1
  251. package/build/src/database/query/from-base.js +2 -2
  252. package/build/src/database/query/index.d.ts +4 -4
  253. package/build/src/database/query/index.d.ts.map +1 -1
  254. package/build/src/database/query/index.js +11 -11
  255. package/build/src/database/query/join-object.js +4 -4
  256. package/build/src/database/query/model-class-query.d.ts +4 -4
  257. package/build/src/database/query/model-class-query.d.ts.map +1 -1
  258. package/build/src/database/query/model-class-query.js +40 -40
  259. package/build/src/database/query/preloader/belongs-to.js +23 -23
  260. package/build/src/database/query/preloader/has-many.js +21 -21
  261. package/build/src/database/query/preloader/has-one.js +9 -9
  262. package/build/src/database/query/preloader/selection.js +4 -4
  263. package/build/src/database/query/preloader.js +9 -9
  264. package/build/src/database/query/query-data.js +10 -10
  265. package/build/src/database/query/where-model-class-hash.js +8 -8
  266. package/build/src/database/query/with-count.js +10 -10
  267. package/build/src/database/record/acts-as-list.js +20 -20
  268. package/build/src/database/record/attachments/handle.d.ts +1 -1
  269. package/build/src/database/record/attachments/handle.d.ts.map +1 -1
  270. package/build/src/database/record/attachments/handle.js +3 -3
  271. package/build/src/database/record/attachments/normalize-input.js +15 -15
  272. package/build/src/database/record/attachments/storage-drivers/s3.js +7 -7
  273. package/build/src/database/record/attachments/store.d.ts +2 -2
  274. package/build/src/database/record/attachments/store.d.ts.map +1 -1
  275. package/build/src/database/record/attachments/store.js +14 -14
  276. package/build/src/database/record/index.d.ts +18 -25
  277. package/build/src/database/record/index.d.ts.map +1 -1
  278. package/build/src/database/record/index.js +135 -141
  279. package/build/src/database/record/instance-relationships/base.d.ts +3 -3
  280. package/build/src/database/record/instance-relationships/base.d.ts.map +1 -1
  281. package/build/src/database/record/instance-relationships/base.js +13 -13
  282. package/build/src/database/record/instance-relationships/belongs-to.js +4 -4
  283. package/build/src/database/record/instance-relationships/has-many.js +9 -9
  284. package/build/src/database/record/instance-relationships/has-one.d.ts +1 -1
  285. package/build/src/database/record/instance-relationships/has-one.d.ts.map +1 -1
  286. package/build/src/database/record/instance-relationships/has-one.js +8 -8
  287. package/build/src/database/record/relationships/base.js +4 -4
  288. package/build/src/database/record/state-machine.js +8 -8
  289. package/build/src/database/record/validators/presence.js +2 -2
  290. package/build/src/database/record/validators/uniqueness.js +6 -6
  291. package/build/src/database/table-data/index.d.ts +4 -4
  292. package/build/src/database/table-data/index.d.ts.map +1 -1
  293. package/build/src/database/table-data/index.js +5 -5
  294. package/build/src/environment-handlers/base.js +3 -3
  295. package/build/src/environment-handlers/browser.d.ts +3 -3
  296. package/build/src/environment-handlers/browser.d.ts.map +1 -1
  297. package/build/src/environment-handlers/browser.js +8 -8
  298. package/build/src/environment-handlers/node/cli/commands/cli-command-context.js +2 -2
  299. package/build/src/environment-handlers/node/cli/commands/console.d.ts.map +1 -1
  300. package/build/src/environment-handlers/node/cli/commands/console.js +5 -5
  301. package/build/src/environment-handlers/node/cli/commands/db/schema/dump.d.ts +1 -1
  302. package/build/src/environment-handlers/node/cli/commands/db/schema/dump.d.ts.map +1 -1
  303. package/build/src/environment-handlers/node/cli/commands/db/schema/dump.js +2 -2
  304. package/build/src/environment-handlers/node/cli/commands/db/schema/load.d.ts +1 -1
  305. package/build/src/environment-handlers/node/cli/commands/db/schema/load.d.ts.map +1 -1
  306. package/build/src/environment-handlers/node/cli/commands/db/schema/load.js +4 -4
  307. package/build/src/environment-handlers/node/cli/commands/generate/frontend-models.d.ts +285 -12
  308. package/build/src/environment-handlers/node/cli/commands/generate/frontend-models.d.ts.map +1 -1
  309. package/build/src/environment-handlers/node/cli/commands/generate/frontend-models.js +712 -61
  310. package/build/src/environment-handlers/node.d.ts +2 -2
  311. package/build/src/environment-handlers/node.d.ts.map +1 -1
  312. package/build/src/environment-handlers/node.js +7 -7
  313. package/build/src/frontend-model-controller.d.ts +5 -6
  314. package/build/src/frontend-model-controller.d.ts.map +1 -1
  315. package/build/src/frontend-model-controller.js +88 -89
  316. package/build/src/frontend-model-resource/base-resource.d.ts +36 -27
  317. package/build/src/frontend-model-resource/base-resource.d.ts.map +1 -1
  318. package/build/src/frontend-model-resource/base-resource.js +67 -120
  319. package/build/src/frontend-models/base.d.ts +67 -59
  320. package/build/src/frontend-models/base.d.ts.map +1 -1
  321. package/build/src/frontend-models/base.js +171 -158
  322. package/build/src/frontend-models/clear-pending-debounced-callback.js +2 -2
  323. package/build/src/frontend-models/event-hook-models.d.ts.map +1 -1
  324. package/build/src/frontend-models/event-hook-models.js +3 -3
  325. package/build/src/frontend-models/outgoing-event-buffer.d.ts +1 -1
  326. package/build/src/frontend-models/outgoing-event-buffer.d.ts.map +1 -1
  327. package/build/src/frontend-models/outgoing-event-buffer.js +3 -3
  328. package/build/src/frontend-models/preloader.js +6 -6
  329. package/build/src/frontend-models/query.d.ts +16 -8
  330. package/build/src/frontend-models/query.d.ts.map +1 -1
  331. package/build/src/frontend-models/query.js +43 -39
  332. package/build/src/frontend-models/resource-definition.js +7 -7
  333. package/build/src/frontend-models/transport-serialization.js +12 -12
  334. package/build/src/frontend-models/use-destroyed-event.d.ts.map +1 -1
  335. package/build/src/frontend-models/use-destroyed-event.js +11 -11
  336. package/build/src/frontend-models/use-model-class-event.d.ts.map +1 -1
  337. package/build/src/frontend-models/use-model-class-event.js +12 -12
  338. package/build/src/frontend-models/use-updated-event.d.ts.map +1 -1
  339. package/build/src/frontend-models/use-updated-event.js +12 -12
  340. package/build/src/frontend-models/websocket-channel.d.ts +6 -1
  341. package/build/src/frontend-models/websocket-channel.d.ts.map +1 -1
  342. package/build/src/frontend-models/websocket-channel.js +26 -18
  343. package/build/src/frontend-models/websocket-publishers.js +11 -11
  344. package/build/src/http-client/response.d.ts +2 -2
  345. package/build/src/http-client/response.d.ts.map +1 -1
  346. package/build/src/http-client/response.js +3 -3
  347. package/build/src/http-server/client/index.d.ts +1 -1
  348. package/build/src/http-server/client/index.d.ts.map +1 -1
  349. package/build/src/http-server/client/index.js +9 -9
  350. package/build/src/http-server/client/params-to-object.js +11 -11
  351. package/build/src/http-server/client/request-buffer/form-data-part.d.ts +2 -2
  352. package/build/src/http-server/client/request-buffer/form-data-part.d.ts.map +1 -1
  353. package/build/src/http-server/client/request-buffer/form-data-part.js +3 -3
  354. package/build/src/http-server/client/request-buffer/index.d.ts +4 -4
  355. package/build/src/http-server/client/request-buffer/index.d.ts.map +1 -1
  356. package/build/src/http-server/client/request-buffer/index.js +9 -9
  357. package/build/src/http-server/client/request-parser.d.ts +1 -1
  358. package/build/src/http-server/client/request-parser.d.ts.map +1 -1
  359. package/build/src/http-server/client/request-parser.js +4 -4
  360. package/build/src/http-server/client/request-runner.js +7 -7
  361. package/build/src/http-server/client/request-timing.d.ts +5 -5
  362. package/build/src/http-server/client/request-timing.d.ts.map +1 -1
  363. package/build/src/http-server/client/request-timing.js +6 -6
  364. package/build/src/http-server/client/request.js +2 -2
  365. package/build/src/http-server/client/response.d.ts +3 -3
  366. package/build/src/http-server/client/response.d.ts.map +1 -1
  367. package/build/src/http-server/client/response.js +6 -6
  368. package/build/src/http-server/client/websocket-request.d.ts +3 -3
  369. package/build/src/http-server/client/websocket-request.d.ts.map +1 -1
  370. package/build/src/http-server/client/websocket-request.js +5 -5
  371. package/build/src/http-server/client/websocket-session.d.ts +6 -6
  372. package/build/src/http-server/client/websocket-session.d.ts.map +1 -1
  373. package/build/src/http-server/client/websocket-session.js +19 -19
  374. package/build/src/http-server/development-reloader.d.ts +3 -3
  375. package/build/src/http-server/development-reloader.d.ts.map +1 -1
  376. package/build/src/http-server/development-reloader.js +6 -6
  377. package/build/src/http-server/index.d.ts +7 -7
  378. package/build/src/http-server/index.d.ts.map +1 -1
  379. package/build/src/http-server/index.js +13 -13
  380. package/build/src/http-server/remote-address.js +6 -6
  381. package/build/src/http-server/server-client.js +4 -4
  382. package/build/src/http-server/server-lock.js +5 -5
  383. package/build/src/http-server/websocket-channel-subscribers.d.ts +1 -1
  384. package/build/src/http-server/websocket-channel-subscribers.d.ts.map +1 -1
  385. package/build/src/http-server/websocket-channel-subscribers.js +4 -4
  386. package/build/src/http-server/websocket-channel.d.ts +1 -1
  387. package/build/src/http-server/websocket-channel.d.ts.map +1 -1
  388. package/build/src/http-server/websocket-channel.js +2 -2
  389. package/build/src/http-server/websocket-connection.d.ts +1 -1
  390. package/build/src/http-server/websocket-connection.d.ts.map +1 -1
  391. package/build/src/http-server/websocket-connection.js +2 -2
  392. package/build/src/http-server/websocket-event-log-store.d.ts +1 -1
  393. package/build/src/http-server/websocket-event-log-store.d.ts.map +1 -1
  394. package/build/src/http-server/websocket-event-log-store.js +7 -7
  395. package/build/src/http-server/websocket-events-host.d.ts +1 -1
  396. package/build/src/http-server/websocket-events-host.d.ts.map +1 -1
  397. package/build/src/http-server/websocket-events-host.js +3 -3
  398. package/build/src/http-server/worker-handler/in-process.d.ts +3 -3
  399. package/build/src/http-server/worker-handler/in-process.d.ts.map +1 -1
  400. package/build/src/http-server/worker-handler/in-process.js +9 -9
  401. package/build/src/http-server/worker-handler/index.d.ts +4 -4
  402. package/build/src/http-server/worker-handler/index.d.ts.map +1 -1
  403. package/build/src/http-server/worker-handler/index.js +5 -5
  404. package/build/src/http-server/worker-handler/worker-thread.d.ts +2 -2
  405. package/build/src/http-server/worker-handler/worker-thread.d.ts.map +1 -1
  406. package/build/src/http-server/worker-handler/worker-thread.js +4 -4
  407. package/build/src/logger/outputs/array-output.d.ts +3 -3
  408. package/build/src/logger/outputs/array-output.d.ts.map +1 -1
  409. package/build/src/logger/outputs/array-output.js +4 -4
  410. package/build/src/logger/outputs/console-output.d.ts +1 -1
  411. package/build/src/logger/outputs/console-output.d.ts.map +1 -1
  412. package/build/src/logger/outputs/console-output.js +2 -2
  413. package/build/src/logger/outputs/file-output.d.ts +4 -4
  414. package/build/src/logger/outputs/file-output.d.ts.map +1 -1
  415. package/build/src/logger/outputs/file-output.js +5 -5
  416. package/build/src/logger/outputs/stdout-output.d.ts.map +1 -1
  417. package/build/src/logger/outputs/stdout-output.js +2 -2
  418. package/build/src/logger.d.ts.map +1 -1
  419. package/build/src/logger.js +11 -11
  420. package/build/src/mailer/backends/smtp.d.ts.map +1 -1
  421. package/build/src/mailer/backends/smtp.js +5 -5
  422. package/build/src/mailer/base.js +11 -11
  423. package/build/src/mailer/delivery.d.ts +3 -3
  424. package/build/src/mailer/delivery.d.ts.map +1 -1
  425. package/build/src/mailer/delivery.js +5 -5
  426. package/build/src/plugins/sqljs-wasm-route-controller.js +2 -2
  427. package/build/src/routes/base-route.d.ts +6 -6
  428. package/build/src/routes/base-route.d.ts.map +1 -1
  429. package/build/src/routes/base-route.js +7 -7
  430. package/build/src/routes/basic-route.js +2 -2
  431. package/build/src/routes/hooks/frontend-model-command-route-hook.js +2 -2
  432. package/build/src/routes/index.js +2 -2
  433. package/build/src/routes/plugin-routes.js +2 -2
  434. package/build/src/routes/resolver.d.ts +1 -1
  435. package/build/src/routes/resolver.d.ts.map +1 -1
  436. package/build/src/routes/resolver.js +13 -13
  437. package/build/src/routes/resource-route.d.ts +1 -1
  438. package/build/src/routes/resource-route.d.ts.map +1 -1
  439. package/build/src/routes/resource-route.js +2 -2
  440. package/build/src/testing/browser-frontend-model-event-hook-scenarios.d.ts.map +1 -1
  441. package/build/src/testing/browser-frontend-model-event-hook-scenarios.js +8 -8
  442. package/build/src/testing/expect-utils.js +13 -13
  443. package/build/src/testing/expect.d.ts +1 -1
  444. package/build/src/testing/expect.d.ts.map +1 -1
  445. package/build/src/testing/expect.js +9 -9
  446. package/build/src/testing/test-files-finder.d.ts +8 -8
  447. package/build/src/testing/test-files-finder.d.ts.map +1 -1
  448. package/build/src/testing/test-files-finder.js +9 -9
  449. package/build/src/testing/test-filter-parser.js +3 -3
  450. package/build/src/testing/test-runner.d.ts +2 -2
  451. package/build/src/testing/test-runner.d.ts.map +1 -1
  452. package/build/src/testing/test-runner.js +17 -17
  453. package/build/src/testing/test-suite-splitter.js +2 -2
  454. package/build/src/testing/test.d.ts +2 -2
  455. package/build/src/testing/test.d.ts.map +1 -1
  456. package/build/src/testing/test.js +16 -16
  457. package/build/src/utils/backtrace-cleaner.d.ts +1 -1
  458. package/build/src/utils/backtrace-cleaner.d.ts.map +1 -1
  459. package/build/src/utils/backtrace-cleaner.js +2 -2
  460. package/build/src/utils/format-value.js +2 -2
  461. package/build/src/utils/model-scope.js +2 -2
  462. package/build/src/utils/ransack.js +27 -27
  463. package/build/src/utils/with-tracked-stack-async-hooks.js +8 -8
  464. package/build/src/utils/with-tracked-stack.js +4 -4
  465. package/build/testing/browser-frontend-model-event-hook-scenarios.js +7 -7
  466. package/build/testing/expect-utils.js +11 -11
  467. package/build/testing/expect.js +7 -7
  468. package/build/testing/test-files-finder.js +8 -8
  469. package/build/testing/test-filter-parser.js +2 -2
  470. package/build/testing/test-runner.js +16 -16
  471. package/build/testing/test-suite-splitter.js +1 -1
  472. package/build/testing/test.js +15 -15
  473. package/build/utils/backtrace-cleaner.js +1 -1
  474. package/build/utils/format-value.js +1 -1
  475. package/build/utils/model-scope.js +1 -1
  476. package/build/utils/ransack.js +26 -26
  477. package/build/utils/with-tracked-stack-async-hooks.js +7 -7
  478. package/build/utils/with-tracked-stack.js +3 -3
  479. package/package.json +2 -1
  480. package/src/application.js +4 -4
  481. package/src/authorization/ability.js +8 -8
  482. package/src/authorization/base-resource.js +4 -4
  483. package/src/background-jobs/cron-expression.js +1 -1
  484. package/src/background-jobs/forked-runner-child.js +1 -1
  485. package/src/background-jobs/job-registry.js +1 -1
  486. package/src/background-jobs/job-runner.js +1 -1
  487. package/src/background-jobs/job.js +1 -1
  488. package/src/background-jobs/json-socket.js +4 -4
  489. package/src/background-jobs/main.js +21 -21
  490. package/src/background-jobs/scheduler.js +7 -7
  491. package/src/background-jobs/store.js +7 -7
  492. package/src/background-jobs/web/controller.js +2 -2
  493. package/src/background-jobs/worker.js +12 -12
  494. package/src/beacon/client.js +11 -8
  495. package/src/beacon/in-process-broker.js +2 -2
  496. package/src/beacon/in-process-client.js +2 -2
  497. package/src/beacon/server.js +3 -3
  498. package/src/cli/browser-cli.js +1 -1
  499. package/src/cli/commands/db/base-command.js +2 -2
  500. package/src/cli/index.js +2 -2
  501. package/src/cli/tenant-database-command-helper.js +3 -3
  502. package/src/cli/use-browser-cli.js +1 -1
  503. package/src/configuration-types.js +3 -1
  504. package/src/configuration.js +38 -38
  505. package/src/controller.js +8 -8
  506. package/src/current-configuration.js +1 -1
  507. package/src/database/annotations-async-hooks.js +2 -2
  508. package/src/database/annotations.js +3 -3
  509. package/src/database/drivers/base-column.js +1 -1
  510. package/src/database/drivers/base-foreign-key.js +1 -1
  511. package/src/database/drivers/base-table.js +1 -1
  512. package/src/database/drivers/base.js +10 -10
  513. package/src/database/drivers/mssql/index.js +1 -1
  514. package/src/database/drivers/mssql/table.js +1 -1
  515. package/src/database/drivers/mysql/index.js +3 -3
  516. package/src/database/drivers/mysql/query.js +1 -1
  517. package/src/database/drivers/mysql/table.js +1 -1
  518. package/src/database/drivers/pgsql/index.js +2 -2
  519. package/src/database/drivers/sqlite/base.js +16 -16
  520. package/src/database/drivers/sqlite/index.js +11 -11
  521. package/src/database/drivers/sqlite/index.native.js +1 -1
  522. package/src/database/drivers/sqlite/index.web.js +3 -3
  523. package/src/database/drivers/sqlite/query.js +1 -1
  524. package/src/database/drivers/sqlite/query.web.js +1 -1
  525. package/src/database/drivers/sqlite/sql/alter-table.js +2 -2
  526. package/src/database/drivers/sqlite/table.js +1 -1
  527. package/src/database/migrator/files-finder.js +1 -1
  528. package/src/database/migrator.js +6 -6
  529. package/src/database/pool/async-tracked-multi-connection.js +27 -27
  530. package/src/database/pool/base-methods-forward.js +4 -4
  531. package/src/database/pool/base.js +8 -8
  532. package/src/database/query/from-base.js +1 -1
  533. package/src/database/query/index.js +10 -10
  534. package/src/database/query/join-object.js +3 -3
  535. package/src/database/query/model-class-query.js +39 -39
  536. package/src/database/query/preloader/belongs-to.js +22 -22
  537. package/src/database/query/preloader/has-many.js +20 -20
  538. package/src/database/query/preloader/has-one.js +8 -8
  539. package/src/database/query/preloader/selection.js +3 -3
  540. package/src/database/query/preloader.js +8 -8
  541. package/src/database/query/query-data.js +9 -9
  542. package/src/database/query/where-model-class-hash.js +7 -7
  543. package/src/database/query/with-count.js +9 -9
  544. package/src/database/record/acts-as-list.js +15 -15
  545. package/src/database/record/attachments/handle.js +2 -2
  546. package/src/database/record/attachments/normalize-input.js +12 -12
  547. package/src/database/record/attachments/storage-drivers/s3.js +6 -6
  548. package/src/database/record/attachments/store.js +13 -13
  549. package/src/database/record/index.js +115 -121
  550. package/src/database/record/instance-relationships/base.js +11 -11
  551. package/src/database/record/instance-relationships/belongs-to.js +3 -3
  552. package/src/database/record/instance-relationships/has-many.js +8 -8
  553. package/src/database/record/instance-relationships/has-one.js +7 -7
  554. package/src/database/record/relationships/base.js +2 -2
  555. package/src/database/record/state-machine.js +7 -7
  556. package/src/database/record/validators/presence.js +1 -1
  557. package/src/database/record/validators/uniqueness.js +5 -5
  558. package/src/database/table-data/index.js +4 -4
  559. package/src/environment-handlers/base.js +2 -2
  560. package/src/environment-handlers/browser.js +7 -7
  561. package/src/environment-handlers/node/cli/commands/cli-command-context.js +1 -1
  562. package/src/environment-handlers/node/cli/commands/console.js +4 -4
  563. package/src/environment-handlers/node/cli/commands/db/schema/dump.js +1 -1
  564. package/src/environment-handlers/node/cli/commands/db/schema/load.js +3 -3
  565. package/src/environment-handlers/node/cli/commands/generate/frontend-models.js +836 -60
  566. package/src/environment-handlers/node.js +6 -6
  567. package/src/frontend-model-controller.js +81 -82
  568. package/src/frontend-model-resource/base-resource.js +78 -115
  569. package/src/frontend-models/base.js +162 -149
  570. package/src/frontend-models/clear-pending-debounced-callback.js +1 -1
  571. package/src/frontend-models/event-hook-models.js +2 -2
  572. package/src/frontend-models/outgoing-event-buffer.js +2 -2
  573. package/src/frontend-models/preloader.js +5 -5
  574. package/src/frontend-models/query.js +43 -38
  575. package/src/frontend-models/resource-definition.js +6 -6
  576. package/src/frontend-models/transport-serialization.js +11 -11
  577. package/src/frontend-models/use-destroyed-event.js +10 -10
  578. package/src/frontend-models/use-model-class-event.js +11 -11
  579. package/src/frontend-models/use-updated-event.js +11 -11
  580. package/src/frontend-models/websocket-channel.js +26 -17
  581. package/src/frontend-models/websocket-publishers.js +9 -9
  582. package/src/http-client/response.js +2 -2
  583. package/src/http-server/client/index.js +8 -8
  584. package/src/http-server/client/params-to-object.js +10 -10
  585. package/src/http-server/client/request-buffer/form-data-part.js +2 -2
  586. package/src/http-server/client/request-buffer/index.js +8 -8
  587. package/src/http-server/client/request-parser.js +3 -3
  588. package/src/http-server/client/request-runner.js +6 -6
  589. package/src/http-server/client/request-timing.js +5 -5
  590. package/src/http-server/client/request.js +1 -1
  591. package/src/http-server/client/response.js +5 -5
  592. package/src/http-server/client/websocket-request.js +4 -4
  593. package/src/http-server/client/websocket-session.js +18 -18
  594. package/src/http-server/development-reloader.js +5 -5
  595. package/src/http-server/index.js +12 -12
  596. package/src/http-server/remote-address.js +4 -4
  597. package/src/http-server/server-client.js +3 -3
  598. package/src/http-server/server-lock.js +4 -4
  599. package/src/http-server/websocket-channel-subscribers.js +3 -3
  600. package/src/http-server/websocket-channel.js +1 -1
  601. package/src/http-server/websocket-connection.js +1 -1
  602. package/src/http-server/websocket-event-log-store.js +6 -6
  603. package/src/http-server/websocket-events-host.js +2 -2
  604. package/src/http-server/worker-handler/in-process.js +7 -7
  605. package/src/http-server/worker-handler/index.js +4 -4
  606. package/src/http-server/worker-handler/worker-thread.js +3 -3
  607. package/src/logger/outputs/array-output.js +3 -3
  608. package/src/logger/outputs/console-output.js +1 -1
  609. package/src/logger/outputs/file-output.js +4 -4
  610. package/src/logger/outputs/stdout-output.js +1 -1
  611. package/src/logger.js +10 -10
  612. package/src/mailer/backends/smtp.js +3 -3
  613. package/src/mailer/base.js +8 -8
  614. package/src/mailer/delivery.js +4 -4
  615. package/src/plugins/sqljs-wasm-route-controller.js +1 -1
  616. package/src/routes/base-route.js +6 -6
  617. package/src/routes/basic-route.js +1 -1
  618. package/src/routes/hooks/frontend-model-command-route-hook.js +1 -1
  619. package/src/routes/index.js +1 -1
  620. package/src/routes/plugin-routes.js +1 -1
  621. package/src/routes/resolver.js +11 -11
  622. package/src/routes/resource-route.js +1 -1
  623. package/src/testing/browser-frontend-model-event-hook-scenarios.js +7 -7
  624. package/src/testing/expect-utils.js +11 -11
  625. package/src/testing/expect.js +7 -7
  626. package/src/testing/test-files-finder.js +8 -8
  627. package/src/testing/test-filter-parser.js +2 -2
  628. package/src/testing/test-runner.js +16 -16
  629. package/src/testing/test-suite-splitter.js +1 -1
  630. package/src/testing/test.js +15 -15
  631. package/src/utils/backtrace-cleaner.js +1 -1
  632. package/src/utils/format-value.js +1 -1
  633. package/src/utils/model-scope.js +1 -1
  634. package/src/utils/ransack.js +26 -26
  635. package/src/utils/with-tracked-stack-async-hooks.js +7 -7
  636. package/src/utils/with-tracked-stack.js +3 -3
@@ -9,25 +9,25 @@ import useModelClassEvent from "./use-model-class-event.js"
9
9
 
10
10
  /**
11
11
  * FrontendModelClass type.
12
- @typedef {import("./base.js").FrontendModelClass} FrontendModelClass */
12
+ * @typedef {import("./base.js").FrontendModelClass} FrontendModelClass */
13
13
  /**
14
14
  * FrontendModelInstance type.
15
- @typedef {import("./base.js").default} FrontendModelInstance */
15
+ * @typedef {import("./base.js").default} FrontendModelInstance */
16
16
  /**
17
17
  * FrontendModelClassUpdateEventPayload type.
18
- @typedef {import("./use-model-class-event.js").FrontendModelCreateUpdateEventPayload} FrontendModelClassUpdateEventPayload */
18
+ * @typedef {import("./use-model-class-event.js").FrontendModelCreateUpdateEventPayload} FrontendModelClassUpdateEventPayload */
19
19
  /**
20
20
  * Defines this typedef.
21
- @typedef {{id: string, model: FrontendModelInstance}} FrontendModelInstanceUpdateEventPayload */
21
+ * @typedef {{id: string, model: FrontendModelInstance}} FrontendModelInstanceUpdateEventPayload */
22
22
  /**
23
23
  * FrontendModelUpdateEventPayload type.
24
- @typedef {FrontendModelClassUpdateEventPayload | FrontendModelInstanceUpdateEventPayload} FrontendModelUpdateEventPayload */
24
+ * @typedef {FrontendModelClassUpdateEventPayload | FrontendModelInstanceUpdateEventPayload} FrontendModelUpdateEventPayload */
25
25
  /**
26
26
  * UseUpdatedEventOptions type.
27
- @typedef {import("./use-model-class-event.js").UseModelClassEventOptions} UseUpdatedEventOptions */
27
+ * @typedef {import("./use-model-class-event.js").UseModelClassEventOptions} UseUpdatedEventOptions */
28
28
  /**
29
29
  * FrontendModelUpdateEventCallback type.
30
- @typedef {(payload: FrontendModelUpdateEventPayload) => void} FrontendModelUpdateEventCallback */
30
+ * @typedef {(payload: FrontendModelUpdateEventPayload) => void} FrontendModelUpdateEventCallback */
31
31
 
32
32
  /**
33
33
  * Runs assert no unknown options.
@@ -72,7 +72,7 @@ export default function useUpdatedEvent(modelClassOrModels, callback, options =
72
72
  useModelClassEvent(classModel, "update", (payload) => {
73
73
  callback(/**
74
74
  * Narrows the runtime value to the documented type.
75
- @type {FrontendModelClassUpdateEventPayload} */ (payload))
75
+ * @type {FrontendModelClassUpdateEventPayload} */ (payload))
76
76
  }, {active: active && Boolean(classModel), debounce, onConnected, ...projectionOptions})
77
77
  useInstanceUpdatedEvent(instanceModels, callback, {active: active && !classModel, debounce, onConnected, ...projectionOptions})
78
78
  }
@@ -98,7 +98,7 @@ function useInstanceUpdatedEvent(modelOrModels, callback, options) {
98
98
  const eventCallback = useMemo(() => {
99
99
  const wrappedCallback = (/**
100
100
  * Narrows the runtime value to the documented type.
101
- @type {FrontendModelInstanceUpdateEventPayload} */ payload) => {
101
+ * @type {FrontendModelInstanceUpdateEventPayload} */ payload) => {
102
102
  if (activeRef.current) callbackRef.current(payload)
103
103
  }
104
104
 
@@ -117,11 +117,11 @@ function useInstanceUpdatedEvent(modelOrModels, callback, options) {
117
117
  let closed = false
118
118
  /**
119
119
  * Unsubscribe callbacks.
120
- @type {Array<() => void>} */
120
+ * @type {Array<() => void>} */
121
121
  const unsubscribeCallbacks = []
122
122
  const subscriptionCallback = (/**
123
123
  * Narrows the runtime value to the documented type.
124
- @type {FrontendModelInstanceUpdateEventPayload} */ payload) => {
124
+ * @type {FrontendModelInstanceUpdateEventPayload} */ payload) => {
125
125
  if (!closed) eventCallback(payload)
126
126
  }
127
127
 
@@ -41,7 +41,7 @@ const EVENT_FILTER_KEYS = new Set(["joins", "key", "searches", "where"])
41
41
  export default class FrontendModelWebsocketChannel extends VelociousWebsocketChannel {
42
42
  /**
43
43
  * Ability.
44
- @type {import("../authorization/ability.js").default | null} */
44
+ * @type {import("../authorization/ability.js").default | null} */
45
45
  _ability = null
46
46
 
47
47
  /**
@@ -68,7 +68,7 @@ export default class FrontendModelWebsocketChannel extends VelociousWebsocketCha
68
68
  params: {...this.params, model: modelName},
69
69
  request: /**
70
70
  * Narrows the runtime value to the documented type.
71
- @type {import("../http-server/client/request.js").default} */ (this._syntheticRequest()),
71
+ * @type {import("../http-server/client/request.js").default} */ (this._syntheticRequest()),
72
72
  response: new Response({configuration})
73
73
  })
74
74
 
@@ -88,7 +88,7 @@ export default class FrontendModelWebsocketChannel extends VelociousWebsocketCha
88
88
 
89
89
  return readRules.some((/**
90
90
  * Narrows the runtime value to the documented type.
91
- @type {{effect: string}} */ rule) => rule.effect === "allow")
91
+ * @type {{effect: string}} */ rule) => rule.effect === "allow")
92
92
  }
93
93
 
94
94
  /**
@@ -139,7 +139,7 @@ export default class FrontendModelWebsocketChannel extends VelociousWebsocketCha
139
139
  }
140
140
 
141
141
  if (body.action === "destroy") {
142
- if (!hasEventFilters || this._hasUnfilteredEventDelivery()) this.sendMessage(body, meta)
142
+ if (!hasEventFilters || this._hasDestroyEventDelivery() || this._hasUnfilteredEventDelivery()) this.sendMessage(body, meta)
143
143
  return
144
144
  }
145
145
 
@@ -157,7 +157,7 @@ export default class FrontendModelWebsocketChannel extends VelociousWebsocketCha
157
157
 
158
158
  /**
159
159
  * Deliver body.
160
- @type {FrontendModelLifecycleBroadcastBody} */
160
+ * @type {FrontendModelLifecycleBroadcastBody} */
161
161
  let deliverBody = body
162
162
 
163
163
  if (this._hasProjectionParams()) {
@@ -171,7 +171,7 @@ export default class FrontendModelWebsocketChannel extends VelociousWebsocketCha
171
171
  ...deliverBody,
172
172
  record: /**
173
173
  * Narrows the runtime value to the documented type.
174
- @type {import("./query.js").FrontendModelTransportValue} */ (serializeFrontendModelTransportValue(projectedRecord))
174
+ * @type {import("./query.js").FrontendModelTransportValue} */ (serializeFrontendModelTransportValue(projectedRecord))
175
175
  }
176
176
  }
177
177
 
@@ -204,6 +204,7 @@ export default class FrontendModelWebsocketChannel extends VelociousWebsocketCha
204
204
  return {
205
205
  abilities: this.params.abilities !== undefined,
206
206
  eventFilterCount: eventFilters.length,
207
+ destroyEventDelivery: this.params.destroyEventDelivery === true,
207
208
  model: this._modelName(),
208
209
  preload: this.params.preload !== undefined,
209
210
  queryData: this.params.queryData !== undefined,
@@ -253,6 +254,14 @@ export default class FrontendModelWebsocketChannel extends VelociousWebsocketCha
253
254
  return this.params.unfilteredEventDelivery === true
254
255
  }
255
256
 
257
+ /**
258
+ * Runs has destroy event delivery.
259
+ * @returns {boolean} - Whether id-only destroy events should be delivered with event filters.
260
+ */
261
+ _hasDestroyEventDelivery() {
262
+ return this.params.destroyEventDelivery === true
263
+ }
264
+
256
265
  /**
257
266
  * Runs event filters.
258
267
  * @returns {import("./query.js").FrontendModelEventFilterPayloadEntry[]} - Valid event filters.
@@ -270,7 +279,7 @@ export default class FrontendModelWebsocketChannel extends VelociousWebsocketCha
270
279
 
271
280
  const eventFilter = /**
272
281
  * Narrows the runtime value to the documented type.
273
- @type {Record<string, ?>} */ (entry)
282
+ * @type {Record<string, ?>} */ (entry)
274
283
  const unknownKeys = Object.keys(eventFilter).filter((key) => !EVENT_FILTER_KEYS.has(key))
275
284
 
276
285
  if (unknownKeys.length > 0) {
@@ -283,25 +292,25 @@ export default class FrontendModelWebsocketChannel extends VelociousWebsocketCha
283
292
 
284
293
  /**
285
294
  * Sanitized event filter.
286
- @type {import("./query.js").FrontendModelEventFilterPayloadEntry} */
295
+ * @type {import("./query.js").FrontendModelEventFilterPayloadEntry} */
287
296
  const sanitizedEventFilter = {key: eventFilter.key}
288
297
 
289
298
  if (eventFilter.joins !== undefined) {
290
299
  sanitizedEventFilter.joins = /**
291
300
  * Narrows the runtime value to the documented type.
292
- @type {Record<string, import("./query.js").FrontendModelTransportValue>} */ (eventFilter.joins)
301
+ * @type {Record<string, import("./query.js").FrontendModelTransportValue>} */ (eventFilter.joins)
293
302
  }
294
303
 
295
304
  if (eventFilter.searches !== undefined) {
296
305
  sanitizedEventFilter.searches = /**
297
306
  * Narrows the runtime value to the documented type.
298
- @type {import("./query.js").FrontendModelSearch[]} */ (eventFilter.searches)
307
+ * @type {import("./query.js").FrontendModelSearch[]} */ (eventFilter.searches)
299
308
  }
300
309
 
301
310
  if (eventFilter.where !== undefined) {
302
311
  sanitizedEventFilter.where = /**
303
312
  * Narrows the runtime value to the documented type.
304
- @type {Record<string, import("./query.js").FrontendModelTransportValue>} */ (eventFilter.where)
313
+ * @type {Record<string, import("./query.js").FrontendModelTransportValue>} */ (eventFilter.where)
305
314
  }
306
315
 
307
316
  return sanitizedEventFilter
@@ -346,7 +355,7 @@ export default class FrontendModelWebsocketChannel extends VelociousWebsocketCha
346
355
  },
347
356
  request: /**
348
357
  * Narrows the runtime value to the documented type.
349
- @type {import("../http-server/client/request.js").default} */ (this._syntheticRequest()),
358
+ * @type {import("../http-server/client/request.js").default} */ (this._syntheticRequest()),
350
359
  response: new Response({configuration}),
351
360
  viewPath: "/"
352
361
  })
@@ -384,7 +393,7 @@ export default class FrontendModelWebsocketChannel extends VelociousWebsocketCha
384
393
  async _matchedEventFilterKeysForEventId(id, FrontendModelController) {
385
394
  /**
386
395
  * Matched event filter keys.
387
- @type {string[]} */
396
+ * @type {string[]} */
388
397
  const matchedEventFilterKeys = []
389
398
 
390
399
  for (const eventFilter of this._eventFilters()) {
@@ -458,14 +467,14 @@ export default class FrontendModelWebsocketChannel extends VelociousWebsocketCha
458
467
  for (const entry of controller.frontendModelWithCount()) {
459
468
  /**
460
469
  * Spec.
461
- @type {Record<string, boolean | {relationship?: string, where?: Record<string, import("./query.js").FrontendModelTransportValue>}>} */
470
+ * @type {Record<string, boolean | {relationship?: string, where?: Record<string, import("./query.js").FrontendModelTransportValue>}>} */
462
471
  const spec = {}
463
472
 
464
473
  spec[entry.attributeName] = {
465
474
  relationship: entry.relationshipName,
466
475
  where: entry.where ? /**
467
476
  * Narrows the runtime value to the documented type.
468
- @type {Record<string, import("./query.js").FrontendModelTransportValue>} */ (entry.where) : undefined
477
+ * @type {Record<string, import("./query.js").FrontendModelTransportValue>} */ (entry.where) : undefined
469
478
  }
470
479
  query.withCount(spec)
471
480
  }
@@ -504,13 +513,13 @@ export default class FrontendModelWebsocketChannel extends VelociousWebsocketCha
504
513
  _syntheticRequest() {
505
514
  const upgradeRequest = /**
506
515
  * Narrows the runtime value to the documented type.
507
- @type {FrontendModelWebsocketUpgradeRequest} */ (this.session.upgradeRequest)
516
+ * @type {FrontendModelWebsocketUpgradeRequest} */ (this.session.upgradeRequest)
508
517
  const rawHeaders = typeof upgradeRequest?.headers === "function" ? upgradeRequest.headers() : {}
509
518
  const metadata = typeof this.session.getMetadata === "function" ? this.session.getMetadata() : {}
510
519
  const remoteAddress = typeof upgradeRequest?.remoteAddress === "function" ? upgradeRequest.remoteAddress() : undefined
511
520
  /**
512
521
  * Header map.
513
- @type {Record<string, string | string[] | undefined>} */
522
+ * @type {Record<string, string | string[] | undefined>} */
514
523
  const headerMap = {}
515
524
 
516
525
  for (const key of Object.keys(rawHeaders || {})) {
@@ -44,9 +44,9 @@ async function resolveAbilityResourcesList(configuration) {
44
44
  if (typeof resolver === "function") {
45
45
  const ability = await resolver({configuration, params: {}, request: /**
46
46
  * Narrows the runtime value to the documented type.
47
- @type {?} */ (undefined), response: /**
47
+ * @type {?} */ (undefined), response: /**
48
48
  * Narrows the runtime value to the documented type.
49
- @type {?} */ (undefined)})
49
+ * @type {?} */ (undefined)})
50
50
 
51
51
  if (ability?.resources && Array.isArray(ability.resources)) {
52
52
  return ability.resources
@@ -64,7 +64,7 @@ async function resolveAbilityResourcesList(configuration) {
64
64
  function frontendModelResourcesFromAbilityResourcesList(abilityResources) {
65
65
  /**
66
66
  * Resources.
67
- @type {Record<string, import("../configuration-types.js").FrontendModelResourceClassType>} */
67
+ * @type {Record<string, import("../configuration-types.js").FrontendModelResourceClassType>} */
68
68
  const resources = {}
69
69
 
70
70
  if (!abilityResources || abilityResources.length === 0) return resources
@@ -81,7 +81,7 @@ function frontendModelResourcesFromAbilityResourcesList(abilityResources) {
81
81
  if (resourceClass.prototype instanceof FrontendModelBaseResource) {
82
82
  const modelClass = /**
83
83
  * Narrows the runtime value to the documented type.
84
- @type {import("../configuration-types.js").FrontendModelResourceClassType} */ (resourceClass).ModelClass
84
+ * @type {import("../configuration-types.js").FrontendModelResourceClassType} */ (resourceClass).ModelClass
85
85
 
86
86
  if (!modelClass) {
87
87
  throw new Error(`Resource class ${resourceClass.name} is missing a static ModelClass property`)
@@ -95,7 +95,7 @@ function frontendModelResourcesFromAbilityResourcesList(abilityResources) {
95
95
 
96
96
  resources[modelName] = /**
97
97
  * Narrows the runtime value to the documented type.
98
- @type {import("../configuration-types.js").FrontendModelResourceClassType} */ (resourceClass)
98
+ * @type {import("../configuration-types.js").FrontendModelResourceClassType} */ (resourceClass)
99
99
  } else if (resourceClass.prototype instanceof AuthorizationBaseResource) {
100
100
  // Authorization-only resource — valid but not relevant for WebSocket publishing
101
101
  } else {
@@ -116,7 +116,7 @@ export async function ensureFrontendModelWebsocketPublishersRegistered(configura
116
116
 
117
117
  /**
118
118
  * All frontend models.
119
- @type {Record<string, import("../configuration-types.js").FrontendModelResourceClassType>} */
119
+ * @type {Record<string, import("../configuration-types.js").FrontendModelResourceClassType>} */
120
120
  let allFrontendModels = {}
121
121
 
122
122
  for (const backendProject of configuration.getBackendProjects()) {
@@ -161,19 +161,19 @@ export async function ensureFrontendModelWebsocketPublishersRegistered(configura
161
161
  modelClass.beforeCreate((model) => {
162
162
  /**
163
163
  * Narrows the runtime value to the documented type.
164
- @type {import("../database/record/index.js").default & {__frontendModelWebsocketAction?: "create" | "update"}} */ (model).__frontendModelWebsocketAction = "create"
164
+ * @type {import("../database/record/index.js").default & {__frontendModelWebsocketAction?: "create" | "update"}} */ (model).__frontendModelWebsocketAction = "create"
165
165
  })
166
166
 
167
167
  modelClass.beforeUpdate((model) => {
168
168
  /**
169
169
  * Narrows the runtime value to the documented type.
170
- @type {import("../database/record/index.js").default & {__frontendModelWebsocketAction?: "create" | "update"}} */ (model).__frontendModelWebsocketAction = "update"
170
+ * @type {import("../database/record/index.js").default & {__frontendModelWebsocketAction?: "create" | "update"}} */ (model).__frontendModelWebsocketAction = "update"
171
171
  })
172
172
 
173
173
  modelClass.afterSave((model) => {
174
174
  const modelWithWebsocketAction = /**
175
175
  * Narrows the runtime value to the documented type.
176
- @type {import("../database/record/index.js").default & {__frontendModelWebsocketAction?: "create" | "update"}} */ (model)
176
+ * @type {import("../database/record/index.js").default & {__frontendModelWebsocketAction?: "create" | "update"}} */ (model)
177
177
  const action = modelWithWebsocketAction.__frontendModelWebsocketAction
178
178
 
179
179
  if (action !== "create" && action !== "update") return
@@ -15,7 +15,7 @@ export default class Response {
15
15
 
16
16
  /**
17
17
  * Narrows the runtime value to the documented type.
18
- @type {Header[]} */
18
+ * @type {Header[]} */
19
19
  this.headers = []
20
20
 
21
21
  this.method = method.toUpperCase().trim()
@@ -24,7 +24,7 @@ export default class Response {
24
24
 
25
25
  /**
26
26
  * Narrows the runtime value to the documented type.
27
- @type {Buffer} */
27
+ * @type {Buffer} */
28
28
  this.response = Buffer.alloc(0);
29
29
  }
30
30
 
@@ -56,7 +56,7 @@ export default class VeoliciousHttpServerClient {
56
56
 
57
57
  /**
58
58
  * Narrows the runtime value to the documented type.
59
- @type {RequestRunner[]} */
59
+ * @type {RequestRunner[]} */
60
60
  this.requestRunners = []
61
61
  }
62
62
 
@@ -110,12 +110,12 @@ export default class VeoliciousHttpServerClient {
110
110
  handleBadRequest(error) {
111
111
  this.logger.warn(() => ["Failed to parse HTTP request", badRequestDetails(/**
112
112
  * Narrows the runtime value to the documented type.
113
- @type {Error & {velociousContext?: Record<string, ?>}} */ (error))])
113
+ * @type {Error & {velociousContext?: Record<string, ?>}} */ (error))])
114
114
 
115
115
  if (this.currentRequest && "getRequestParser" in this.currentRequest) {
116
116
  const httpRequest = /**
117
117
  * Narrows the runtime value to the documented type.
118
- @type {import("./request.js").default} */ (this.currentRequest)
118
+ * @type {import("./request.js").default} */ (this.currentRequest)
119
119
 
120
120
  httpRequest.getRequestParser().destroy()
121
121
  }
@@ -179,7 +179,7 @@ export default class VeoliciousHttpServerClient {
179
179
  try {
180
180
  /**
181
181
  * Remaining.
182
- @type {Buffer | undefined} */
182
+ * @type {Buffer | undefined} */
183
183
  let remaining = data
184
184
 
185
185
  while (remaining) {
@@ -281,16 +281,16 @@ export default class VeoliciousHttpServerClient {
281
281
 
282
282
  const resolvedThenable = /**
283
283
  * Narrows the runtime value to the documented type.
284
- @type {{then?: (...args: Array<?>) => ?}} */ (resolvedHandler)
284
+ * @type {{then?: (...args: Array<?>) => ?}} */ (resolvedHandler)
285
285
 
286
286
  if (resolvedThenable?.then) {
287
287
  messageHandlerPromise = /**
288
288
  * Narrows the runtime value to the documented type.
289
- @type {Promise<import("../../configuration-types.js").WebsocketMessageHandler | void>} */ (resolvedHandler)
289
+ * @type {Promise<import("../../configuration-types.js").WebsocketMessageHandler | void>} */ (resolvedHandler)
290
290
  } else if (resolvedHandler) {
291
291
  messageHandler = /**
292
292
  * Narrows the runtime value to the documented type.
293
- @type {import("../../configuration-types.js").WebsocketMessageHandler} */ (resolvedHandler)
293
+ * @type {import("../../configuration-types.js").WebsocketMessageHandler} */ (resolvedHandler)
294
294
  }
295
295
  }
296
296
 
@@ -445,7 +445,7 @@ export default class VeoliciousHttpServerClient {
445
445
  if ("getRequestParser" in request) {
446
446
  const httpRequest = /**
447
447
  * Narrows the runtime value to the documented type.
448
- @type {import("./request.js").default} */ (request)
448
+ * @type {import("./request.js").default} */ (request)
449
449
  httpRequest.getRequestParser().destroy()
450
450
  }
451
451
  }
@@ -12,7 +12,7 @@ function malformedNestedParamsKeyError(args) {
12
12
  const error = new Error(`Could not parse nested params key "${key}" at rest "${rest}"`)
13
13
  /**
14
14
  * Typed error.
15
- @type {Error & {velociousContext?: Record<string, ?>}} */
15
+ * @type {Error & {velociousContext?: Record<string, ?>}} */
16
16
  const typedError = error
17
17
 
18
18
  typedError.velociousContext = {
@@ -42,7 +42,7 @@ export default class ParamsToObject {
42
42
  toObject() {
43
43
  /**
44
44
  * Result.
45
- @type {Record<string, ?>} */
45
+ * @type {Record<string, ?>} */
46
46
  const result = {}
47
47
 
48
48
  for(const key in this.object) {
@@ -70,16 +70,16 @@ export default class ParamsToObject {
70
70
 
71
71
  /**
72
72
  * Defines newResult.
73
- @type {Array<?> | Record<string, ?>} */
73
+ * @type {Array<?> | Record<string, ?>} */
74
74
  let newResult
75
75
  const objectResult = /**
76
76
  * Narrows the runtime value to the documented type.
77
- @type {Record<string, ?>} */ (result)
77
+ * @type {Record<string, ?>} */ (result)
78
78
 
79
79
  if (inputName in objectResult) {
80
80
  newResult = /**
81
81
  * Narrows the runtime value to the documented type.
82
- @type {Array<?> | Record<string, ?>} */ (objectResult[inputName])
82
+ * @type {Array<?> | Record<string, ?>} */ (objectResult[inputName])
83
83
  } else if (rest == "[]") {
84
84
  newResult = []
85
85
  objectResult[inputName] = newResult
@@ -92,7 +92,7 @@ export default class ParamsToObject {
92
92
  } else {
93
93
  const objectResult = /**
94
94
  * Narrows the runtime value to the documented type.
95
- @type {Record<string, ?>} */ (result)
95
+ * @type {Record<string, ?>} */ (result)
96
96
 
97
97
  objectResult[key] = value
98
98
  }
@@ -116,7 +116,7 @@ export default class ParamsToObject {
116
116
 
117
117
  /**
118
118
  * Defines newResult.
119
- @type {Array<?> | Record<string, ?>} */
119
+ * @type {Array<?> | Record<string, ?>} */
120
120
  let newResult
121
121
 
122
122
  if (rest == "[]") {
@@ -128,16 +128,16 @@ export default class ParamsToObject {
128
128
  } else if (newRest == "") {
129
129
  /**
130
130
  * Narrows the runtime value to the documented type.
131
- @type {Record<string, ?>} */ (result)[key] = value
131
+ * @type {Record<string, ?>} */ (result)[key] = value
132
132
  } else {
133
133
  const objectResult = /**
134
134
  * Narrows the runtime value to the documented type.
135
- @type {Record<string, ?>} */ (result)
135
+ * @type {Record<string, ?>} */ (result)
136
136
 
137
137
  if (!Array.isArray(result) && key in objectResult) {
138
138
  newResult = /**
139
139
  * Narrows the runtime value to the documented type.
140
- @type {Array<?> | Record<string, ?>} */ (objectResult[key])
140
+ * @type {Array<?> | Record<string, ?>} */ (objectResult[key])
141
141
  } else if (newRest == "[]") {
142
142
  newResult = []
143
143
  objectResult[key] = newResult
@@ -14,12 +14,12 @@ export default class FormDataPart {
14
14
 
15
15
  /**
16
16
  * Headers.
17
- @type {Record<string, import("./header.js").default>} */
17
+ * @type {Record<string, import("./header.js").default>} */
18
18
  headers = {}
19
19
 
20
20
  /**
21
21
  * Body.
22
- @type {number[]} */
22
+ * @type {number[]} */
23
23
  body = []
24
24
 
25
25
  /**
@@ -26,18 +26,18 @@ export default class RequestBuffer {
26
26
 
27
27
  /**
28
28
  * Data.
29
- @type {number[]} */
29
+ * @type {number[]} */
30
30
  data = []
31
31
 
32
32
  events = new EventEmitter()
33
33
 
34
34
  /**
35
35
  * Headers by name.
36
- @type {Record<string, Header>} */
36
+ * @type {Record<string, Header>} */
37
37
  headersByName = {}
38
38
  /**
39
39
  * Chunked body chars.
40
- @type {number[] | undefined} */
40
+ * @type {number[] | undefined} */
41
41
  chunkedBodyChars = undefined
42
42
 
43
43
  multiPartyFormData = false
@@ -98,7 +98,7 @@ export default class RequestBuffer {
98
98
  chunkedBodyChars.push(char)
99
99
  /**
100
100
  * Current chunk bytes read.
101
- @type {number} */
101
+ * @type {number} */
102
102
  const currentChunkBytesRead = (this.currentChunkBytesRead || 0) + 1
103
103
 
104
104
  this.currentChunkBytesRead = currentChunkBytesRead
@@ -196,7 +196,7 @@ export default class RequestBuffer {
196
196
  getHeadersHash() {
197
197
  /**
198
198
  * Result.
199
- @type {Record<string, string>} */
199
+ * @type {Record<string, string>} */
200
200
  const result = {}
201
201
 
202
202
  for (const headerFormattedName in this.headersByName) {
@@ -347,7 +347,7 @@ export default class RequestBuffer {
347
347
  } else {
348
348
  /**
349
349
  * Narrows the runtime value to the documented type.
350
- @type {number[]} */
350
+ * @type {number[]} */
351
351
  this.postBodyChars = []
352
352
 
353
353
  // this.postBodyBuffer = new ArrayBuffer(this.contentLength)
@@ -498,7 +498,7 @@ export default class RequestBuffer {
498
498
  const parsedQuery = querystring.parse(this.postBody)
499
499
  /**
500
500
  * Unparsed params.
501
- @type {Record<string, string | string[]>} */
501
+ * @type {Record<string, string | string[]>} */
502
502
  const unparsedParams = {}
503
503
 
504
504
  for (const [key, value] of Object.entries(parsedQuery)) {
@@ -514,7 +514,7 @@ export default class RequestBuffer {
514
514
  } catch (error) {
515
515
  const ensuredError = /**
516
516
  * Narrows the runtime value to the documented type.
517
- @type {Error & {velociousContext?: Record<string, ?>}} */ (error)
517
+ * @type {Error & {velociousContext?: Record<string, ?>}} */ (error)
518
518
 
519
519
  ensuredError.velociousContext = {
520
520
  ...(ensuredError.velociousContext || {}),
@@ -21,7 +21,7 @@ export default class VelociousHttpServerClientRequestParser {
21
21
  this.hasCompleted = false
22
22
  /**
23
23
  * Narrows the runtime value to the documented type.
24
- @type {Record<string, string | string[] | undefined | Record<string, ?> | Array<?>>} */
24
+ * @type {Record<string, string | string[] | undefined | Record<string, ?> | Array<?>>} */
25
25
  this.params = {}
26
26
 
27
27
  this.requestBuffer = new RequestBuffer({configuration})
@@ -49,7 +49,7 @@ export default class VelociousHttpServerClientRequestParser {
49
49
  onFormDataPart = (formDataPart) => {
50
50
  /**
51
51
  * Unordered params.
52
- @type {Record<string, string | string[] | import("./uploaded-file/uploaded-file.js").default>} */
52
+ * @type {Record<string, string | string[] | import("./uploaded-file/uploaded-file.js").default>} */
53
53
  const unorderedParams = {}
54
54
 
55
55
  unorderedParams[formDataPart.getName()] = formDataPart.getValue()
@@ -62,7 +62,7 @@ export default class VelociousHttpServerClientRequestParser {
62
62
  } catch (error) {
63
63
  const ensuredError = /**
64
64
  * Narrows the runtime value to the documented type.
65
- @type {Error & {velociousContext?: Record<string, ?>}} */ (error)
65
+ * @type {Error & {velociousContext?: Record<string, ?>}} */ (error)
66
66
 
67
67
  ensuredError.velociousContext = {
68
68
  ...(ensuredError.velociousContext || {}),
@@ -32,10 +32,10 @@ function requestErrorSummary(error, cleanedStackWithHeader) {
32
32
 
33
33
  const errorCode = typeof /**
34
34
  * Narrows the runtime value to the documented type.
35
- @type {?} */ (error).code === "string"
35
+ * @type {?} */ (error).code === "string"
36
36
  ? /**
37
37
  * Narrows the runtime value to the documented type.
38
- @type {?} */ (error).code
38
+ * @type {?} */ (error).code
39
39
  : undefined
40
40
  const errorMessage = error.message || String(error)
41
41
 
@@ -182,17 +182,17 @@ export default class VelociousHttpServerClientRequestRunner {
182
182
  const startTimeMs = Date.now()
183
183
  /**
184
184
  * Defines timeoutId.
185
- @type {ReturnType<typeof setTimeout> | undefined} */
185
+ * @type {ReturnType<typeof setTimeout> | undefined} */
186
186
  let timeoutId
187
187
  /**
188
188
  * Defines timeoutReject.
189
- @type {((error: Error) => void) | undefined} */
189
+ * @type {((error: Error) => void) | undefined} */
190
190
  let timeoutReject
191
191
  let timedOut = false
192
192
 
193
193
  const setRequestTimeoutSeconds = (/**
194
194
  * Narrows the runtime value to the documented type.
195
- @type {number | undefined} */ timeoutSeconds) => {
195
+ * @type {number | undefined} */ timeoutSeconds) => {
196
196
  if (timeoutId) {
197
197
  clearTimeout(timeoutId)
198
198
  timeoutId = undefined
@@ -257,7 +257,7 @@ export default class VelociousHttpServerClientRequestRunner {
257
257
  const error = ensureError(e)
258
258
  const errorWithContext = /**
259
259
  * Narrows the runtime value to the documented type.
260
- @type {{velociousContext?: object}} */ (error)
260
+ * @type {{velociousContext?: object}} */ (error)
261
261
  const errorContext = errorWithContext.velociousContext || {stage: "request-runner"}
262
262
  const logDetails = requestErrorLogDetails(error)
263
263
 
@@ -17,7 +17,7 @@
17
17
  export default class RequestTiming {
18
18
  /**
19
19
  * Buckets.
20
- @type {Record<RequestTimingBucket, number>} */
20
+ * @type {Record<RequestTimingBucket, number>} */
21
21
  buckets = {
22
22
  controller: 0,
23
23
  db: 0,
@@ -26,21 +26,21 @@ export default class RequestTiming {
26
26
 
27
27
  /**
28
28
  * Bucket stack.
29
- @type {ActiveTimingBucket[]} */
29
+ * @type {ActiveTimingBucket[]} */
30
30
  bucketStack = []
31
31
 
32
32
  dbQueryCount = 0
33
33
  /**
34
34
  * Completed log method.
35
- @type {"debug" | "info" | undefined} */
35
+ * @type {"debug" | "info" | undefined} */
36
36
  completedLogMethod = undefined
37
37
  /**
38
38
  * Completed log subject.
39
- @type {string | undefined} */
39
+ * @type {string | undefined} */
40
40
  completedLogSubject = undefined
41
41
  /**
42
42
  * Response served at ms.
43
- @type {number | undefined} */
43
+ * @type {number | undefined} */
44
44
  responseServedAtMs = undefined
45
45
  startedAtMs = Date.now()
46
46
 
@@ -88,7 +88,7 @@ export default class VelociousHttpServerClientRequest {
88
88
  const parsed = querystring.parse(query)
89
89
  /**
90
90
  * Params.
91
- @type {Record<string, string | string[]>} */
91
+ * @type {Record<string, string | string[]>} */
92
92
  const params = Object.create(null)
93
93
 
94
94
  for (const [key, value] of Object.entries(parsed)) {