velocious 1.0.448 → 1.0.450

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 (645) hide show
  1. package/build/application.js +4 -4
  2. package/build/authorization/ability.js +8 -8
  3. package/build/authorization/base-resource.js +4 -4
  4. package/build/background-jobs/cron-expression.js +1 -1
  5. package/build/background-jobs/forked-runner-child.js +1 -1
  6. package/build/background-jobs/job-registry.js +1 -1
  7. package/build/background-jobs/job-runner.js +1 -1
  8. package/build/background-jobs/job.js +1 -1
  9. package/build/background-jobs/json-socket.js +4 -4
  10. package/build/background-jobs/main.js +21 -21
  11. package/build/background-jobs/scheduler.js +7 -7
  12. package/build/background-jobs/store.js +7 -7
  13. package/build/background-jobs/web/controller.js +2 -2
  14. package/build/background-jobs/worker.js +12 -12
  15. package/build/beacon/client.js +11 -8
  16. package/build/beacon/in-process-broker.js +2 -2
  17. package/build/beacon/in-process-client.js +2 -2
  18. package/build/beacon/server.js +3 -3
  19. package/build/cli/browser-cli.js +1 -1
  20. package/build/cli/commands/db/base-command.js +2 -2
  21. package/build/cli/index.js +2 -2
  22. package/build/cli/tenant-database-command-helper.js +3 -3
  23. package/build/cli/use-browser-cli.js +1 -1
  24. package/build/configuration.js +38 -38
  25. package/build/controller.js +8 -8
  26. package/build/current-configuration.js +1 -1
  27. package/build/database/annotations-async-hooks.js +2 -2
  28. package/build/database/annotations.js +3 -3
  29. package/build/database/drivers/base-column.js +1 -1
  30. package/build/database/drivers/base-foreign-key.js +1 -1
  31. package/build/database/drivers/base-table.js +1 -1
  32. package/build/database/drivers/base.js +10 -10
  33. package/build/database/drivers/mssql/index.js +1 -1
  34. package/build/database/drivers/mssql/table.js +1 -1
  35. package/build/database/drivers/mysql/index.js +3 -3
  36. package/build/database/drivers/mysql/query.js +1 -1
  37. package/build/database/drivers/mysql/table.js +1 -1
  38. package/build/database/drivers/pgsql/index.js +2 -2
  39. package/build/database/drivers/sqlite/base.js +16 -16
  40. package/build/database/drivers/sqlite/index.js +11 -11
  41. package/build/database/drivers/sqlite/index.native.js +1 -1
  42. package/build/database/drivers/sqlite/index.web.js +3 -3
  43. package/build/database/drivers/sqlite/query.js +1 -1
  44. package/build/database/drivers/sqlite/query.web.js +1 -1
  45. package/build/database/drivers/sqlite/sql/alter-table.js +2 -2
  46. package/build/database/drivers/sqlite/table.js +1 -1
  47. package/build/database/migrator/files-finder.js +1 -1
  48. package/build/database/migrator.js +6 -6
  49. package/build/database/pool/async-tracked-multi-connection.js +27 -27
  50. package/build/database/pool/base-methods-forward.js +4 -4
  51. package/build/database/pool/base.js +8 -8
  52. package/build/database/query/from-base.js +1 -1
  53. package/build/database/query/index.js +10 -10
  54. package/build/database/query/join-object.js +3 -3
  55. package/build/database/query/model-class-query.js +39 -39
  56. package/build/database/query/preloader/belongs-to.js +22 -22
  57. package/build/database/query/preloader/has-many.js +20 -20
  58. package/build/database/query/preloader/has-one.js +8 -8
  59. package/build/database/query/preloader/selection.js +3 -3
  60. package/build/database/query/preloader.js +8 -8
  61. package/build/database/query/query-data.js +9 -9
  62. package/build/database/query/where-model-class-hash.js +7 -7
  63. package/build/database/query/with-count.js +9 -9
  64. package/build/database/record/acts-as-list.js +15 -15
  65. package/build/database/record/attachments/handle.js +2 -2
  66. package/build/database/record/attachments/normalize-input.js +12 -12
  67. package/build/database/record/attachments/storage-drivers/s3.js +6 -6
  68. package/build/database/record/attachments/store.js +13 -13
  69. package/build/database/record/index.js +127 -128
  70. package/build/database/record/instance-relationships/base.js +11 -11
  71. package/build/database/record/instance-relationships/belongs-to.js +3 -3
  72. package/build/database/record/instance-relationships/has-many.js +8 -8
  73. package/build/database/record/instance-relationships/has-one.js +7 -7
  74. package/build/database/record/relationships/base.js +2 -2
  75. package/build/database/record/state-machine.js +7 -7
  76. package/build/database/record/validators/presence.js +1 -1
  77. package/build/database/record/validators/uniqueness.js +5 -5
  78. package/build/database/table-data/index.js +4 -4
  79. package/build/environment-handlers/base.js +2 -2
  80. package/build/environment-handlers/browser.js +7 -7
  81. package/build/environment-handlers/node/cli/commands/cli-command-context.js +1 -1
  82. package/build/environment-handlers/node/cli/commands/console.js +4 -4
  83. package/build/environment-handlers/node/cli/commands/db/schema/dump.js +1 -1
  84. package/build/environment-handlers/node/cli/commands/db/schema/load.js +3 -3
  85. package/build/environment-handlers/node/cli/commands/generate/base-models.js +1 -16
  86. package/build/environment-handlers/node/cli/commands/generate/frontend-models.js +179 -89
  87. package/build/environment-handlers/node.js +6 -6
  88. package/build/frontend-model-controller.js +90 -82
  89. package/build/frontend-model-resource/base-resource.js +343 -167
  90. package/build/frontend-models/base.js +362 -205
  91. package/build/frontend-models/clear-pending-debounced-callback.js +1 -1
  92. package/build/frontend-models/event-hook-models.js +2 -2
  93. package/build/frontend-models/outgoing-event-buffer.js +2 -2
  94. package/build/frontend-models/preloader.js +8 -7
  95. package/build/frontend-models/query.js +43 -38
  96. package/build/frontend-models/resource-definition.js +6 -6
  97. package/build/frontend-models/transport-serialization.js +11 -11
  98. package/build/frontend-models/use-destroyed-event.js +10 -10
  99. package/build/frontend-models/use-model-class-event.js +11 -11
  100. package/build/frontend-models/use-updated-event.js +11 -11
  101. package/build/frontend-models/websocket-channel.js +26 -17
  102. package/build/frontend-models/websocket-publishers.js +9 -9
  103. package/build/http-client/response.js +2 -2
  104. package/build/http-server/client/index.js +8 -8
  105. package/build/http-server/client/params-to-object.js +10 -10
  106. package/build/http-server/client/request-buffer/form-data-part.js +2 -2
  107. package/build/http-server/client/request-buffer/index.js +8 -8
  108. package/build/http-server/client/request-parser.js +3 -3
  109. package/build/http-server/client/request-runner.js +6 -6
  110. package/build/http-server/client/request-timing.js +5 -5
  111. package/build/http-server/client/request.js +1 -1
  112. package/build/http-server/client/response.js +5 -5
  113. package/build/http-server/client/websocket-request.js +4 -4
  114. package/build/http-server/client/websocket-session.js +18 -18
  115. package/build/http-server/development-reloader.js +5 -5
  116. package/build/http-server/index.js +12 -12
  117. package/build/http-server/remote-address.js +4 -4
  118. package/build/http-server/server-client.js +3 -3
  119. package/build/http-server/server-lock.js +4 -4
  120. package/build/http-server/websocket-channel-subscribers.js +3 -3
  121. package/build/http-server/websocket-channel.js +1 -1
  122. package/build/http-server/websocket-connection.js +1 -1
  123. package/build/http-server/websocket-event-log-store.js +6 -6
  124. package/build/http-server/websocket-events-host.js +2 -2
  125. package/build/http-server/worker-handler/in-process.js +7 -7
  126. package/build/http-server/worker-handler/index.js +4 -4
  127. package/build/http-server/worker-handler/worker-thread.js +3 -3
  128. package/build/logger/outputs/array-output.js +3 -3
  129. package/build/logger/outputs/console-output.js +1 -1
  130. package/build/logger/outputs/file-output.js +4 -4
  131. package/build/logger/outputs/stdout-output.js +1 -1
  132. package/build/logger.js +10 -10
  133. package/build/mailer/backends/smtp.js +3 -3
  134. package/build/mailer/base.js +8 -8
  135. package/build/mailer/delivery.js +4 -4
  136. package/build/plugins/sqljs-wasm-route-controller.js +1 -1
  137. package/build/routes/base-route.js +6 -6
  138. package/build/routes/basic-route.js +1 -1
  139. package/build/routes/hooks/frontend-model-command-route-hook.js +1 -1
  140. package/build/routes/index.js +1 -1
  141. package/build/routes/plugin-routes.js +1 -1
  142. package/build/routes/resolver.js +11 -11
  143. package/build/routes/resource-route.js +1 -1
  144. package/build/src/application.d.ts +3 -3
  145. package/build/src/application.d.ts.map +1 -1
  146. package/build/src/application.js +5 -5
  147. package/build/src/authorization/ability.d.ts +7 -7
  148. package/build/src/authorization/ability.d.ts.map +1 -1
  149. package/build/src/authorization/ability.js +9 -9
  150. package/build/src/authorization/base-resource.d.ts +1 -1
  151. package/build/src/authorization/base-resource.d.ts.map +1 -1
  152. package/build/src/authorization/base-resource.js +5 -5
  153. package/build/src/background-jobs/cron-expression.js +2 -2
  154. package/build/src/background-jobs/forked-runner-child.js +2 -2
  155. package/build/src/background-jobs/job-record.d.ts +2 -1
  156. package/build/src/background-jobs/job-record.d.ts.map +1 -1
  157. package/build/src/background-jobs/job-registry.d.ts +1 -1
  158. package/build/src/background-jobs/job-registry.d.ts.map +1 -1
  159. package/build/src/background-jobs/job-registry.js +2 -2
  160. package/build/src/background-jobs/job-runner.js +2 -2
  161. package/build/src/background-jobs/job.js +2 -2
  162. package/build/src/background-jobs/json-socket.d.ts +4 -4
  163. package/build/src/background-jobs/json-socket.d.ts.map +1 -1
  164. package/build/src/background-jobs/json-socket.js +5 -5
  165. package/build/src/background-jobs/main.d.ts +18 -18
  166. package/build/src/background-jobs/main.d.ts.map +1 -1
  167. package/build/src/background-jobs/main.js +22 -22
  168. package/build/src/background-jobs/scheduler.d.ts +5 -5
  169. package/build/src/background-jobs/scheduler.d.ts.map +1 -1
  170. package/build/src/background-jobs/scheduler.js +8 -8
  171. package/build/src/background-jobs/store.js +8 -8
  172. package/build/src/background-jobs/web/controller.js +3 -3
  173. package/build/src/background-jobs/worker.d.ts +6 -6
  174. package/build/src/background-jobs/worker.d.ts.map +1 -1
  175. package/build/src/background-jobs/worker.js +13 -13
  176. package/build/src/beacon/client.d.ts +4 -4
  177. package/build/src/beacon/client.d.ts.map +1 -1
  178. package/build/src/beacon/client.js +12 -9
  179. package/build/src/beacon/in-process-broker.d.ts.map +1 -1
  180. package/build/src/beacon/in-process-broker.js +3 -3
  181. package/build/src/beacon/in-process-client.d.ts +1 -1
  182. package/build/src/beacon/in-process-client.d.ts.map +1 -1
  183. package/build/src/beacon/in-process-client.js +3 -3
  184. package/build/src/beacon/server.d.ts +2 -2
  185. package/build/src/beacon/server.d.ts.map +1 -1
  186. package/build/src/beacon/server.js +4 -4
  187. package/build/src/cli/browser-cli.js +2 -2
  188. package/build/src/cli/commands/db/base-command.d.ts +2 -2
  189. package/build/src/cli/commands/db/base-command.d.ts.map +1 -1
  190. package/build/src/cli/commands/db/base-command.js +3 -3
  191. package/build/src/cli/index.js +3 -3
  192. package/build/src/cli/tenant-database-command-helper.d.ts +1 -1
  193. package/build/src/cli/tenant-database-command-helper.d.ts.map +1 -1
  194. package/build/src/cli/tenant-database-command-helper.js +4 -4
  195. package/build/src/cli/use-browser-cli.js +2 -2
  196. package/build/src/configuration.d.ts +14 -14
  197. package/build/src/configuration.d.ts.map +1 -1
  198. package/build/src/configuration.js +39 -39
  199. package/build/src/controller.js +10 -10
  200. package/build/src/current-configuration.js +2 -2
  201. package/build/src/database/annotations-async-hooks.js +3 -3
  202. package/build/src/database/annotations.d.ts.map +1 -1
  203. package/build/src/database/annotations.js +4 -4
  204. package/build/src/database/drivers/base-column.d.ts +1 -1
  205. package/build/src/database/drivers/base-column.d.ts.map +1 -1
  206. package/build/src/database/drivers/base-column.js +2 -2
  207. package/build/src/database/drivers/base-foreign-key.d.ts +1 -1
  208. package/build/src/database/drivers/base-foreign-key.d.ts.map +1 -1
  209. package/build/src/database/drivers/base-foreign-key.js +2 -2
  210. package/build/src/database/drivers/base-table.d.ts +1 -1
  211. package/build/src/database/drivers/base-table.d.ts.map +1 -1
  212. package/build/src/database/drivers/base-table.js +2 -2
  213. package/build/src/database/drivers/base.d.ts +6 -6
  214. package/build/src/database/drivers/base.d.ts.map +1 -1
  215. package/build/src/database/drivers/base.js +11 -11
  216. package/build/src/database/drivers/mssql/index.js +2 -2
  217. package/build/src/database/drivers/mssql/table.js +2 -2
  218. package/build/src/database/drivers/mysql/index.js +4 -4
  219. package/build/src/database/drivers/mysql/query.js +2 -2
  220. package/build/src/database/drivers/mysql/table.js +2 -2
  221. package/build/src/database/drivers/pgsql/index.js +3 -3
  222. package/build/src/database/drivers/sqlite/base.d.ts +3 -3
  223. package/build/src/database/drivers/sqlite/base.d.ts.map +1 -1
  224. package/build/src/database/drivers/sqlite/base.js +17 -17
  225. package/build/src/database/drivers/sqlite/index.d.ts +4 -4
  226. package/build/src/database/drivers/sqlite/index.d.ts.map +1 -1
  227. package/build/src/database/drivers/sqlite/index.js +12 -12
  228. package/build/src/database/drivers/sqlite/index.native.js +2 -2
  229. package/build/src/database/drivers/sqlite/index.web.d.ts +2 -2
  230. package/build/src/database/drivers/sqlite/index.web.d.ts.map +1 -1
  231. package/build/src/database/drivers/sqlite/index.web.js +4 -4
  232. package/build/src/database/drivers/sqlite/query.js +2 -2
  233. package/build/src/database/drivers/sqlite/query.web.js +2 -2
  234. package/build/src/database/drivers/sqlite/sql/alter-table.js +3 -3
  235. package/build/src/database/drivers/sqlite/table.js +2 -2
  236. package/build/src/database/migrator/files-finder.js +2 -2
  237. package/build/src/database/migrator.d.ts +1 -1
  238. package/build/src/database/migrator.d.ts.map +1 -1
  239. package/build/src/database/migrator.js +7 -7
  240. package/build/src/database/pool/async-tracked-multi-connection.d.ts +9 -9
  241. package/build/src/database/pool/async-tracked-multi-connection.d.ts.map +1 -1
  242. package/build/src/database/pool/async-tracked-multi-connection.js +28 -28
  243. package/build/src/database/pool/base-methods-forward.js +7 -7
  244. package/build/src/database/pool/base.d.ts +1 -1
  245. package/build/src/database/pool/base.d.ts.map +1 -1
  246. package/build/src/database/pool/base.js +9 -9
  247. package/build/src/database/query/from-base.d.ts +1 -1
  248. package/build/src/database/query/from-base.d.ts.map +1 -1
  249. package/build/src/database/query/from-base.js +2 -2
  250. package/build/src/database/query/index.d.ts +4 -4
  251. package/build/src/database/query/index.d.ts.map +1 -1
  252. package/build/src/database/query/index.js +11 -11
  253. package/build/src/database/query/join-object.js +4 -4
  254. package/build/src/database/query/model-class-query.d.ts +4 -4
  255. package/build/src/database/query/model-class-query.d.ts.map +1 -1
  256. package/build/src/database/query/model-class-query.js +40 -40
  257. package/build/src/database/query/preloader/belongs-to.d.ts +2 -2
  258. package/build/src/database/query/preloader/belongs-to.d.ts.map +1 -1
  259. package/build/src/database/query/preloader/belongs-to.js +23 -23
  260. package/build/src/database/query/preloader/has-many.d.ts +1 -1
  261. package/build/src/database/query/preloader/has-many.d.ts.map +1 -1
  262. package/build/src/database/query/preloader/has-many.js +21 -21
  263. package/build/src/database/query/preloader/has-one.d.ts +2 -2
  264. package/build/src/database/query/preloader/has-one.d.ts.map +1 -1
  265. package/build/src/database/query/preloader/has-one.js +9 -9
  266. package/build/src/database/query/preloader/selection.js +4 -4
  267. package/build/src/database/query/preloader.d.ts +1 -1
  268. package/build/src/database/query/preloader.d.ts.map +1 -1
  269. package/build/src/database/query/preloader.js +9 -9
  270. package/build/src/database/query/query-data.js +10 -10
  271. package/build/src/database/query/where-model-class-hash.js +8 -8
  272. package/build/src/database/query/with-count.js +10 -10
  273. package/build/src/database/record/acts-as-list.js +20 -20
  274. package/build/src/database/record/attachments/handle.d.ts +2 -2
  275. package/build/src/database/record/attachments/handle.d.ts.map +1 -1
  276. package/build/src/database/record/attachments/handle.js +3 -3
  277. package/build/src/database/record/attachments/normalize-input.js +15 -15
  278. package/build/src/database/record/attachments/storage-drivers/s3.js +7 -7
  279. package/build/src/database/record/attachments/store.d.ts +2 -2
  280. package/build/src/database/record/attachments/store.d.ts.map +1 -1
  281. package/build/src/database/record/attachments/store.js +14 -14
  282. package/build/src/database/record/index.d.ts +35 -32
  283. package/build/src/database/record/index.d.ts.map +1 -1
  284. package/build/src/database/record/index.js +147 -148
  285. package/build/src/database/record/instance-relationships/base.d.ts +3 -3
  286. package/build/src/database/record/instance-relationships/base.d.ts.map +1 -1
  287. package/build/src/database/record/instance-relationships/base.js +13 -13
  288. package/build/src/database/record/instance-relationships/belongs-to.js +4 -4
  289. package/build/src/database/record/instance-relationships/has-many.js +9 -9
  290. package/build/src/database/record/instance-relationships/has-one.d.ts +1 -1
  291. package/build/src/database/record/instance-relationships/has-one.d.ts.map +1 -1
  292. package/build/src/database/record/instance-relationships/has-one.js +8 -8
  293. package/build/src/database/record/relationships/base.js +4 -4
  294. package/build/src/database/record/state-machine.js +8 -8
  295. package/build/src/database/record/validators/presence.js +2 -2
  296. package/build/src/database/record/validators/uniqueness.js +6 -6
  297. package/build/src/database/table-data/index.d.ts +4 -4
  298. package/build/src/database/table-data/index.d.ts.map +1 -1
  299. package/build/src/database/table-data/index.js +5 -5
  300. package/build/src/environment-handlers/base.js +3 -3
  301. package/build/src/environment-handlers/browser.d.ts +3 -3
  302. package/build/src/environment-handlers/browser.d.ts.map +1 -1
  303. package/build/src/environment-handlers/browser.js +8 -8
  304. package/build/src/environment-handlers/node/cli/commands/cli-command-context.js +2 -2
  305. package/build/src/environment-handlers/node/cli/commands/console.d.ts.map +1 -1
  306. package/build/src/environment-handlers/node/cli/commands/console.js +5 -5
  307. package/build/src/environment-handlers/node/cli/commands/db/schema/dump.d.ts +1 -1
  308. package/build/src/environment-handlers/node/cli/commands/db/schema/dump.d.ts.map +1 -1
  309. package/build/src/environment-handlers/node/cli/commands/db/schema/dump.js +2 -2
  310. package/build/src/environment-handlers/node/cli/commands/db/schema/load.d.ts +1 -1
  311. package/build/src/environment-handlers/node/cli/commands/db/schema/load.d.ts.map +1 -1
  312. package/build/src/environment-handlers/node/cli/commands/db/schema/load.js +4 -4
  313. package/build/src/environment-handlers/node/cli/commands/generate/base-models.d.ts.map +1 -1
  314. package/build/src/environment-handlers/node/cli/commands/generate/base-models.js +2 -15
  315. package/build/src/environment-handlers/node/cli/commands/generate/frontend-models.d.ts +105 -33
  316. package/build/src/environment-handlers/node/cli/commands/generate/frontend-models.d.ts.map +1 -1
  317. package/build/src/environment-handlers/node/cli/commands/generate/frontend-models.js +172 -87
  318. package/build/src/environment-handlers/node.d.ts +2 -2
  319. package/build/src/environment-handlers/node.d.ts.map +1 -1
  320. package/build/src/environment-handlers/node.js +7 -7
  321. package/build/src/frontend-model-controller.d.ts +5 -6
  322. package/build/src/frontend-model-controller.d.ts.map +1 -1
  323. package/build/src/frontend-model-controller.js +95 -89
  324. package/build/src/frontend-model-resource/base-resource.d.ts +239 -91
  325. package/build/src/frontend-model-resource/base-resource.d.ts.map +1 -1
  326. package/build/src/frontend-model-resource/base-resource.js +302 -172
  327. package/build/src/frontend-models/base.d.ts +186 -115
  328. package/build/src/frontend-models/base.d.ts.map +1 -1
  329. package/build/src/frontend-models/base.js +347 -218
  330. package/build/src/frontend-models/clear-pending-debounced-callback.js +2 -2
  331. package/build/src/frontend-models/event-hook-models.d.ts.map +1 -1
  332. package/build/src/frontend-models/event-hook-models.js +3 -3
  333. package/build/src/frontend-models/outgoing-event-buffer.d.ts +1 -1
  334. package/build/src/frontend-models/outgoing-event-buffer.d.ts.map +1 -1
  335. package/build/src/frontend-models/outgoing-event-buffer.js +3 -3
  336. package/build/src/frontend-models/preloader.d.ts.map +1 -1
  337. package/build/src/frontend-models/preloader.js +9 -8
  338. package/build/src/frontend-models/query.d.ts +16 -8
  339. package/build/src/frontend-models/query.d.ts.map +1 -1
  340. package/build/src/frontend-models/query.js +43 -39
  341. package/build/src/frontend-models/resource-definition.js +7 -7
  342. package/build/src/frontend-models/transport-serialization.js +12 -12
  343. package/build/src/frontend-models/use-destroyed-event.d.ts.map +1 -1
  344. package/build/src/frontend-models/use-destroyed-event.js +11 -11
  345. package/build/src/frontend-models/use-model-class-event.d.ts.map +1 -1
  346. package/build/src/frontend-models/use-model-class-event.js +12 -12
  347. package/build/src/frontend-models/use-updated-event.d.ts.map +1 -1
  348. package/build/src/frontend-models/use-updated-event.js +12 -12
  349. package/build/src/frontend-models/websocket-channel.d.ts +6 -1
  350. package/build/src/frontend-models/websocket-channel.d.ts.map +1 -1
  351. package/build/src/frontend-models/websocket-channel.js +26 -18
  352. package/build/src/frontend-models/websocket-publishers.js +11 -11
  353. package/build/src/http-client/response.d.ts +2 -2
  354. package/build/src/http-client/response.d.ts.map +1 -1
  355. package/build/src/http-client/response.js +3 -3
  356. package/build/src/http-server/client/index.d.ts +1 -1
  357. package/build/src/http-server/client/index.d.ts.map +1 -1
  358. package/build/src/http-server/client/index.js +9 -9
  359. package/build/src/http-server/client/params-to-object.js +11 -11
  360. package/build/src/http-server/client/request-buffer/form-data-part.d.ts +2 -2
  361. package/build/src/http-server/client/request-buffer/form-data-part.d.ts.map +1 -1
  362. package/build/src/http-server/client/request-buffer/form-data-part.js +3 -3
  363. package/build/src/http-server/client/request-buffer/index.d.ts +4 -4
  364. package/build/src/http-server/client/request-buffer/index.d.ts.map +1 -1
  365. package/build/src/http-server/client/request-buffer/index.js +9 -9
  366. package/build/src/http-server/client/request-parser.d.ts +1 -1
  367. package/build/src/http-server/client/request-parser.d.ts.map +1 -1
  368. package/build/src/http-server/client/request-parser.js +4 -4
  369. package/build/src/http-server/client/request-runner.js +7 -7
  370. package/build/src/http-server/client/request-timing.d.ts +5 -5
  371. package/build/src/http-server/client/request-timing.d.ts.map +1 -1
  372. package/build/src/http-server/client/request-timing.js +6 -6
  373. package/build/src/http-server/client/request.js +2 -2
  374. package/build/src/http-server/client/response.d.ts +3 -3
  375. package/build/src/http-server/client/response.d.ts.map +1 -1
  376. package/build/src/http-server/client/response.js +6 -6
  377. package/build/src/http-server/client/websocket-request.d.ts +3 -3
  378. package/build/src/http-server/client/websocket-request.d.ts.map +1 -1
  379. package/build/src/http-server/client/websocket-request.js +5 -5
  380. package/build/src/http-server/client/websocket-session.d.ts +6 -6
  381. package/build/src/http-server/client/websocket-session.d.ts.map +1 -1
  382. package/build/src/http-server/client/websocket-session.js +19 -19
  383. package/build/src/http-server/development-reloader.d.ts +3 -3
  384. package/build/src/http-server/development-reloader.d.ts.map +1 -1
  385. package/build/src/http-server/development-reloader.js +6 -6
  386. package/build/src/http-server/index.d.ts +7 -7
  387. package/build/src/http-server/index.d.ts.map +1 -1
  388. package/build/src/http-server/index.js +13 -13
  389. package/build/src/http-server/remote-address.js +6 -6
  390. package/build/src/http-server/server-client.js +4 -4
  391. package/build/src/http-server/server-lock.js +5 -5
  392. package/build/src/http-server/websocket-channel-subscribers.d.ts +1 -1
  393. package/build/src/http-server/websocket-channel-subscribers.d.ts.map +1 -1
  394. package/build/src/http-server/websocket-channel-subscribers.js +4 -4
  395. package/build/src/http-server/websocket-channel.d.ts +1 -1
  396. package/build/src/http-server/websocket-channel.d.ts.map +1 -1
  397. package/build/src/http-server/websocket-channel.js +2 -2
  398. package/build/src/http-server/websocket-connection.d.ts +1 -1
  399. package/build/src/http-server/websocket-connection.d.ts.map +1 -1
  400. package/build/src/http-server/websocket-connection.js +2 -2
  401. package/build/src/http-server/websocket-event-log-store.d.ts +1 -1
  402. package/build/src/http-server/websocket-event-log-store.d.ts.map +1 -1
  403. package/build/src/http-server/websocket-event-log-store.js +7 -7
  404. package/build/src/http-server/websocket-events-host.d.ts +1 -1
  405. package/build/src/http-server/websocket-events-host.d.ts.map +1 -1
  406. package/build/src/http-server/websocket-events-host.js +3 -3
  407. package/build/src/http-server/worker-handler/in-process.d.ts +3 -3
  408. package/build/src/http-server/worker-handler/in-process.d.ts.map +1 -1
  409. package/build/src/http-server/worker-handler/in-process.js +9 -9
  410. package/build/src/http-server/worker-handler/index.d.ts +4 -4
  411. package/build/src/http-server/worker-handler/index.d.ts.map +1 -1
  412. package/build/src/http-server/worker-handler/index.js +5 -5
  413. package/build/src/http-server/worker-handler/worker-thread.d.ts +2 -2
  414. package/build/src/http-server/worker-handler/worker-thread.d.ts.map +1 -1
  415. package/build/src/http-server/worker-handler/worker-thread.js +4 -4
  416. package/build/src/logger/outputs/array-output.d.ts +3 -3
  417. package/build/src/logger/outputs/array-output.d.ts.map +1 -1
  418. package/build/src/logger/outputs/array-output.js +4 -4
  419. package/build/src/logger/outputs/console-output.d.ts +1 -1
  420. package/build/src/logger/outputs/console-output.d.ts.map +1 -1
  421. package/build/src/logger/outputs/console-output.js +2 -2
  422. package/build/src/logger/outputs/file-output.d.ts +4 -4
  423. package/build/src/logger/outputs/file-output.d.ts.map +1 -1
  424. package/build/src/logger/outputs/file-output.js +5 -5
  425. package/build/src/logger/outputs/stdout-output.d.ts.map +1 -1
  426. package/build/src/logger/outputs/stdout-output.js +2 -2
  427. package/build/src/logger.d.ts.map +1 -1
  428. package/build/src/logger.js +11 -11
  429. package/build/src/mailer/backends/smtp.d.ts.map +1 -1
  430. package/build/src/mailer/backends/smtp.js +5 -5
  431. package/build/src/mailer/base.js +11 -11
  432. package/build/src/mailer/delivery.d.ts +3 -3
  433. package/build/src/mailer/delivery.d.ts.map +1 -1
  434. package/build/src/mailer/delivery.js +5 -5
  435. package/build/src/plugins/sqljs-wasm-route-controller.js +2 -2
  436. package/build/src/routes/base-route.d.ts +6 -6
  437. package/build/src/routes/base-route.d.ts.map +1 -1
  438. package/build/src/routes/base-route.js +7 -7
  439. package/build/src/routes/basic-route.js +2 -2
  440. package/build/src/routes/hooks/frontend-model-command-route-hook.js +2 -2
  441. package/build/src/routes/index.js +2 -2
  442. package/build/src/routes/plugin-routes.js +2 -2
  443. package/build/src/routes/resolver.d.ts +1 -1
  444. package/build/src/routes/resolver.d.ts.map +1 -1
  445. package/build/src/routes/resolver.js +13 -13
  446. package/build/src/routes/resource-route.d.ts +1 -1
  447. package/build/src/routes/resource-route.d.ts.map +1 -1
  448. package/build/src/routes/resource-route.js +2 -2
  449. package/build/src/testing/browser-frontend-model-event-hook-scenarios.d.ts.map +1 -1
  450. package/build/src/testing/browser-frontend-model-event-hook-scenarios.js +9 -9
  451. package/build/src/testing/expect-utils.js +13 -13
  452. package/build/src/testing/expect.d.ts +7 -1
  453. package/build/src/testing/expect.d.ts.map +1 -1
  454. package/build/src/testing/expect.js +17 -9
  455. package/build/src/testing/test-files-finder.d.ts +8 -8
  456. package/build/src/testing/test-files-finder.d.ts.map +1 -1
  457. package/build/src/testing/test-files-finder.js +9 -9
  458. package/build/src/testing/test-filter-parser.js +3 -3
  459. package/build/src/testing/test-runner.d.ts +2 -2
  460. package/build/src/testing/test-runner.d.ts.map +1 -1
  461. package/build/src/testing/test-runner.js +17 -17
  462. package/build/src/testing/test-suite-splitter.js +2 -2
  463. package/build/src/testing/test.d.ts +2 -2
  464. package/build/src/testing/test.d.ts.map +1 -1
  465. package/build/src/testing/test.js +16 -16
  466. package/build/src/utils/backtrace-cleaner.d.ts +1 -1
  467. package/build/src/utils/backtrace-cleaner.d.ts.map +1 -1
  468. package/build/src/utils/backtrace-cleaner.js +2 -2
  469. package/build/src/utils/format-value.js +2 -2
  470. package/build/src/utils/model-scope.js +2 -2
  471. package/build/src/utils/ransack.js +27 -27
  472. package/build/src/utils/with-tracked-stack-async-hooks.js +8 -8
  473. package/build/src/utils/with-tracked-stack.js +4 -4
  474. package/build/testing/browser-frontend-model-event-hook-scenarios.js +8 -8
  475. package/build/testing/expect-utils.js +11 -11
  476. package/build/testing/expect.js +16 -7
  477. package/build/testing/test-files-finder.js +8 -8
  478. package/build/testing/test-filter-parser.js +2 -2
  479. package/build/testing/test-runner.js +16 -16
  480. package/build/testing/test-suite-splitter.js +1 -1
  481. package/build/testing/test.js +15 -15
  482. package/build/utils/backtrace-cleaner.js +1 -1
  483. package/build/utils/format-value.js +1 -1
  484. package/build/utils/model-scope.js +1 -1
  485. package/build/utils/ransack.js +26 -26
  486. package/build/utils/with-tracked-stack-async-hooks.js +7 -7
  487. package/build/utils/with-tracked-stack.js +3 -3
  488. package/package.json +2 -1
  489. package/src/application.js +4 -4
  490. package/src/authorization/ability.js +8 -8
  491. package/src/authorization/base-resource.js +4 -4
  492. package/src/background-jobs/cron-expression.js +1 -1
  493. package/src/background-jobs/forked-runner-child.js +1 -1
  494. package/src/background-jobs/job-registry.js +1 -1
  495. package/src/background-jobs/job-runner.js +1 -1
  496. package/src/background-jobs/job.js +1 -1
  497. package/src/background-jobs/json-socket.js +4 -4
  498. package/src/background-jobs/main.js +21 -21
  499. package/src/background-jobs/scheduler.js +7 -7
  500. package/src/background-jobs/store.js +7 -7
  501. package/src/background-jobs/web/controller.js +2 -2
  502. package/src/background-jobs/worker.js +12 -12
  503. package/src/beacon/client.js +11 -8
  504. package/src/beacon/in-process-broker.js +2 -2
  505. package/src/beacon/in-process-client.js +2 -2
  506. package/src/beacon/server.js +3 -3
  507. package/src/cli/browser-cli.js +1 -1
  508. package/src/cli/commands/db/base-command.js +2 -2
  509. package/src/cli/index.js +2 -2
  510. package/src/cli/tenant-database-command-helper.js +3 -3
  511. package/src/cli/use-browser-cli.js +1 -1
  512. package/src/configuration.js +38 -38
  513. package/src/controller.js +8 -8
  514. package/src/current-configuration.js +1 -1
  515. package/src/database/annotations-async-hooks.js +2 -2
  516. package/src/database/annotations.js +3 -3
  517. package/src/database/drivers/base-column.js +1 -1
  518. package/src/database/drivers/base-foreign-key.js +1 -1
  519. package/src/database/drivers/base-table.js +1 -1
  520. package/src/database/drivers/base.js +10 -10
  521. package/src/database/drivers/mssql/index.js +1 -1
  522. package/src/database/drivers/mssql/table.js +1 -1
  523. package/src/database/drivers/mysql/index.js +3 -3
  524. package/src/database/drivers/mysql/query.js +1 -1
  525. package/src/database/drivers/mysql/table.js +1 -1
  526. package/src/database/drivers/pgsql/index.js +2 -2
  527. package/src/database/drivers/sqlite/base.js +16 -16
  528. package/src/database/drivers/sqlite/index.js +11 -11
  529. package/src/database/drivers/sqlite/index.native.js +1 -1
  530. package/src/database/drivers/sqlite/index.web.js +3 -3
  531. package/src/database/drivers/sqlite/query.js +1 -1
  532. package/src/database/drivers/sqlite/query.web.js +1 -1
  533. package/src/database/drivers/sqlite/sql/alter-table.js +2 -2
  534. package/src/database/drivers/sqlite/table.js +1 -1
  535. package/src/database/migrator/files-finder.js +1 -1
  536. package/src/database/migrator.js +6 -6
  537. package/src/database/pool/async-tracked-multi-connection.js +27 -27
  538. package/src/database/pool/base-methods-forward.js +4 -4
  539. package/src/database/pool/base.js +8 -8
  540. package/src/database/query/from-base.js +1 -1
  541. package/src/database/query/index.js +10 -10
  542. package/src/database/query/join-object.js +3 -3
  543. package/src/database/query/model-class-query.js +39 -39
  544. package/src/database/query/preloader/belongs-to.js +22 -22
  545. package/src/database/query/preloader/has-many.js +20 -20
  546. package/src/database/query/preloader/has-one.js +8 -8
  547. package/src/database/query/preloader/selection.js +3 -3
  548. package/src/database/query/preloader.js +8 -8
  549. package/src/database/query/query-data.js +9 -9
  550. package/src/database/query/where-model-class-hash.js +7 -7
  551. package/src/database/query/with-count.js +9 -9
  552. package/src/database/record/acts-as-list.js +15 -15
  553. package/src/database/record/attachments/handle.js +2 -2
  554. package/src/database/record/attachments/normalize-input.js +12 -12
  555. package/src/database/record/attachments/storage-drivers/s3.js +6 -6
  556. package/src/database/record/attachments/store.js +13 -13
  557. package/src/database/record/index.js +127 -128
  558. package/src/database/record/instance-relationships/base.js +11 -11
  559. package/src/database/record/instance-relationships/belongs-to.js +3 -3
  560. package/src/database/record/instance-relationships/has-many.js +8 -8
  561. package/src/database/record/instance-relationships/has-one.js +7 -7
  562. package/src/database/record/relationships/base.js +2 -2
  563. package/src/database/record/state-machine.js +7 -7
  564. package/src/database/record/validators/presence.js +1 -1
  565. package/src/database/record/validators/uniqueness.js +5 -5
  566. package/src/database/table-data/index.js +4 -4
  567. package/src/environment-handlers/base.js +2 -2
  568. package/src/environment-handlers/browser.js +7 -7
  569. package/src/environment-handlers/node/cli/commands/cli-command-context.js +1 -1
  570. package/src/environment-handlers/node/cli/commands/console.js +4 -4
  571. package/src/environment-handlers/node/cli/commands/db/schema/dump.js +1 -1
  572. package/src/environment-handlers/node/cli/commands/db/schema/load.js +3 -3
  573. package/src/environment-handlers/node/cli/commands/generate/base-models.js +1 -16
  574. package/src/environment-handlers/node/cli/commands/generate/frontend-models.js +179 -89
  575. package/src/environment-handlers/node.js +6 -6
  576. package/src/frontend-model-controller.js +90 -82
  577. package/src/frontend-model-resource/base-resource.js +343 -167
  578. package/src/frontend-models/base.js +362 -205
  579. package/src/frontend-models/clear-pending-debounced-callback.js +1 -1
  580. package/src/frontend-models/event-hook-models.js +2 -2
  581. package/src/frontend-models/outgoing-event-buffer.js +2 -2
  582. package/src/frontend-models/preloader.js +8 -7
  583. package/src/frontend-models/query.js +43 -38
  584. package/src/frontend-models/resource-definition.js +6 -6
  585. package/src/frontend-models/transport-serialization.js +11 -11
  586. package/src/frontend-models/use-destroyed-event.js +10 -10
  587. package/src/frontend-models/use-model-class-event.js +11 -11
  588. package/src/frontend-models/use-updated-event.js +11 -11
  589. package/src/frontend-models/websocket-channel.js +26 -17
  590. package/src/frontend-models/websocket-publishers.js +9 -9
  591. package/src/http-client/response.js +2 -2
  592. package/src/http-server/client/index.js +8 -8
  593. package/src/http-server/client/params-to-object.js +10 -10
  594. package/src/http-server/client/request-buffer/form-data-part.js +2 -2
  595. package/src/http-server/client/request-buffer/index.js +8 -8
  596. package/src/http-server/client/request-parser.js +3 -3
  597. package/src/http-server/client/request-runner.js +6 -6
  598. package/src/http-server/client/request-timing.js +5 -5
  599. package/src/http-server/client/request.js +1 -1
  600. package/src/http-server/client/response.js +5 -5
  601. package/src/http-server/client/websocket-request.js +4 -4
  602. package/src/http-server/client/websocket-session.js +18 -18
  603. package/src/http-server/development-reloader.js +5 -5
  604. package/src/http-server/index.js +12 -12
  605. package/src/http-server/remote-address.js +4 -4
  606. package/src/http-server/server-client.js +3 -3
  607. package/src/http-server/server-lock.js +4 -4
  608. package/src/http-server/websocket-channel-subscribers.js +3 -3
  609. package/src/http-server/websocket-channel.js +1 -1
  610. package/src/http-server/websocket-connection.js +1 -1
  611. package/src/http-server/websocket-event-log-store.js +6 -6
  612. package/src/http-server/websocket-events-host.js +2 -2
  613. package/src/http-server/worker-handler/in-process.js +7 -7
  614. package/src/http-server/worker-handler/index.js +4 -4
  615. package/src/http-server/worker-handler/worker-thread.js +3 -3
  616. package/src/logger/outputs/array-output.js +3 -3
  617. package/src/logger/outputs/console-output.js +1 -1
  618. package/src/logger/outputs/file-output.js +4 -4
  619. package/src/logger/outputs/stdout-output.js +1 -1
  620. package/src/logger.js +10 -10
  621. package/src/mailer/backends/smtp.js +3 -3
  622. package/src/mailer/base.js +8 -8
  623. package/src/mailer/delivery.js +4 -4
  624. package/src/plugins/sqljs-wasm-route-controller.js +1 -1
  625. package/src/routes/base-route.js +6 -6
  626. package/src/routes/basic-route.js +1 -1
  627. package/src/routes/hooks/frontend-model-command-route-hook.js +1 -1
  628. package/src/routes/index.js +1 -1
  629. package/src/routes/plugin-routes.js +1 -1
  630. package/src/routes/resolver.js +11 -11
  631. package/src/routes/resource-route.js +1 -1
  632. package/src/testing/browser-frontend-model-event-hook-scenarios.js +8 -8
  633. package/src/testing/expect-utils.js +11 -11
  634. package/src/testing/expect.js +16 -7
  635. package/src/testing/test-files-finder.js +8 -8
  636. package/src/testing/test-filter-parser.js +2 -2
  637. package/src/testing/test-runner.js +16 -16
  638. package/src/testing/test-suite-splitter.js +1 -1
  639. package/src/testing/test.js +15 -15
  640. package/src/utils/backtrace-cleaner.js +1 -1
  641. package/src/utils/format-value.js +1 -1
  642. package/src/utils/model-scope.js +1 -1
  643. package/src/utils/ransack.js +26 -26
  644. package/src/utils/with-tracked-stack-async-hooks.js +7 -7
  645. package/src/utils/with-tracked-stack.js +3 -3
