velocious 1.0.461 → 1.0.462

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 (361) hide show
  1. package/build/application.js +1 -3
  2. package/build/background-jobs/cron-expression.js +1 -3
  3. package/build/background-jobs/forked-runner-child.js +1 -3
  4. package/build/background-jobs/job.js +1 -3
  5. package/build/background-jobs/scheduler.js +2 -6
  6. package/build/background-jobs/store.js +2 -6
  7. package/build/background-jobs/web/controller.js +1 -3
  8. package/build/background-jobs/worker.js +1 -3
  9. package/build/beacon/client.js +2 -6
  10. package/build/cli/tenant-database-command-helper.js +1 -3
  11. package/build/configuration.js +29 -32
  12. package/build/controller.js +4 -14
  13. package/build/database/drivers/mssql/index.js +1 -3
  14. package/build/database/drivers/mysql/index.js +2 -6
  15. package/build/database/drivers/pgsql/index.js +1 -3
  16. package/build/database/drivers/sqlite/base.js +3 -9
  17. package/build/database/drivers/sqlite/index.js +3 -9
  18. package/build/database/drivers/sqlite/table.js +1 -3
  19. package/build/database/migrator.js +1 -3
  20. package/build/database/pool/async-tracked-multi-connection.js +20 -45
  21. package/build/database/pool/base-methods-forward.js +2 -10
  22. package/build/database/pool/base.js +5 -15
  23. package/build/database/query/index.js +4 -12
  24. package/build/database/query/join-object.js +3 -9
  25. package/build/database/query/model-class-query.js +21 -63
  26. package/build/database/query/preloader/belongs-to.js +9 -27
  27. package/build/database/query/preloader/has-many.js +7 -21
  28. package/build/database/query/preloader/has-one.js +3 -9
  29. package/build/database/query/preloader.js +6 -18
  30. package/build/database/query/query-data.js +5 -15
  31. package/build/database/query/where-model-class-hash.js +5 -15
  32. package/build/database/query/with-count.js +5 -15
  33. package/build/database/record/acts-as-list.js +10 -38
  34. package/build/database/record/attachments/normalize-input.js +7 -25
  35. package/build/database/record/attachments/storage-drivers/s3.js +4 -12
  36. package/build/database/record/attachments/store.js +2 -6
  37. package/build/database/record/index.js +55 -171
  38. package/build/database/record/instance-relationships/base.js +6 -20
  39. package/build/database/record/instance-relationships/belongs-to.js +2 -6
  40. package/build/database/record/instance-relationships/has-many.js +4 -12
  41. package/build/database/record/instance-relationships/has-one.js +4 -12
  42. package/build/database/record/relationships/base.js +1 -5
  43. package/build/database/record/validators/presence.js +1 -3
  44. package/build/database/record/validators/uniqueness.js +4 -12
  45. package/build/environment-handlers/browser.js +1 -3
  46. package/build/environment-handlers/node/cli/commands/console.js +2 -6
  47. package/build/environment-handlers/node/cli/commands/db/schema/load.js +1 -3
  48. package/build/environment-handlers/node/cli/commands/generate/frontend-models.js +67 -11
  49. package/build/environment-handlers/node.js +15 -6
  50. package/build/frontend-model-controller.js +34 -110
  51. package/build/frontend-models/base.js +45 -151
  52. package/build/frontend-models/clear-pending-debounced-callback.js +1 -3
  53. package/build/frontend-models/preloader.js +3 -9
  54. package/build/frontend-models/query.js +11 -33
  55. package/build/frontend-models/resource-definition.js +2 -6
  56. package/build/frontend-models/transport-serialization.js +7 -21
  57. package/build/frontend-models/use-destroyed-event.js +2 -6
  58. package/build/frontend-models/use-model-class-event.js +2 -6
  59. package/build/frontend-models/use-updated-event.js +3 -9
  60. package/build/frontend-models/websocket-channel.js +9 -27
  61. package/build/frontend-models/websocket-publishers.js +12 -23
  62. package/build/http-server/client/index.js +6 -18
  63. package/build/http-server/client/params-to-object.js +6 -18
  64. package/build/http-server/client/request-buffer/index.js +1 -3
  65. package/build/http-server/client/request-parser.js +1 -3
  66. package/build/http-server/client/request-runner.js +4 -12
  67. package/build/http-server/client/websocket-session.js +6 -18
  68. package/build/http-server/development-reloader.js +2 -6
  69. package/build/http-server/remote-address.js +1 -5
  70. package/build/http-server/server-client.js +3 -9
  71. package/build/http-server/server-lock.js +2 -6
  72. package/build/http-server/websocket-channel-subscribers.js +2 -6
  73. package/build/http-server/websocket-event-log-store.js +5 -15
  74. package/build/http-server/websocket-events-host.js +1 -3
  75. package/build/http-server/worker-handler/in-process.js +3 -11
  76. package/build/http-server/worker-handler/worker-thread.js +1 -3
  77. package/build/logger.js +2 -6
  78. package/build/mailer/backends/smtp.js +1 -5
  79. package/build/mailer/base.js +4 -16
  80. package/build/plugins/sqljs-wasm-route-controller.js +1 -3
  81. package/build/routes/basic-route.js +1 -3
  82. package/build/routes/resolver.js +4 -14
  83. package/build/src/application.d.ts.map +1 -1
  84. package/build/src/application.js +2 -4
  85. package/build/src/background-jobs/cron-expression.d.ts.map +1 -1
  86. package/build/src/background-jobs/cron-expression.js +2 -4
  87. package/build/src/background-jobs/forked-runner-child.js +2 -4
  88. package/build/src/background-jobs/job.d.ts.map +1 -1
  89. package/build/src/background-jobs/job.js +2 -4
  90. package/build/src/background-jobs/scheduler.d.ts.map +1 -1
  91. package/build/src/background-jobs/scheduler.js +3 -7
  92. package/build/src/background-jobs/store.d.ts.map +1 -1
  93. package/build/src/background-jobs/store.js +3 -7
  94. package/build/src/background-jobs/web/controller.d.ts.map +1 -1
  95. package/build/src/background-jobs/web/controller.js +2 -5
  96. package/build/src/background-jobs/worker.d.ts.map +1 -1
  97. package/build/src/background-jobs/worker.js +2 -4
  98. package/build/src/beacon/client.d.ts.map +1 -1
  99. package/build/src/beacon/client.js +3 -7
  100. package/build/src/cli/tenant-database-command-helper.d.ts.map +1 -1
  101. package/build/src/cli/tenant-database-command-helper.js +2 -4
  102. package/build/src/configuration.d.ts.map +1 -1
  103. package/build/src/configuration.js +27 -35
  104. package/build/src/controller.d.ts.map +1 -1
  105. package/build/src/controller.js +5 -15
  106. package/build/src/database/drivers/mssql/index.d.ts.map +1 -1
  107. package/build/src/database/drivers/mssql/index.js +2 -4
  108. package/build/src/database/drivers/mysql/index.d.ts.map +1 -1
  109. package/build/src/database/drivers/mysql/index.js +3 -7
  110. package/build/src/database/drivers/pgsql/index.d.ts.map +1 -1
  111. package/build/src/database/drivers/pgsql/index.js +2 -4
  112. package/build/src/database/drivers/sqlite/base.d.ts.map +1 -1
  113. package/build/src/database/drivers/sqlite/base.js +4 -10
  114. package/build/src/database/drivers/sqlite/index.d.ts.map +1 -1
  115. package/build/src/database/drivers/sqlite/index.js +4 -10
  116. package/build/src/database/drivers/sqlite/table.d.ts.map +1 -1
  117. package/build/src/database/drivers/sqlite/table.js +2 -4
  118. package/build/src/database/migrator.d.ts.map +1 -1
  119. package/build/src/database/migrator.js +2 -4
  120. package/build/src/database/pool/async-tracked-multi-connection.d.ts.map +1 -1
  121. package/build/src/database/pool/async-tracked-multi-connection.js +21 -47
  122. package/build/src/database/pool/base-methods-forward.d.ts.map +1 -1
  123. package/build/src/database/pool/base-methods-forward.js +3 -11
  124. package/build/src/database/pool/base.d.ts.map +1 -1
  125. package/build/src/database/pool/base.js +6 -16
  126. package/build/src/database/query/index.d.ts.map +1 -1
  127. package/build/src/database/query/index.js +5 -13
  128. package/build/src/database/query/join-object.d.ts.map +1 -1
  129. package/build/src/database/query/join-object.js +4 -10
  130. package/build/src/database/query/model-class-query.d.ts.map +1 -1
  131. package/build/src/database/query/model-class-query.js +22 -64
  132. package/build/src/database/query/preloader/belongs-to.d.ts.map +1 -1
  133. package/build/src/database/query/preloader/belongs-to.js +10 -28
  134. package/build/src/database/query/preloader/has-many.d.ts.map +1 -1
  135. package/build/src/database/query/preloader/has-many.js +8 -22
  136. package/build/src/database/query/preloader/has-one.d.ts.map +1 -1
  137. package/build/src/database/query/preloader/has-one.js +4 -10
  138. package/build/src/database/query/preloader.d.ts.map +1 -1
  139. package/build/src/database/query/preloader.js +7 -20
  140. package/build/src/database/query/query-data.d.ts.map +1 -1
  141. package/build/src/database/query/query-data.js +6 -16
  142. package/build/src/database/query/where-model-class-hash.d.ts.map +1 -1
  143. package/build/src/database/query/where-model-class-hash.js +6 -16
  144. package/build/src/database/query/with-count.d.ts.map +1 -1
  145. package/build/src/database/query/with-count.js +6 -17
  146. package/build/src/database/record/acts-as-list.d.ts.map +1 -1
  147. package/build/src/database/record/acts-as-list.js +11 -47
  148. package/build/src/database/record/attachments/normalize-input.d.ts.map +1 -1
  149. package/build/src/database/record/attachments/normalize-input.js +8 -30
  150. package/build/src/database/record/attachments/storage-drivers/s3.d.ts.map +1 -1
  151. package/build/src/database/record/attachments/storage-drivers/s3.js +5 -13
  152. package/build/src/database/record/attachments/store.d.ts.map +1 -1
  153. package/build/src/database/record/attachments/store.js +3 -7
  154. package/build/src/database/record/index.d.ts +4 -9
  155. package/build/src/database/record/index.d.ts.map +1 -1
  156. package/build/src/database/record/index.js +53 -173
  157. package/build/src/database/record/instance-relationships/base.d.ts.map +1 -1
  158. package/build/src/database/record/instance-relationships/base.js +7 -21
  159. package/build/src/database/record/instance-relationships/belongs-to.d.ts.map +1 -1
  160. package/build/src/database/record/instance-relationships/belongs-to.js +3 -7
  161. package/build/src/database/record/instance-relationships/has-many.d.ts.map +1 -1
  162. package/build/src/database/record/instance-relationships/has-many.js +5 -13
  163. package/build/src/database/record/instance-relationships/has-one.d.ts.map +1 -1
  164. package/build/src/database/record/instance-relationships/has-one.js +5 -13
  165. package/build/src/database/record/relationships/base.d.ts.map +1 -1
  166. package/build/src/database/record/relationships/base.js +2 -6
  167. package/build/src/database/record/validators/presence.d.ts.map +1 -1
  168. package/build/src/database/record/validators/presence.js +2 -4
  169. package/build/src/database/record/validators/uniqueness.d.ts.map +1 -1
  170. package/build/src/database/record/validators/uniqueness.js +5 -14
  171. package/build/src/environment-handlers/browser.d.ts.map +1 -1
  172. package/build/src/environment-handlers/browser.js +2 -4
  173. package/build/src/environment-handlers/node/cli/commands/console.d.ts.map +1 -1
  174. package/build/src/environment-handlers/node/cli/commands/console.js +3 -7
  175. package/build/src/environment-handlers/node/cli/commands/db/schema/load.d.ts.map +1 -1
  176. package/build/src/environment-handlers/node/cli/commands/db/schema/load.js +2 -4
  177. package/build/src/environment-handlers/node/cli/commands/generate/frontend-models.d.ts +38 -0
  178. package/build/src/environment-handlers/node/cli/commands/generate/frontend-models.d.ts.map +1 -1
  179. package/build/src/environment-handlers/node/cli/commands/generate/frontend-models.js +58 -12
  180. package/build/src/environment-handlers/node.d.ts.map +1 -1
  181. package/build/src/environment-handlers/node.js +16 -7
  182. package/build/src/frontend-model-controller.d.ts.map +1 -1
  183. package/build/src/frontend-model-controller.js +35 -114
  184. package/build/src/frontend-models/base.d.ts.map +1 -1
  185. package/build/src/frontend-models/base.js +46 -158
  186. package/build/src/frontend-models/clear-pending-debounced-callback.d.ts.map +1 -1
  187. package/build/src/frontend-models/clear-pending-debounced-callback.js +2 -4
  188. package/build/src/frontend-models/preloader.d.ts.map +1 -1
  189. package/build/src/frontend-models/preloader.js +4 -11
  190. package/build/src/frontend-models/query.d.ts.map +1 -1
  191. package/build/src/frontend-models/query.js +12 -34
  192. package/build/src/frontend-models/resource-definition.d.ts.map +1 -1
  193. package/build/src/frontend-models/resource-definition.js +3 -7
  194. package/build/src/frontend-models/transport-serialization.d.ts.map +1 -1
  195. package/build/src/frontend-models/transport-serialization.js +8 -23
  196. package/build/src/frontend-models/use-destroyed-event.js +3 -7
  197. package/build/src/frontend-models/use-model-class-event.d.ts.map +1 -1
  198. package/build/src/frontend-models/use-model-class-event.js +3 -7
  199. package/build/src/frontend-models/use-updated-event.d.ts.map +1 -1
  200. package/build/src/frontend-models/use-updated-event.js +4 -10
  201. package/build/src/frontend-models/websocket-channel.d.ts.map +1 -1
  202. package/build/src/frontend-models/websocket-channel.js +10 -32
  203. package/build/src/frontend-models/websocket-publishers.d.ts.map +1 -1
  204. package/build/src/frontend-models/websocket-publishers.js +14 -25
  205. package/build/src/http-server/client/index.d.ts.map +1 -1
  206. package/build/src/http-server/client/index.js +7 -21
  207. package/build/src/http-server/client/params-to-object.d.ts.map +1 -1
  208. package/build/src/http-server/client/params-to-object.js +7 -21
  209. package/build/src/http-server/client/request-buffer/index.d.ts.map +1 -1
  210. package/build/src/http-server/client/request-buffer/index.js +2 -4
  211. package/build/src/http-server/client/request-parser.d.ts.map +1 -1
  212. package/build/src/http-server/client/request-parser.js +2 -4
  213. package/build/src/http-server/client/request-runner.d.ts.map +1 -1
  214. package/build/src/http-server/client/request-runner.js +5 -14
  215. package/build/src/http-server/client/websocket-session.d.ts.map +1 -1
  216. package/build/src/http-server/client/websocket-session.js +7 -20
  217. package/build/src/http-server/development-reloader.d.ts.map +1 -1
  218. package/build/src/http-server/development-reloader.js +3 -7
  219. package/build/src/http-server/remote-address.d.ts.map +1 -1
  220. package/build/src/http-server/remote-address.js +2 -6
  221. package/build/src/http-server/server-client.d.ts.map +1 -1
  222. package/build/src/http-server/server-client.js +4 -10
  223. package/build/src/http-server/server-lock.d.ts.map +1 -1
  224. package/build/src/http-server/server-lock.js +3 -7
  225. package/build/src/http-server/websocket-channel-subscribers.d.ts.map +1 -1
  226. package/build/src/http-server/websocket-channel-subscribers.js +3 -7
  227. package/build/src/http-server/websocket-event-log-store.d.ts.map +1 -1
  228. package/build/src/http-server/websocket-event-log-store.js +6 -16
  229. package/build/src/http-server/websocket-events-host.d.ts.map +1 -1
  230. package/build/src/http-server/websocket-events-host.js +2 -5
  231. package/build/src/http-server/worker-handler/in-process.d.ts.map +1 -1
  232. package/build/src/http-server/worker-handler/in-process.js +4 -12
  233. package/build/src/http-server/worker-handler/worker-thread.d.ts.map +1 -1
  234. package/build/src/http-server/worker-handler/worker-thread.js +2 -4
  235. package/build/src/logger.d.ts.map +1 -1
  236. package/build/src/logger.js +3 -7
  237. package/build/src/mailer/backends/smtp.d.ts.map +1 -1
  238. package/build/src/mailer/backends/smtp.js +2 -6
  239. package/build/src/mailer/base.d.ts.map +1 -1
  240. package/build/src/mailer/base.js +5 -17
  241. package/build/src/plugins/sqljs-wasm-route-controller.d.ts.map +1 -1
  242. package/build/src/plugins/sqljs-wasm-route-controller.js +2 -4
  243. package/build/src/routes/basic-route.d.ts.map +1 -1
  244. package/build/src/routes/basic-route.js +2 -4
  245. package/build/src/routes/resolver.d.ts.map +1 -1
  246. package/build/src/routes/resolver.js +5 -15
  247. package/build/src/testing/expect-utils.d.ts.map +1 -1
  248. package/build/src/testing/expect-utils.js +9 -27
  249. package/build/src/testing/expect.d.ts.map +1 -1
  250. package/build/src/testing/expect.js +5 -15
  251. package/build/src/testing/test-runner.d.ts.map +1 -1
  252. package/build/src/testing/test-runner.js +4 -10
  253. package/build/src/testing/test.d.ts.map +1 -1
  254. package/build/src/testing/test.js +5 -17
  255. package/build/src/utils/model-scope.d.ts.map +1 -1
  256. package/build/src/utils/model-scope.js +2 -5
  257. package/build/src/utils/ransack.d.ts.map +1 -1
  258. package/build/src/utils/ransack.js +15 -42
  259. package/build/src/utils/with-tracked-stack-async-hooks.d.ts.map +1 -1
  260. package/build/src/utils/with-tracked-stack-async-hooks.js +4 -12
  261. package/build/src/utils/with-tracked-stack.d.ts.map +1 -1
  262. package/build/src/utils/with-tracked-stack.js +3 -8
  263. package/build/testing/expect-utils.js +8 -26
  264. package/build/testing/expect.js +4 -14
  265. package/build/testing/test-runner.js +3 -9
  266. package/build/testing/test.js +4 -12
  267. package/build/utils/model-scope.js +1 -3
  268. package/build/utils/ransack.js +15 -41
  269. package/build/utils/with-tracked-stack-async-hooks.js +3 -9
  270. package/build/utils/with-tracked-stack.js +2 -6
  271. package/package.json +3 -2
  272. package/src/application.js +1 -3
  273. package/src/background-jobs/cron-expression.js +1 -3
  274. package/src/background-jobs/forked-runner-child.js +1 -3
  275. package/src/background-jobs/job.js +1 -3
  276. package/src/background-jobs/scheduler.js +2 -6
  277. package/src/background-jobs/store.js +2 -6
  278. package/src/background-jobs/web/controller.js +1 -3
  279. package/src/background-jobs/worker.js +1 -3
  280. package/src/beacon/client.js +2 -6
  281. package/src/cli/tenant-database-command-helper.js +1 -3
  282. package/src/configuration.js +29 -32
  283. package/src/controller.js +4 -14
  284. package/src/database/drivers/mssql/index.js +1 -3
  285. package/src/database/drivers/mysql/index.js +2 -6
  286. package/src/database/drivers/pgsql/index.js +1 -3
  287. package/src/database/drivers/sqlite/base.js +3 -9
  288. package/src/database/drivers/sqlite/index.js +3 -9
  289. package/src/database/drivers/sqlite/table.js +1 -3
  290. package/src/database/migrator.js +1 -3
  291. package/src/database/pool/async-tracked-multi-connection.js +20 -45
  292. package/src/database/pool/base-methods-forward.js +2 -10
  293. package/src/database/pool/base.js +5 -15
  294. package/src/database/query/index.js +4 -12
  295. package/src/database/query/join-object.js +3 -9
  296. package/src/database/query/model-class-query.js +21 -63
  297. package/src/database/query/preloader/belongs-to.js +9 -27
  298. package/src/database/query/preloader/has-many.js +7 -21
  299. package/src/database/query/preloader/has-one.js +3 -9
  300. package/src/database/query/preloader.js +6 -18
  301. package/src/database/query/query-data.js +5 -15
  302. package/src/database/query/where-model-class-hash.js +5 -15
  303. package/src/database/query/with-count.js +5 -15
  304. package/src/database/record/acts-as-list.js +10 -38
  305. package/src/database/record/attachments/normalize-input.js +7 -25
  306. package/src/database/record/attachments/storage-drivers/s3.js +4 -12
  307. package/src/database/record/attachments/store.js +2 -6
  308. package/src/database/record/index.js +55 -171
  309. package/src/database/record/instance-relationships/base.js +6 -20
  310. package/src/database/record/instance-relationships/belongs-to.js +2 -6
  311. package/src/database/record/instance-relationships/has-many.js +4 -12
  312. package/src/database/record/instance-relationships/has-one.js +4 -12
  313. package/src/database/record/relationships/base.js +1 -5
  314. package/src/database/record/validators/presence.js +1 -3
  315. package/src/database/record/validators/uniqueness.js +4 -12
  316. package/src/environment-handlers/browser.js +1 -3
  317. package/src/environment-handlers/node/cli/commands/console.js +2 -6
  318. package/src/environment-handlers/node/cli/commands/db/schema/load.js +1 -3
  319. package/src/environment-handlers/node/cli/commands/generate/frontend-models.js +67 -11
  320. package/src/environment-handlers/node.js +15 -6
  321. package/src/frontend-model-controller.js +34 -110
  322. package/src/frontend-models/base.js +45 -151
  323. package/src/frontend-models/clear-pending-debounced-callback.js +1 -3
  324. package/src/frontend-models/preloader.js +3 -9
  325. package/src/frontend-models/query.js +11 -33
  326. package/src/frontend-models/resource-definition.js +2 -6
  327. package/src/frontend-models/transport-serialization.js +7 -21
  328. package/src/frontend-models/use-destroyed-event.js +2 -6
  329. package/src/frontend-models/use-model-class-event.js +2 -6
  330. package/src/frontend-models/use-updated-event.js +3 -9
  331. package/src/frontend-models/websocket-channel.js +9 -27
  332. package/src/frontend-models/websocket-publishers.js +12 -23
  333. package/src/http-server/client/index.js +6 -18
  334. package/src/http-server/client/params-to-object.js +6 -18
  335. package/src/http-server/client/request-buffer/index.js +1 -3
  336. package/src/http-server/client/request-parser.js +1 -3
  337. package/src/http-server/client/request-runner.js +4 -12
  338. package/src/http-server/client/websocket-session.js +6 -18
  339. package/src/http-server/development-reloader.js +2 -6
  340. package/src/http-server/remote-address.js +1 -5
  341. package/src/http-server/server-client.js +3 -9
  342. package/src/http-server/server-lock.js +2 -6
  343. package/src/http-server/websocket-channel-subscribers.js +2 -6
  344. package/src/http-server/websocket-event-log-store.js +5 -15
  345. package/src/http-server/websocket-events-host.js +1 -3
  346. package/src/http-server/worker-handler/in-process.js +3 -11
  347. package/src/http-server/worker-handler/worker-thread.js +1 -3
  348. package/src/logger.js +2 -6
  349. package/src/mailer/backends/smtp.js +1 -5
  350. package/src/mailer/base.js +4 -16
  351. package/src/plugins/sqljs-wasm-route-controller.js +1 -3
  352. package/src/routes/basic-route.js +1 -3
  353. package/src/routes/resolver.js +4 -14
  354. package/src/testing/expect-utils.js +8 -26
  355. package/src/testing/expect.js +4 -14
  356. package/src/testing/test-runner.js +3 -9
  357. package/src/testing/test.js +4 -12
  358. package/src/utils/model-scope.js +1 -3
  359. package/src/utils/ransack.js +15 -41
  360. package/src/utils/with-tracked-stack-async-hooks.js +3 -9
  361. package/src/utils/with-tracked-stack.js +2 -6