@@ -9,28 +9,30 @@ export class AttributeNotSelectedError extends Error {
9
9
  }
10
10
  /**
11
11
  * Lightweight singular relationship state holder for frontend model instances.
12
- * @template {FrontendModelClass} S
13
- * @template {FrontendModelClass} T
12
+ * @template {FrontendModelBase | typeof FrontendModelBase} S
13
+ * @template {FrontendModelBase | typeof FrontendModelBase} T
14
+ * @template {Record<string, FrontendModelAttributeValue>} [TargetCreateAttributes=Record<string, FrontendModelAttributeValue>]
14
15
  */
15
- export class FrontendModelSingularRelationship<S extends FrontendModelClass, T extends FrontendModelClass> {
16
+ export class FrontendModelSingularRelationship<S extends FrontendModelBase | typeof FrontendModelBase, T extends FrontendModelBase | typeof FrontendModelBase, TargetCreateAttributes extends Record<string, FrontendModelAttributeValue> = Record<string, FrontendModelTransportValue>> {
16
17
  /**
17
18
  * Runs constructor.
18
- * @param {InstanceType<S>} model - Parent model.
19
+ * @param {FrontendModelBase} model - Parent model.
19
20
  * @param {string} relationshipName - Relationship name.
20
- * @param {T | null} targetModelClass - Target model class.
21
+ * @param {FrontendModelClass<FrontendModelRelationshipModel<T>, Record<string, FrontendModelAttributeValue>, TargetCreateAttributes> | null} targetModelClass - Target model class.
21
22
  */
22
- constructor(model: InstanceType<S>, relationshipName: string, targetModelClass: T | null);
23
- model: InstanceType<S>;
23
+ constructor(model: FrontendModelBase, relationshipName: string, targetModelClass: FrontendModelClass<FrontendModelRelationshipModel<T>, Record<string, FrontendModelAttributeValue>, TargetCreateAttributes> | null);
24
+ model: FrontendModelBase<Record<string, FrontendModelTransportValue>, Record<string, FrontendModelTransportValue>, Record<string, FrontendModelTransportValue>>;
24
25
  relationshipName: string;
25
- targetModelClass: T | null;
26
+ targetModelClass: FrontendModelClass<FrontendModelRelationshipModel<T>, Record<string, FrontendModelTransportValue>, TargetCreateAttributes> | null;
26
27
  _preloaded: boolean;
27
- _loadedValue: any;
28
+ /** @type {FrontendModelRelationshipModel<T> | null} */
29
+ _loadedValue: FrontendModelRelationshipModel<T> | null;
28
30
  /**
29
31
  * Runs set loaded.
30
- * @param {?} loadedValue - Loaded relationship value.
32
+ * @param {FrontendModelRelationshipModel<T> | null | undefined} loadedValue - Loaded relationship value.
31
33
  * @returns {void}
32
34
  */
33
- setLoaded(loadedValue: unknown): void;
35
+ setLoaded(loadedValue: FrontendModelRelationshipModel<T> | null | undefined): void;
34
36
  /**
35
37
  * Runs get preloaded.
36
38
  * @returns {boolean} - Whether relationship is preloaded.
@@ -38,43 +40,60 @@ export class FrontendModelSingularRelationship<S extends FrontendModelClass, T e
38
40
  getPreloaded(): boolean;
39
41
  /**
40
42
  * Runs loaded.
41
- * @returns {?} - Loaded relationship value.
43
+ * @returns {FrontendModelRelationshipModel<T> | null} - Loaded relationship value.
42
44
  */
43
- loaded(): unknown;
45
+ loaded(): FrontendModelRelationshipModel<T> | null;
46
+ /**
47
+ * Copies loaded value from another singular relationship helper.
48
+ * @param {FrontendModelRelationship} sourceRelationship - Source relationship helper.
49
+ * @returns {void}
50
+ */
51
+ copyLoadedFrom(sourceRelationship: FrontendModelRelationship): void;
44
52
  /**
45
53
  * Runs build.
46
- * @param {Record<string, ?>} [attributes] - New model attributes.
47
- * @returns {InstanceType<T>} - Built model.
54
+ * @param {TargetCreateAttributes} [attributes] - New model attributes.
55
+ * @returns {FrontendModelRelationshipModel<T>} - Built model.
56
+ */
57
+ build(attributes?: TargetCreateAttributes): FrontendModelRelationshipModel<T>;
58
+ /**
59
+ * Force-reload the relationship.
60
+ * @returns {Promise<FrontendModelRelationshipModel<T> | null>} - Loaded relationship model.
61
+ */
62
+ load(): Promise<FrontendModelRelationshipModel<T> | null>;
63
+ /**
64
+ * Returns the loaded relationship or loads it.
65
+ * @returns {Promise<FrontendModelRelationshipModel<T> | null>} - Loaded relationship model.
48
66
  */
49
- build(attributes?: Record<string, unknown>): InstanceType<T>;
67
+ orLoad(): Promise<FrontendModelRelationshipModel<T> | null>;
50
68
  }
51
69
  /**
52
70
  * Lightweight has-many relationship state holder for frontend model instances.
53
- * @template {FrontendModelClass} S
54
- * @template {FrontendModelClass} T
71
+ * @template {FrontendModelBase | typeof FrontendModelBase} S
72
+ * @template {FrontendModelBase | typeof FrontendModelBase} T
73
+ * @template {Record<string, FrontendModelAttributeValue>} [TargetCreateAttributes=Record<string, FrontendModelAttributeValue>]
55
74
  */
56
- export class FrontendModelHasManyRelationship<S extends FrontendModelClass, T extends FrontendModelClass> {
75
+ export class FrontendModelHasManyRelationship<S extends FrontendModelBase | typeof FrontendModelBase, T extends FrontendModelBase | typeof FrontendModelBase, TargetCreateAttributes extends Record<string, FrontendModelAttributeValue> = Record<string, FrontendModelTransportValue>> {
57
76
  /**
58
77
  * Runs constructor.
59
- * @param {InstanceType<S>} model - Parent model.
78
+ * @param {FrontendModelBase} model - Parent model.
60
79
  * @param {string} relationshipName - Relationship name.
61
- * @param {T | null} targetModelClass - Target model class.
80
+ * @param {FrontendModelClass<FrontendModelRelationshipModel<T>, Record<string, FrontendModelAttributeValue>, TargetCreateAttributes> | null} targetModelClass - Target model class.
62
81
  */
63
- constructor(model: InstanceType<S>, relationshipName: string, targetModelClass: T | null);
82
+ constructor(model: FrontendModelBase, relationshipName: string, targetModelClass: FrontendModelClass<FrontendModelRelationshipModel<T>, Record<string, FrontendModelAttributeValue>, TargetCreateAttributes> | null);
64
83
  /**
65
84
  * Narrows the runtime value to the documented type.
66
- @type {Array<InstanceType<T>>} */
67
- _loadedValue: Array<InstanceType<T>>;
68
- model: InstanceType<S>;
85
+ * @type {Array<FrontendModelRelationshipModel<T>>} */
86
+ _loadedValue: Array<FrontendModelRelationshipModel<T>>;
87
+ model: FrontendModelBase<Record<string, FrontendModelTransportValue>, Record<string, FrontendModelTransportValue>, Record<string, FrontendModelTransportValue>>;
69
88
  relationshipName: string;
70
- targetModelClass: T | null;
89
+ targetModelClass: FrontendModelClass<FrontendModelRelationshipModel<T>, Record<string, FrontendModelTransportValue>, TargetCreateAttributes> | null;
71
90
  _preloaded: boolean;
72
91
  /**
73
92
  * Runs set loaded.
74
- * @param {Array<InstanceType<T>>} loadedValue - Loaded relationship value.
93
+ * @param {Array<FrontendModelRelationshipModel<T>>} loadedValue - Loaded relationship value.
75
94
  * @returns {void}
76
95
  */
77
- setLoaded(loadedValue: Array<InstanceType<T>>): void;
96
+ setLoaded(loadedValue: Array<FrontendModelRelationshipModel<T>>): void;
78
97
  /**
79
98
  * Runs get preloaded.
80
99
  * @returns {boolean} - Whether relationship is preloaded.
@@ -82,35 +101,41 @@ export class FrontendModelHasManyRelationship<S extends FrontendModelClass, T ex
82
101
  getPreloaded(): boolean;
83
102
  /**
84
103
  * Runs loaded.
85
- * @returns {Array<InstanceType<T>>} - Loaded relationship values.
104
+ * @returns {Array<FrontendModelRelationshipModel<T>>} - Loaded relationship values.
105
+ */
106
+ loaded(): Array<FrontendModelRelationshipModel<T>>;
107
+ /**
108
+ * Copies loaded value from another has-many relationship helper.
109
+ * @param {FrontendModelRelationship} sourceRelationship - Source relationship helper.
110
+ * @returns {void}
86
111
  */
87
- loaded(): Array<InstanceType<T>>;
112
+ copyLoadedFrom(sourceRelationship: FrontendModelRelationship): void;
88
113
  /**
89
114
  * Runs add to loaded.
90
- * @param {Array<InstanceType<T>>} models - Models to append.
115
+ * @param {Array<FrontendModelRelationshipModel<T>>} models - Models to append.
91
116
  * @returns {void}
92
117
  */
93
- addToLoaded(models: Array<InstanceType<T>>): void;
118
+ addToLoaded(models: Array<FrontendModelRelationshipModel<T>>): void;
94
119
  /**
95
120
  * Runs build.
96
- * @param {Record<string, ?>} [attributes] - New model attributes.
97
- * @returns {InstanceType<T>} - Built model.
121
+ * @param {TargetCreateAttributes} [attributes] - New model attributes.
122
+ * @returns {FrontendModelRelationshipModel<T>} - Built model.
98
123
  */
99
- build(attributes?: Record<string, unknown>): InstanceType<T>;
124
+ build(attributes?: TargetCreateAttributes): FrontendModelRelationshipModel<T>;
100
125
  /**
101
126
  * Force-reload the relationship. When the parent record was loaded as part
102
127
  * of a batch, siblings that have not preloaded this relationship get
103
128
  * batched into one request via the cohort preloader. The scoped query path
104
129
  * (`Model.where(...).preload([name]).toArray()` directly from user code)
105
130
  * bypasses cohort batching by design.
106
- * @returns {Promise<Array<InstanceType<T>>>} - Loaded relationship models.
131
+ * @returns {Promise<Array<FrontendModelRelationshipModel<T>>>} - Loaded relationship models.
107
132
  */
108
- load(): Promise<Array<InstanceType<T>>>;
133
+ load(): Promise<Array<FrontendModelRelationshipModel<T>>>;
109
134
  /**
110
135
  * Runs to array.
111
- * @returns {Promise<Array<InstanceType<T>>>} - Loaded relationship models.
136
+ * @returns {Promise<Array<FrontendModelRelationshipModel<T>>>} - Loaded relationship models.
112
137
  */
113
- toArray(): Promise<Array<InstanceType<T>>>;
138
+ toArray(): Promise<Array<FrontendModelRelationshipModel<T>>>;
114
139
  }
115
140
  /**
116
141
  * Downloaded frontend-model attachment payload wrapper.
@@ -190,7 +215,7 @@ export class FrontendModelAttachmentHandle {
190
215
  * @type {FrontendModelAttachmentInput[]}
191
216
  */
192
217
  pendingInputs: FrontendModelAttachmentInput[];
193
- model: FrontendModelBase;
218
+ model: FrontendModelBase<Record<string, FrontendModelTransportValue>, Record<string, FrontendModelTransportValue>, Record<string, FrontendModelTransportValue>>;
194
219
  attachmentName: string;
195
220
  /**
196
221
  * Queue attachment input for the parent model's next save.
@@ -234,11 +259,16 @@ export class FrontendModelAttachmentHandle {
234
259
  */
235
260
  downloadUrl(): string;
236
261
  }
237
- /** Base class for generated frontend model classes. */
238
- export default class FrontendModelBase {
262
+ /**
263
+ * Base frontend model.
264
+ * @template {Record<string, FrontendModelAttributeValue>} [Attributes=Record<string, FrontendModelAttributeValue>]
265
+ * @template {Record<string, FrontendModelAttributeValue>} [CreateAttributes=Record<string, FrontendModelAttributeValue>]
266
+ * @template {Record<string, FrontendModelAttributeValue>} [UpdateAttributes=Record<string, FrontendModelAttributeValue>]
267
+ */
268
+ export default class FrontendModelBase<Attributes extends Record<string, FrontendModelAttributeValue> = Record<string, FrontendModelTransportValue>, CreateAttributes extends Record<string, FrontendModelAttributeValue> = Record<string, FrontendModelTransportValue>, UpdateAttributes extends Record<string, FrontendModelAttributeValue> = Record<string, FrontendModelTransportValue>> {
239
269
  /**
240
270
  * Narrows the runtime value to the documented type.
241
- @type {string | undefined} */
271
+ * @type {string | undefined} */
242
272
  static modelName: string | undefined;
243
273
  /**
244
274
  * Autoload.
@@ -261,7 +291,7 @@ export default class FrontendModelBase {
261
291
  * @this {FrontendModelClass}
262
292
  * @returns {void} - Ensures attachment helper methods exist on the prototype.
263
293
  */
264
- static ensureGeneratedAttachmentMethods(this: FrontendModelClass): void;
294
+ static ensureGeneratedAttachmentMethods(this: FrontendModelClass<FrontendModelBase<Record<string, FrontendModelTransportValue>, Record<string, FrontendModelTransportValue>, Record<string, FrontendModelTransportValue>>, Record<string, FrontendModelTransportValue>, Record<string, FrontendModelTransportValue>>): void;
265
295
  /**
266
296
  * Runs resource config.
267
297
  * @returns {FrontendModelResourceConfig} - Resource configuration.
@@ -272,7 +302,7 @@ export default class FrontendModelBase {
272
302
  * @this {FrontendModelClass}
273
303
  * @returns {Record<string, FrontendModelClass | string>} - Relationship model classes (or class name strings) keyed by relationship name.
274
304
  */
275
- static relationshipModelClasses(this: FrontendModelClass): Record<string, FrontendModelClass | string>;
305
+ static relationshipModelClasses(this: FrontendModelClass<FrontendModelBase<Record<string, FrontendModelTransportValue>, Record<string, FrontendModelTransportValue>, Record<string, FrontendModelTransportValue>>, Record<string, FrontendModelTransportValue>, Record<string, FrontendModelTransportValue>>): Record<string, FrontendModelClass | string>;
276
306
  /**
277
307
  * Register a frontend model class so it can be resolved by name in relationship lookups.
278
308
  * @param {FrontendModelClass} modelClass - Model class to register.
@@ -298,7 +328,7 @@ export default class FrontendModelBase {
298
328
  * @this {FrontendModelClass}
299
329
  * @returns {Record<string, {type: "belongsTo" | "hasOne" | "hasMany", autoload?: boolean}>} - Relationship definitions keyed by relationship name.
300
330
  */
301
- static relationshipDefinitions(this: FrontendModelClass): Record<string, {
331
+ static relationshipDefinitions(this: FrontendModelClass<FrontendModelBase<Record<string, FrontendModelTransportValue>, Record<string, FrontendModelTransportValue>, Record<string, FrontendModelTransportValue>>, Record<string, FrontendModelTransportValue>, Record<string, FrontendModelTransportValue>>): Record<string, {
302
332
  type: "belongsTo" | "hasOne" | "hasMany";
303
333
  autoload?: boolean;
304
334
  }>;
@@ -307,21 +337,21 @@ export default class FrontendModelBase {
307
337
  * @this {FrontendModelClass}
308
338
  * @returns {Record<string, FrontendModelAttachmentDefinition>} - Attachment definitions keyed by attachment name.
309
339
  */
310
- static attachmentDefinitions(this: FrontendModelClass): Record<string, FrontendModelAttachmentDefinition>;
340
+ static attachmentDefinitions(this: FrontendModelClass<FrontendModelBase<Record<string, FrontendModelTransportValue>, Record<string, FrontendModelTransportValue>, Record<string, FrontendModelTransportValue>>, Record<string, FrontendModelTransportValue>, Record<string, FrontendModelTransportValue>>): Record<string, FrontendModelAttachmentDefinition>;
311
341
  /**
312
342
  * Runs attachment definition.
313
343
  * @this {FrontendModelClass}
314
344
  * @param {string} attachmentName - Attachment name.
315
345
  * @returns {FrontendModelAttachmentDefinition | null} - Attachment definition.
316
346
  */
317
- static attachmentDefinition(this: FrontendModelClass, attachmentName: string): FrontendModelAttachmentDefinition | null;
347
+ static attachmentDefinition(this: FrontendModelClass<FrontendModelBase<Record<string, FrontendModelTransportValue>, Record<string, FrontendModelTransportValue>, Record<string, FrontendModelTransportValue>>, Record<string, FrontendModelTransportValue>, Record<string, FrontendModelTransportValue>>, attachmentName: string): FrontendModelAttachmentDefinition | null;
318
348
  /**
319
349
  * Runs relationship definition.
320
350
  * @this {FrontendModelClass}
321
351
  * @param {string} relationshipName - Relationship name.
322
352
  * @returns {{type: "belongsTo" | "hasOne" | "hasMany", autoload?: boolean} | null} - Relationship definition.
323
353
  */
324
- static relationshipDefinition(this: FrontendModelClass, relationshipName: string): {
354
+ static relationshipDefinition(this: FrontendModelClass<FrontendModelBase<Record<string, FrontendModelTransportValue>, Record<string, FrontendModelTransportValue>, Record<string, FrontendModelTransportValue>>, Record<string, FrontendModelTransportValue>, Record<string, FrontendModelTransportValue>>, relationshipName: string): {
325
355
  type: "belongsTo" | "hasOne" | "hasMany";
326
356
  autoload?: boolean;
327
357
  } | null;
@@ -331,40 +361,40 @@ export default class FrontendModelBase {
331
361
  * @param {string} attributeName - Candidate attribute name, such as `tasksAttributes`.
332
362
  * @returns {string | null} Relationship name when nested attributes are configured.
333
363
  */
334
- static nestedAttributesRelationshipName(this: FrontendModelClass, attributeName: string): string | null;
364
+ static nestedAttributesRelationshipName(this: FrontendModelClass<FrontendModelBase<Record<string, FrontendModelTransportValue>, Record<string, FrontendModelTransportValue>, Record<string, FrontendModelTransportValue>>, Record<string, FrontendModelTransportValue>, Record<string, FrontendModelTransportValue>>, attributeName: string): string | null;
335
365
  /**
336
366
  * Runs relationship model class.
337
367
  * @this {FrontendModelClass}
338
368
  * @param {string} relationshipName - Relationship name.
339
369
  * @returns {FrontendModelClass | null} - Target relationship model class.
340
370
  */
341
- static relationshipModelClass(this: FrontendModelClass, relationshipName: string): FrontendModelClass | null;
371
+ static relationshipModelClass(this: FrontendModelClass<FrontendModelBase<Record<string, FrontendModelTransportValue>, Record<string, FrontendModelTransportValue>, Record<string, FrontendModelTransportValue>>, Record<string, FrontendModelTransportValue>, Record<string, FrontendModelTransportValue>>, relationshipName: string): FrontendModelClass | null;
342
372
  /**
343
373
  * Runs primary key.
344
374
  * @this {FrontendModelClass}
345
375
  * @returns {string} - Primary key name.
346
376
  */
347
- static primaryKey(this: FrontendModelClass): string;
377
+ static primaryKey(this: FrontendModelClass<FrontendModelBase<Record<string, FrontendModelTransportValue>, Record<string, FrontendModelTransportValue>, Record<string, FrontendModelTransportValue>>, Record<string, FrontendModelTransportValue>, Record<string, FrontendModelTransportValue>>): string;
348
378
  /**
349
379
  * Runs resource path.
350
380
  * @this {FrontendModelClass}
351
381
  * @returns {string} - Derived resource path.
352
382
  */
353
- static resourcePath(this: FrontendModelClass): string;
383
+ static resourcePath(this: FrontendModelClass<FrontendModelBase<Record<string, FrontendModelTransportValue>, Record<string, FrontendModelTransportValue>, Record<string, FrontendModelTransportValue>>, Record<string, FrontendModelTransportValue>, Record<string, FrontendModelTransportValue>>): string;
354
384
  /**
355
385
  * Runs command name.
356
386
  * @this {FrontendModelClass}
357
387
  * @param {FrontendModelCommandType} commandType - Command type.
358
388
  * @returns {string} - Resolved command name.
359
389
  */
360
- static commandName(this: FrontendModelClass, commandType: FrontendModelCommandType): string;
390
+ static commandName(this: FrontendModelClass<FrontendModelBase<Record<string, FrontendModelTransportValue>, Record<string, FrontendModelTransportValue>, Record<string, FrontendModelTransportValue>>, Record<string, FrontendModelTransportValue>, Record<string, FrontendModelTransportValue>>, commandType: FrontendModelCommandType): string;
361
391
  /**
362
392
  * Runs normalize custom command payload arguments.
363
393
  * @this {FrontendModelClass}
364
394
  * @param {Array<?>} args - Command arguments.
365
395
  * @returns {Record<string, ?>} - Command payload.
366
396
  */
367
- static normalizeCustomCommandPayloadArguments(this: FrontendModelClass, args: Array<unknown>): Record<string, unknown>;
397
+ static normalizeCustomCommandPayloadArguments(this: FrontendModelClass<FrontendModelBase<Record<string, FrontendModelTransportValue>, Record<string, FrontendModelTransportValue>, Record<string, FrontendModelTransportValue>>, Record<string, FrontendModelTransportValue>, Record<string, FrontendModelTransportValue>>, args: Array<unknown>): Record<string, unknown>;
368
398
  /**
369
399
  * Returns the model name, preferring an explicit `static modelName` declaration
370
400
  * over the JavaScript class `.name` property. This allows minified builds to
@@ -372,7 +402,7 @@ export default class FrontendModelBase {
372
402
  * @this {FrontendModelClass}
373
403
  * @returns {string} - The model name.
374
404
  */
375
- static getModelName(this: FrontendModelClass): string;
405
+ static getModelName(this: FrontendModelClass<FrontendModelBase<Record<string, FrontendModelTransportValue>, Record<string, FrontendModelTransportValue>, Record<string, FrontendModelTransportValue>>, Record<string, FrontendModelTransportValue>, Record<string, FrontendModelTransportValue>>): string;
376
406
  /**
377
407
  * Runs configure transport.
378
408
  * @param {FrontendModelTransportConfig} config - Frontend model transport configuration.
@@ -484,21 +514,21 @@ export default class FrontendModelBase {
484
514
  * Runs attributes from response.
485
515
  * @this {FrontendModelClass}
486
516
  * @param {object} response - Response payload.
487
- * @returns {Record<string, ?>} - Attributes from payload.
517
+ * @returns {Record<string, FrontendModelAttributeValue>} - Attributes from payload.
488
518
  */
489
- static attributesFromResponse(this: FrontendModelClass, response: object): Record<string, unknown>;
519
+ static attributesFromResponse(this: FrontendModelClass<FrontendModelBase<Record<string, FrontendModelTransportValue>, Record<string, FrontendModelTransportValue>, Record<string, FrontendModelTransportValue>>, Record<string, FrontendModelTransportValue>, Record<string, FrontendModelTransportValue>>, response: object): Record<string, FrontendModelAttributeValue>;
490
520
  /**
491
521
  * Runs model data from response.
492
522
  * @this {FrontendModelClass}
493
523
  * @param {object} response - Response payload.
494
- * @returns {{abilities: Record<string, boolean>, attributes: Record<string, ?>, associationCounts: Record<string, number>, queryData: Record<string, ?>, preloadedRelationships: Record<string, ?>, selectedAttributes: Set<string>}} - Attributes, preloaded relationships, association counts, queryData, abilities, and the selected-attributes set.
524
+ * @returns {{abilities: Record<string, boolean>, attributes: Record<string, FrontendModelAttributeValue>, associationCounts: Record<string, number>, queryData: Record<string, FrontendModelAttributeValue>, preloadedRelationships: Record<string, FrontendModelAttributeValue>, selectedAttributes: Set<string>}} - Attributes, preloaded relationships, association counts, queryData, abilities, and the selected-attributes set.
495
525
  */
496
- static modelDataFromResponse(this: FrontendModelClass, response: object): {
526
+ static modelDataFromResponse(this: FrontendModelClass<FrontendModelBase<Record<string, FrontendModelTransportValue>, Record<string, FrontendModelTransportValue>, Record<string, FrontendModelTransportValue>>, Record<string, FrontendModelTransportValue>, Record<string, FrontendModelTransportValue>>, response: object): {
497
527
  abilities: Record<string, boolean>;
498
- attributes: Record<string, unknown>;
528
+ attributes: Record<string, FrontendModelAttributeValue>;
499
529
  associationCounts: Record<string, number>;
500
- queryData: Record<string, unknown>;
501
- preloadedRelationships: Record<string, unknown>;
530
+ queryData: Record<string, FrontendModelAttributeValue>;
531
+ preloadedRelationships: Record<string, FrontendModelAttributeValue>;
502
532
  selectedAttributes: Set<string>;
503
533
  };
504
534
  /**
@@ -508,7 +538,7 @@ export default class FrontendModelBase {
508
538
  * @param {Record<string, ?>} preloadedRelationships - Preloaded relationship payload.
509
539
  * @returns {void}
510
540
  */
511
- static applyPreloadedRelationships(this: FrontendModelClass, model: FrontendModelBase, preloadedRelationships: Record<string, unknown>): void;
541
+ static applyPreloadedRelationships(this: FrontendModelClass<FrontendModelBase<Record<string, FrontendModelTransportValue>, Record<string, FrontendModelTransportValue>, Record<string, FrontendModelTransportValue>>, Record<string, FrontendModelTransportValue>, Record<string, FrontendModelTransportValue>>, model: FrontendModelBase, preloadedRelationships: Record<string, unknown>): void;
512
542
  /**
513
543
  * Runs instantiate relationship value.
514
544
  * @this {FrontendModelClass}
@@ -516,7 +546,7 @@ export default class FrontendModelBase {
516
546
  * @param {FrontendModelClass | null} targetModelClass - Target model class.
517
547
  * @returns {?} - Instantiated relationship value.
518
548
  */
519
- static instantiateRelationshipValue(this: FrontendModelClass, relationshipPayload: unknown, targetModelClass: FrontendModelClass | null): unknown;
549
+ static instantiateRelationshipValue(this: FrontendModelClass<FrontendModelBase<Record<string, FrontendModelTransportValue>, Record<string, FrontendModelTransportValue>, Record<string, FrontendModelTransportValue>>, Record<string, FrontendModelTransportValue>, Record<string, FrontendModelTransportValue>>, relationshipPayload: unknown, targetModelClass: FrontendModelClass | null): unknown;
520
550
  /**
521
551
  * Runs instantiate from response.
522
552
  * @template {FrontendModelClass} T
@@ -636,7 +666,7 @@ export default class FrontendModelBase {
636
666
  * @param {import("./query.js").FrontendModelEventOptions} [options] - Event query or record projection options.
637
667
  * @returns {Promise<() => void>} - Unsubscribe callback.
638
668
  */
639
- static onCreate(this: FrontendModelClass, callback: (payload: {
669
+ static onCreate(this: FrontendModelClass<FrontendModelBase<Record<string, FrontendModelTransportValue>, Record<string, FrontendModelTransportValue>, Record<string, FrontendModelTransportValue>>, Record<string, FrontendModelTransportValue>, Record<string, FrontendModelTransportValue>>, callback: (payload: {
640
670
  id: string;
641
671
  model: FrontendModelBase;
642
672
  }) => void, options?: import("./query.js").FrontendModelEventOptions): Promise<() => void>;
@@ -647,7 +677,7 @@ export default class FrontendModelBase {
647
677
  * @param {import("./query.js").FrontendModelEventOptions} [options] - Event query or record projection options.
648
678
  * @returns {Promise<() => void>} - Unsubscribe callback.
649
679
  */
650
- static onUpdate(this: FrontendModelClass, callback: (payload: {
680
+ static onUpdate(this: FrontendModelClass<FrontendModelBase<Record<string, FrontendModelTransportValue>, Record<string, FrontendModelTransportValue>, Record<string, FrontendModelTransportValue>>, Record<string, FrontendModelTransportValue>, Record<string, FrontendModelTransportValue>>, callback: (payload: {
651
681
  id: string;
652
682
  model: FrontendModelBase;
653
683
  }) => void, options?: import("./query.js").FrontendModelEventOptions): Promise<() => void>;
@@ -658,7 +688,7 @@ export default class FrontendModelBase {
658
688
  * @param {import("./query.js").FrontendModelEventOptions} [options] - Accepted for API symmetry; destroy events carry ids only.
659
689
  * @returns {Promise<() => void>} - Unsubscribe callback.
660
690
  */
661
- static onDestroy(this: FrontendModelClass, callback: (payload: {
691
+ static onDestroy(this: FrontendModelClass<FrontendModelBase<Record<string, FrontendModelTransportValue>, Record<string, FrontendModelTransportValue>, Record<string, FrontendModelTransportValue>>, Record<string, FrontendModelTransportValue>, Record<string, FrontendModelTransportValue>>, callback: (payload: {
662
692
  id: string;
663
693
  }) => void, options?: import("./query.js").FrontendModelEventOptions): Promise<() => void>;
664
694
  /**
@@ -784,19 +814,19 @@ export default class FrontendModelBase {
784
814
  static findOrCreateBy<T extends FrontendModelClass>(this: T, conditions: Record<string, unknown>, callback?: (model: InstanceType<T>) => Promise<void> | void): Promise<InstanceType<T>>;
785
815
  /**
786
816
  * Runs create.
787
- * @template {FrontendModelClass} T
788
- * @this {T}
789
- * @param {Record<string, ?>} [attributes] - Initial attributes.
790
- * @returns {Promise<InstanceType<T>>} - Persisted model.
817
+ * @template {FrontendModelClass} ModelClass
818
+ * @this {ModelClass}
819
+ * @param {FrontendModelCreateAttributesFor<InstanceType<ModelClass>>} [attributes] - Initial attributes.
820
+ * @returns {Promise<InstanceType<ModelClass>>} - Persisted model.
791
821
  */
792
- static create<T extends FrontendModelClass>(this: T, attributes?: Record<string, unknown>): Promise<InstanceType<T>>;
822
+ static create<ModelClass extends FrontendModelClass>(this: ModelClass, attributes?: FrontendModelCreateAttributesFor<InstanceType<ModelClass>>): Promise<InstanceType<ModelClass>>;
793
823
  /**
794
824
  * Runs assert find by conditions.
795
825
  * @this {FrontendModelClass}
796
826
  * @param {Record<string, ?>} conditions - findBy conditions.
797
827
  * @returns {void}
798
828
  */
799
- static assertFindByConditions(this: FrontendModelClass, conditions: Record<string, unknown>): void;
829
+ static assertFindByConditions(this: FrontendModelClass<FrontendModelBase<Record<string, FrontendModelTransportValue>, Record<string, FrontendModelTransportValue>, Record<string, FrontendModelTransportValue>>, Record<string, FrontendModelTransportValue>, Record<string, FrontendModelTransportValue>>, conditions: Record<string, unknown>): void;
800
830
  /**
801
831
  * Runs matches find by conditions.
802
832
  * @this {FrontendModelClass}
@@ -804,7 +834,7 @@ export default class FrontendModelBase {
804
834
  * @param {Record<string, ?>} conditions - Match conditions.
805
835
  * @returns {boolean} - Whether the model matches all conditions.
806
836
  */
807
- static matchesFindByConditions(this: FrontendModelClass, model: FrontendModelBase, conditions: Record<string, unknown>): boolean;
837
+ static matchesFindByConditions(this: FrontendModelClass<FrontendModelBase<Record<string, FrontendModelTransportValue>, Record<string, FrontendModelTransportValue>, Record<string, FrontendModelTransportValue>>, Record<string, FrontendModelTransportValue>, Record<string, FrontendModelTransportValue>>, model: FrontendModelBase, conditions: Record<string, unknown>): boolean;
808
838
  /**
809
839
  * Runs find by condition value matches.
810
840
  * @this {FrontendModelClass}
@@ -812,7 +842,7 @@ export default class FrontendModelBase {
812
842
  * @param {?} expectedValue - Expected find condition value.
813
843
  * @returns {boolean} - Whether values match.
814
844
  */
815
- static findByConditionValueMatches(this: FrontendModelClass, actualValue: unknown, expectedValue: unknown): boolean;
845
+ static findByConditionValueMatches(this: FrontendModelClass<FrontendModelBase<Record<string, FrontendModelTransportValue>, Record<string, FrontendModelTransportValue>, Record<string, FrontendModelTransportValue>>, Record<string, FrontendModelTransportValue>, Record<string, FrontendModelTransportValue>>, actualValue: unknown, expectedValue: unknown): boolean;
816
846
  /**
817
847
  * Runs find by primitive values match.
818
848
  * @this {FrontendModelClass}
@@ -820,7 +850,7 @@ export default class FrontendModelBase {
820
850
  * @param {?} expectedValue - Expected find condition value.
821
851
  * @returns {boolean} - Whether primitive values match after safe coercion.
822
852
  */
823
- static findByPrimitiveValuesMatch(this: FrontendModelClass, actualValue: unknown, expectedValue: unknown): boolean;
853
+ static findByPrimitiveValuesMatch(this: FrontendModelClass<FrontendModelBase<Record<string, FrontendModelTransportValue>, Record<string, FrontendModelTransportValue>, Record<string, FrontendModelTransportValue>>, Record<string, FrontendModelTransportValue>, Record<string, FrontendModelTransportValue>>, actualValue: unknown, expectedValue: unknown): boolean;
824
854
  /**
825
855
  * Runs find by numeric string matches number.
826
856
  * @this {FrontendModelClass}
@@ -828,7 +858,7 @@ export default class FrontendModelBase {
828
858
  * @param {number} expectedNumber - Number value.
829
859
  * @returns {boolean} - Whether values represent the same number.
830
860
  */
831
- static findByNumericStringMatchesNumber(this: FrontendModelClass, numericString: string, expectedNumber: number): boolean;
861
+ static findByNumericStringMatchesNumber(this: FrontendModelClass<FrontendModelBase<Record<string, FrontendModelTransportValue>, Record<string, FrontendModelTransportValue>, Record<string, FrontendModelTransportValue>>, Record<string, FrontendModelTransportValue>, Record<string, FrontendModelTransportValue>>, numericString: string, expectedNumber: number): boolean;
832
862
  /**
833
863
  * Runs execute command.
834
864
  * @this {FrontendModelClass}
@@ -836,7 +866,7 @@ export default class FrontendModelBase {
836
866
  * @param {Record<string, ?>} payload - Command payload.
837
867
  * @returns {Promise<Record<string, ?>>} - Parsed JSON response.
838
868
  */
839
- static executeCommand(this: FrontendModelClass, commandType: FrontendModelCommandType, payload: Record<string, unknown>): Promise<Record<string, unknown>>;
869
+ static executeCommand(this: FrontendModelClass<FrontendModelBase<Record<string, FrontendModelTransportValue>, Record<string, FrontendModelTransportValue>, Record<string, FrontendModelTransportValue>>, Record<string, FrontendModelTransportValue>, Record<string, FrontendModelTransportValue>>, commandType: FrontendModelCommandType, payload: Record<string, unknown>): Promise<Record<string, unknown>>;
840
870
  /**
841
871
  * Runs execute custom command.
842
872
  * @this {FrontendModelClass}
@@ -848,7 +878,7 @@ export default class FrontendModelBase {
848
878
  * @param {string} args.resourcePath - Direct resource path.
849
879
  * @returns {Promise<Record<string, ?>>} - Decoded response payload.
850
880
  */
851
- static executeCustomCommand(this: FrontendModelClass, { commandName, commandType, memberId, payload, resourcePath }: {
881
+ static executeCustomCommand(this: FrontendModelClass<FrontendModelBase<Record<string, FrontendModelTransportValue>, Record<string, FrontendModelTransportValue>, Record<string, FrontendModelTransportValue>>, Record<string, FrontendModelTransportValue>, Record<string, FrontendModelTransportValue>>, { commandName, commandType, memberId, payload, resourcePath }: {
852
882
  commandName: string;
853
883
  commandType: FrontendModelRequestCommandType;
854
884
  memberId?: string | number | null | undefined;
@@ -863,7 +893,7 @@ export default class FrontendModelBase {
863
893
  * @param {Record<string, ?>} args.response - Decoded response.
864
894
  * @returns {void}
865
895
  */
866
- static throwOnErrorFrontendModelResponse(this: FrontendModelClass, { commandType, response }: {
896
+ static throwOnErrorFrontendModelResponse(this: FrontendModelClass<FrontendModelBase<Record<string, FrontendModelTransportValue>, Record<string, FrontendModelTransportValue>, Record<string, FrontendModelTransportValue>>, Record<string, FrontendModelTransportValue>, Record<string, FrontendModelTransportValue>>, { commandType, response }: {
867
897
  commandType: FrontendModelRequestCommandType;
868
898
  response: Record<string, unknown>;
869
899
  }): void;
@@ -872,23 +902,23 @@ export default class FrontendModelBase {
872
902
  * @this {FrontendModelClass}
873
903
  * @returns {Set<string>} - Configured frontend model attribute names.
874
904
  */
875
- static configuredFrontendModelAttributeNames(this: FrontendModelClass): Set<string>;
905
+ static configuredFrontendModelAttributeNames(this: FrontendModelClass<FrontendModelBase<Record<string, FrontendModelTransportValue>, Record<string, FrontendModelTransportValue>, Record<string, FrontendModelTransportValue>>, Record<string, FrontendModelTransportValue>, Record<string, FrontendModelTransportValue>>): Set<string>;
876
906
  /**
877
907
  * Runs constructor.
878
- * @param {Record<string, ?>} [attributes] - Initial attributes.
908
+ * @param {Attributes | CreateAttributes} [attributes] - Initial attributes.
879
909
  */
880
- constructor(attributes?: Record<string, unknown>);
910
+ constructor(attributes?: Attributes | CreateAttributes);
881
911
  /**
882
912
  * Narrows the runtime value to the documented type.
883
- @type {Record<string, ?>} */
884
- _attributes: Record<string, unknown>;
913
+ * @type {Record<string, FrontendModelAttributeValue>} */
914
+ _attributes: Record<string, FrontendModelAttributeValue>;
885
915
  /**
886
916
  * Narrows the runtime value to the documented type.
887
- @type {Record<string, FrontendModelHasManyRelationship<FrontendModelClass, FrontendModelClass> | FrontendModelSingularRelationship<FrontendModelClass, FrontendModelClass>>} */
888
- _relationships: Record<string, FrontendModelHasManyRelationship<FrontendModelClass, FrontendModelClass> | FrontendModelSingularRelationship<FrontendModelClass, FrontendModelClass>>;
917
+ * @type {Record<string, FrontendModelHasManyRelationship<FrontendModelBase, FrontendModelBase, Record<string, FrontendModelAttributeValue>> | FrontendModelSingularRelationship<FrontendModelBase, FrontendModelBase, Record<string, FrontendModelAttributeValue>>>} */
918
+ _relationships: Record<string, FrontendModelHasManyRelationship<FrontendModelBase, FrontendModelBase, Record<string, FrontendModelAttributeValue>> | FrontendModelSingularRelationship<FrontendModelBase, FrontendModelBase, Record<string, FrontendModelAttributeValue>>>;
889
919
  /**
890
920
  * Narrows the runtime value to the documented type.
891
- @type {Record<string, FrontendModelAttachmentHandle>} */
921
+ * @type {Record<string, FrontendModelAttachmentHandle>} */
892
922
  _attachments: Record<string, FrontendModelAttachmentHandle>;
893
923
  /**
894
924
  * Rails-style nested attribute payloads queued for the next save.
@@ -897,20 +927,20 @@ export default class FrontendModelBase {
897
927
  _pendingNestedAttributes: Record<string, unknown>;
898
928
  /**
899
929
  * Narrows the runtime value to the documented type.
900
- @type {Set<string> | null} */
930
+ * @type {Set<string> | null} */
901
931
  _selectedAttributes: Set<string> | null;
902
932
  /**
903
933
  * Narrows the runtime value to the documented type.
904
- @type {boolean} */
934
+ * @type {boolean} */
905
935
  _isNewRecord: boolean;
906
936
  /**
907
937
  * Narrows the runtime value to the documented type.
908
- @type {boolean} */
938
+ * @type {boolean} */
909
939
  _markedForDestruction: boolean;
910
940
  /**
911
941
  * Narrows the runtime value to the documented type.
912
- @type {Record<string, ?>} */
913
- _persistedAttributes: Record<string, unknown>;
942
+ * @type {Record<string, FrontendModelAttributeValue>} */
943
+ _persistedAttributes: Record<string, FrontendModelAttributeValue>;
914
944
  /**
915
945
  * Narrows the runtime value to the documented type.
916
946
  * @type {Array<FrontendModelBase> | undefined} - Shared reference to sibling records loaded in the same batch. Used by auto-batch-preload.
@@ -918,9 +948,9 @@ export default class FrontendModelBase {
918
948
  _loadCohort: Array<FrontendModelBase> | undefined;
919
949
  /**
920
950
  * Runs attributes.
921
- * @returns {Record<string, ?>} - Attributes hash.
951
+ * @returns {Attributes} - Attributes hash.
922
952
  */
923
- attributes(): Record<string, unknown>;
953
+ attributes(): Attributes;
924
954
  /**
925
955
  * Runs is new record.
926
956
  * @returns {boolean} - Whether this model has not yet been persisted.
@@ -962,9 +992,9 @@ export default class FrontendModelBase {
962
992
  /**
963
993
  * Runs get relationship by name.
964
994
  * @param {string} relationshipName - Relationship name.
965
- * @returns {FrontendModelHasManyRelationship<FrontendModelClass, FrontendModelClass> | FrontendModelSingularRelationship<FrontendModelClass, FrontendModelClass>} - Relationship state object.
995
+ * @returns {FrontendModelRelationship} - Relationship state object.
966
996
  */
967
- getRelationshipByName(relationshipName: string): FrontendModelHasManyRelationship<FrontendModelClass, FrontendModelClass> | FrontendModelSingularRelationship<FrontendModelClass, FrontendModelClass>;
997
+ getRelationshipByName(relationshipName: string): FrontendModelRelationship;
968
998
  /**
969
999
  * Runs get attachment by name.
970
1000
  * @param {string} attachmentName - Attachment name.
@@ -974,9 +1004,9 @@ export default class FrontendModelBase {
974
1004
  /**
975
1005
  * Runs load relationship.
976
1006
  * @param {string} relationshipName - Relationship name.
977
- * @returns {Promise<?>} - Loaded relationship value.
1007
+ * @returns {Promise<FrontendModelBase | Array<FrontendModelBase> | null>} - Loaded relationship value.
978
1008
  */
979
- loadRelationship(relationshipName: string): Promise<unknown>;
1009
+ loadRelationship(relationshipName: string): Promise<FrontendModelBase | Array<FrontendModelBase> | null>;
980
1010
  /**
981
1011
  * Preloads relationship(s) onto this already-loaded record. Accepts either a
982
1012
  * query built via `Model.preload(...).select(...)` or a raw preload spec
@@ -994,9 +1024,9 @@ export default class FrontendModelBase {
994
1024
  /**
995
1025
  * Runs relationship or load.
996
1026
  * @param {string} relationshipName - Relationship name.
997
- * @returns {Promise<?>} - Loaded relationship value.
1027
+ * @returns {Promise<FrontendModelBase | Array<FrontendModelBase> | null>} - Loaded relationship value.
998
1028
  */
999
- relationshipOrLoad(relationshipName: string): Promise<unknown>;
1029
+ relationshipOrLoad(relationshipName: string): Promise<FrontendModelBase | Array<FrontendModelBase> | null>;
1000
1030
  /**
1001
1031
  * Attempts to batch-load `relationshipName` across cohort siblings via a
1002
1032
  * single `preload([name]).where({pk: [ids]}).toArray()` request, then copies
@@ -1012,16 +1042,16 @@ export default class FrontendModelBase {
1012
1042
  /**
1013
1043
  * Runs set relationship.
1014
1044
  * @param {string} relationshipName - Relationship name.
1015
- * @param {?} relationshipValue - Relationship value.
1016
- * @returns {?} - Assigned relationship value.
1045
+ * @param {FrontendModelBase | null | undefined} relationshipValue - Relationship value.
1046
+ * @returns {FrontendModelBase | null | undefined} - Assigned relationship value.
1017
1047
  */
1018
- setRelationship(relationshipName: string, relationshipValue: unknown): unknown;
1048
+ setRelationship(relationshipName: string, relationshipValue: FrontendModelBase | null | undefined): FrontendModelBase | null | undefined;
1019
1049
  /**
1020
1050
  * Runs assign attributes.
1021
- * @param {Record<string, ?>} attributes - Attributes to assign.
1051
+ * @param {Attributes | CreateAttributes | UpdateAttributes | Record<string, FrontendModelAttributeValue>} attributes - Attributes to assign.
1022
1052
  * @returns {void} - No return value.
1023
1053
  */
1024
- assignAttributes(attributes: Record<string, unknown>): void;
1054
+ assignAttributes(attributes: Attributes | CreateAttributes | UpdateAttributes | Record<string, FrontendModelAttributeValue>): void;
1025
1055
  /**
1026
1056
  * Runs clear relationship cache.
1027
1057
  * @returns {void} - Clears cached relationship state.
@@ -1148,10 +1178,10 @@ export default class FrontendModelBase {
1148
1178
  }) => void, options?: import("./query.js").FrontendModelEventOptions): Promise<() => void>;
1149
1179
  /**
1150
1180
  * Runs update.
1151
- * @param {Record<string, ?>} [newAttributes] - New values to assign before update.
1181
+ * @param {UpdateAttributes} [newAttributes] - New values to assign before update.
1152
1182
  * @returns {Promise<this>} - Updated model.
1153
1183
  */
1154
- update(newAttributes?: Record<string, unknown>): Promise<this>;
1184
+ update(newAttributes?: UpdateAttributes): Promise<this>;
1155
1185
  /**
1156
1186
  * Runs attach.
1157
1187
  * @param {?} attachmentInput - Attachment input or named attachment payload.
@@ -1169,9 +1199,9 @@ export default class FrontendModelBase {
1169
1199
  * fields the caller actually changed — avoiding strict permit rejections on
1170
1200
  * framework-managed fields like `id`, `createdAt`, `updatedAt`, or owner
1171
1201
  * foreign keys that the resource never lists in `permittedParams`.
1172
- * @returns {Record<string, ?>} - Changed attributes hash.
1202
+ * @returns {Record<string, FrontendModelAttributeValue>} - Changed attributes hash.
1173
1203
  */
1174
- _changedAttributesForSave(): Record<string, unknown>;
1204
+ _changedAttributesForSave(): Record<string, FrontendModelAttributeValue>;
1175
1205
  /**
1176
1206
  * Marks the current value for an attribute as already persisted so the next
1177
1207
  * save does not send it unless the caller changes it again.
@@ -1247,6 +1277,10 @@ export default class FrontendModelBase {
1247
1277
  */
1248
1278
  _reconcileNestedAttributesFromResponse(response: Record<string, unknown>): void;
1249
1279
  }
1280
+ /**
1281
+ * Frontend model relationship helper type.
1282
+ */
1283
+ export type FrontendModelRelationship = FrontendModelHasManyRelationship<FrontendModelBase, FrontendModelBase, Record<string, FrontendModelAttributeValue>> | FrontendModelSingularRelationship<FrontendModelBase, FrontendModelBase, Record<string, FrontendModelAttributeValue>>;
1250
1284
  /**
1251
1285
  * Defines this typedef.
1252
1286
  */
@@ -1275,6 +1309,30 @@ export type FrontendModelCommandType = "create" | "find" | "index" | "update" |
1275
1309
  * FrontendModelRequestCommandType type.
1276
1310
  */
1277
1311
  export type FrontendModelRequestCommandType = FrontendModelCommandType | string;
1312
+ /**
1313
+ * Model-like instance value supported by frontend-model transport.
1314
+ */
1315
+ export type FrontendModelTransportModelValue = {
1316
+ attributes: () => Record<string, unknown>;
1317
+ };
1318
+ /**
1319
+ * Special scalar values restored by frontend-model transport.
1320
+ */
1321
+ export type FrontendModelTransportScalarValue = undefined | null | boolean | number | string | bigint | Date | FrontendModelTransportModelValue;
1322
+ /**
1323
+ * Plain object supported by frontend-model transport values.
1324
+ * Nested values are intentionally opaque because TypeScript rejects recursive
1325
+ * JSDoc typedefs for this transport value contract.
1326
+ */
1327
+ export type FrontendModelTransportObject = Record<string, unknown>;
1328
+ /**
1329
+ * Value supported by frontend-model transport serialization and deserialization.
1330
+ */
1331
+ export type FrontendModelTransportValue = FrontendModelTransportScalarValue | FrontendModelTransportObject | Array<unknown>;
1332
+ /**
1333
+ * Frontend model attribute value used when generated metadata cannot infer a narrower type.
1334
+ */
1335
+ export type FrontendModelAttributeValue = FrontendModelTransportValue;
1278
1336
  /**
1279
1337
  * Defines this typedef.
1280
1338
  */
@@ -1311,13 +1369,26 @@ export type FrontendModelResourceConfig = {
1311
1369
  /**
1312
1370
  * Frontend model constructor type.
1313
1371
  */
1314
- export type FrontendModelConstructor = {
1315
- new (attributes?: Record<string, unknown>): FrontendModelBase;
1372
+ export type FrontendModelConstructor<T extends FrontendModelBase = FrontendModelBase<Record<string, FrontendModelTransportValue>, Record<string, FrontendModelTransportValue>, Record<string, FrontendModelTransportValue>>> = {
1373
+ new (attributes?: Record<string, FrontendModelAttributeValue>): T;
1316
1374
  };
1317
1375
  /**
1318
- * Frontend model static side without generated per-model create overloads.
1376
+ * Frontend model static side.
1377
+ */
1378
+ export type FrontendModelClass<T extends FrontendModelBase = FrontendModelBase<Record<string, FrontendModelTransportValue>, Record<string, FrontendModelTransportValue>, Record<string, FrontendModelTransportValue>>, Attributes extends Record<string, FrontendModelAttributeValue> = Record<string, FrontendModelTransportValue>, CreateAttributes extends Record<string, FrontendModelAttributeValue> = Record<string, FrontendModelTransportValue>> = {
1379
+ new (): T;
1380
+ create(attributes?: CreateAttributes): Promise<T>;
1381
+ } & Omit<typeof FrontendModelBase, "create">;
1382
+ /**
1383
+ * Create attributes accepted by a frontend model instance.
1384
+ */
1385
+ export type FrontendModelCreateAttributesFor<T extends FrontendModelBase> = T extends FrontendModelBase<Record<string, FrontendModelAttributeValue>, infer CreateAttributes, infer _UpdateAttributes> ? CreateAttributes : Record<string, FrontendModelAttributeValue>;
1386
+ /**
1387
+ * Loaded instance type for relationship helper generics. Older generated
1388
+ * frontend models passed model classes into relationship helpers, while newer
1389
+ * generated models pass instance types.
1319
1390
  */
1320
- export type FrontendModelClass = FrontendModelConstructor & Omit<typeof FrontendModelBase, "create">;
1391
+ export type FrontendModelRelationshipModel<T extends FrontendModelBase | typeof FrontendModelBase> = T extends new (...args: any[]) => infer Instance ? Instance : T;
1321
1392
  /**
1322
1393
  * FrontendModelTransportConfig type.
1323
1394
  */