@@ -137,9 +137,7 @@ function isFrontendModelMarker(value) {
137
137
  export function isBackendModelInstance(value) {
138
138
  if (!value || typeof value !== "object") return false
139
139
 
140
- const candidate = /**
141
- * Narrows the runtime value to the documented type.
142
- * @type {Record<string, ?>} */ (value)
140
+ const candidate = /** @type {Record<string, ?>} */ (value)
143
141
 
144
142
  return (
145
143
  typeof candidate.attributes === "function"
@@ -197,9 +195,7 @@ function serializeFrontendModelTransportValueInternal(value, seenModels) {
197
195
  * @type {Record<string, ?>} */
198
196
  const serializedModel = {
199
197
  [TYPE_KEY]: TYPE_FRONTEND_MODEL,
200
- attributes: /**
201
- * Narrows the runtime value to the documented type.
202
- * @type {Record<string, ?>} */ (serializeFrontendModelTransportValueInternal(modelAttributes, seenModels)),
198
+ attributes: /** @type {Record<string, ?>} */ (serializeFrontendModelTransportValueInternal(modelAttributes, seenModels)),
203
199
  modelName
204
200
  }
205
201
 
@@ -259,13 +255,9 @@ function serializeFrontendModelTransportValueInternal(value, seenModels) {
259
255
  * @returns {?} - Hydrated frontend model or plain object fallback.
260
256
  */
261
257
  function deserializeFrontendModelMarker(marker) {
262
- const attributes = /**
263
- * Narrows the runtime value to the documented type.
264
- * @type {Record<string, ?>} */ (deserializeFrontendModelTransportValue(marker.attributes))
258
+ const attributes = /** @type {Record<string, ?>} */ (deserializeFrontendModelTransportValue(marker.attributes))
265
259
  const preloadedRelationships = isPlainObject(marker.preloadedRelationships)
266
- ? /**
267
- * Narrows the runtime value to the documented type.
268
- * @type {Record<string, ?>} */ (deserializeFrontendModelTransportValue(marker.preloadedRelationships))
260
+ ? /** @type {Record<string, ?>} */ (deserializeFrontendModelTransportValue(marker.preloadedRelationships))
269
261
  : {}
270
262
  const modelClass = resolveFrontendModelClass(marker.modelName)
271
263
 
@@ -317,25 +309,19 @@ export function deserializeFrontendModelTransportValue(value) {
317
309
  }
318
310
 
319
311
  if (isDateMarker(value)) {
320
- const dateValue = /**
321
- * Narrows the runtime value to the documented type.
322
- * @type {{value: string}} */ (value).value
312
+ const dateValue = /** @type {{value: string}} */ (value).value
323
313
 
324
314
  return new Date(dateValue)
325
315
  }
326
316
 
327
317
  if (isBigIntMarker(value)) {
328
- const bigintValue = /**
329
- * Narrows the runtime value to the documented type.
330
- * @type {{value: string}} */ (value).value
318
+ const bigintValue = /** @type {{value: string}} */ (value).value
331
319
 
332
320
  return BigInt(bigintValue)
333
321
  }
334
322
 
335
323
  if (isNonFiniteNumberMarker(value)) {
336
- const numberValue = /**
337
- * Narrows the runtime value to the documented type.
338
- * @type {{value: string}} */ (value).value
324
+ const numberValue = /** @type {{value: string}} */ (value).value
339
325
 
340
326
  if (numberValue === NUMBER_NAN) return Number.NaN
341
327
  if (numberValue === NUMBER_POSITIVE_INFINITY) return Number.POSITIVE_INFINITY
@@ -92,9 +92,7 @@ function useInstanceDestroyedEvent(modelOrModels, callback, options) {
92
92
 
93
93
  const modelsKey = modelsDependencyKey(modelOrModels)
94
94
  const eventCallback = useMemo(() => {
95
- const wrappedCallback = (/**
96
- * Narrows the runtime value to the documented type.
97
- * @type {FrontendModelInstanceDestroyEventPayload} */ payload) => {
95
+ const wrappedCallback = (/** @type {FrontendModelInstanceDestroyEventPayload} */ payload) => {
98
96
  if (activeRef.current) callbackRef.current(payload)
99
97
  }
100
98
 
@@ -115,9 +113,7 @@ function useInstanceDestroyedEvent(modelOrModels, callback, options) {
115
113
  * Unsubscribe callbacks.
116
114
  * @type {Array<() => void>} */
117
115
  const unsubscribeCallbacks = []
118
- const subscriptionCallback = (/**
119
- * Narrows the runtime value to the documented type.
120
- * @type {FrontendModelInstanceDestroyEventPayload} */ payload) => {
116
+ const subscriptionCallback = (/** @type {FrontendModelInstanceDestroyEventPayload} */ payload) => {
121
117
  if (!closed) eventCallback(payload)
122
118
  }
123
119
 
@@ -111,9 +111,7 @@ export default function useModelClassEvent(modelClass, eventOrEvents, callback,
111
111
  const eventNames = normalizeEventNames(eventOrEvents)
112
112
  const eventsKey = eventNamesDependencyKey(eventNames)
113
113
  const eventCallback = useMemo(() => {
114
- const wrappedCallback = (/**
115
- * Narrows the runtime value to the documented type.
116
- * @type {FrontendModelClassEventPayload} */ payload) => {
114
+ const wrappedCallback = (/** @type {FrontendModelClassEventPayload} */ payload) => {
117
115
  if (activeRef.current) callbackRef.current(payload)
118
116
  }
119
117
 
@@ -131,9 +129,7 @@ export default function useModelClassEvent(modelClass, eventOrEvents, callback,
131
129
  * Unsubscribe callbacks.
132
130
  * @type {Array<() => void>} */
133
131
  const unsubscribeCallbacks = []
134
- const subscriptionCallback = (/**
135
- * Narrows the runtime value to the documented type.
136
- * @type {FrontendModelClassEventPayload} */ payload) => {
132
+ const subscriptionCallback = (/** @type {FrontendModelClassEventPayload} */ payload) => {
137
133
  if (!closed) eventCallback(payload)
138
134
  }
139
135
 
@@ -70,9 +70,7 @@ export default function useUpdatedEvent(modelClassOrModels, callback, options =
70
70
  const projectionOptions = {abilities, preload, query, queryData, select, selectsExtra, withCount}
71
71
 
72
72
  useModelClassEvent(classModel, "update", (payload) => {
73
- callback(/**
74
- * Narrows the runtime value to the documented type.
75
- * @type {FrontendModelClassUpdateEventPayload} */ (payload))
73
+ callback(/** @type {FrontendModelClassUpdateEventPayload} */ (payload))
76
74
  }, {active: active && Boolean(classModel), debounce, onConnected, ...projectionOptions})
77
75
  useInstanceUpdatedEvent(instanceModels, callback, {active: active && !classModel, debounce, onConnected, ...projectionOptions})
78
76
  }
@@ -96,9 +94,7 @@ function useInstanceUpdatedEvent(modelOrModels, callback, options) {
96
94
 
97
95
  const modelsKey = modelsDependencyKey(modelOrModels)
98
96
  const eventCallback = useMemo(() => {
99
- const wrappedCallback = (/**
100
- * Narrows the runtime value to the documented type.
101
- * @type {FrontendModelInstanceUpdateEventPayload} */ payload) => {
97
+ const wrappedCallback = (/** @type {FrontendModelInstanceUpdateEventPayload} */ payload) => {
102
98
  if (activeRef.current) callbackRef.current(payload)
103
99
  }
104
100
 
@@ -119,9 +115,7 @@ function useInstanceUpdatedEvent(modelOrModels, callback, options) {
119
115
  * Unsubscribe callbacks.
120
116
  * @type {Array<() => void>} */
121
117
  const unsubscribeCallbacks = []
122
- const subscriptionCallback = (/**
123
- * Narrows the runtime value to the documented type.
124
- * @type {FrontendModelInstanceUpdateEventPayload} */ payload) => {
118
+ const subscriptionCallback = (/** @type {FrontendModelInstanceUpdateEventPayload} */ payload) => {
125
119
  if (!closed) eventCallback(payload)
126
120
  }
127
121
 
@@ -85,9 +85,7 @@ export default class FrontendModelWebsocketChannel extends VelociousWebsocketCha
85
85
 
86
86
  const readRules = ability.rulesFor({action: "read", modelClass: ModelClass})
87
87
 
88
- return readRules.some((/**
89
- * Narrows the runtime value to the documented type.
90
- * @type {{effect: string}} */ rule) => rule.effect === "allow")
88
+ return readRules.some((/** @type {{effect: string}} */ rule) => rule.effect === "allow")
91
89
  }
92
90
 
93
91
  /**
@@ -168,9 +166,7 @@ export default class FrontendModelWebsocketChannel extends VelociousWebsocketCha
168
166
 
169
167
  deliverBody = {
170
168
  ...deliverBody,
171
- record: /**
172
- * Narrows the runtime value to the documented type.
173
- * @type {import("./query.js").FrontendModelTransportValue} */ (serializeFrontendModelTransportValue(projectedRecord))
169
+ record: /** @type {import("./query.js").FrontendModelTransportValue} */ (serializeFrontendModelTransportValue(projectedRecord))
174
170
  }
175
171
  }
176
172
 
@@ -276,9 +272,7 @@ export default class FrontendModelWebsocketChannel extends VelociousWebsocketCha
276
272
  throw new Error("Frontend model eventFilters entries must be objects")
277
273
  }
278
274
 
279
- const eventFilter = /**
280
- * Narrows the runtime value to the documented type.
281
- * @type {Record<string, ?>} */ (entry)
275
+ const eventFilter = /** @type {Record<string, ?>} */ (entry)
282
276
  const unknownKeys = Object.keys(eventFilter).filter((key) => !EVENT_FILTER_KEYS.has(key))
283
277
 
284
278
  if (unknownKeys.length > 0) {
@@ -295,21 +289,15 @@ export default class FrontendModelWebsocketChannel extends VelociousWebsocketCha
295
289
  const sanitizedEventFilter = {key: eventFilter.key}
296
290
 
297
291
  if (eventFilter.joins !== undefined) {
298
- sanitizedEventFilter.joins = /**
299
- * Narrows the runtime value to the documented type.
300
- * @type {Record<string, import("./query.js").FrontendModelTransportValue>} */ (eventFilter.joins)
292
+ sanitizedEventFilter.joins = /** @type {Record<string, import("./query.js").FrontendModelTransportValue>} */ (eventFilter.joins)
301
293
  }
302
294
 
303
295
  if (eventFilter.searches !== undefined) {
304
- sanitizedEventFilter.searches = /**
305
- * Narrows the runtime value to the documented type.
306
- * @type {import("./query.js").FrontendModelSearch[]} */ (eventFilter.searches)
296
+ sanitizedEventFilter.searches = /** @type {import("./query.js").FrontendModelSearch[]} */ (eventFilter.searches)
307
297
  }
308
298
 
309
299
  if (eventFilter.where !== undefined) {
310
- sanitizedEventFilter.where = /**
311
- * Narrows the runtime value to the documented type.
312
- * @type {Record<string, import("./query.js").FrontendModelTransportValue>} */ (eventFilter.where)
300
+ sanitizedEventFilter.where = /** @type {Record<string, import("./query.js").FrontendModelTransportValue>} */ (eventFilter.where)
313
301
  }
314
302
 
315
303
  return sanitizedEventFilter
@@ -352,9 +340,7 @@ export default class FrontendModelWebsocketChannel extends VelociousWebsocketCha
352
340
  ...params,
353
341
  withCount: this.params.withCount
354
342
  },
355
- request: /**
356
- * Narrows the runtime value to the documented type.
357
- * @type {import("../http-server/client/request.js").default} */ (this._syntheticRequest()),
343
+ request: /** @type {import("../http-server/client/request.js").default} */ (this._syntheticRequest()),
358
344
  response: new Response({configuration}),
359
345
  viewPath: "/"
360
346
  })
@@ -518,9 +504,7 @@ export default class FrontendModelWebsocketChannel extends VelociousWebsocketCha
518
504
 
519
505
  spec[entry.attributeName] = {
520
506
  relationship: entry.relationshipName,
521
- where: entry.where ? /**
522
- * Narrows the runtime value to the documented type.
523
- * @type {Record<string, import("./query.js").FrontendModelTransportValue>} */ (entry.where) : undefined
507
+ where: entry.where ? /** @type {Record<string, import("./query.js").FrontendModelTransportValue>} */ (entry.where) : undefined
524
508
  }
525
509
  query.withCount(spec)
526
510
  }
@@ -558,9 +542,7 @@ export default class FrontendModelWebsocketChannel extends VelociousWebsocketCha
558
542
  * @returns {FrontendModelWebsocketSyntheticRequest} Request-like object for ability resolution.
559
543
  */
560
544
  _syntheticRequest() {
561
- const upgradeRequest = /**
562
- * Narrows the runtime value to the documented type.
563
- * @type {FrontendModelWebsocketUpgradeRequest} */ (this.session.upgradeRequest)
545
+ const upgradeRequest = /** @type {FrontendModelWebsocketUpgradeRequest} */ (this.session.upgradeRequest)
564
546
  const rawHeaders = typeof upgradeRequest?.headers === "function" ? upgradeRequest.headers() : {}
565
547
  const metadata = typeof this.session.getMetadata === "function" ? this.session.getMetadata() : {}
566
548
  const remoteAddress = typeof upgradeRequest?.remoteAddress === "function" ? upgradeRequest.remoteAddress() : undefined
@@ -2,7 +2,7 @@
2
2
 
3
3
  import AuthorizationBaseResource from "../authorization/base-resource.js"
4
4
  import {frontendModelResourcesWithBuiltInsForBackendProject} from "./built-in-resources.js"
5
- import {frontendModelResourceDefinitionIsClass, frontendModelResourcesForBackendProject} from "./resource-definition.js"
5
+ import {frontendModelResourceDefinitionIsClass} from "./resource-definition.js"
6
6
  import {serializeFrontendModelTransportValue} from "./transport-serialization.js"
7
7
 
8
8
  const modelClassesWithRegisteredHooks = new WeakSet()
@@ -72,27 +72,22 @@ export async function ensureFrontendModelWebsocketPublishersRegistered(configura
72
72
  * All frontend models.
73
73
  * @type {Record<string, import("../configuration-types.js").FrontendModelResourceClassType>} */
74
74
  let allFrontendModels = {}
75
- /**
76
- * Configured frontend models.
77
- * @type {Record<string, import("../configuration-types.js").FrontendModelResourceClassType>} */
78
- let configuredFrontendModels = {}
79
75
 
80
76
  for (const backendProject of configuration.getBackendProjects()) {
81
- const configuredProjectResources = frontendModelResourcesForBackendProject(backendProject)
82
77
  const projectResources = frontendModelResourcesWithBuiltInsForBackendProject(backendProject)
83
78
 
84
- configuredFrontendModels = {...configuredFrontendModels, ...configuredProjectResources}
85
79
  allFrontendModels = {...allFrontendModels, ...projectResources}
86
80
  }
87
81
 
88
- // Auto-discover from ability resources when backend projects didn't provide any
89
- if (Object.keys(configuredFrontendModels).length === 0) {
90
- const abilityResources = configuration.getAbilityResources()
82
+ // Always merge the ability resolver's resource list too. A project can expose some
83
+ // resources as discoverable `src/resources/*.js` files (configured or auto-discovered)
84
+ // and others only through `getAbilityResources()`; both sets need lifecycle publishers,
85
+ // so resource discovery must not suppress this list.
86
+ const abilityResources = configuration.getAbilityResources()
91
87
 
92
- allFrontendModels = {
93
- ...allFrontendModels,
94
- ...frontendModelResourcesFromAbilityResourcesList(abilityResources)
95
- }
88
+ allFrontendModels = {
89
+ ...allFrontendModels,
90
+ ...frontendModelResourcesFromAbilityResourcesList(abilityResources)
96
91
  }
97
92
 
98
93
  // Phase 3: register the V2 channel class once per configuration so
@@ -126,21 +121,15 @@ export async function ensureFrontendModelWebsocketPublishersRegistered(configura
126
121
  modelClassesWithRegisteredHooks.add(modelClass)
127
122
 
128
123
  modelClass.beforeCreate((model) => {
129
- /**
130
- * Narrows the runtime value to the documented type.
131
- * @type {import("../database/record/index.js").default & {__frontendModelWebsocketAction?: "create" | "update"}} */ (model).__frontendModelWebsocketAction = "create"
124
+ /** @type {import("../database/record/index.js").default & {__frontendModelWebsocketAction?: "create" | "update"}} */ (model).__frontendModelWebsocketAction = "create"
132
125
  })
133
126
 
134
127
  modelClass.beforeUpdate((model) => {
135
- /**
136
- * Narrows the runtime value to the documented type.
137
- * @type {import("../database/record/index.js").default & {__frontendModelWebsocketAction?: "create" | "update"}} */ (model).__frontendModelWebsocketAction = "update"
128
+ /** @type {import("../database/record/index.js").default & {__frontendModelWebsocketAction?: "create" | "update"}} */ (model).__frontendModelWebsocketAction = "update"
138
129
  })
139
130
 
140
131
  modelClass.afterSave((model) => {
141
- const modelWithWebsocketAction = /**
142
- * Narrows the runtime value to the documented type.
143
- * @type {import("../database/record/index.js").default & {__frontendModelWebsocketAction?: "create" | "update"}} */ (model)
132
+ const modelWithWebsocketAction = /** @type {import("../database/record/index.js").default & {__frontendModelWebsocketAction?: "create" | "update"}} */ (model)
144
133
  const action = modelWithWebsocketAction.__frontendModelWebsocketAction
145
134
 
146
135
  if (action !== "create" && action !== "update") return
@@ -108,14 +108,10 @@ export default class VeoliciousHttpServerClient {
108
108
  * @returns {void} - No return value.
109
109
  */
110
110
  handleBadRequest(error) {
111
- this.logger.warn(() => ["Failed to parse HTTP request", badRequestDetails(/**
112
- * Narrows the runtime value to the documented type.
113
- * @type {Error & {velociousContext?: Record<string, ?>}} */ (error))])
111
+ this.logger.warn(() => ["Failed to parse HTTP request", badRequestDetails(/** @type {Error & {velociousContext?: Record<string, ?>}} */ (error))])
114
112
 
115
113
  if (this.currentRequest && "getRequestParser" in this.currentRequest) {
116
- const httpRequest = /**
117
- * Narrows the runtime value to the documented type.
118
- * @type {import("./request.js").default} */ (this.currentRequest)
114
+ const httpRequest = /** @type {import("./request.js").default} */ (this.currentRequest)
119
115
 
120
116
  httpRequest.getRequestParser().destroy()
121
117
  }
@@ -279,18 +275,12 @@ export default class VeoliciousHttpServerClient {
279
275
  request: this.currentRequest
280
276
  })
281
277
 
282
- const resolvedThenable = /**
283
- * Narrows the runtime value to the documented type.
284
- * @type {{then?: (...args: Array<?>) => ?}} */ (resolvedHandler)
278
+ const resolvedThenable = /** @type {{then?: (...args: Array<?>) => ?}} */ (resolvedHandler)
285
279
 
286
280
  if (resolvedThenable?.then) {
287
- messageHandlerPromise = /**
288
- * Narrows the runtime value to the documented type.
289
- * @type {Promise<import("../../configuration-types.js").WebsocketMessageHandler | void>} */ (resolvedHandler)
281
+ messageHandlerPromise = /** @type {Promise<import("../../configuration-types.js").WebsocketMessageHandler | void>} */ (resolvedHandler)
290
282
  } else if (resolvedHandler) {
291
- messageHandler = /**
292
- * Narrows the runtime value to the documented type.
293
- * @type {import("../../configuration-types.js").WebsocketMessageHandler} */ (resolvedHandler)
283
+ messageHandler = /** @type {import("../../configuration-types.js").WebsocketMessageHandler} */ (resolvedHandler)
294
284
  }
295
285
  }
296
286
 
@@ -443,9 +433,7 @@ export default class VeoliciousHttpServerClient {
443
433
  await requestRunner.logCompletedRequest()
444
434
 
445
435
  if ("getRequestParser" in request) {
446
- const httpRequest = /**
447
- * Narrows the runtime value to the documented type.
448
- * @type {import("./request.js").default} */ (request)
436
+ const httpRequest = /** @type {import("./request.js").default} */ (request)
449
437
  httpRequest.getRequestParser().destroy()
450
438
  }
451
439
  }
@@ -72,14 +72,10 @@ export default class ParamsToObject {
72
72
  * Defines newResult.
73
73
  * @type {Array<?> | Record<string, ?>} */
74
74
  let newResult
75
- const objectResult = /**
76
- * Narrows the runtime value to the documented type.
77
- * @type {Record<string, ?>} */ (result)
75
+ const objectResult = /** @type {Record<string, ?>} */ (result)
78
76
 
79
77
  if (inputName in objectResult) {
80
- newResult = /**
81
- * Narrows the runtime value to the documented type.
82
- * @type {Array<?> | Record<string, ?>} */ (objectResult[inputName])
78
+ newResult = /** @type {Array<?> | Record<string, ?>} */ (objectResult[inputName])
83
79
  } else if (rest == "[]") {
84
80
  newResult = []
85
81
  objectResult[inputName] = newResult
@@ -90,9 +86,7 @@ export default class ParamsToObject {
90
86
 
91
87
  this.treatSecond(value, rest, newResult, key)
92
88
  } else {
93
- const objectResult = /**
94
- * Narrows the runtime value to the documented type.
95
- * @type {Record<string, ?>} */ (result)
89
+ const objectResult = /** @type {Record<string, ?>} */ (result)
96
90
 
97
91
  objectResult[key] = value
98
92
  }
@@ -126,18 +120,12 @@ export default class ParamsToObject {
126
120
 
127
121
  result.push(value)
128
122
  } else if (newRest == "") {
129
- /**
130
- * Narrows the runtime value to the documented type.
131
- * @type {Record<string, ?>} */ (result)[key] = value
123
+ /** @type {Record<string, ?>} */ (result)[key] = value
132
124
  } else {
133
- const objectResult = /**
134
- * Narrows the runtime value to the documented type.
135
- * @type {Record<string, ?>} */ (result)
125
+ const objectResult = /** @type {Record<string, ?>} */ (result)
136
126
 
137
127
  if (!Array.isArray(result) && key in objectResult) {
138
- newResult = /**
139
- * Narrows the runtime value to the documented type.
140
- * @type {Array<?> | Record<string, ?>} */ (objectResult[key])
128
+ newResult = /** @type {Array<?> | Record<string, ?>} */ (objectResult[key])
141
129
  } else if (newRest == "[]") {
142
130
  newResult = []
143
131
  objectResult[key] = newResult
@@ -512,9 +512,7 @@ export default class RequestBuffer {
512
512
 
513
513
  incorporate(this.params, newParams)
514
514
  } catch (error) {
515
- const ensuredError = /**
516
- * Narrows the runtime value to the documented type.
517
- * @type {Error & {velociousContext?: Record<string, ?>}} */ (error)
515
+ const ensuredError = /** @type {Error & {velociousContext?: Record<string, ?>}} */ (error)
518
516
 
519
517
  ensuredError.velociousContext = {
520
518
  ...(ensuredError.velociousContext || {}),
@@ -60,9 +60,7 @@ export default class VelociousHttpServerClientRequestParser {
60
60
 
61
61
  incorporate(this.params, newParams)
62
62
  } catch (error) {
63
- const ensuredError = /**
64
- * Narrows the runtime value to the documented type.
65
- * @type {Error & {velociousContext?: Record<string, ?>}} */ (error)
63
+ const ensuredError = /** @type {Error & {velociousContext?: Record<string, ?>}} */ (error)
66
64
 
67
65
  ensuredError.velociousContext = {
68
66
  ...(ensuredError.velociousContext || {}),
@@ -30,12 +30,8 @@ function requestErrorSummary(error, cleanedStackWithHeader) {
30
30
 
31
31
  if (stackHeader && !stackFrameLine(stackHeader)) return stackHeader
32
32
 
33
- const errorCode = typeof /**
34
- * Narrows the runtime value to the documented type.
35
- * @type {?} */ (error).code === "string"
36
- ? /**
37
- * Narrows the runtime value to the documented type.
38
- * @type {?} */ (error).code
33
+ const errorCode = typeof /** @type {?} */ (error).code === "string"
34
+ ? /** @type {?} */ (error).code
39
35
  : undefined
40
36
  const errorMessage = error.message || String(error)
41
37
 
@@ -190,9 +186,7 @@ export default class VelociousHttpServerClientRequestRunner {
190
186
  let timeoutReject
191
187
  let timedOut = false
192
188
 
193
- const setRequestTimeoutSeconds = (/**
194
- * Narrows the runtime value to the documented type.
195
- * @type {number | undefined} */ timeoutSeconds) => {
189
+ const setRequestTimeoutSeconds = (/** @type {number | undefined} */ timeoutSeconds) => {
196
190
  if (timeoutId) {
197
191
  clearTimeout(timeoutId)
198
192
  timeoutId = undefined
@@ -255,9 +249,7 @@ export default class VelociousHttpServerClientRequestRunner {
255
249
  }
256
250
  } catch (e) {
257
251
  const error = ensureError(e)
258
- const errorWithContext = /**
259
- * Narrows the runtime value to the documented type.
260
- * @type {{velociousContext?: object}} */ (error)
252
+ const errorWithContext = /** @type {{velociousContext?: object}} */ (error)
261
253
  const errorContext = errorWithContext.velociousContext || {stage: "request-runner"}
262
254
  const logDetails = requestErrorLogDetails(error)
263
255
 
@@ -38,9 +38,7 @@ const WEBSOCKET_MAX_FRAGMENTED_MESSAGE_FRAGMENTS = 1024
38
38
  */
39
39
  function subscribeMessage(message) {
40
40
  return message.type === "subscribe"
41
- ? /**
42
- * Narrows the runtime value to the documented type.
43
- * @type {{type: "subscribe", channel: string, lastEventId?: string, params?: Record<string, ?>}} */ (message)
41
+ ? /** @type {{type: "subscribe", channel: string, lastEventId?: string, params?: Record<string, ?>}} */ (message)
44
42
  : null
45
43
  }
46
44
 
@@ -462,9 +460,7 @@ export default class VelociousHttpServerClientWebsocketSession {
462
460
  }
463
461
 
464
462
  if (message.type === "metadata") {
465
- const metadataPayload = /**
466
- * Narrows the runtime value to the documented type.
467
- * @type {{data?: Record<string, ?>}} */ (message)
463
+ const metadataPayload = /** @type {{data?: Record<string, ?>}} */ (message)
468
464
 
469
465
  this._metadata = metadataPayload.data && typeof metadataPayload.data === "object" ? {...metadataPayload.data} : {}
470
466
 
@@ -1147,9 +1143,7 @@ export default class VelociousHttpServerClientWebsocketSession {
1147
1143
  this.sendJson({type: "connection-opened", connectionId})
1148
1144
  } catch (error) {
1149
1145
  this.logger.error(() => [`Failed to open connection ${connectionType}:${connectionId}`, error])
1150
- this.sendJson({type: "connection-error", connectionId, message: /**
1151
- * Narrows the runtime value to the documented type.
1152
- * @type {Error} */ (error).message || "Failed to open connection"})
1146
+ this.sendJson({type: "connection-error", connectionId, message: /** @type {Error} */ (error).message || "Failed to open connection"})
1153
1147
  }
1154
1148
  }
1155
1149
 
@@ -1173,9 +1167,7 @@ export default class VelociousHttpServerClientWebsocketSession {
1173
1167
  })
1174
1168
  } catch (error) {
1175
1169
  this.logger.error(() => [`Failed to handle connection-message for ${connectionId}`, error])
1176
- this.sendJson({type: "connection-error", connectionId, message: /**
1177
- * Narrows the runtime value to the documented type.
1178
- * @type {Error} */ (error).message || "Failed to handle message"})
1170
+ this.sendJson({type: "connection-error", connectionId, message: /** @type {Error} */ (error).message || "Failed to handle message"})
1179
1171
  }
1180
1172
  }
1181
1173
 
@@ -1286,9 +1278,7 @@ export default class VelociousHttpServerClientWebsocketSession {
1286
1278
  this._channelSubscriptions.delete(subscriptionId)
1287
1279
  this.configuration._unregisterWebsocketChannelSubscription(channelType, subscription)
1288
1280
  this.logger.error(() => [`Failed to subscribe channel ${channelType}:${subscriptionId}`, error])
1289
- this.sendJson({type: "channel-error", subscriptionId, message: /**
1290
- * Narrows the runtime value to the documented type.
1291
- * @type {Error} */ (error).message || "Failed to subscribe"})
1281
+ this.sendJson({type: "channel-error", subscriptionId, message: /** @type {Error} */ (error).message || "Failed to subscribe"})
1292
1282
  }
1293
1283
  }
1294
1284
 
@@ -1331,9 +1321,7 @@ export default class VelociousHttpServerClientWebsocketSession {
1331
1321
  for (const event of events) {
1332
1322
  if (subscription.isClosed()) break
1333
1323
 
1334
- subscription.sendMessage(/**
1335
- * Narrows the runtime value to the documented type.
1336
- * @type {import("../websocket-channel.js").WebsocketJsonValue} */ (event.payload))
1324
+ subscription.sendMessage(/** @type {import("../websocket-channel.js").WebsocketJsonValue} */ (event.payload))
1337
1325
  }
1338
1326
  }
1339
1327
 
@@ -96,9 +96,7 @@ export default class VelociousHttpServerDevelopmentReloader {
96
96
  try {
97
97
  entries = await this.readdir(resolvedDirectoryPath, {withFileTypes: true})
98
98
  } catch (error) {
99
- if (/**
100
- * Narrows the runtime value to the documented type.
101
- * @type {{code?: string}} */ (error)?.code === "ENOENT") return
99
+ if (/** @type {{code?: string}} */ (error)?.code === "ENOENT") return
102
100
  throw error
103
101
  }
104
102
 
@@ -170,9 +168,7 @@ export default class VelociousHttpServerDevelopmentReloader {
170
168
  await this.watchDirectoryRecursive(changedPath)
171
169
  }
172
170
  } catch (error) {
173
- if (/**
174
- * Narrows the runtime value to the documented type.
175
- * @type {{code?: string}} */ (error)?.code !== "ENOENT") {
171
+ if (/** @type {{code?: string}} */ (error)?.code !== "ENOENT") {
176
172
  throw error
177
173
  }
178
174
  }
@@ -63,11 +63,7 @@ export default function resolveRemoteAddress({configuration, headers, socketRemo
63
63
 
64
64
  if (!trust) return socketRemoteAddress
65
65
 
66
- const proxyRequest = /**
67
- * Narrows the runtime value to the documented type.
68
- * @type {Parameters<typeof proxyaddr>[0]} */ (/**
69
- * Narrows the runtime value to the documented type.
70
- * @type {?} */ ({
66
+ const proxyRequest = /** @type {Parameters<typeof proxyaddr>[0]} */ (/** @type {?} */ ({
71
67
  connection: {remoteAddress: socketRemoteAddress},
72
68
  headers: nodeStyleHeaders(headers),
73
69
  socket: {remoteAddress: socketRemoteAddress}
@@ -142,9 +142,7 @@ export default class ServerClient {
142
142
  * @returns {void} - No return value.
143
143
  */
144
144
  onSocketError = (error) => {
145
- const errorCode = /**
146
- * Narrows the runtime value to the documented type.
147
- * @type {{code?: string}} */ (error).code
145
+ const errorCode = /** @type {{code?: string}} */ (error).code
148
146
 
149
147
  this.logger.error(() => [`Socket ${this.clientCount} error`, errorCode || error.message])
150
148
  this.emitClose()
@@ -188,12 +186,8 @@ export default class ServerClient {
188
186
  this.socket.off("error", onWriteError)
189
187
  resolve()
190
188
  }
191
- const onWriteError = (/**
192
- * Narrows the runtime value to the documented type.
193
- * @type {Error} */ error) => {
194
- const errorCode = /**
195
- * Narrows the runtime value to the documented type.
196
- * @type {{code?: string}} */ (error).code
189
+ const onWriteError = (/** @type {Error} */ error) => {
190
+ const errorCode = /** @type {{code?: string}} */ (error).code
197
191
 
198
192
  this.logger.error(() => [`Socket ${this.clientCount} write error`, errorCode || error.message])
199
193
  finish()
@@ -54,9 +54,7 @@ export default class VelociousHttpServerLock {
54
54
  try {
55
55
  await fs.mkdir(this.lockPath)
56
56
  } catch (error) {
57
- if (/**
58
- * Narrows the runtime value to the documented type.
59
- * @type {{code?: string}} */ (error).code === "EEXIST") return false
57
+ if (/** @type {{code?: string}} */ (error).code === "EEXIST") return false
60
58
  throw error
61
59
  }
62
60
 
@@ -105,9 +103,7 @@ export default class VelociousHttpServerLock {
105
103
 
106
104
  if (!this.isLocalProcessOwner(owner)) return false
107
105
 
108
- return this.processIsDead(/**
109
- * Narrows the runtime value to the documented type.
110
- * @type {{pid: number}} */ (owner).pid)
106
+ return this.processIsDead(/** @type {{pid: number}} */ (owner).pid)
111
107
  }
112
108
 
113
109
  /**
@@ -92,12 +92,8 @@ export default class VelociousWebsocketChannelSubscribers {
92
92
  try {
93
93
  const result = callback(payload, meta)
94
94
 
95
- if (result && typeof (/**
96
- * Narrows the runtime value to the documented type.
97
- * @type {Promise<void>} */ (result)).then === "function") {
98
- tasks.push(/**
99
- * Narrows the runtime value to the documented type.
100
- * @type {Promise<void>} */ (result))
95
+ if (result && typeof (/** @type {Promise<void>} */ (result)).then === "function") {
96
+ tasks.push(/** @type {Promise<void>} */ (result))
101
97
  }
102
98
  } catch (error) {
103
99
  // Don't let one subscriber's failure abort the others; surface via the returned promises instead.