velocious 1.0.263 → 1.0.265

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 (389) hide show
  1. package/README.md +14 -0
  2. package/build/bin/velocious.js +7 -2
  3. package/build/src/application.d.ts +6 -6
  4. package/build/src/application.d.ts.map +1 -1
  5. package/build/src/authorization/ability.d.ts +4 -4
  6. package/build/src/authorization/ability.d.ts.map +1 -1
  7. package/build/src/authorization/base-resource.d.ts +4 -4
  8. package/build/src/authorization/base-resource.d.ts.map +1 -1
  9. package/build/src/background-jobs/client.d.ts +2 -2
  10. package/build/src/background-jobs/client.d.ts.map +1 -1
  11. package/build/src/background-jobs/job-runner.d.ts +2 -2
  12. package/build/src/background-jobs/job-runner.d.ts.map +1 -1
  13. package/build/src/background-jobs/job-runner.js +5 -3
  14. package/build/src/background-jobs/job.d.ts +1 -1
  15. package/build/src/background-jobs/job.d.ts.map +1 -1
  16. package/build/src/background-jobs/json-socket.d.ts +1 -1
  17. package/build/src/background-jobs/json-socket.d.ts.map +1 -1
  18. package/build/src/background-jobs/main.d.ts +34 -12
  19. package/build/src/background-jobs/main.d.ts.map +1 -1
  20. package/build/src/background-jobs/main.js +36 -6
  21. package/build/src/background-jobs/scheduler.d.ts +21 -0
  22. package/build/src/background-jobs/scheduler.d.ts.map +1 -1
  23. package/build/src/background-jobs/scheduler.js +3 -2
  24. package/build/src/background-jobs/status-reporter.d.ts +14 -10
  25. package/build/src/background-jobs/status-reporter.d.ts.map +1 -1
  26. package/build/src/background-jobs/status-reporter.js +11 -6
  27. package/build/src/background-jobs/store.d.ts +73 -117
  28. package/build/src/background-jobs/store.d.ts.map +1 -1
  29. package/build/src/background-jobs/store.js +62 -24
  30. package/build/src/background-jobs/types.d.ts +175 -2
  31. package/build/src/background-jobs/types.d.ts.map +1 -1
  32. package/build/src/background-jobs/types.js +44 -1
  33. package/build/src/background-jobs/worker.d.ts +21 -17
  34. package/build/src/background-jobs/worker.d.ts.map +1 -1
  35. package/build/src/background-jobs/worker.js +30 -9
  36. package/build/src/cli/base-command.d.ts +5 -5
  37. package/build/src/cli/base-command.d.ts.map +1 -1
  38. package/build/src/cli/commands/db/create.d.ts.map +1 -1
  39. package/build/src/cli/commands/db/create.js +11 -3
  40. package/build/src/cli/commands/db/schema/load.d.ts +7 -0
  41. package/build/src/cli/commands/db/schema/load.d.ts.map +1 -0
  42. package/build/src/cli/commands/db/schema/load.js +9 -0
  43. package/build/src/cli/index.d.ts +25 -13
  44. package/build/src/cli/index.d.ts.map +1 -1
  45. package/build/src/cli/index.js +62 -4
  46. package/build/src/cli/use-browser-cli.d.ts +2 -2
  47. package/build/src/cli/use-browser-cli.d.ts.map +1 -1
  48. package/build/src/cli/use-browser-cli.js +4 -4
  49. package/build/src/configuration-types.d.ts +160 -136
  50. package/build/src/configuration-types.d.ts.map +1 -1
  51. package/build/src/configuration.d.ts +32 -31
  52. package/build/src/configuration.d.ts.map +1 -1
  53. package/build/src/configuration.js +6 -5
  54. package/build/src/controller.d.ts +14 -14
  55. package/build/src/controller.d.ts.map +1 -1
  56. package/build/src/controller.js +19 -8
  57. package/build/src/database/drivers/base-columns-index.d.ts +1 -1
  58. package/build/src/database/drivers/base-columns-index.d.ts.map +1 -1
  59. package/build/src/database/drivers/base.d.ts +15 -14
  60. package/build/src/database/drivers/base.d.ts.map +1 -1
  61. package/build/src/database/drivers/base.js +6 -3
  62. package/build/src/database/drivers/mssql/column.d.ts +1 -0
  63. package/build/src/database/drivers/mssql/column.d.ts.map +1 -1
  64. package/build/src/database/drivers/mssql/connect-connection.d.ts +1 -1
  65. package/build/src/database/drivers/mssql/connect-connection.d.ts.map +1 -1
  66. package/build/src/database/drivers/mssql/index.d.ts +4 -3
  67. package/build/src/database/drivers/mssql/index.d.ts.map +1 -1
  68. package/build/src/database/drivers/mssql/index.js +8 -12
  69. package/build/src/database/drivers/mssql/table.d.ts +1 -0
  70. package/build/src/database/drivers/mssql/table.d.ts.map +1 -1
  71. package/build/src/database/drivers/mysql/column.d.ts +1 -0
  72. package/build/src/database/drivers/mysql/column.d.ts.map +1 -1
  73. package/build/src/database/drivers/mysql/index.d.ts +3 -2
  74. package/build/src/database/drivers/mysql/index.d.ts.map +1 -1
  75. package/build/src/database/drivers/mysql/index.js +3 -1
  76. package/build/src/database/drivers/mysql/query.d.ts +1 -1
  77. package/build/src/database/drivers/mysql/query.d.ts.map +1 -1
  78. package/build/src/database/drivers/mysql/query.js +7 -5
  79. package/build/src/database/drivers/mysql/table.d.ts +1 -0
  80. package/build/src/database/drivers/mysql/table.d.ts.map +1 -1
  81. package/build/src/database/drivers/pgsql/column.d.ts +1 -0
  82. package/build/src/database/drivers/pgsql/column.d.ts.map +1 -1
  83. package/build/src/database/drivers/pgsql/index.d.ts +3 -2
  84. package/build/src/database/drivers/pgsql/index.d.ts.map +1 -1
  85. package/build/src/database/drivers/pgsql/index.js +3 -1
  86. package/build/src/database/drivers/pgsql/table.d.ts +1 -0
  87. package/build/src/database/drivers/pgsql/table.d.ts.map +1 -1
  88. package/build/src/database/drivers/sqlite/base.d.ts +9 -6
  89. package/build/src/database/drivers/sqlite/base.d.ts.map +1 -1
  90. package/build/src/database/drivers/sqlite/base.js +22 -6
  91. package/build/src/database/drivers/sqlite/column.d.ts +1 -0
  92. package/build/src/database/drivers/sqlite/column.d.ts.map +1 -1
  93. package/build/src/database/drivers/sqlite/connection-sql-js.d.ts +2 -2
  94. package/build/src/database/drivers/sqlite/connection-sql-js.d.ts.map +1 -1
  95. package/build/src/database/drivers/sqlite/index.native.d.ts +1 -2
  96. package/build/src/database/drivers/sqlite/index.native.d.ts.map +1 -1
  97. package/build/src/database/drivers/sqlite/index.native.js +8 -3
  98. package/build/src/database/drivers/sqlite/index.web.d.ts +3 -2
  99. package/build/src/database/drivers/sqlite/index.web.d.ts.map +1 -1
  100. package/build/src/database/drivers/sqlite/index.web.js +5 -1
  101. package/build/src/database/drivers/sqlite/query.web.d.ts +1 -1
  102. package/build/src/database/drivers/sqlite/query.web.d.ts.map +1 -1
  103. package/build/src/database/drivers/sqlite/table.d.ts +2 -1
  104. package/build/src/database/drivers/sqlite/table.d.ts.map +1 -1
  105. package/build/src/database/drivers/sqlite/table.js +3 -2
  106. package/build/src/database/migration/index.d.ts +10 -10
  107. package/build/src/database/migration/index.d.ts.map +1 -1
  108. package/build/src/database/migrator/types.d.ts +1 -1
  109. package/build/src/database/migrator/types.d.ts.map +1 -1
  110. package/build/src/database/migrator.d.ts +1 -1
  111. package/build/src/database/migrator.d.ts.map +1 -1
  112. package/build/src/database/pool/async-tracked-multi-connection.d.ts +1 -0
  113. package/build/src/database/pool/async-tracked-multi-connection.d.ts.map +1 -1
  114. package/build/src/database/pool/async-tracked-multi-connection.js +12 -8
  115. package/build/src/database/pool/base-methods-forward.d.ts.map +1 -1
  116. package/build/src/database/pool/base-methods-forward.js +6 -4
  117. package/build/src/database/pool/base.d.ts +2 -1
  118. package/build/src/database/pool/base.d.ts.map +1 -1
  119. package/build/src/database/pool/base.js +6 -4
  120. package/build/src/database/pool/single-multi-use.d.ts +1 -1
  121. package/build/src/database/pool/single-multi-use.d.ts.map +1 -1
  122. package/build/src/database/query/alter-table-base.d.ts.map +1 -1
  123. package/build/src/database/query/alter-table-base.js +8 -4
  124. package/build/src/database/query/base.d.ts +1 -1
  125. package/build/src/database/query/base.d.ts.map +1 -1
  126. package/build/src/database/query/create-database-base.d.ts +2 -2
  127. package/build/src/database/query/create-database-base.d.ts.map +1 -1
  128. package/build/src/database/query/create-index-base.d.ts +6 -6
  129. package/build/src/database/query/create-index-base.d.ts.map +1 -1
  130. package/build/src/database/query/create-table-base.d.ts +3 -3
  131. package/build/src/database/query/create-table-base.d.ts.map +1 -1
  132. package/build/src/database/query/create-table-base.js +8 -4
  133. package/build/src/database/query/drop-table-base.d.ts +4 -4
  134. package/build/src/database/query/drop-table-base.d.ts.map +1 -1
  135. package/build/src/database/query/index.d.ts +16 -16
  136. package/build/src/database/query/index.d.ts.map +1 -1
  137. package/build/src/database/query/index.js +4 -4
  138. package/build/src/database/query/insert-base.d.ts +10 -10
  139. package/build/src/database/query/insert-base.d.ts.map +1 -1
  140. package/build/src/database/query/join-base.d.ts +1 -1
  141. package/build/src/database/query/join-base.d.ts.map +1 -1
  142. package/build/src/database/query/join-object.d.ts +1 -1
  143. package/build/src/database/query/join-object.d.ts.map +1 -1
  144. package/build/src/database/query/join-object.js +4 -1
  145. package/build/src/database/query/model-class-query.d.ts +11 -11
  146. package/build/src/database/query/model-class-query.d.ts.map +1 -1
  147. package/build/src/database/query/model-class-query.js +29 -18
  148. package/build/src/database/query/select-base.d.ts +1 -1
  149. package/build/src/database/query/select-base.d.ts.map +1 -1
  150. package/build/src/database/query/where-base.d.ts +1 -1
  151. package/build/src/database/query/where-base.d.ts.map +1 -1
  152. package/build/src/database/query/where-hash.d.ts +1 -0
  153. package/build/src/database/query/where-hash.d.ts.map +1 -1
  154. package/build/src/database/query/where-model-class-hash.d.ts +2 -1
  155. package/build/src/database/query/where-model-class-hash.d.ts.map +1 -1
  156. package/build/src/database/query/where-model-class-hash.js +15 -7
  157. package/build/src/database/query/where-not.d.ts +1 -0
  158. package/build/src/database/query/where-not.d.ts.map +1 -1
  159. package/build/src/database/query/where-plain.d.ts +1 -0
  160. package/build/src/database/query/where-plain.d.ts.map +1 -1
  161. package/build/src/database/query-parser/base-query-parser.d.ts +1 -1
  162. package/build/src/database/query-parser/base-query-parser.d.ts.map +1 -1
  163. package/build/src/database/record/attachments/download.d.ts +3 -3
  164. package/build/src/database/record/attachments/download.d.ts.map +1 -1
  165. package/build/src/database/record/attachments/handle.d.ts +2 -1
  166. package/build/src/database/record/attachments/handle.d.ts.map +1 -1
  167. package/build/src/database/record/attachments/handle.js +3 -2
  168. package/build/src/database/record/attachments/normalize-input.d.ts +4 -4
  169. package/build/src/database/record/attachments/normalize-input.d.ts.map +1 -1
  170. package/build/src/database/record/attachments/storage-drivers/filesystem.d.ts +1 -1
  171. package/build/src/database/record/attachments/storage-drivers/filesystem.d.ts.map +1 -1
  172. package/build/src/database/record/attachments/storage-drivers/native.d.ts +3 -3
  173. package/build/src/database/record/attachments/storage-drivers/native.d.ts.map +1 -1
  174. package/build/src/database/record/attachments/storage-drivers/s3.d.ts +2 -2
  175. package/build/src/database/record/attachments/storage-drivers/s3.d.ts.map +1 -1
  176. package/build/src/database/record/attachments/storage-drivers/s3.js +11 -3
  177. package/build/src/database/record/attachments/store.d.ts +3 -3
  178. package/build/src/database/record/attachments/store.d.ts.map +1 -1
  179. package/build/src/database/record/attachments/store.js +3 -2
  180. package/build/src/database/record/index.d.ts +19 -19
  181. package/build/src/database/record/index.d.ts.map +1 -1
  182. package/build/src/database/record/index.js +53 -35
  183. package/build/src/database/record/instance-relationships/base.d.ts +10 -8
  184. package/build/src/database/record/instance-relationships/base.d.ts.map +1 -1
  185. package/build/src/database/record/instance-relationships/base.js +9 -5
  186. package/build/src/database/record/instance-relationships/belongs-to.d.ts +4 -4
  187. package/build/src/database/record/instance-relationships/belongs-to.d.ts.map +1 -1
  188. package/build/src/database/record/instance-relationships/belongs-to.js +9 -2
  189. package/build/src/database/record/instance-relationships/has-many.d.ts +4 -9
  190. package/build/src/database/record/instance-relationships/has-many.d.ts.map +1 -1
  191. package/build/src/database/record/instance-relationships/has-many.js +12 -8
  192. package/build/src/database/record/instance-relationships/has-one.d.ts +7 -14
  193. package/build/src/database/record/instance-relationships/has-one.d.ts.map +1 -1
  194. package/build/src/database/record/instance-relationships/has-one.js +11 -5
  195. package/build/src/database/record/relationships/base.d.ts +18 -18
  196. package/build/src/database/record/relationships/base.d.ts.map +1 -1
  197. package/build/src/database/record/relationships/base.js +3 -3
  198. package/build/src/database/record/relationships/belongs-to.d.ts +1 -1
  199. package/build/src/database/record/relationships/belongs-to.d.ts.map +1 -1
  200. package/build/src/database/record/relationships/has-many.d.ts +1 -1
  201. package/build/src/database/record/relationships/has-many.d.ts.map +1 -1
  202. package/build/src/database/record/relationships/has-one.d.ts +1 -1
  203. package/build/src/database/record/relationships/has-one.d.ts.map +1 -1
  204. package/build/src/database/table-data/index.d.ts +1 -1
  205. package/build/src/database/table-data/index.d.ts.map +1 -1
  206. package/build/src/database/table-data/table-column.d.ts +12 -12
  207. package/build/src/database/table-data/table-column.d.ts.map +1 -1
  208. package/build/src/database/table-data/table-foreign-key.d.ts +4 -4
  209. package/build/src/database/table-data/table-foreign-key.d.ts.map +1 -1
  210. package/build/src/database/table-data/table-foreign-key.js +2 -2
  211. package/build/src/database/table-data/table-index.d.ts +3 -3
  212. package/build/src/database/table-data/table-index.d.ts.map +1 -1
  213. package/build/src/database/table-data/table-reference.d.ts +1 -1
  214. package/build/src/database/table-data/table-reference.d.ts.map +1 -1
  215. package/build/src/environment-handlers/base.d.ts +10 -5
  216. package/build/src/environment-handlers/base.d.ts.map +1 -1
  217. package/build/src/environment-handlers/base.js +10 -2
  218. package/build/src/environment-handlers/browser.d.ts +5 -26
  219. package/build/src/environment-handlers/browser.d.ts.map +1 -1
  220. package/build/src/environment-handlers/browser.js +14 -4
  221. package/build/src/environment-handlers/node/cli/commands/console.js +3 -3
  222. package/build/src/environment-handlers/node/cli/commands/db/schema/load.d.ts +24 -0
  223. package/build/src/environment-handlers/node/cli/commands/db/schema/load.d.ts.map +1 -0
  224. package/build/src/environment-handlers/node/cli/commands/db/schema/load.js +57 -0
  225. package/build/src/environment-handlers/node/cli/commands/db/seed.d.ts.map +1 -1
  226. package/build/src/environment-handlers/node/cli/commands/db/seed.js +4 -2
  227. package/build/src/environment-handlers/node/cli/commands/destroy/migration.d.ts.map +1 -1
  228. package/build/src/environment-handlers/node/cli/commands/destroy/migration.js +4 -2
  229. package/build/src/environment-handlers/node/cli/commands/generate/base-models.d.ts.map +1 -1
  230. package/build/src/environment-handlers/node/cli/commands/generate/base-models.js +9 -4
  231. package/build/src/environment-handlers/node/cli/commands/generate/frontend-models.d.ts +1 -1
  232. package/build/src/environment-handlers/node/cli/commands/generate/frontend-models.d.ts.map +1 -1
  233. package/build/src/environment-handlers/node/cli/commands/generate/frontend-models.js +9 -4
  234. package/build/src/environment-handlers/node/cli/commands/generate/migration.d.ts.map +1 -1
  235. package/build/src/environment-handlers/node/cli/commands/generate/migration.js +4 -2
  236. package/build/src/environment-handlers/node/cli/commands/generate/model.d.ts.map +1 -1
  237. package/build/src/environment-handlers/node/cli/commands/generate/model.js +4 -2
  238. package/build/src/environment-handlers/node/cli/commands/routes.d.ts.map +1 -1
  239. package/build/src/environment-handlers/node/cli/commands/routes.js +3 -1
  240. package/build/src/environment-handlers/node/cli/commands/run-script.d.ts.map +1 -1
  241. package/build/src/environment-handlers/node/cli/commands/run-script.js +5 -3
  242. package/build/src/environment-handlers/node/cli/commands/runner.d.ts.map +1 -1
  243. package/build/src/environment-handlers/node/cli/commands/runner.js +5 -3
  244. package/build/src/environment-handlers/node/cli/commands/server.d.ts +3 -3
  245. package/build/src/environment-handlers/node/cli/commands/server.d.ts.map +1 -1
  246. package/build/src/environment-handlers/node/cli/commands/server.js +2 -2
  247. package/build/src/environment-handlers/node/cli/commands/test.js +2 -2
  248. package/build/src/environment-handlers/node.d.ts +9 -1
  249. package/build/src/environment-handlers/node.d.ts.map +1 -1
  250. package/build/src/environment-handlers/node.js +10 -2
  251. package/build/src/error-logger.d.ts.map +1 -1
  252. package/build/src/error-logger.js +1 -5
  253. package/build/src/frontend-model-controller.d.ts +17 -17
  254. package/build/src/frontend-model-controller.d.ts.map +1 -1
  255. package/build/src/frontend-model-controller.js +31 -12
  256. package/build/src/frontend-model-resource/base-resource.d.ts +14 -12
  257. package/build/src/frontend-model-resource/base-resource.d.ts.map +1 -1
  258. package/build/src/frontend-model-resource/base-resource.js +16 -4
  259. package/build/src/frontend-models/base.d.ts +27 -20
  260. package/build/src/frontend-models/base.d.ts.map +1 -1
  261. package/build/src/frontend-models/base.js +31 -12
  262. package/build/src/frontend-models/query.d.ts +29 -8
  263. package/build/src/frontend-models/query.d.ts.map +1 -1
  264. package/build/src/frontend-models/query.js +18 -4
  265. package/build/src/http-client/index.d.ts +11 -11
  266. package/build/src/http-client/index.d.ts.map +1 -1
  267. package/build/src/http-client/request.d.ts +2 -2
  268. package/build/src/http-client/request.d.ts.map +1 -1
  269. package/build/src/http-client/response.d.ts +1 -1
  270. package/build/src/http-client/response.d.ts.map +1 -1
  271. package/build/src/http-client/websocket-client.d.ts +26 -12
  272. package/build/src/http-client/websocket-client.d.ts.map +1 -1
  273. package/build/src/http-client/websocket-client.js +26 -12
  274. package/build/src/http-server/client/index.d.ts +4 -4
  275. package/build/src/http-server/client/index.d.ts.map +1 -1
  276. package/build/src/http-server/client/index.js +17 -11
  277. package/build/src/http-server/client/params-to-object.d.ts.map +1 -1
  278. package/build/src/http-server/client/params-to-object.js +14 -11
  279. package/build/src/http-server/client/request-buffer/form-data-part.d.ts +15 -7
  280. package/build/src/http-server/client/request-buffer/form-data-part.d.ts.map +1 -1
  281. package/build/src/http-server/client/request-buffer/form-data-part.js +9 -1
  282. package/build/src/http-server/client/request-buffer/index.d.ts +15 -14
  283. package/build/src/http-server/client/request-buffer/index.d.ts.map +1 -1
  284. package/build/src/http-server/client/request-buffer/index.js +19 -7
  285. package/build/src/http-server/client/request-parser.d.ts +1 -1
  286. package/build/src/http-server/client/request-parser.d.ts.map +1 -1
  287. package/build/src/http-server/client/request-parser.js +2 -2
  288. package/build/src/http-server/client/request-runner.d.ts.map +1 -1
  289. package/build/src/http-server/client/request-runner.js +4 -2
  290. package/build/src/http-server/client/request.d.ts +3 -3
  291. package/build/src/http-server/client/request.d.ts.map +1 -1
  292. package/build/src/http-server/client/response.d.ts +4 -4
  293. package/build/src/http-server/client/response.d.ts.map +1 -1
  294. package/build/src/http-server/client/uploaded-file/uploaded-file.d.ts +2 -2
  295. package/build/src/http-server/client/uploaded-file/uploaded-file.d.ts.map +1 -1
  296. package/build/src/http-server/client/websocket-request.d.ts +22 -16
  297. package/build/src/http-server/client/websocket-request.d.ts.map +1 -1
  298. package/build/src/http-server/client/websocket-request.js +13 -5
  299. package/build/src/http-server/client/websocket-session.d.ts +52 -17
  300. package/build/src/http-server/client/websocket-session.d.ts.map +1 -1
  301. package/build/src/http-server/client/websocket-session.js +59 -10
  302. package/build/src/http-server/cookie.d.ts +17 -17
  303. package/build/src/http-server/cookie.d.ts.map +1 -1
  304. package/build/src/http-server/index.d.ts +4 -4
  305. package/build/src/http-server/index.d.ts.map +1 -1
  306. package/build/src/http-server/index.js +4 -4
  307. package/build/src/http-server/server-client.d.ts +3 -3
  308. package/build/src/http-server/server-client.d.ts.map +1 -1
  309. package/build/src/http-server/server-client.js +4 -4
  310. package/build/src/http-server/websocket-channel.d.ts +3 -3
  311. package/build/src/http-server/websocket-channel.d.ts.map +1 -1
  312. package/build/src/http-server/websocket-events-host.d.ts.map +1 -1
  313. package/build/src/http-server/websocket-events-host.js +6 -3
  314. package/build/src/http-server/websocket-events.d.ts +2 -2
  315. package/build/src/http-server/websocket-events.d.ts.map +1 -1
  316. package/build/src/http-server/websocket-events.js +3 -1
  317. package/build/src/http-server/worker-handler/index.d.ts +7 -7
  318. package/build/src/http-server/worker-handler/index.d.ts.map +1 -1
  319. package/build/src/http-server/worker-handler/index.js +16 -7
  320. package/build/src/http-server/worker-handler/worker-thread.d.ts +9 -9
  321. package/build/src/http-server/worker-handler/worker-thread.d.ts.map +1 -1
  322. package/build/src/http-server/worker-handler/worker-thread.js +23 -13
  323. package/build/src/logger/console-logger.d.ts +2 -2
  324. package/build/src/logger/console-logger.d.ts.map +1 -1
  325. package/build/src/logger/file-logger.d.ts +2 -2
  326. package/build/src/logger/file-logger.d.ts.map +1 -1
  327. package/build/src/logger/outputs/array-output.d.ts +1 -1
  328. package/build/src/logger/outputs/array-output.d.ts.map +1 -1
  329. package/build/src/logger/outputs/file-output.d.ts +8 -5
  330. package/build/src/logger/outputs/file-output.d.ts.map +1 -1
  331. package/build/src/logger/outputs/file-output.js +4 -1
  332. package/build/src/logger.d.ts +7 -7
  333. package/build/src/logger.d.ts.map +1 -1
  334. package/build/src/mailer/backends/smtp.d.ts +3 -3
  335. package/build/src/mailer/backends/smtp.d.ts.map +1 -1
  336. package/build/src/mailer/backends/smtp.js +3 -3
  337. package/build/src/mailer/base.d.ts +7 -7
  338. package/build/src/mailer/base.d.ts.map +1 -1
  339. package/build/src/mailer/base.js +3 -3
  340. package/build/src/plugins/sqljs-wasm-route.d.ts +2 -2
  341. package/build/src/plugins/sqljs-wasm-route.d.ts.map +1 -1
  342. package/build/src/routes/base-route.d.ts +2 -2
  343. package/build/src/routes/base-route.d.ts.map +1 -1
  344. package/build/src/routes/base-route.js +2 -2
  345. package/build/src/routes/get-route.d.ts +5 -0
  346. package/build/src/routes/get-route.d.ts.map +1 -1
  347. package/build/src/routes/namespace-route.d.ts +1 -1
  348. package/build/src/routes/plugin-routes.d.ts +2 -2
  349. package/build/src/routes/plugin-routes.d.ts.map +1 -1
  350. package/build/src/routes/post-route.d.ts +5 -0
  351. package/build/src/routes/post-route.d.ts.map +1 -1
  352. package/build/src/routes/resolver.d.ts +4 -2
  353. package/build/src/routes/resolver.d.ts.map +1 -1
  354. package/build/src/routes/resolver.js +7 -3
  355. package/build/src/routes/resource-route.d.ts +5 -0
  356. package/build/src/routes/resource-route.d.ts.map +1 -1
  357. package/build/src/routes/root-route.d.ts +5 -0
  358. package/build/src/routes/root-route.d.ts.map +1 -1
  359. package/build/src/testing/expect-to-change.d.ts +3 -3
  360. package/build/src/testing/expect-to-change.d.ts.map +1 -1
  361. package/build/src/testing/expect-utils.d.ts.map +1 -1
  362. package/build/src/testing/expect-utils.js +7 -5
  363. package/build/src/testing/expect.d.ts +1 -1
  364. package/build/src/testing/expect.d.ts.map +1 -1
  365. package/build/src/testing/request-client.d.ts +1 -1
  366. package/build/src/testing/request-client.d.ts.map +1 -1
  367. package/build/src/testing/test-files-finder.d.ts +1 -1
  368. package/build/src/testing/test-files-finder.d.ts.map +1 -1
  369. package/build/src/testing/test-runner.d.ts +57 -37
  370. package/build/src/testing/test-runner.d.ts.map +1 -1
  371. package/build/src/testing/test-runner.js +14 -3
  372. package/build/src/testing/test-suite-splitter.d.ts +1 -1
  373. package/build/src/testing/test-suite-splitter.d.ts.map +1 -1
  374. package/build/src/testing/test.d.ts +14 -6
  375. package/build/src/testing/test.d.ts.map +1 -1
  376. package/build/src/testing/test.js +14 -5
  377. package/build/src/utils/backtrace-cleaner.d.ts +2 -2
  378. package/build/src/utils/backtrace-cleaner.d.ts.map +1 -1
  379. package/build/src/utils/split-sql-statements.d.ts +7 -0
  380. package/build/src/utils/split-sql-statements.d.ts.map +1 -0
  381. package/build/src/utils/split-sql-statements.js +77 -0
  382. package/build/src/utils/with-tracked-stack-async-hooks.d.ts.map +1 -1
  383. package/build/src/utils/with-tracked-stack-async-hooks.js +5 -3
  384. package/build/src/utils/with-tracked-stack.d.ts.map +1 -1
  385. package/build/src/utils/with-tracked-stack.js +5 -3
  386. package/build/src/velocious-error.d.ts +4 -4
  387. package/build/src/velocious-error.d.ts.map +1 -1
  388. package/build/tsconfig.tsbuildinfo +1 -1
  389. package/package.json +10 -2
@@ -1,22 +1,26 @@
1
1
  /**
2
- * @template {typeof import("../index.js").default} MC
3
- * @template {typeof import("../index.js").default} TMC
2
+ * @template {typeof import("../index.js").default} [MC=typeof import("../index.js").default]
3
+ * @template {typeof import("../index.js").default} [TMC=typeof import("../index.js").default]
4
4
  * @typedef {object} InstanceRelationshipsBaseArgs
5
5
  * @property {InstanceType<MC>} model - Parent model instance.
6
6
  * @property {import("../relationships/base.js").default} relationship - Relationship metadata definition.
7
7
  */
8
8
  /**
9
9
  * A generic query over some model type.
10
- * @template {typeof import("../index.js").default} MC
11
- * @template {typeof import("../index.js").default} TMC
10
+ * @template {typeof import("../index.js").default} [MC=typeof import("../index.js").default]
11
+ * @template {typeof import("../index.js").default} [TMC=typeof import("../index.js").default]
12
12
  */
13
- export default class VelociousDatabaseRecordBaseInstanceRelationship<MC extends typeof import("../index.js").default, TMC extends typeof import("../index.js").default> {
13
+ export default class VelociousDatabaseRecordBaseInstanceRelationship<MC extends typeof import("../index.js").default = typeof import("../index.js").default, TMC extends typeof import("../index.js").default = typeof import("../index.js").default> {
14
14
  /**
15
15
  * @param {InstanceRelationshipsBaseArgs<MC, TMC>} args - Options object.
16
16
  */
17
17
  constructor({ model, relationship }: InstanceRelationshipsBaseArgs<MC, TMC>);
18
18
  /** @type {boolean | undefined} */
19
19
  _autoSave: boolean | undefined;
20
+ /** @type {boolean | undefined} */
21
+ _preloaded: boolean | undefined;
22
+ /** @type {InstanceType<TMC> | Array<InstanceType<TMC>> | undefined} */
23
+ _loaded: InstanceType<TMC> | Array<InstanceType<TMC>> | undefined;
20
24
  _dirty: boolean;
21
25
  model: InstanceType<MC>;
22
26
  relationship: import("../relationships/base.js").default;
@@ -57,14 +61,12 @@ export default class VelociousDatabaseRecordBaseInstanceRelationship<MC extends
57
61
  loaded(): InstanceType<TMC> | Array<InstanceType<TMC>> | undefined;
58
62
  /** @param {InstanceType<TMC> | Array<InstanceType<TMC>> | undefined} model - Related model(s) to mark as loaded. */
59
63
  setLoaded(model: InstanceType<TMC> | Array<InstanceType<TMC>> | undefined): void;
60
- _loaded: InstanceType<TMC> | InstanceType<TMC>[];
61
64
  /** @returns {InstanceType<TMC> | InstanceType<TMC>[] | undefined} - The loaded or undefined. */
62
65
  getLoadedOrUndefined(): InstanceType<TMC> | InstanceType<TMC>[] | undefined;
63
66
  /** @returns {boolean} The loaded model or models (depending on relationship type) */
64
67
  getPreloaded(): boolean;
65
68
  /** @param {boolean} isPreloaded - Whether the relationship is preloaded. */
66
69
  setPreloaded(isPreloaded: boolean): void;
67
- _preloaded: boolean;
68
70
  /** @returns {string} The foreign key for this relationship */
69
71
  getForeignKey(): string;
70
72
  /** @returns {InstanceType<MC>} - The model. */
@@ -84,7 +86,7 @@ export default class VelociousDatabaseRecordBaseInstanceRelationship<MC extends
84
86
  /** @returns {string} The type of relationship (e.g. "has_many", "belongs_to", etc.) */
85
87
  getType(): string;
86
88
  }
87
- export type InstanceRelationshipsBaseArgs<MC extends typeof import("../index.js").default, TMC extends typeof import("../index.js").default> = {
89
+ export type InstanceRelationshipsBaseArgs<MC extends typeof import("../index.js").default = typeof import("../index.js").default, TMC extends typeof import("../index.js").default = typeof import("../index.js").default> = {
88
90
  /**
89
91
  * - Parent model instance.
90
92
  */
@@ -1 +1 @@
1
- {"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../../../../src/database/record/instance-relationships/base.js"],"names":[],"mappings":"AAEA;;;;;;GAMG;AAEH;;;;GAIG;AACH,qEAHoD,EAAE,SAAzC,cAAe,aAAa,EAAE,OAAQ,EACC,GAAG,SAA1C,cAAe,aAAa,EAAE,OAAQ;IAMjD;;OAEG;IACH,qCAFW,6BAA6B,CAAC,EAAE,EAAE,GAAG,CAAC,EAMhD;IAVD,kCAAkC;IAClC,WADW,OAAO,GAAG,SAAS,CACT;IAMnB,gBAAmB;IACnB,wBAAkB;IAClB,yDAAgC;IAGlC;;;;OAIG;IACH,oBAHW,YAAY,CAAC,GAAG,CAAC,EAAE,GAAG,YAAY,CAAC,GAAG,CAAC,GACrC,IAAI,CAIhB;IAED;;;;OAIG;IACH,kBAHW,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GACjB,YAAY,CAAC,GAAG,CAAC,CAI7B;IAED,kHAAkH;IAClH,eADc,OAAO,GAAG,SAAS,CACM;IAEvC;;;OAGG;IACH,8BAHW,OAAO,GACL,IAAI,CAEkD;IAEnE;;;OAGG;IACH,mBAHW,OAAO,GACL,IAAI,CAE4B;IAE7C,+EAA+E;IAC/E,YADc,OAAO,CACY;IAEjC;;;OAGG;IACH,QAFa,OAAO,CAAC,IAAI,CAAC,CAIzB;IAED,sEAAsE;IACtE,YADe,OAAO,CACqB;IAE3C,sIAAsI;IACtI,UADc,YAAY,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,GAAG,SAAS,CAOrE;IAED,oHAAoH;IACpH,iBADY,YAAY,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,GAAG,SAAS,QAC3B;IAAtB,iDAAoB;IAEvC,iGAAiG;IACjG,wBADc,YAAY,CAAC,GAAG,CAAC,GAAG,YAAY,CAAC,GAAG,CAAC,EAAE,GAAG,SAAS,CACnB;IAE9C,qFAAqF;IACrF,gBADc,OAAO,CAC6B;IAElD,4EAA4E;IAC5E,0BADY,OAAO,QACwC;IAA/B,oBAA6B;IAEzD,8DAA8D;IAC9D,iBADc,MAAM,CAC6C;IAEjE,gDAAgD;IAChD,YADc,YAAY,CAAC,EAAE,CAAC,CACE;IAEhC,sEAAsE;IACtE,iBADc,MAAM,CAC6C;IAEjE,gIAAgI;IAChI,mBADc,OAAO,0BAA0B,EAAE,OAAO,CACV;IAE9C;;;;OAIG;IACH,WAJa,CAAC,SACH,CAAC,GACC,CAAC,CAIb;IAED,iFAAiF;IACjF,uBADc,GAAG,GAAG,SAAS,CAK5B;IAED,uFAAuF;IACvF,WADc,MAAM,CACiC;CACtD;0CA3HmD,EAAE,SAAzC,cAAe,aAAa,EAAE,OAAQ,EACC,GAAG,SAA1C,cAAe,aAAa,EAAE,OAAQ;;;;WAErC,YAAY,CAAC,EAAE,CAAC;;;;kBAChB,OAAO,0BAA0B,EAAE,OAAO"}
1
+ {"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../../../../src/database/record/instance-relationships/base.js"],"names":[],"mappings":"AAEA;;;;;;GAMG;AAEH;;;;GAIG;AACH,qEAHqD,EAAE,SAA1C,cAAe,aAAa,EAAE,OAAQ,yCACE,GAAG,SAA3C,cAAe,aAAa,EAAE,OAAQ;IAUjD;;OAEG;IACH,qCAFW,6BAA6B,CAAC,EAAE,EAAE,GAAG,CAAC,EAMhD;IAdD,kCAAkC;IAClC,WADW,OAAO,GAAG,SAAS,CACT;IACrB,kCAAkC;IAClC,YADW,OAAO,GAAG,SAAS,CACR;IACtB,uEAAuE;IACvE,SADW,YAAY,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,GAAG,SAAS,CAChD;IAMjB,gBAAmB;IACnB,wBAAkB;IAClB,yDAAgC;IAGlC;;;;OAIG;IACH,oBAHW,YAAY,CAAC,GAAG,CAAC,EAAE,GAAG,YAAY,CAAC,GAAG,CAAC,GACrC,IAAI,CAIhB;IAED;;;;OAIG;IACH,kBAHW,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GACjB,YAAY,CAAC,GAAG,CAAC,CAI7B;IAED,kHAAkH;IAClH,eADc,OAAO,GAAG,SAAS,CACM;IAEvC;;;OAGG;IACH,8BAHW,OAAO,GACL,IAAI,CAEkD;IAEnE;;;OAGG;IACH,mBAHW,OAAO,GACL,IAAI,CAE4B;IAE7C,+EAA+E;IAC/E,YADc,OAAO,CACY;IAEjC;;;OAGG;IACH,QAFa,OAAO,CAAC,IAAI,CAAC,CAIzB;IAED,sEAAsE;IACtE,YADe,OAAO,CACqB;IAE3C,sIAAsI;IACtI,UADc,YAAY,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,GAAG,SAAS,CAOrE;IAED,oHAAoH;IACpH,iBADY,YAAY,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,GAAG,SAAS,QAC3B;IAEzC,iGAAiG;IACjG,wBADc,YAAY,CAAC,GAAG,CAAC,GAAG,YAAY,CAAC,GAAG,CAAC,EAAE,GAAG,SAAS,CACnB;IAE9C,qFAAqF;IACrF,gBADc,OAAO,CAC6B;IAElD,4EAA4E;IAC5E,0BADY,OAAO,QACwC;IAE3D,8DAA8D;IAC9D,iBADc,MAAM,CAC6C;IAEjE,gDAAgD;IAChD,YADc,YAAY,CAAC,EAAE,CAAC,CACE;IAEhC,sEAAsE;IACtE,iBADc,MAAM,CAC6C;IAEjE,gIAAgI;IAChI,mBADc,OAAO,0BAA0B,EAAE,OAAO,CACV;IAE9C;;;;OAIG;IACH,WAJa,CAAC,SACH,CAAC,GACC,CAAC,CAIb;IAED,iFAAiF;IACjF,uBADc,GAAG,GAAG,SAAS,CAK5B;IAED,uFAAuF;IACvF,WADc,MAAM,CACiC;CACtD;0CA/HoD,EAAE,SAA1C,cAAe,aAAa,EAAE,OAAQ,yCACE,GAAG,SAA3C,cAAe,aAAa,EAAE,OAAQ;;;;WAErC,YAAY,CAAC,EAAE,CAAC;;;;kBAChB,OAAO,0BAA0B,EAAE,OAAO"}
@@ -1,19 +1,23 @@
1
1
  // @ts-check
2
2
  /**
3
- * @template {typeof import("../index.js").default} MC
4
- * @template {typeof import("../index.js").default} TMC
3
+ * @template {typeof import("../index.js").default} [MC=typeof import("../index.js").default]
4
+ * @template {typeof import("../index.js").default} [TMC=typeof import("../index.js").default]
5
5
  * @typedef {object} InstanceRelationshipsBaseArgs
6
6
  * @property {InstanceType<MC>} model - Parent model instance.
7
7
  * @property {import("../relationships/base.js").default} relationship - Relationship metadata definition.
8
8
  */
9
9
  /**
10
10
  * A generic query over some model type.
11
- * @template {typeof import("../index.js").default} MC
12
- * @template {typeof import("../index.js").default} TMC
11
+ * @template {typeof import("../index.js").default} [MC=typeof import("../index.js").default]
12
+ * @template {typeof import("../index.js").default} [TMC=typeof import("../index.js").default]
13
13
  */
14
14
  export default class VelociousDatabaseRecordBaseInstanceRelationship {
15
15
  /** @type {boolean | undefined} */
16
16
  _autoSave = undefined;
17
+ /** @type {boolean | undefined} */
18
+ _preloaded = undefined;
19
+ /** @type {InstanceType<TMC> | Array<InstanceType<TMC>> | undefined} */
20
+ _loaded = undefined;
17
21
  /**
18
22
  * @param {InstanceRelationshipsBaseArgs<MC, TMC>} args - Options object.
19
23
  */
@@ -100,4 +104,4 @@ export default class VelociousDatabaseRecordBaseInstanceRelationship {
100
104
  /** @returns {string} The type of relationship (e.g. "has_many", "belongs_to", etc.) */
101
105
  getType() { return this.getRelationship().getType(); }
102
106
  }
103
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9kYXRhYmFzZS9yZWNvcmQvaW5zdGFuY2UtcmVsYXRpb25zaGlwcy9iYXNlLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWjs7Ozs7O0dBTUc7QUFFSDs7OztHQUlHO0FBQ0gsTUFBTSxDQUFDLE9BQU8sT0FBTywrQ0FBK0M7SUFDbEUsa0NBQWtDO0lBQ2xDLFNBQVMsR0FBRyxTQUFTLENBQUE7SUFFckI7O09BRUc7SUFDSCxZQUFZLEVBQUMsS0FBSyxFQUFFLFlBQVksRUFBQztRQUMvQixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQTtRQUNuQixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQTtRQUNsQixJQUFJLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQTtJQUNsQyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILFdBQVcsQ0FBQyxNQUFNO1FBQ2hCLE1BQU0sSUFBSSxLQUFLLENBQUMsNkJBQTZCLENBQUMsQ0FBQTtJQUNoRCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILEtBQUssQ0FBQyxVQUFVO1FBQ2QsTUFBTSxJQUFJLEtBQUssQ0FBQyx5QkFBeUIsQ0FBQyxDQUFBO0lBQzVDLENBQUM7SUFFRCxrSEFBa0g7SUFDbEgsV0FBVyxLQUFLLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQSxDQUFDLENBQUM7SUFFdkM7OztPQUdHO0lBQ0gsV0FBVyxDQUFDLGdCQUFnQixJQUFJLElBQUksQ0FBQyxTQUFTLEdBQUcsZ0JBQWdCLENBQUEsQ0FBQyxDQUFDO0lBRW5FOzs7T0FHRztJQUNILFFBQVEsQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxRQUFRLENBQUEsQ0FBQyxDQUFDO0lBRTdDLCtFQUErRTtJQUMvRSxRQUFRLEtBQUssT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFBLENBQUMsQ0FBQztJQUVqQzs7O09BR0c7SUFDSCxJQUFJO1FBQ0YsTUFBTSxJQUFJLEtBQUssQ0FBQyx3QkFBd0IsQ0FBQyxDQUFBO0lBQzNDLENBQUM7SUFFRCxzRUFBc0U7SUFDdEUsUUFBUSxLQUFLLE9BQU8sT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQSxDQUFDLENBQUM7SUFFM0Msc0lBQXNJO0lBQ3RJLE1BQU07UUFDSixJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUM7WUFDakQsTUFBTSxJQUFJLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLG1CQUFtQixFQUFFLHdCQUF3QixDQUFDLENBQUE7UUFDcEgsQ0FBQztRQUVELE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQTtJQUNyQixDQUFDO0lBRUQsb0hBQW9IO0lBQ3BILFNBQVMsQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUEsQ0FBQyxDQUFDO0lBRXpDLGlHQUFpRztJQUNqRyxvQkFBb0IsS0FBSyxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUEsQ0FBQyxDQUFDO0lBRTlDLHFGQUFxRjtJQUNyRixZQUFZLEtBQUssT0FBTyxJQUFJLENBQUMsVUFBVSxJQUFJLEtBQUssQ0FBQSxDQUFDLENBQUM7SUFFbEQsNEVBQTRFO0lBQzVFLFlBQVksQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLFVBQVUsR0FBRyxXQUFXLENBQUEsQ0FBQyxDQUFDO0lBRTNELDhEQUE4RDtJQUM5RCxhQUFhLEtBQUssT0FBTyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUMsYUFBYSxFQUFFLENBQUEsQ0FBQyxDQUFDO0lBRWpFLGdEQUFnRDtJQUNoRCxRQUFRLEtBQUssT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFBLENBQUMsQ0FBQztJQUVoQyxzRUFBc0U7SUFDdEUsYUFBYSxLQUFLLE9BQU8sSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDLGFBQWEsRUFBRSxDQUFBLENBQUMsQ0FBQztJQUVqRSxnSUFBZ0k7SUFDaEksZUFBZSxLQUFLLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQSxDQUFDLENBQUM7SUFFOUM7Ozs7T0FJRztJQUNILFVBQVUsQ0FBQyxLQUFLO1FBQ2QsT0FBTyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBQ2pELENBQUM7SUFFRCxpRkFBaUY7SUFDakYsbUJBQW1CO1FBQ2pCLE1BQU0sZ0JBQWdCLEdBQUcsa0JBQWtCLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxDQUFBO1FBRTFGLE9BQU8sZ0JBQWdCLENBQUE7SUFDekIsQ0FBQztJQUVELHVGQUF1RjtJQUN2RixPQUFPLEtBQUssT0FBTyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUEsQ0FBQyxDQUFDO0NBQ3REIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbi8qKlxuICogQHRlbXBsYXRlIHt0eXBlb2YgaW1wb3J0KFwiLi4vaW5kZXguanNcIikuZGVmYXVsdH0gTUNcbiAqIEB0ZW1wbGF0ZSB7dHlwZW9mIGltcG9ydChcIi4uL2luZGV4LmpzXCIpLmRlZmF1bHR9IFRNQ1xuICogQHR5cGVkZWYge29iamVjdH0gSW5zdGFuY2VSZWxhdGlvbnNoaXBzQmFzZUFyZ3NcbiAqIEBwcm9wZXJ0eSB7SW5zdGFuY2VUeXBlPE1DPn0gbW9kZWwgLSBQYXJlbnQgbW9kZWwgaW5zdGFuY2UuXG4gKiBAcHJvcGVydHkge2ltcG9ydChcIi4uL3JlbGF0aW9uc2hpcHMvYmFzZS5qc1wiKS5kZWZhdWx0fSByZWxhdGlvbnNoaXAgLSBSZWxhdGlvbnNoaXAgbWV0YWRhdGEgZGVmaW5pdGlvbi5cbiAqL1xuXG4vKipcbiAqIEEgZ2VuZXJpYyBxdWVyeSBvdmVyIHNvbWUgbW9kZWwgdHlwZS5cbiAqIEB0ZW1wbGF0ZSB7dHlwZW9mIGltcG9ydChcIi4uL2luZGV4LmpzXCIpLmRlZmF1bHR9IE1DXG4gKiBAdGVtcGxhdGUge3R5cGVvZiBpbXBvcnQoXCIuLi9pbmRleC5qc1wiKS5kZWZhdWx0fSBUTUNcbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVmVsb2Npb3VzRGF0YWJhc2VSZWNvcmRCYXNlSW5zdGFuY2VSZWxhdGlvbnNoaXAge1xuICAvKiogQHR5cGUge2Jvb2xlYW4gfCB1bmRlZmluZWR9ICovXG4gIF9hdXRvU2F2ZSA9IHVuZGVmaW5lZFxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0luc3RhbmNlUmVsYXRpb25zaGlwc0Jhc2VBcmdzPE1DLCBUTUM+fSBhcmdzIC0gT3B0aW9ucyBvYmplY3QuXG4gICAqL1xuICBjb25zdHJ1Y3Rvcih7bW9kZWwsIHJlbGF0aW9uc2hpcH0pIHtcbiAgICB0aGlzLl9kaXJ0eSA9IGZhbHNlXG4gICAgdGhpcy5tb2RlbCA9IG1vZGVsXG4gICAgdGhpcy5yZWxhdGlvbnNoaXAgPSByZWxhdGlvbnNoaXBcbiAgfVxuXG4gIC8qKlxuICAgKiBAYWJzdHJhY3RcbiAgICogQHBhcmFtIHtJbnN0YW5jZVR5cGU8VE1DPltdIHwgSW5zdGFuY2VUeXBlPFRNQz59IG1vZGVscyAtIE1vZGVsIGluc3RhbmNlcy5cbiAgICogQHJldHVybnMge3ZvaWR9IC0gTm8gcmV0dXJuIHZhbHVlLlxuICAgKi9cbiAgYWRkVG9Mb2FkZWQobW9kZWxzKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJhZGRUb0xvYWRlZCBub3QgaW1wbGVtZW50ZWRcIilcbiAgfVxuXG4gIC8qKlxuICAgKiBAYWJzdHJhY3RcbiAgICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBhbnk+fSBhdHRyaWJ1dGVzIC0gQXR0cmlidXRlcy5cbiAgICogQHJldHVybnMge0luc3RhbmNlVHlwZTxUTUM+fSAtIFRoZSBidWlsZC5cbiAgICovXG4gIGJ1aWxkKGF0dHJpYnV0ZXMpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICAgIHRocm93IG5ldyBFcnJvcihcIididWlsZCcgbm90IGltcGxlbWVudGVkXCIpXG4gIH1cblxuICAvKiogQHJldHVybnMge2Jvb2xlYW4gfCB1bmRlZmluZWR9IFdoZXRoZXIgdGhlIHJlbGF0aW9uc2hpcCBzaG91bGQgYmUgYXV0by1zYXZlZCBiZWZvcmUgc2F2aW5nIHRoZSBwYXJlbnQgbW9kZWwgKi9cbiAgZ2V0QXV0b1NhdmUoKSB7IHJldHVybiB0aGlzLl9hdXRvU2F2ZSB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gbmV3QXV0b1NhdmVWYWx1ZSBXaGV0aGVyIHRoZSByZWxhdGlvbnNoaXAgc2hvdWxkIGJlIGF1dG8tc2F2ZWQgYmVmb3JlIHNhdmluZyB0aGUgcGFyZW50IG1vZGVsXG4gICAqIEByZXR1cm5zIHt2b2lkfSAtIE5vIHJldHVybiB2YWx1ZS5cbiAgICovXG4gIHNldEF1dG9TYXZlKG5ld0F1dG9TYXZlVmFsdWUpIHsgdGhpcy5fYXV0b1NhdmUgPSBuZXdBdXRvU2F2ZVZhbHVlIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtib29sZWFufSBuZXdWYWx1ZSBXaGV0aGVyIHRoZSByZWxhdGlvbnNoaXAgaXMgZGlydHkgKGhhcyBiZWVuIG1vZGlmaWVkKVxuICAgKiBAcmV0dXJucyB7dm9pZH0gLSBObyByZXR1cm4gdmFsdWUuXG4gICAqL1xuICBzZXREaXJ0eShuZXdWYWx1ZSkgeyB0aGlzLl9kaXJ0eSA9IG5ld1ZhbHVlIH1cblxuICAvKiogQHJldHVybnMge2Jvb2xlYW59IFdoZXRoZXIgdGhlIHJlbGF0aW9uc2hpcCBpcyBkaXJ0eSAoaGFzIGJlZW4gbW9kaWZpZWQpICovXG4gIGdldERpcnR5KCkgeyByZXR1cm4gdGhpcy5fZGlydHkgfVxuXG4gIC8qKlxuICAgKiBAYWJzdHJhY3RcbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59IC0gUmVzb2x2ZXMgd2hlbiBjb21wbGV0ZS5cbiAgICovXG4gIGxvYWQoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiJ2xvYWQnIG5vdCBpbXBsZW1lbnRlZFwiKVxuICB9XG5cbiAgLyoqICBAcmV0dXJucyB7Ym9vbGVhbn0gV2hldGhlciB0aGUgcmVsYXRpb25zaGlwIGhhcyBiZWVuIHByZWxvYWRlZCAqL1xuICBpc0xvYWRlZCgpIHsgcmV0dXJuIEJvb2xlYW4odGhpcy5fbG9hZGVkKSB9XG5cbiAgLyoqIEByZXR1cm5zIHtJbnN0YW5jZVR5cGU8VE1DPiB8IEFycmF5PEluc3RhbmNlVHlwZTxUTUM+PiB8IHVuZGVmaW5lZH0gVGhlIGxvYWRlZCBtb2RlbCBvciBtb2RlbHMgKGRlcGVuZGluZyBvbiByZWxhdGlvbnNoaXAgdHlwZSkgKi9cbiAgbG9hZGVkKCkge1xuICAgIGlmICghdGhpcy5fcHJlbG9hZGVkICYmIHRoaXMubW9kZWwuaXNQZXJzaXN0ZWQoKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGAke3RoaXMubW9kZWwuY29uc3RydWN0b3IubmFtZX0jJHt0aGlzLnJlbGF0aW9uc2hpcC5nZXRSZWxhdGlvbnNoaXBOYW1lKCl9IGhhc24ndCBiZWVuIHByZWxvYWRlZGApXG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX2xvYWRlZFxuICB9XG5cbiAgLyoqIEBwYXJhbSB7SW5zdGFuY2VUeXBlPFRNQz4gfCBBcnJheTxJbnN0YW5jZVR5cGU8VE1DPj4gfCB1bmRlZmluZWR9IG1vZGVsIC0gUmVsYXRlZCBtb2RlbChzKSB0byBtYXJrIGFzIGxvYWRlZC4gKi9cbiAgc2V0TG9hZGVkKG1vZGVsKSB7IHRoaXMuX2xvYWRlZCA9IG1vZGVsIH1cblxuICAvKiogQHJldHVybnMge0luc3RhbmNlVHlwZTxUTUM+IHwgSW5zdGFuY2VUeXBlPFRNQz5bXSB8IHVuZGVmaW5lZH0gLSBUaGUgbG9hZGVkIG9yIHVuZGVmaW5lZC4gICovXG4gIGdldExvYWRlZE9yVW5kZWZpbmVkKCkgeyByZXR1cm4gdGhpcy5fbG9hZGVkIH1cblxuICAvKiogQHJldHVybnMge2Jvb2xlYW59IFRoZSBsb2FkZWQgbW9kZWwgb3IgbW9kZWxzIChkZXBlbmRpbmcgb24gcmVsYXRpb25zaGlwIHR5cGUpICovXG4gIGdldFByZWxvYWRlZCgpIHsgcmV0dXJuIHRoaXMuX3ByZWxvYWRlZCB8fCBmYWxzZSB9XG5cbiAgLyoqIEBwYXJhbSB7Ym9vbGVhbn0gaXNQcmVsb2FkZWQgLSBXaGV0aGVyIHRoZSByZWxhdGlvbnNoaXAgaXMgcHJlbG9hZGVkLiAqL1xuICBzZXRQcmVsb2FkZWQoaXNQcmVsb2FkZWQpIHsgdGhpcy5fcHJlbG9hZGVkID0gaXNQcmVsb2FkZWQgfVxuXG4gIC8qKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgZm9yZWlnbiBrZXkgZm9yIHRoaXMgcmVsYXRpb25zaGlwICovXG4gIGdldEZvcmVpZ25LZXkoKSB7IHJldHVybiB0aGlzLmdldFJlbGF0aW9uc2hpcCgpLmdldEZvcmVpZ25LZXkoKSB9XG5cbiAgLyoqIEByZXR1cm5zIHtJbnN0YW5jZVR5cGU8TUM+fSAtIFRoZSBtb2RlbC4gICovXG4gIGdldE1vZGVsKCkgeyByZXR1cm4gdGhpcy5tb2RlbCB9XG5cbiAgLyoqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBwcmltYXJ5IGtleSBmb3IgdGhpcyByZWxhdGlvbnNoaXAncyBtb2RlbCAqL1xuICBnZXRQcmltYXJ5S2V5KCkgeyByZXR1cm4gdGhpcy5nZXRSZWxhdGlvbnNoaXAoKS5nZXRQcmltYXJ5S2V5KCkgfVxuXG4gIC8qKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vcmVsYXRpb25zaGlwcy9iYXNlLmpzXCIpLmRlZmF1bHR9IFRoZSByZWxhdGlvbnNoaXAgb2JqZWN0IHRoYXQgdGhpcyBpbnN0YW5jZSByZWxhdGlvbnNoaXAgaXMgYmFzZWQgb24gKi9cbiAgZ2V0UmVsYXRpb25zaGlwKCkgeyByZXR1cm4gdGhpcy5yZWxhdGlvbnNoaXAgfVxuXG4gIC8qKlxuICAgKiBAdGVtcGxhdGUgVFxuICAgKiBAcGFyYW0ge1R9IHF1ZXJ5IC0gUXVlcnkgaW5zdGFuY2UuXG4gICAqIEByZXR1cm5zIHtUfSAtIFNjb3BlZCBxdWVyeS5cbiAgICovXG4gIGFwcGx5U2NvcGUocXVlcnkpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRSZWxhdGlvbnNoaXAoKS5hcHBseVNjb3BlKHF1ZXJ5KVxuICB9XG5cbiAgLyoqIEByZXR1cm5zIHtUTUMgfCB1bmRlZmluZWR9IFRoZSBtb2RlbCBjbGFzcyB0aGF0IHRoaXMgaW5zdGFuY2UgcmVsYXRpb25zaGlwICovXG4gIGdldFRhcmdldE1vZGVsQ2xhc3MoKSB7XG4gICAgY29uc3QgVGFyZ2V0TW9kZWxDbGFzcyA9IC8qKiBAdHlwZSB7VE1DfSAqLyAodGhpcy5nZXRSZWxhdGlvbnNoaXAoKS5nZXRUYXJnZXRNb2RlbENsYXNzKCkpXG5cbiAgICByZXR1cm4gVGFyZ2V0TW9kZWxDbGFzc1xuICB9XG5cbiAgLyoqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSB0eXBlIG9mIHJlbGF0aW9uc2hpcCAoZS5nLiBcImhhc19tYW55XCIsIFwiYmVsb25nc190b1wiLCBldGMuKSAqL1xuICBnZXRUeXBlKCkgeyByZXR1cm4gdGhpcy5nZXRSZWxhdGlvbnNoaXAoKS5nZXRUeXBlKCkgfVxufVxuIl19
107
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9kYXRhYmFzZS9yZWNvcmQvaW5zdGFuY2UtcmVsYXRpb25zaGlwcy9iYXNlLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWjs7Ozs7O0dBTUc7QUFFSDs7OztHQUlHO0FBQ0gsTUFBTSxDQUFDLE9BQU8sT0FBTywrQ0FBK0M7SUFDbEUsa0NBQWtDO0lBQ2xDLFNBQVMsR0FBRyxTQUFTLENBQUE7SUFDckIsa0NBQWtDO0lBQ2xDLFVBQVUsR0FBRyxTQUFTLENBQUE7SUFDdEIsdUVBQXVFO0lBQ3ZFLE9BQU8sR0FBRyxTQUFTLENBQUE7SUFFbkI7O09BRUc7SUFDSCxZQUFZLEVBQUMsS0FBSyxFQUFFLFlBQVksRUFBQztRQUMvQixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQTtRQUNuQixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQTtRQUNsQixJQUFJLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQTtJQUNsQyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILFdBQVcsQ0FBQyxNQUFNO1FBQ2hCLE1BQU0sSUFBSSxLQUFLLENBQUMsNkJBQTZCLENBQUMsQ0FBQTtJQUNoRCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILEtBQUssQ0FBQyxVQUFVO1FBQ2QsTUFBTSxJQUFJLEtBQUssQ0FBQyx5QkFBeUIsQ0FBQyxDQUFBO0lBQzVDLENBQUM7SUFFRCxrSEFBa0g7SUFDbEgsV0FBVyxLQUFLLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQSxDQUFDLENBQUM7SUFFdkM7OztPQUdHO0lBQ0gsV0FBVyxDQUFDLGdCQUFnQixJQUFJLElBQUksQ0FBQyxTQUFTLEdBQUcsZ0JBQWdCLENBQUEsQ0FBQyxDQUFDO0lBRW5FOzs7T0FHRztJQUNILFFBQVEsQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxRQUFRLENBQUEsQ0FBQyxDQUFDO0lBRTdDLCtFQUErRTtJQUMvRSxRQUFRLEtBQUssT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFBLENBQUMsQ0FBQztJQUVqQzs7O09BR0c7SUFDSCxJQUFJO1FBQ0YsTUFBTSxJQUFJLEtBQUssQ0FBQyx3QkFBd0IsQ0FBQyxDQUFBO0lBQzNDLENBQUM7SUFFRCxzRUFBc0U7SUFDdEUsUUFBUSxLQUFLLE9BQU8sT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQSxDQUFDLENBQUM7SUFFM0Msc0lBQXNJO0lBQ3RJLE1BQU07UUFDSixJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUM7WUFDakQsTUFBTSxJQUFJLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLG1CQUFtQixFQUFFLHdCQUF3QixDQUFDLENBQUE7UUFDcEgsQ0FBQztRQUVELE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQTtJQUNyQixDQUFDO0lBRUQsb0hBQW9IO0lBQ3BILFNBQVMsQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUEsQ0FBQyxDQUFDO0lBRXpDLGlHQUFpRztJQUNqRyxvQkFBb0IsS0FBSyxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUEsQ0FBQyxDQUFDO0lBRTlDLHFGQUFxRjtJQUNyRixZQUFZLEtBQUssT0FBTyxJQUFJLENBQUMsVUFBVSxJQUFJLEtBQUssQ0FBQSxDQUFDLENBQUM7SUFFbEQsNEVBQTRFO0lBQzVFLFlBQVksQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLFVBQVUsR0FBRyxXQUFXLENBQUEsQ0FBQyxDQUFDO0lBRTNELDhEQUE4RDtJQUM5RCxhQUFhLEtBQUssT0FBTyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUMsYUFBYSxFQUFFLENBQUEsQ0FBQyxDQUFDO0lBRWpFLGdEQUFnRDtJQUNoRCxRQUFRLEtBQUssT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFBLENBQUMsQ0FBQztJQUVoQyxzRUFBc0U7SUFDdEUsYUFBYSxLQUFLLE9BQU8sSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDLGFBQWEsRUFBRSxDQUFBLENBQUMsQ0FBQztJQUVqRSxnSUFBZ0k7SUFDaEksZUFBZSxLQUFLLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQSxDQUFDLENBQUM7SUFFOUM7Ozs7T0FJRztJQUNILFVBQVUsQ0FBQyxLQUFLO1FBQ2QsT0FBTyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBQ2pELENBQUM7SUFFRCxpRkFBaUY7SUFDakYsbUJBQW1CO1FBQ2pCLE1BQU0sZ0JBQWdCLEdBQUcsa0JBQWtCLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxDQUFBO1FBRTFGLE9BQU8sZ0JBQWdCLENBQUE7SUFDekIsQ0FBQztJQUVELHVGQUF1RjtJQUN2RixPQUFPLEtBQUssT0FBTyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUEsQ0FBQyxDQUFDO0NBQ3REIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbi8qKlxuICogQHRlbXBsYXRlIHt0eXBlb2YgaW1wb3J0KFwiLi4vaW5kZXguanNcIikuZGVmYXVsdH0gW01DPXR5cGVvZiBpbXBvcnQoXCIuLi9pbmRleC5qc1wiKS5kZWZhdWx0XVxuICogQHRlbXBsYXRlIHt0eXBlb2YgaW1wb3J0KFwiLi4vaW5kZXguanNcIikuZGVmYXVsdH0gW1RNQz10eXBlb2YgaW1wb3J0KFwiLi4vaW5kZXguanNcIikuZGVmYXVsdF1cbiAqIEB0eXBlZGVmIHtvYmplY3R9IEluc3RhbmNlUmVsYXRpb25zaGlwc0Jhc2VBcmdzXG4gKiBAcHJvcGVydHkge0luc3RhbmNlVHlwZTxNQz59IG1vZGVsIC0gUGFyZW50IG1vZGVsIGluc3RhbmNlLlxuICogQHByb3BlcnR5IHtpbXBvcnQoXCIuLi9yZWxhdGlvbnNoaXBzL2Jhc2UuanNcIikuZGVmYXVsdH0gcmVsYXRpb25zaGlwIC0gUmVsYXRpb25zaGlwIG1ldGFkYXRhIGRlZmluaXRpb24uXG4gKi9cblxuLyoqXG4gKiBBIGdlbmVyaWMgcXVlcnkgb3ZlciBzb21lIG1vZGVsIHR5cGUuXG4gKiBAdGVtcGxhdGUge3R5cGVvZiBpbXBvcnQoXCIuLi9pbmRleC5qc1wiKS5kZWZhdWx0fSBbTUM9dHlwZW9mIGltcG9ydChcIi4uL2luZGV4LmpzXCIpLmRlZmF1bHRdXG4gKiBAdGVtcGxhdGUge3R5cGVvZiBpbXBvcnQoXCIuLi9pbmRleC5qc1wiKS5kZWZhdWx0fSBbVE1DPXR5cGVvZiBpbXBvcnQoXCIuLi9pbmRleC5qc1wiKS5kZWZhdWx0XVxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWZWxvY2lvdXNEYXRhYmFzZVJlY29yZEJhc2VJbnN0YW5jZVJlbGF0aW9uc2hpcCB7XG4gIC8qKiBAdHlwZSB7Ym9vbGVhbiB8IHVuZGVmaW5lZH0gKi9cbiAgX2F1dG9TYXZlID0gdW5kZWZpbmVkXG4gIC8qKiBAdHlwZSB7Ym9vbGVhbiB8IHVuZGVmaW5lZH0gKi9cbiAgX3ByZWxvYWRlZCA9IHVuZGVmaW5lZFxuICAvKiogQHR5cGUge0luc3RhbmNlVHlwZTxUTUM+IHwgQXJyYXk8SW5zdGFuY2VUeXBlPFRNQz4+IHwgdW5kZWZpbmVkfSAqL1xuICBfbG9hZGVkID0gdW5kZWZpbmVkXG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7SW5zdGFuY2VSZWxhdGlvbnNoaXBzQmFzZUFyZ3M8TUMsIFRNQz59IGFyZ3MgLSBPcHRpb25zIG9iamVjdC5cbiAgICovXG4gIGNvbnN0cnVjdG9yKHttb2RlbCwgcmVsYXRpb25zaGlwfSkge1xuICAgIHRoaXMuX2RpcnR5ID0gZmFsc2VcbiAgICB0aGlzLm1vZGVsID0gbW9kZWxcbiAgICB0aGlzLnJlbGF0aW9uc2hpcCA9IHJlbGF0aW9uc2hpcFxuICB9XG5cbiAgLyoqXG4gICAqIEBhYnN0cmFjdFxuICAgKiBAcGFyYW0ge0luc3RhbmNlVHlwZTxUTUM+W10gfCBJbnN0YW5jZVR5cGU8VE1DPn0gbW9kZWxzIC0gTW9kZWwgaW5zdGFuY2VzLlxuICAgKiBAcmV0dXJucyB7dm9pZH0gLSBObyByZXR1cm4gdmFsdWUuXG4gICAqL1xuICBhZGRUb0xvYWRlZChtb2RlbHMpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICAgIHRocm93IG5ldyBFcnJvcihcImFkZFRvTG9hZGVkIG5vdCBpbXBsZW1lbnRlZFwiKVxuICB9XG5cbiAgLyoqXG4gICAqIEBhYnN0cmFjdFxuICAgKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIGFueT59IGF0dHJpYnV0ZXMgLSBBdHRyaWJ1dGVzLlxuICAgKiBAcmV0dXJucyB7SW5zdGFuY2VUeXBlPFRNQz59IC0gVGhlIGJ1aWxkLlxuICAgKi9cbiAgYnVpbGQoYXR0cmlidXRlcykgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiJ2J1aWxkJyBub3QgaW1wbGVtZW50ZWRcIilcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7Ym9vbGVhbiB8IHVuZGVmaW5lZH0gV2hldGhlciB0aGUgcmVsYXRpb25zaGlwIHNob3VsZCBiZSBhdXRvLXNhdmVkIGJlZm9yZSBzYXZpbmcgdGhlIHBhcmVudCBtb2RlbCAqL1xuICBnZXRBdXRvU2F2ZSgpIHsgcmV0dXJuIHRoaXMuX2F1dG9TYXZlIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtib29sZWFufSBuZXdBdXRvU2F2ZVZhbHVlIFdoZXRoZXIgdGhlIHJlbGF0aW9uc2hpcCBzaG91bGQgYmUgYXV0by1zYXZlZCBiZWZvcmUgc2F2aW5nIHRoZSBwYXJlbnQgbW9kZWxcbiAgICogQHJldHVybnMge3ZvaWR9IC0gTm8gcmV0dXJuIHZhbHVlLlxuICAgKi9cbiAgc2V0QXV0b1NhdmUobmV3QXV0b1NhdmVWYWx1ZSkgeyB0aGlzLl9hdXRvU2F2ZSA9IG5ld0F1dG9TYXZlVmFsdWUgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IG5ld1ZhbHVlIFdoZXRoZXIgdGhlIHJlbGF0aW9uc2hpcCBpcyBkaXJ0eSAoaGFzIGJlZW4gbW9kaWZpZWQpXG4gICAqIEByZXR1cm5zIHt2b2lkfSAtIE5vIHJldHVybiB2YWx1ZS5cbiAgICovXG4gIHNldERpcnR5KG5ld1ZhbHVlKSB7IHRoaXMuX2RpcnR5ID0gbmV3VmFsdWUgfVxuXG4gIC8qKiBAcmV0dXJucyB7Ym9vbGVhbn0gV2hldGhlciB0aGUgcmVsYXRpb25zaGlwIGlzIGRpcnR5IChoYXMgYmVlbiBtb2RpZmllZCkgKi9cbiAgZ2V0RGlydHkoKSB7IHJldHVybiB0aGlzLl9kaXJ0eSB9XG5cbiAgLyoqXG4gICAqIEBhYnN0cmFjdFxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gLSBSZXNvbHZlcyB3aGVuIGNvbXBsZXRlLlxuICAgKi9cbiAgbG9hZCgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCInbG9hZCcgbm90IGltcGxlbWVudGVkXCIpXG4gIH1cblxuICAvKiogIEByZXR1cm5zIHtib29sZWFufSBXaGV0aGVyIHRoZSByZWxhdGlvbnNoaXAgaGFzIGJlZW4gcHJlbG9hZGVkICovXG4gIGlzTG9hZGVkKCkgeyByZXR1cm4gQm9vbGVhbih0aGlzLl9sb2FkZWQpIH1cblxuICAvKiogQHJldHVybnMge0luc3RhbmNlVHlwZTxUTUM+IHwgQXJyYXk8SW5zdGFuY2VUeXBlPFRNQz4+IHwgdW5kZWZpbmVkfSBUaGUgbG9hZGVkIG1vZGVsIG9yIG1vZGVscyAoZGVwZW5kaW5nIG9uIHJlbGF0aW9uc2hpcCB0eXBlKSAqL1xuICBsb2FkZWQoKSB7XG4gICAgaWYgKCF0aGlzLl9wcmVsb2FkZWQgJiYgdGhpcy5tb2RlbC5pc1BlcnNpc3RlZCgpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7dGhpcy5tb2RlbC5jb25zdHJ1Y3Rvci5uYW1lfSMke3RoaXMucmVsYXRpb25zaGlwLmdldFJlbGF0aW9uc2hpcE5hbWUoKX0gaGFzbid0IGJlZW4gcHJlbG9hZGVkYClcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fbG9hZGVkXG4gIH1cblxuICAvKiogQHBhcmFtIHtJbnN0YW5jZVR5cGU8VE1DPiB8IEFycmF5PEluc3RhbmNlVHlwZTxUTUM+PiB8IHVuZGVmaW5lZH0gbW9kZWwgLSBSZWxhdGVkIG1vZGVsKHMpIHRvIG1hcmsgYXMgbG9hZGVkLiAqL1xuICBzZXRMb2FkZWQobW9kZWwpIHsgdGhpcy5fbG9hZGVkID0gbW9kZWwgfVxuXG4gIC8qKiBAcmV0dXJucyB7SW5zdGFuY2VUeXBlPFRNQz4gfCBJbnN0YW5jZVR5cGU8VE1DPltdIHwgdW5kZWZpbmVkfSAtIFRoZSBsb2FkZWQgb3IgdW5kZWZpbmVkLiAgKi9cbiAgZ2V0TG9hZGVkT3JVbmRlZmluZWQoKSB7IHJldHVybiB0aGlzLl9sb2FkZWQgfVxuXG4gIC8qKiBAcmV0dXJucyB7Ym9vbGVhbn0gVGhlIGxvYWRlZCBtb2RlbCBvciBtb2RlbHMgKGRlcGVuZGluZyBvbiByZWxhdGlvbnNoaXAgdHlwZSkgKi9cbiAgZ2V0UHJlbG9hZGVkKCkgeyByZXR1cm4gdGhpcy5fcHJlbG9hZGVkIHx8IGZhbHNlIH1cblxuICAvKiogQHBhcmFtIHtib29sZWFufSBpc1ByZWxvYWRlZCAtIFdoZXRoZXIgdGhlIHJlbGF0aW9uc2hpcCBpcyBwcmVsb2FkZWQuICovXG4gIHNldFByZWxvYWRlZChpc1ByZWxvYWRlZCkgeyB0aGlzLl9wcmVsb2FkZWQgPSBpc1ByZWxvYWRlZCB9XG5cbiAgLyoqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBmb3JlaWduIGtleSBmb3IgdGhpcyByZWxhdGlvbnNoaXAgKi9cbiAgZ2V0Rm9yZWlnbktleSgpIHsgcmV0dXJuIHRoaXMuZ2V0UmVsYXRpb25zaGlwKCkuZ2V0Rm9yZWlnbktleSgpIH1cblxuICAvKiogQHJldHVybnMge0luc3RhbmNlVHlwZTxNQz59IC0gVGhlIG1vZGVsLiAgKi9cbiAgZ2V0TW9kZWwoKSB7IHJldHVybiB0aGlzLm1vZGVsIH1cblxuICAvKiogQHJldHVybnMge3N0cmluZ30gVGhlIHByaW1hcnkga2V5IGZvciB0aGlzIHJlbGF0aW9uc2hpcCdzIG1vZGVsICovXG4gIGdldFByaW1hcnlLZXkoKSB7IHJldHVybiB0aGlzLmdldFJlbGF0aW9uc2hpcCgpLmdldFByaW1hcnlLZXkoKSB9XG5cbiAgLyoqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9yZWxhdGlvbnNoaXBzL2Jhc2UuanNcIikuZGVmYXVsdH0gVGhlIHJlbGF0aW9uc2hpcCBvYmplY3QgdGhhdCB0aGlzIGluc3RhbmNlIHJlbGF0aW9uc2hpcCBpcyBiYXNlZCBvbiAqL1xuICBnZXRSZWxhdGlvbnNoaXAoKSB7IHJldHVybiB0aGlzLnJlbGF0aW9uc2hpcCB9XG5cbiAgLyoqXG4gICAqIEB0ZW1wbGF0ZSBUXG4gICAqIEBwYXJhbSB7VH0gcXVlcnkgLSBRdWVyeSBpbnN0YW5jZS5cbiAgICogQHJldHVybnMge1R9IC0gU2NvcGVkIHF1ZXJ5LlxuICAgKi9cbiAgYXBwbHlTY29wZShxdWVyeSkge1xuICAgIHJldHVybiB0aGlzLmdldFJlbGF0aW9uc2hpcCgpLmFwcGx5U2NvcGUocXVlcnkpXG4gIH1cblxuICAvKiogQHJldHVybnMge1RNQyB8IHVuZGVmaW5lZH0gVGhlIG1vZGVsIGNsYXNzIHRoYXQgdGhpcyBpbnN0YW5jZSByZWxhdGlvbnNoaXAgKi9cbiAgZ2V0VGFyZ2V0TW9kZWxDbGFzcygpIHtcbiAgICBjb25zdCBUYXJnZXRNb2RlbENsYXNzID0gLyoqIEB0eXBlIHtUTUN9ICovICh0aGlzLmdldFJlbGF0aW9uc2hpcCgpLmdldFRhcmdldE1vZGVsQ2xhc3MoKSlcblxuICAgIHJldHVybiBUYXJnZXRNb2RlbENsYXNzXG4gIH1cblxuICAvKiogQHJldHVybnMge3N0cmluZ30gVGhlIHR5cGUgb2YgcmVsYXRpb25zaGlwIChlLmcuIFwiaGFzX21hbnlcIiwgXCJiZWxvbmdzX3RvXCIsIGV0Yy4pICovXG4gIGdldFR5cGUoKSB7IHJldHVybiB0aGlzLmdldFJlbGF0aW9uc2hpcCgpLmdldFR5cGUoKSB9XG59XG4iXX0=
@@ -2,13 +2,13 @@
2
2
  * A generic query over some model type.
3
3
  * @template {typeof import("../index.js").default} MC
4
4
  * @template {typeof import("../index.js").default} TMC
5
+ * @extends {BaseInstanceRelationship<MC, TMC>}
5
6
  */
6
- export default class VelociousDatabaseRecordBelongsToInstanceRelationship<MC extends typeof import("../index.js").default, TMC extends typeof import("../index.js").default> extends BaseInstanceRelationship<any, any> {
7
+ export default class VelociousDatabaseRecordBelongsToInstanceRelationship<MC extends typeof import("../index.js").default, TMC extends typeof import("../index.js").default> extends BaseInstanceRelationship<MC, TMC> {
7
8
  /**
8
- * @param {Record<string, any>} data - Data payload.
9
- * @returns {InstanceType<TMC>} - The build.
9
+ * @param {import("./base.js").InstanceRelationshipsBaseArgs<MC, TMC>} args - Options object.
10
10
  */
11
- build(data: Record<string, any>): InstanceType<TMC>;
11
+ constructor(args: import("./base.js").InstanceRelationshipsBaseArgs<MC, TMC>);
12
12
  }
13
13
  import BaseInstanceRelationship from "./base.js";
14
14
  //# sourceMappingURL=belongs-to.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"belongs-to.d.ts","sourceRoot":"","sources":["../../../../../src/database/record/instance-relationships/belongs-to.js"],"names":[],"mappings":"AAIA;;;;GAIG;AACH,0EAHoD,EAAE,SAAzC,cAAe,aAAa,EAAE,OAAQ,EACC,GAAG,SAA1C,cAAe,aAAa,EAAE,OAAQ;IAUjD;;;OAGG;IACH,YAHW,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GACjB,YAAY,CAAC,GAAG,CAAC,CAY7B;CA0BF;qCAvDoC,WAAW"}
1
+ {"version":3,"file":"belongs-to.d.ts","sourceRoot":"","sources":["../../../../../src/database/record/instance-relationships/belongs-to.js"],"names":[],"mappings":"AAIA;;;;;GAKG;AACH,0EAJoD,EAAE,SAAzC,cAAe,aAAa,EAAE,OAAQ,EACC,GAAG,SAA1C,cAAe,aAAa,EAAE,OAAQ;IAIjD;;OAEG;IACH,kBAFW,OAAO,WAAW,EAAE,6BAA6B,CAAC,EAAE,EAAE,GAAG,CAAC,EAIpE;CA+CF;qCA7DoC,WAAW"}
@@ -4,6 +4,7 @@ import BaseInstanceRelationship from "./base.js";
4
4
  * A generic query over some model type.
5
5
  * @template {typeof import("../index.js").default} MC
6
6
  * @template {typeof import("../index.js").default} TMC
7
+ * @extends {BaseInstanceRelationship<MC, TMC>}
7
8
  */
8
9
  export default class VelociousDatabaseRecordBelongsToInstanceRelationship extends BaseInstanceRelationship {
9
10
  /**
@@ -32,14 +33,20 @@ export default class VelociousDatabaseRecordBelongsToInstanceRelationship extend
32
33
  if (!TargetModelClass)
33
34
  throw new Error("Can't load without a target model");
34
35
  const primaryKey = TargetModelClass.primaryKey();
36
+ /** @type {Record<string, string | number | null | undefined>} */
35
37
  const whereArgs = {};
36
38
  whereArgs[primaryKey] = foreignModelID;
37
39
  let query = TargetModelClass.where(whereArgs);
38
40
  query = this.applyScope(query);
39
41
  const foreignModel = await query.first();
40
- this.setLoaded(foreignModel);
42
+ if (foreignModel) {
43
+ this.setLoaded(foreignModel);
44
+ }
45
+ else {
46
+ this.setLoaded(undefined);
47
+ }
41
48
  this.setDirty(false);
42
49
  this.setPreloaded(true);
43
50
  }
44
51
  }
45
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmVsb25ncy10by5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9kYXRhYmFzZS9yZWNvcmQvaW5zdGFuY2UtcmVsYXRpb25zaGlwcy9iZWxvbmdzLXRvLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWixPQUFPLHdCQUF3QixNQUFNLFdBQVcsQ0FBQTtBQUVoRDs7OztHQUlHO0FBQ0gsTUFBTSxDQUFDLE9BQU8sT0FBTyxvREFBcUQsU0FBUSx3QkFBd0I7SUFDeEc7O09BRUc7SUFDSCxZQUFZLElBQUk7UUFDZCxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUE7SUFDYixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsS0FBSyxDQUFDLElBQUk7UUFDUixNQUFNLGdCQUFnQixHQUFHLGtCQUFrQixDQUFDLENBQUMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUMsQ0FBQTtRQUV4RSxJQUFJLENBQUMsZ0JBQWdCO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxpREFBaUQsQ0FBQyxDQUFBO1FBRXpGLE1BQU0sV0FBVyxHQUFHLGdDQUFnQyxDQUFDLENBQUMsSUFBSSxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO1FBRWpGLElBQUksQ0FBQyxPQUFPLEdBQUcsV0FBVyxDQUFBO1FBRTFCLE9BQU8sV0FBVyxDQUFBO0lBQ3BCLENBQUM7SUFFRCxvQkFBb0IsS0FBSyxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUEsQ0FBQyxDQUFDO0lBRTlDLEtBQUssQ0FBQyxJQUFJO1FBQ1IsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFBO1FBQ3ZDLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUE7UUFDN0QsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQTtRQUVuRCxJQUFJLENBQUMsZ0JBQWdCO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxtQ0FBbUMsQ0FBQyxDQUFBO1FBRTNFLE1BQU0sVUFBVSxHQUFHLGdCQUFnQixDQUFDLFVBQVUsRUFBRSxDQUFBO1FBQ2hELE1BQU0sU0FBUyxHQUFHLEVBQUUsQ0FBQTtRQUVwQixTQUFTLENBQUMsVUFBVSxDQUFDLEdBQUcsY0FBYyxDQUFBO1FBRXRDLElBQUksS0FBSyxHQUFHLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQTtRQUU3QyxLQUFLLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUU5QixNQUFNLFlBQVksR0FBRyxNQUFNLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQTtRQUV4QyxJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxDQUFBO1FBQzVCLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUE7UUFDcEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQTtJQUN6QixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuaW1wb3J0IEJhc2VJbnN0YW5jZVJlbGF0aW9uc2hpcCBmcm9tIFwiLi9iYXNlLmpzXCJcblxuLyoqXG4gKiBBIGdlbmVyaWMgcXVlcnkgb3ZlciBzb21lIG1vZGVsIHR5cGUuXG4gKiBAdGVtcGxhdGUge3R5cGVvZiBpbXBvcnQoXCIuLi9pbmRleC5qc1wiKS5kZWZhdWx0fSBNQ1xuICogQHRlbXBsYXRlIHt0eXBlb2YgaW1wb3J0KFwiLi4vaW5kZXguanNcIikuZGVmYXVsdH0gVE1DXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFZlbG9jaW91c0RhdGFiYXNlUmVjb3JkQmVsb25nc1RvSW5zdGFuY2VSZWxhdGlvbnNoaXAgZXh0ZW5kcyBCYXNlSW5zdGFuY2VSZWxhdGlvbnNoaXAge1xuICAvKipcbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuL2Jhc2UuanNcIikuSW5zdGFuY2VSZWxhdGlvbnNoaXBzQmFzZUFyZ3M8TUMsIFRNQz59IGFyZ3MgLSBPcHRpb25zIG9iamVjdC5cbiAgICovXG4gIGNvbnN0cnVjdG9yKGFyZ3MpIHtcbiAgICBzdXBlcihhcmdzKVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgYW55Pn0gZGF0YSAtIERhdGEgcGF5bG9hZC5cbiAgICogQHJldHVybnMge0luc3RhbmNlVHlwZTxUTUM+fSAtIFRoZSBidWlsZC5cbiAgICovXG4gIGJ1aWxkKGRhdGEpIHtcbiAgICBjb25zdCBUYXJnZXRNb2RlbENsYXNzID0gLyoqIEB0eXBlIHtUTUN9ICovICh0aGlzLmdldFRhcmdldE1vZGVsQ2xhc3MoKSlcblxuICAgIGlmICghVGFyZ2V0TW9kZWxDbGFzcykgdGhyb3cgbmV3IEVycm9yKFwiQ2FuJ3QgYnVpbGQgYSBuZXcgcmVjb3JkIHdpdGhvdXQgYSB0YXJnZXQgbW9kZWxcIilcblxuICAgIGNvbnN0IG5ld0luc3RhbmNlID0gLyoqIEB0eXBlIHtJbnN0YW5jZVR5cGU8VE1DPn0gKi8gKG5ldyBUYXJnZXRNb2RlbENsYXNzKGRhdGEpKVxuXG4gICAgdGhpcy5fbG9hZGVkID0gbmV3SW5zdGFuY2VcblxuICAgIHJldHVybiBuZXdJbnN0YW5jZVxuICB9XG5cbiAgZ2V0TG9hZGVkT3JVbmRlZmluZWQoKSB7IHJldHVybiB0aGlzLl9sb2FkZWQgfVxuXG4gIGFzeW5jIGxvYWQoKSB7XG4gICAgY29uc3QgZm9yZWlnbktleSA9IHRoaXMuZ2V0Rm9yZWlnbktleSgpXG4gICAgY29uc3QgZm9yZWlnbk1vZGVsSUQgPSB0aGlzLmdldE1vZGVsKCkucmVhZENvbHVtbihmb3JlaWduS2V5KVxuICAgIGNvbnN0IFRhcmdldE1vZGVsQ2xhc3MgPSB0aGlzLmdldFRhcmdldE1vZGVsQ2xhc3MoKVxuXG4gICAgaWYgKCFUYXJnZXRNb2RlbENsYXNzKSB0aHJvdyBuZXcgRXJyb3IoXCJDYW4ndCBsb2FkIHdpdGhvdXQgYSB0YXJnZXQgbW9kZWxcIilcblxuICAgIGNvbnN0IHByaW1hcnlLZXkgPSBUYXJnZXRNb2RlbENsYXNzLnByaW1hcnlLZXkoKVxuICAgIGNvbnN0IHdoZXJlQXJncyA9IHt9XG5cbiAgICB3aGVyZUFyZ3NbcHJpbWFyeUtleV0gPSBmb3JlaWduTW9kZWxJRFxuXG4gICAgbGV0IHF1ZXJ5ID0gVGFyZ2V0TW9kZWxDbGFzcy53aGVyZSh3aGVyZUFyZ3MpXG5cbiAgICBxdWVyeSA9IHRoaXMuYXBwbHlTY29wZShxdWVyeSlcblxuICAgIGNvbnN0IGZvcmVpZ25Nb2RlbCA9IGF3YWl0IHF1ZXJ5LmZpcnN0KClcblxuICAgIHRoaXMuc2V0TG9hZGVkKGZvcmVpZ25Nb2RlbClcbiAgICB0aGlzLnNldERpcnR5KGZhbHNlKVxuICAgIHRoaXMuc2V0UHJlbG9hZGVkKHRydWUpXG4gIH1cbn1cbiJdfQ==
52
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmVsb25ncy10by5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9kYXRhYmFzZS9yZWNvcmQvaW5zdGFuY2UtcmVsYXRpb25zaGlwcy9iZWxvbmdzLXRvLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWixPQUFPLHdCQUF3QixNQUFNLFdBQVcsQ0FBQTtBQUVoRDs7Ozs7R0FLRztBQUNILE1BQU0sQ0FBQyxPQUFPLE9BQU8sb0RBQXFELFNBQVEsd0JBQXdCO0lBQ3hHOztPQUVHO0lBQ0gsWUFBWSxJQUFJO1FBQ2QsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFBO0lBQ2IsQ0FBQztJQUVEOzs7T0FHRztJQUNILEtBQUssQ0FBQyxJQUFJO1FBQ1IsTUFBTSxnQkFBZ0IsR0FBRyxrQkFBa0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLENBQUE7UUFFeEUsSUFBSSxDQUFDLGdCQUFnQjtZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsaURBQWlELENBQUMsQ0FBQTtRQUV6RixNQUFNLFdBQVcsR0FBRyxnQ0FBZ0MsQ0FBQyxDQUFDLElBQUksZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQTtRQUVqRixJQUFJLENBQUMsT0FBTyxHQUFHLFdBQVcsQ0FBQTtRQUUxQixPQUFPLFdBQVcsQ0FBQTtJQUNwQixDQUFDO0lBRUQsb0JBQW9CLEtBQUssT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFBLENBQUMsQ0FBQztJQUU5QyxLQUFLLENBQUMsSUFBSTtRQUNSLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQTtRQUN2QyxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFBO1FBQzdELE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUE7UUFFbkQsSUFBSSxDQUFDLGdCQUFnQjtZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsbUNBQW1DLENBQUMsQ0FBQTtRQUUzRSxNQUFNLFVBQVUsR0FBRyxnQkFBZ0IsQ0FBQyxVQUFVLEVBQUUsQ0FBQTtRQUNoRCxpRUFBaUU7UUFDakUsTUFBTSxTQUFTLEdBQUcsRUFBRSxDQUFBO1FBRXBCLFNBQVMsQ0FBQyxVQUFVLENBQUMsR0FBRyxjQUFjLENBQUE7UUFFdEMsSUFBSSxLQUFLLEdBQUcsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFBO1FBRTdDLEtBQUssR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBRTlCLE1BQU0sWUFBWSxHQUFHLE1BQU0sS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFBO1FBRXhDLElBQUksWUFBWSxFQUFFLENBQUM7WUFDakIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsQ0FBQTtRQUM5QixDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUE7UUFDM0IsQ0FBQztRQUNELElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUE7UUFDcEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQTtJQUN6QixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuaW1wb3J0IEJhc2VJbnN0YW5jZVJlbGF0aW9uc2hpcCBmcm9tIFwiLi9iYXNlLmpzXCJcblxuLyoqXG4gKiBBIGdlbmVyaWMgcXVlcnkgb3ZlciBzb21lIG1vZGVsIHR5cGUuXG4gKiBAdGVtcGxhdGUge3R5cGVvZiBpbXBvcnQoXCIuLi9pbmRleC5qc1wiKS5kZWZhdWx0fSBNQ1xuICogQHRlbXBsYXRlIHt0eXBlb2YgaW1wb3J0KFwiLi4vaW5kZXguanNcIikuZGVmYXVsdH0gVE1DXG4gKiBAZXh0ZW5kcyB7QmFzZUluc3RhbmNlUmVsYXRpb25zaGlwPE1DLCBUTUM+fVxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWZWxvY2lvdXNEYXRhYmFzZVJlY29yZEJlbG9uZ3NUb0luc3RhbmNlUmVsYXRpb25zaGlwIGV4dGVuZHMgQmFzZUluc3RhbmNlUmVsYXRpb25zaGlwIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi9iYXNlLmpzXCIpLkluc3RhbmNlUmVsYXRpb25zaGlwc0Jhc2VBcmdzPE1DLCBUTUM+fSBhcmdzIC0gT3B0aW9ucyBvYmplY3QuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihhcmdzKSB7XG4gICAgc3VwZXIoYXJncylcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIGFueT59IGRhdGEgLSBEYXRhIHBheWxvYWQuXG4gICAqIEByZXR1cm5zIHtJbnN0YW5jZVR5cGU8VE1DPn0gLSBUaGUgYnVpbGQuXG4gICAqL1xuICBidWlsZChkYXRhKSB7XG4gICAgY29uc3QgVGFyZ2V0TW9kZWxDbGFzcyA9IC8qKiBAdHlwZSB7VE1DfSAqLyAodGhpcy5nZXRUYXJnZXRNb2RlbENsYXNzKCkpXG5cbiAgICBpZiAoIVRhcmdldE1vZGVsQ2xhc3MpIHRocm93IG5ldyBFcnJvcihcIkNhbid0IGJ1aWxkIGEgbmV3IHJlY29yZCB3aXRob3V0IGEgdGFyZ2V0IG1vZGVsXCIpXG5cbiAgICBjb25zdCBuZXdJbnN0YW5jZSA9IC8qKiBAdHlwZSB7SW5zdGFuY2VUeXBlPFRNQz59ICovIChuZXcgVGFyZ2V0TW9kZWxDbGFzcyhkYXRhKSlcblxuICAgIHRoaXMuX2xvYWRlZCA9IG5ld0luc3RhbmNlXG5cbiAgICByZXR1cm4gbmV3SW5zdGFuY2VcbiAgfVxuXG4gIGdldExvYWRlZE9yVW5kZWZpbmVkKCkgeyByZXR1cm4gdGhpcy5fbG9hZGVkIH1cblxuICBhc3luYyBsb2FkKCkge1xuICAgIGNvbnN0IGZvcmVpZ25LZXkgPSB0aGlzLmdldEZvcmVpZ25LZXkoKVxuICAgIGNvbnN0IGZvcmVpZ25Nb2RlbElEID0gdGhpcy5nZXRNb2RlbCgpLnJlYWRDb2x1bW4oZm9yZWlnbktleSlcbiAgICBjb25zdCBUYXJnZXRNb2RlbENsYXNzID0gdGhpcy5nZXRUYXJnZXRNb2RlbENsYXNzKClcblxuICAgIGlmICghVGFyZ2V0TW9kZWxDbGFzcykgdGhyb3cgbmV3IEVycm9yKFwiQ2FuJ3QgbG9hZCB3aXRob3V0IGEgdGFyZ2V0IG1vZGVsXCIpXG5cbiAgICBjb25zdCBwcmltYXJ5S2V5ID0gVGFyZ2V0TW9kZWxDbGFzcy5wcmltYXJ5S2V5KClcbiAgICAvKiogQHR5cGUge1JlY29yZDxzdHJpbmcsIHN0cmluZyB8IG51bWJlciB8IG51bGwgfCB1bmRlZmluZWQ+fSAqL1xuICAgIGNvbnN0IHdoZXJlQXJncyA9IHt9XG5cbiAgICB3aGVyZUFyZ3NbcHJpbWFyeUtleV0gPSBmb3JlaWduTW9kZWxJRFxuXG4gICAgbGV0IHF1ZXJ5ID0gVGFyZ2V0TW9kZWxDbGFzcy53aGVyZSh3aGVyZUFyZ3MpXG5cbiAgICBxdWVyeSA9IHRoaXMuYXBwbHlTY29wZShxdWVyeSlcblxuICAgIGNvbnN0IGZvcmVpZ25Nb2RlbCA9IGF3YWl0IHF1ZXJ5LmZpcnN0KClcblxuICAgIGlmIChmb3JlaWduTW9kZWwpIHtcbiAgICAgIHRoaXMuc2V0TG9hZGVkKGZvcmVpZ25Nb2RlbClcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZXRMb2FkZWQodW5kZWZpbmVkKVxuICAgIH1cbiAgICB0aGlzLnNldERpcnR5KGZhbHNlKVxuICAgIHRoaXMuc2V0UHJlbG9hZGVkKHRydWUpXG4gIH1cbn1cbiJdfQ==
@@ -2,13 +2,13 @@
2
2
  * A generic query over some model type.
3
3
  * @template {typeof import("../index.js").default} MC
4
4
  * @template {typeof import("../index.js").default} TMC
5
+ * @extends {BaseInstanceRelationship<MC, TMC>}
5
6
  */
6
- export default class VelociousDatabaseRecordHasManyInstanceRelationship<MC extends typeof import("../index.js").default, TMC extends typeof import("../index.js").default> extends BaseInstanceRelationship<any, any> {
7
+ export default class VelociousDatabaseRecordHasManyInstanceRelationship<MC extends typeof import("../index.js").default, TMC extends typeof import("../index.js").default> extends BaseInstanceRelationship<MC, TMC> {
7
8
  /**
8
- * @param {Record<string, any>} data - Data payload.
9
- * @returns {InstanceType<TMC>} - The build.
9
+ * @param {import("./base.js").InstanceRelationshipsBaseArgs<MC, TMC>} args - Options object.
10
10
  */
11
- build(data: Record<string, any>): InstanceType<TMC>;
11
+ constructor(args: import("./base.js").InstanceRelationshipsBaseArgs<MC, TMC>);
12
12
  /**
13
13
  * @param {Record<string, any>} data - Data payload.
14
14
  * @returns {Promise<InstanceType<TMC>>} - Resolves with the create.
@@ -28,11 +28,6 @@ export default class VelociousDatabaseRecordHasManyInstanceRelationship<MC exten
28
28
  query(): import("../../query/model-class-query.js").default<TMC>;
29
29
  /** @returns {Array<InstanceType<TMC>>} The loaded model or models (depending on relationship type) */
30
30
  loaded(): Array<InstanceType<TMC>>;
31
- /**
32
- * @param {InstanceType<MC>[] | InstanceType<MC>} models - Model instances.
33
- * @returns {void} - No return value.
34
- */
35
- addToLoaded(models: InstanceType<MC>[] | InstanceType<MC>): void;
36
31
  /**
37
32
  * @param {InstanceType<TMC>[]} models - Model instances.
38
33
  * @returns {void} - No return value.
@@ -1 +1 @@
1
- {"version":3,"file":"has-many.d.ts","sourceRoot":"","sources":["../../../../../src/database/record/instance-relationships/has-many.js"],"names":[],"mappings":"AAIA;;;;GAIG;AACH,wEAHoD,EAAE,SAAzC,cAAe,aAAa,EAAE,OAAQ,EACC,GAAG,SAA1C,cAAe,aAAa,EAAE,OAAQ;IAUjD;;;OAGG;IACH,YAHW,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GACjB,YAAY,CAAC,GAAG,CAAC,CAmD7B;IAED;;;OAGG;IACH,aAHW,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GACjB,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAQtC;IAWD;;;OAGG;IACH,kBAHW,OAAO,sBAAsB,EAAE,mBAAmB,GAChD,OAAO,kCAAkC,EAAE,OAAO,CAAC,GAAG,CAAC,CAInE;IAED;;;OAGG;IACH,cAHW,MAAM,GAAG,MAAM,GACb,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAItC;IAED,uFAAuF;IACvF,SADc,OAAO,kCAAkC,EAAE,OAAO,CAAC,GAAG,CAAC,CA6CpE;IAED,sGAAsG;IACtG,UADc,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAWrC;IAED;;;OAGG;IACH,oBAHW,YAAY,CAAC,EAAE,CAAC,EAAE,GAAG,YAAY,CAAC,EAAE,CAAC,GACnC,IAAI,CAwBhB;IAED;;;OAGG;IACH,kBAHW,YAAY,CAAC,GAAG,CAAC,EAAE,GACjB,IAAI,CAMhB;CACF;qCA5MoC,WAAW"}
1
+ {"version":3,"file":"has-many.d.ts","sourceRoot":"","sources":["../../../../../src/database/record/instance-relationships/has-many.js"],"names":[],"mappings":"AAIA;;;;;GAKG;AACH,wEAJoD,EAAE,SAAzC,cAAe,aAAa,EAAE,OAAQ,EACC,GAAG,SAA1C,cAAe,aAAa,EAAE,OAAQ;IAIjD;;OAEG;IACH,kBAFW,OAAO,WAAW,EAAE,6BAA6B,CAAC,EAAE,EAAE,GAAG,CAAC,EAIpE;IA2DD;;;OAGG;IACH,aAHW,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GACjB,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAQtC;IAWD;;;OAGG;IACH,kBAHW,OAAO,sBAAsB,EAAE,mBAAmB,GAChD,OAAO,kCAAkC,EAAE,OAAO,CAAC,GAAG,CAAC,CAInE;IAED;;;OAGG;IACH,cAHW,MAAM,GAAG,MAAM,GACb,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAItC;IAED,uFAAuF;IACvF,SADc,OAAO,kCAAkC,EAAE,OAAO,CAAC,GAAG,CAAC,CA6CpE;IAED,sGAAsG;IACtG,UADc,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAWrC;IA8BD;;;OAGG;IACH,kBAHW,YAAY,CAAC,GAAG,CAAC,EAAE,GACjB,IAAI,CAMhB;CACF;qCA/MoC,WAAW"}
@@ -4,6 +4,7 @@ import BaseInstanceRelationship from "./base.js";
4
4
  * A generic query over some model type.
5
5
  * @template {typeof import("../index.js").default} MC
6
6
  * @template {typeof import("../index.js").default} TMC
7
+ * @extends {BaseInstanceRelationship<MC, TMC>}
7
8
  */
8
9
  export default class VelociousDatabaseRecordHasManyInstanceRelationship extends BaseInstanceRelationship {
9
10
  /**
@@ -21,10 +22,9 @@ export default class VelociousDatabaseRecordHasManyInstanceRelationship extends
21
22
  const targetModelClass = this.getTargetModelClass();
22
23
  if (!targetModelClass)
23
24
  throw new Error("Can't build a new record without a taget model class");
24
- const newInstance = new targetModelClass(data);
25
+ const newInstance = /** @type {InstanceType<TMC>} */ (new targetModelClass(data));
25
26
  // Add it to the loaded models of this relationship
26
27
  if (this._loaded === undefined) {
27
- /** @type {import("../index.js").default[]} */
28
28
  this._loaded = [newInstance];
29
29
  }
30
30
  else if (Array.isArray(this._loaded)) {
@@ -44,9 +44,13 @@ export default class VelociousDatabaseRecordHasManyInstanceRelationship extends
44
44
  const parentModel = this.getModel();
45
45
  if (parentModel.isPersisted()) {
46
46
  const foreignKeyName = this.getForeignKey();
47
- const foreignKeyAttributeName = this.getTargetModelClass().getColumnNameToAttributeNameMap()[foreignKeyName];
47
+ const columnNameMap = targetModelClass.getColumnNameToAttributeNameMap();
48
+ const foreignKeyAttributeName = columnNameMap[foreignKeyName];
49
+ if (!foreignKeyAttributeName)
50
+ throw new Error(`Unknown foreign key attribute name for ${foreignKeyName}`);
48
51
  const primaryKeyName = this.getPrimaryKey();
49
52
  const foreignKeyValue = parentModel.readColumn(primaryKeyName);
53
+ /** @type {Record<string, any>} */
50
54
  const assignData = {};
51
55
  assignData[foreignKeyAttributeName] = foreignKeyValue;
52
56
  newInstance.assign(assignData);
@@ -65,7 +69,7 @@ export default class VelociousDatabaseRecordHasManyInstanceRelationship extends
65
69
  }
66
70
  /** @returns {Promise<void>} - Resolves when complete. */
67
71
  async load() {
68
- const foreignModels = await this.query().toArray();
72
+ const foreignModels = /** @type {InstanceType<TMC>[]} */ (await this.query().toArray());
69
73
  this.setLoaded(foreignModels);
70
74
  this.setDirty(false);
71
75
  this.setPreloaded(true);
@@ -82,7 +86,7 @@ export default class VelociousDatabaseRecordHasManyInstanceRelationship extends
82
86
  * @returns {Promise<InstanceType<TMC>>} - Resolves with the find.
83
87
  */
84
88
  async find(modelID) {
85
- return await this.query().find(modelID);
89
+ return /** @type {Promise<InstanceType<TMC>>} */ (this.query().find(modelID));
86
90
  }
87
91
  /** @returns {import("../../query/model-class-query.js").default<TMC>} - The query. */
88
92
  query() {
@@ -128,10 +132,10 @@ export default class VelociousDatabaseRecordHasManyInstanceRelationship extends
128
132
  if (this._loaded === undefined && this.model.isNewRecord()) {
129
133
  return [];
130
134
  }
131
- return this._loaded;
135
+ return Array.isArray(this._loaded) ? this._loaded : [];
132
136
  }
133
137
  /**
134
- * @param {InstanceType<MC>[] | InstanceType<MC>} models - Model instances.
138
+ * @param {InstanceType<TMC>[] | InstanceType<TMC>} models - Model instances.
135
139
  * @returns {void} - No return value.
136
140
  */
137
141
  addToLoaded(models) {
@@ -173,4 +177,4 @@ export default class VelociousDatabaseRecordHasManyInstanceRelationship extends
173
177
  this._loaded = models;
174
178
  }
175
179
  }
176
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFzLW1hbnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvZGF0YWJhc2UvcmVjb3JkL2luc3RhbmNlLXJlbGF0aW9uc2hpcHMvaGFzLW1hbnkuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaLE9BQU8sd0JBQXdCLE1BQU0sV0FBVyxDQUFBO0FBRWhEOzs7O0dBSUc7QUFDSCxNQUFNLENBQUMsT0FBTyxPQUFPLGtEQUFtRCxTQUFRLHdCQUF3QjtJQUN0Rzs7T0FFRztJQUNILFlBQVksSUFBSTtRQUNkLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQTtJQUNiLENBQUM7SUFFRDs7O09BR0c7SUFDSCxLQUFLLENBQUMsSUFBSTtRQUNSLHdDQUF3QztRQUN4QyxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFBO1FBRW5ELElBQUksQ0FBQyxnQkFBZ0I7WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLHNEQUFzRCxDQUFDLENBQUE7UUFFOUYsTUFBTSxXQUFXLEdBQUcsSUFBSSxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUc5QyxtREFBbUQ7UUFDbkQsSUFBSSxJQUFJLENBQUMsT0FBTyxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQy9CLDhDQUE4QztZQUM5QyxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUE7UUFDOUIsQ0FBQzthQUFNLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUN2QyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQTtRQUNoQyxDQUFDO2FBQU0sQ0FBQztZQUNOLE1BQU0sSUFBSSxLQUFLLENBQUMsa0NBQWtDLE9BQU8sSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUE7UUFDMUUsQ0FBQztRQUdELGlEQUFpRDtRQUNqRCxNQUFNLFNB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T0FBTyxFQUFFLENBQUMsQ0FBQTtZQUNuRSxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFRDs7O09BR0c7SUFDSCxTQUFTLENBQUMsTUFBTTtRQUNkLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQztZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsZ0RBQWdELE9BQU8sTUFBTSxFQUFFLENBQUMsQ0FBQTtRQUU1RyxJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQTtJQUN2QixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuaW1wb3J0IEJhc2VJbnN0YW5jZVJlbGF0aW9uc2hpcCBmcm9tIFwiLi9iYXNlLmpzXCJcblxuLyoqXG4gKiBBIGdlbmVyaWMgcXVlcnkgb3ZlciBzb21lIG1vZGVsIHR5cGUuXG4gKiBAdGVtcGxhdGUge3R5cGVvZiBpbXBvcnQoXCIuLi9pbmRleC5qc1wiKS5kZWZhdWx0fSBNQ1xuICogQHRlbXBsYXRlIHt0eXBlb2YgaW1wb3J0KFwiLi4vaW5kZXguanNcIikuZGVmYXVsdH0gVE1DXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFZlbG9jaW91c0RhdGFiYXNlUmVjb3JkSGFzTWFueUluc3RhbmNlUmVsYXRpb25zaGlwIGV4dGVuZHMgQmFzZUluc3RhbmNlUmVsYXRpb25zaGlwIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi9iYXNlLmpzXCIpLkluc3RhbmNlUmVsYXRpb25zaGlwc0Jhc2VBcmdzPE1DLCBUTUM+fSBhcmdzIC0gT3B0aW9ucyBvYmplY3QuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihhcmdzKSB7XG4gICAgc3VwZXIoYXJncylcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIGFueT59IGRhdGEgLSBEYXRhIHBheWxvYWQuXG4gICAqIEByZXR1cm5zIHtJbnN0YW5jZVR5cGU8VE1DPn0gLSBUaGUgYnVpbGQuXG4gICAqL1xuICBidWlsZChkYXRhKSB7XG4gICAgLy8gU3Bhd24gbmV3IG1vZGVsIG9mIHRoZSB0YXJnZXRlZCBjbGFzc1xuICAgIGNvbnN0IHRhcmdldE1vZGVsQ2xhc3MgPSB0aGlzLmdldFRhcmdldE1vZGVsQ2xhc3MoKVxuXG4gICAgaWYgKCF0YXJnZXRNb2RlbENsYXNzKSB0aHJvdyBuZXcgRXJyb3IoXCJDYW4ndCBidWlsZCBhIG5ldyByZWNvcmQgd2l0aG91dCBhIHRhZ2V0IG1vZGVsIGNsYXNzXCIpXG5cbiAgICBjb25zdCBuZXdJbnN0YW5jZSA9IG5ldyB0YXJnZXRNb2RlbENsYXNzKGRhdGEpXG5cblxuICAgIC8vIEFkZCBpdCB0byB0aGUgbG9hZGVkIG1vZGVscyBvZiB0aGlzIHJlbGF0aW9uc2hpcFxuICAgIGlmICh0aGlzLl9sb2FkZWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9pbmRleC5qc1wiKS5kZWZhdWx0W119ICovXG4gICAgICB0aGlzLl9sb2FkZWQgPSBbbmV3SW5zdGFuY2VdXG4gICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHRoaXMuX2xvYWRlZCkpIHtcbiAgICAgIHRoaXMuX2xvYWRlZC5wdXNoKG5ld0luc3RhbmNlKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYExvYWRlZCBoYWQgYW4gdW5leHBlY3RlZCB0eXBlOiAke3R5cGVvZiB0aGlzLl9sb2FkZWR9YClcbiAgICB9XG5cblxuICAgIC8vIFNldCBsb2FkZWQgb24gdGhlIG1vZGVscyBpbnZlcnNlZCByZWxhdGlvbnNoaXBcbiAgICBjb25zdCBpbnZlcnNlT2YgPSB0aGlzLmdldFJlbGF0aW9uc2hpcCgpLmdldEludmVyc2VPZigpXG5cbiAgICBpZiAoaW52ZXJzZU9mKSB7XG4gICAgICBjb25zdCBpbnZlcnNlSW5zdGFuY2VSZWxhdGlvbnNoaXAgPSBuZXdJbnN0YW5jZS5nZXRSZWxhdGlvbnNoaXBCeU5hbWUoaW52ZXJzZU9mKVxuXG4gICAgICBpbnZlcnNlSW5zdGFuY2VSZWxhdGlvbnNoaXAuc2V0QXV0b1NhdmUoZmFsc2UpXG4gICAgICBpbnZlcnNlSW5zdGFuY2VSZWxhdGlvbnNoaXAuc2V0TG9hZGVkKHRoaXMuZ2V0TW9kZWwoKSlcbiAgICB9XG5cblxuICAgIC8vIEFzc2lnbiB0aGUgZm9yZWlnbiBrZXkgdG8gdGhlIG5ldyBtb2RlbFxuICAgIGNvbnN0IHBhcmVudE1vZGVsID0gdGhpcy5nZXRNb2RlbCgpXG5cbiAgICBpZiAocGFyZW50TW9kZWwuaXNQZXJzaXN0ZWQoKSkge1xuICAgICAgY29uc3QgZm9yZWlnbktleU5hbWUgPSB0aGlzLmdldEZvcmVpZ25LZXkoKVxuICAgICAgY29uc3QgZm9yZWlnbktleUF0dHJpYnV0ZU5hbWUgPSB0aGlzLmdldFRhcmdldE1vZGVsQ2xhc3MoKS5nZXRDb2x1bW5OYW1lVG9BdHRyaWJ1dGVOYW1lTWFwKClbZm9yZWlnbktleU5hbWVdXG4gICAgICBjb25zdCBwcmltYXJ5S2V5TmFtZSA9IHRoaXMuZ2V0UHJpbWFyeUtleSgpXG4gICAgICBjb25zdCBmb3JlaWduS2V5VmFsdWUgPSBwYXJlbnRNb2RlbC5yZWFkQ29sdW1uKHByaW1hcnlLZXlOYW1lKVxuICAgICAgY29uc3QgYXNzaWduRGF0YSA9IHt9XG5cbiAgICAgIGFzc2lnbkRhdGFbZm9yZWlnbktleUF0dHJpYnV0ZU5hbWVdID0gZm9yZWlnbktleVZhbHVlXG5cbiAgICAgIG5ld0luc3RhbmNlLmFzc2lnbihhc3NpZ25EYXRhKVxuICAgIH1cblxuXG4gICAgLy8gUmV0dXJuIHRoZSBuZXcgY29udHJ1Y3RlZCBtb2RlbFxuICAgIHJldHVybiBuZXdJbnN0YW5jZVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgYW55Pn0gZGF0YSAtIERhdGEgcGF5bG9hZC5cbiAgICogQHJldHVybnMge1Byb21pc2U8SW5zdGFuY2VUeXBlPFRNQz4+fSAtIFJlc29sdmVzIHdpdGggdGhlIGNyZWF0ZS5cbiAgICovXG4gIGFzeW5jIGNyZWF0ZShkYXRhKSB7XG4gICAgY29uc3QgbW9kZWwgPSB0aGlzLmJ1aWxkKGRhdGEpXG5cbiAgICBhd2FpdCBtb2RlbC5zYXZlKClcblxuICAgIHJldHVybiBtb2RlbFxuICB9XG5cbiAgLyoqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fSAtIFJlc29sdmVzIHdoZW4gY29tcGxldGUuICAqL1xuICBhc3luYyBsb2FkKCkge1xuICAgIGNvbnN0IGZvcmVpZ25Nb2RlbHMgPSBhd2FpdCB0aGlzLnF1ZXJ5KCkudG9BcnJheSgpXG5cbiAgICB0aGlzLnNldExvYWRlZChmb3JlaWduTW9kZWxzKVxuICAgIHRoaXMuc2V0RGlydHkoZmFsc2UpXG4gICAgdGhpcy5zZXRQcmVsb2FkZWQodHJ1ZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uLy4uL3F1ZXJ5L2luZGV4LmpzXCIpLk5lc3RlZFByZWxvYWRSZWNvcmR9IHByZWxvYWRzIC0gUHJlbG9hZCBtYXAgZm9yIHJlbGF0ZWQgcmVjb3Jkcy5cbiAgICogQHJldHVybnMge2ltcG9ydChcIi4uLy4uL3F1ZXJ5L21vZGVsLWNsYXNzLXF1ZXJ5LmpzXCIpLmRlZmF1bHQ8VE1DPn0gLSBUaGUgcHJlbG9hZC5cbiAgICovXG4gIHByZWxvYWQocHJlbG9hZHMpIHtcbiAgICByZXR1cm4gdGhpcy5xdWVyeSgpLmNsb25lKCkucHJlbG9hZChwcmVsb2FkcylcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZyB8IG51bWJlcn0gbW9kZWxJRCAtIFJlbGF0ZWQgbW9kZWwgaWRlbnRpZmllci5cbiAgICogQHJldHVybnMge1Byb21pc2U8SW5zdGFuY2VUeXBlPFRNQz4+fSAtIFJlc29sdmVzIHdpdGggdGhlIGZpbmQuXG4gICAqL1xuICBhc3luYyBmaW5kKG1vZGVsSUQpIHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5xdWVyeSgpLmZpbmQobW9kZWxJRClcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vLi4vcXVlcnkvbW9kZWwtY2xhc3MtcXVlcnkuanNcIikuZGVmYXVsdDxUTUM+fSAtIFRoZSBxdWVyeS4gICovXG4gIHF1ZXJ5KCkge1xuICAgIGlmICghdGhpcy5nZXRNb2RlbCgpLmlzUGVyc2lzdGVkKCkpIHRocm93IG5ldyBFcnJvcihcIkNhbm5vdCBidWlsZCBhIHF1ZXJ5IGZvciBhbiB1bnBlcnNpc3RlZCBwYXJlbnQgbW9kZWxcIilcblxuICAgIGNvbnN0IFRhcmdldE1vZGVsQ2xhc3MgPSB0aGlzLmdldFRhcmdldE1vZGVsQ2xhc3MoKVxuXG4gICAgaWYgKCFUYXJnZXRNb2RlbENsYXNzKSB0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgbG9hZCB3aXRob3V0IGEgdGFyZ2V0IG1vZGVsIGNsYXNzXCIpXG5cbiAgICBjb25zdCB0aHJvdWdoUmVsYXRpb25zaGlwTmFtZSA9IHRoaXMuZ2V0UmVsYXRpb25zaGlwKCkudGhyb3VnaFxuXG4gICAgaWYgKHRocm91Z2hSZWxhdGlvbnNoaXBOYW1lKSB7XG4gICAgICBjb25zdCBwYXJlbnRNb2RlbENsYXNzID0gdGhpcy5nZXRNb2RlbCgpLmdldE1vZGVsQ2xhc3MoKVxuICAgICAgY29uc3QgdGhyb3VnaFJlbGF0aW9uc2hpcCA9IHBhcmVudE1vZGVsQ2xhc3MuZ2V0UmVsYXRpb25zaGlwQnlOYW1lKHRocm91Z2hSZWxhdGlvbnNoaXBOYW1lKVxuICAgICAgY29uc3QgdGhyb3VnaE1vZGVsQ2xhc3MgPSB0aHJvdWdoUmVsYXRpb25zaGlwLmdldFRhcmdldE1vZGVsQ2xhc3MoKVxuXG4gICAgICBpZiAoIXRocm91Z2hNb2RlbENsYXNzKSB0aHJvdyBuZXcgRXJyb3IoYFRocm91Z2ggcmVsYXRpb25zaGlwICR7dGhyb3VnaFJlbGF0aW9uc2hpcE5hbWV9IGhhcyBubyB0YXJnZXQgbW9kZWwgY2xhc3NgKVxuXG4gICAgICBjb25zdCB0aHJvdWdoRm9yZWlnbktleSA9IHRocm91Z2hSZWxhdGlvbnNoaXAuZ2V0Rm9yZWlnbktleSgpXG4gICAgICBjb25zdCB0aHJvdWdoUHJpbWFyeUtleSA9IHRocm91Z2hSZWxhdGlvbnNoaXAuZ2V0UHJpbWFyeUtleSgpXG4gICAgICBjb25zdCB0YXJnZXRGb3JlaWduS2V5ID0gdGhpcy5nZXRGb3JlaWduS2V5KClcbiAgICAgIGNvbnN0IHRhcmdldFRhYmxlID0gVGFyZ2V0TW9kZWxDbGFzcy50YWJsZU5hbWUoKVxuICAgICAgY29uc3QgdGhyb3VnaFRhYmxlID0gdGhyb3VnaE1vZGVsQ2xhc3MudGFibGVOYW1lKClcbiAgICAgIGNvbnN0IGRyaXZlciA9IFRhcmdldE1vZGVsQ2xhc3MuY29ubmVjdGlvbigpXG4gICAgICBjb25zdCBwYXJlbnRQcmltYXJ5S2V5ID0gdGhpcy5nZXRQcmltYXJ5S2V5KClcbiAgICBjb25zdCBwYXJlbnRJZCA9IC8qKiBAdHlwZSB7c3RyaW5nIHwgbnVtYmVyfSAqLyAodGhpcy5nZXRNb2RlbCgpLnJlYWRDb2x1bW4ocGFyZW50UHJpbWFyeUtleSkpXG4gICAgICBjb25zdCBqb2luU3FsID0gYExFRlQgSk9JTiAke2RyaXZlci5xdW90ZVRhYmxlKHRocm91Z2hUYWJsZSl9IE9OICR7ZHJpdmVyLnF1b3RlVGFibGUodGhyb3VnaFRhYmxlKX0uJHtkcml2ZXIucXVvdGVDb2x1bW4odGhyb3VnaFByaW1hcnlLZXkpfSA9ICR7ZHJpdmVyLnF1b3RlVGFibGUodGFyZ2V0VGFibGUpfS4ke2RyaXZlci5xdW90ZUNvbHVtbih0YXJnZXRGb3JlaWduS2V5KX1gXG4gICAgICBjb25zdCB3aGVyZVNxbCA9IGAke2RyaXZlci5xdW90ZVRhYmxlKHRocm91Z2hUYWJsZSl9LiR7ZHJpdmVyLnF1b3RlQ29sdW1uKHRocm91Z2hGb3JlaWduS2V5KX0gPSAke2RyaXZlci5vcHRpb25zKCkucXVvdGUocGFyZW50SWQpfWBcblxuICAgICAgY29uc3QgcXVlcnkgPSBUYXJnZXRNb2RlbENsYXNzLmpvaW5zKGpvaW5TcWwpLndoZXJlKHdoZXJlU3FsKVxuXG4gICAgICByZXR1cm4gdGhpcy5hcHBseVNjb3BlKHF1ZXJ5KVxuICAgIH1cblxuICAgIGNvbnN0IGZvcmVpZ25LZXkgPSB0aGlzLmdldEZvcmVpZ25LZXkoKVxuICAgIGNvbnN0IHByaW1hcnlLZXkgPSB0aGlzLmdldFByaW1hcnlLZXkoKVxuICAgIGNvbnN0IHByaW1hcnlNb2RlbElEID0gLyoqIEB0eXBlIHtzdHJpbmcgfCBudW1iZXJ9ICovICh0aGlzLmdldE1vZGVsKCkucmVhZENvbHVtbihwcmltYXJ5S2V5KSlcblxuICAgIC8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgc3RyaW5nIHwgbnVtYmVyPn0gKi9cbiAgICBjb25zdCB3aGVyZUFyZ3MgPSB7fVxuXG4gICAgd2hlcmVBcmdzW2ZvcmVpZ25LZXldID0gcHJpbWFyeU1vZGVsSURcblxuICAgIGNvbnN0IHF1ZXJ5ID0gVGFyZ2V0TW9kZWxDbGFzcy53aGVyZSh3aGVyZUFyZ3MpXG5cbiAgICByZXR1cm4gdGhpcy5hcHBseVNjb3BlKHF1ZXJ5KVxuICB9XG5cbiAgLyoqIEByZXR1cm5zIHtBcnJheTxJbnN0YW5jZVR5cGU8VE1DPj59IFRoZSBsb2FkZWQgbW9kZWwgb3IgbW9kZWxzIChkZXBlbmRpbmcgb24gcmVsYXRpb25zaGlwIHR5cGUpICovXG4gIGxvYWRlZCgpIHtcbiAgICBpZiAoIXRoaXMuX3ByZWxvYWRlZCAmJiB0aGlzLm1vZGVsLmlzUGVyc2lzdGVkKCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgJHt0aGlzLm1vZGVsLmNvbnN0cnVjdG9yLm5hbWV9IyR7dGhpcy5yZWxhdGlvbnNoaXAuZ2V0UmVsYXRpb25zaGlwTmFtZSgpfSBoYXNuJ3QgYmVlbiBwcmVsb2FkZWRgKVxuICAgIH1cblxuICAgIGlmICh0aGlzLl9sb2FkZWQgPT09IHVuZGVmaW5lZCAmJiB0aGlzLm1vZGVsLmlzTmV3UmVjb3JkKCkpIHtcbiAgICAgIHJldHVybiBbXVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9sb2FkZWRcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0luc3RhbmNlVHlwZTxNQz5bXSB8IEluc3RhbmNlVHlwZTxNQz59IG1vZGVscyAtIE1vZGVsIGluc3RhbmNlcy5cbiAgICogQHJldHVybnMge3ZvaWR9IC0gTm8gcmV0dXJuIHZhbHVlLlxuICAgKi9cbiAgYWRkVG9Mb2FkZWQobW9kZWxzKSB7XG4gICAgaWYgKCFtb2RlbHMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5lZWQgdG8gZ2l2ZSBzb21ldGhpbmdcIilcbiAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkobW9kZWxzKSkge1xuICAgICAgZm9yIChjb25zdCBtb2RlbCBvZiBtb2RlbHMpIHtcbiAgICAgICAgaWYgKHRoaXMuX2xvYWRlZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGhpcy5fbG9hZGVkID0gW21vZGVsXVxuICAgICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodGhpcy5fbG9hZGVkKSkge1xuICAgICAgICAgIHRoaXMuX2xvYWRlZC5wdXNoKG1vZGVsKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5leHBlY3RlZCBsb2FkZWQgdHlwZTogJHt0eXBlb2YgdGhpcy5fbG9hZGVkfWApXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHRoaXMuX2xvYWRlZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuX2xvYWRlZCA9IFttb2RlbHNdXG4gICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodGhpcy5fbG9hZGVkKSkge1xuICAgICAgICB0aGlzLl9sb2FkZWQucHVzaChtb2RlbHMpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuZXhwZWN0ZWQgbG9hZGVkIHR5cGU6ICR7dHlwZW9mIHRoaXMuX2xvYWRlZH1gKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0luc3RhbmNlVHlwZTxUTUM+W119IG1vZGVscyAtIE1vZGVsIGluc3RhbmNlcy5cbiAgICogQHJldHVybnMge3ZvaWR9IC0gTm8gcmV0dXJuIHZhbHVlLlxuICAgKi9cbiAgc2V0TG9hZGVkKG1vZGVscykge1xuICAgIGlmICghQXJyYXkuaXNBcnJheShtb2RlbHMpKSB0aHJvdyBuZXcgRXJyb3IoYEFyZ3VtZW50IGdpdmVuIHRvIHNldExvYWRlZCB3YXNuJ3QgYW4gYXJyYXk6ICR7dHlwZW9mIG1vZGVsc31gKVxuXG4gICAgdGhpcy5fbG9hZGVkID0gbW9kZWxzXG4gIH1cbn1cbiJdfQ==
180
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFzLW1hbnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvZGF0YWJhc2UvcmVjb3JkL2luc3RhbmNlLXJlbGF0aW9uc2hpcHMvaGFzLW1hbnkuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaLE9BQU8sd0JBQXdCLE1BQU0sV0FBVyxDQUFBO0FBRWhEOzs7OztHQUtHO0FBQ0gsTUFBTSxDQUFDLE9BQU8sT0FBTyxrREFBbUQsU0FBUSx3QkFBd0I7SUFDdEc7O09BRUc7SUFDSCxZQUFZLElBQUk7UUFDZCxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUE7SUFDYixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsS0FBSyxDQUFDLElBQUk7UUFDUix3Q0FBd0M7UUFDeEMsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQTtRQUVuRCxJQUFJLENBQUMsZ0JBQWdCO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxzREFBc0QsQ0FBQyxDQUFBO1FBRTlGLE1BQU0sV0FBVyxHQUFHLGdDQUFnQyxDQUFDLENBQUMsSUFBSSxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO1FBR2pGLG1EQUFtRDtRQUNuRCxJQUFJLElBQUksQ0FBQyxPQUFPLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDL0IsSUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFBO1FBQzlCLENBQUM7YUFBTSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDdkMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUE7UUFDaEMsQ0FBQzthQUFNLENBQUM7WUFDTixNQUFNLElBQUksS0FBSyxDQUFDLGtDQUFrQyxPQUFPLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFBO1FBQzFFLENBQUM7UUFHRCxpREFBaUQ7UUFD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Q0FBQyxPQUFPLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQTtZQUN6QixDQUFDO2lCQUFNLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztnQkFDdkMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUE7WUFDM0IsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLE1BQU0sSUFBSSxLQUFLLENBQUMsMkJBQTJCLE9BQU8sSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUE7WUFDbkUsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsU0FBUyxDQUFDLE1BQU07UUFDZCxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUM7WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLGdEQUFnRCxPQUFPLE1BQU0sRUFBRSxDQUFDLENBQUE7UUFFNUcsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUE7SUFDdkIsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbmltcG9ydCBCYXNlSW5zdGFuY2VSZWxhdGlvbnNoaXAgZnJvbSBcIi4vYmFzZS5qc1wiXG5cbi8qKlxuICogQSBnZW5lcmljIHF1ZXJ5IG92ZXIgc29tZSBtb2RlbCB0eXBlLlxuICogQHRlbXBsYXRlIHt0eXBlb2YgaW1wb3J0KFwiLi4vaW5kZXguanNcIikuZGVmYXVsdH0gTUNcbiAqIEB0ZW1wbGF0ZSB7dHlwZW9mIGltcG9ydChcIi4uL2luZGV4LmpzXCIpLmRlZmF1bHR9IFRNQ1xuICogQGV4dGVuZHMge0Jhc2VJbnN0YW5jZVJlbGF0aW9uc2hpcDxNQywgVE1DPn1cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVmVsb2Npb3VzRGF0YWJhc2VSZWNvcmRIYXNNYW55SW5zdGFuY2VSZWxhdGlvbnNoaXAgZXh0ZW5kcyBCYXNlSW5zdGFuY2VSZWxhdGlvbnNoaXAge1xuICAvKipcbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuL2Jhc2UuanNcIikuSW5zdGFuY2VSZWxhdGlvbnNoaXBzQmFzZUFyZ3M8TUMsIFRNQz59IGFyZ3MgLSBPcHRpb25zIG9iamVjdC5cbiAgICovXG4gIGNvbnN0cnVjdG9yKGFyZ3MpIHtcbiAgICBzdXBlcihhcmdzKVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgYW55Pn0gZGF0YSAtIERhdGEgcGF5bG9hZC5cbiAgICogQHJldHVybnMge0luc3RhbmNlVHlwZTxUTUM+fSAtIFRoZSBidWlsZC5cbiAgICovXG4gIGJ1aWxkKGRhdGEpIHtcbiAgICAvLyBTcGF3biBuZXcgbW9kZWwgb2YgdGhlIHRhcmdldGVkIGNsYXNzXG4gICAgY29uc3QgdGFyZ2V0TW9kZWxDbGFzcyA9IHRoaXMuZ2V0VGFyZ2V0TW9kZWxDbGFzcygpXG5cbiAgICBpZiAoIXRhcmdldE1vZGVsQ2xhc3MpIHRocm93IG5ldyBFcnJvcihcIkNhbid0IGJ1aWxkIGEgbmV3IHJlY29yZCB3aXRob3V0IGEgdGFnZXQgbW9kZWwgY2xhc3NcIilcblxuICAgIGNvbnN0IG5ld0luc3RhbmNlID0gLyoqIEB0eXBlIHtJbnN0YW5jZVR5cGU8VE1DPn0gKi8gKG5ldyB0YXJnZXRNb2RlbENsYXNzKGRhdGEpKVxuXG5cbiAgICAvLyBBZGQgaXQgdG8gdGhlIGxvYWRlZCBtb2RlbHMgb2YgdGhpcyByZWxhdGlvbnNoaXBcbiAgICBpZiAodGhpcy5fbG9hZGVkID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuX2xvYWRlZCA9IFtuZXdJbnN0YW5jZV1cbiAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodGhpcy5fbG9hZGVkKSkge1xuICAgICAgdGhpcy5fbG9hZGVkLnB1c2gobmV3SW5zdGFuY2UpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTG9hZGVkIGhhZCBhbiB1bmV4cGVjdGVkIHR5cGU6ICR7dHlwZW9mIHRoaXMuX2xvYWRlZH1gKVxuICAgIH1cblxuXG4gICAgLy8gU2V0IGxvYWRlZCBvbiB0aGUgbW9kZWxzIGludmVyc2VkIHJlbGF0aW9uc2hpcFxuICAgIGNvbnN0IGludmVyc2VPZiA9IHRoaXMuZ2V0UmVsYXRpb25zaGlwKCkuZ2V0SW52ZXJzZU9mKClcblxuICAgIGlmIChpbnZlcnNlT2YpIHtcbiAgICAgIGNvbnN0IGludmVyc2VJbnN0YW5jZVJlbGF0aW9uc2hpcCA9IG5ld0luc3RhbmNlLmdldFJlbGF0aW9uc2hpcEJ5TmFtZShpbnZlcnNlT2YpXG5cbiAgICAgIGludmVyc2VJbnN0YW5jZVJlbGF0aW9uc2hpcC5zZXRBdXRvU2F2ZShmYWxzZSlcbiAgICAgIGludmVyc2VJbnN0YW5jZVJlbGF0aW9uc2hpcC5zZXRMb2FkZWQodGhpcy5nZXRNb2RlbCgpKVxuICAgIH1cblxuXG4gICAgLy8gQXNzaWduIHRoZSBmb3JlaWduIGtleSB0byB0aGUgbmV3IG1vZGVsXG4gICAgY29uc3QgcGFyZW50TW9kZWwgPSB0aGlzLmdldE1vZGVsKClcblxuICAgIGlmIChwYXJlbnRNb2RlbC5pc1BlcnNpc3RlZCgpKSB7XG4gICAgICBjb25zdCBmb3JlaWduS2V5TmFtZSA9IHRoaXMuZ2V0Rm9yZWlnbktleSgpXG4gICAgICBjb25zdCBjb2x1bW5OYW1lTWFwID0gdGFyZ2V0TW9kZWxDbGFzcy5nZXRDb2x1bW5OYW1lVG9BdHRyaWJ1dGVOYW1lTWFwKClcbiAgICAgIGNvbnN0IGZvcmVpZ25LZXlBdHRyaWJ1dGVOYW1lID0gY29sdW1uTmFtZU1hcFtmb3JlaWduS2V5TmFtZV1cbiAgICAgIGlmICghZm9yZWlnbktleUF0dHJpYnV0ZU5hbWUpIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBmb3JlaWduIGtleSBhdHRyaWJ1dGUgbmFtZSBmb3IgJHtmb3JlaWduS2V5TmFtZX1gKVxuICAgICAgY29uc3QgcHJpbWFyeUtleU5hbWUgPSB0aGlzLmdldFByaW1hcnlLZXkoKVxuICAgICAgY29uc3QgZm9yZWlnbktleVZhbHVlID0gcGFyZW50TW9kZWwucmVhZENvbHVtbihwcmltYXJ5S2V5TmFtZSlcbiAgICAgIC8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgYW55Pn0gKi9cbiAgICAgIGNvbnN0IGFzc2lnbkRhdGEgPSB7fVxuXG4gICAgICBhc3NpZ25EYXRhW2ZvcmVpZ25LZXlBdHRyaWJ1dGVOYW1lXSA9IGZvcmVpZ25LZXlWYWx1ZVxuXG4gICAgICBuZXdJbnN0YW5jZS5hc3NpZ24oYXNzaWduRGF0YSlcbiAgICB9XG5cblxuICAgIC8vIFJldHVybiB0aGUgbmV3IGNvbnRydWN0ZWQgbW9kZWxcbiAgICByZXR1cm4gbmV3SW5zdGFuY2VcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIGFueT59IGRhdGEgLSBEYXRhIHBheWxvYWQuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPEluc3RhbmNlVHlwZTxUTUM+Pn0gLSBSZXNvbHZlcyB3aXRoIHRoZSBjcmVhdGUuXG4gICAqL1xuICBhc3luYyBjcmVhdGUoZGF0YSkge1xuICAgIGNvbnN0IG1vZGVsID0gdGhpcy5idWlsZChkYXRhKVxuXG4gICAgYXdhaXQgbW9kZWwuc2F2ZSgpXG5cbiAgICByZXR1cm4gbW9kZWxcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gLSBSZXNvbHZlcyB3aGVuIGNvbXBsZXRlLiAgKi9cbiAgYXN5bmMgbG9hZCgpIHtcbiAgICBjb25zdCBmb3JlaWduTW9kZWxzID0gLyoqIEB0eXBlIHtJbnN0YW5jZVR5cGU8VE1DPltdfSAqLyAoYXdhaXQgdGhpcy5xdWVyeSgpLnRvQXJyYXkoKSlcblxuICAgIHRoaXMuc2V0TG9hZGVkKGZvcmVpZ25Nb2RlbHMpXG4gICAgdGhpcy5zZXREaXJ0eShmYWxzZSlcbiAgICB0aGlzLnNldFByZWxvYWRlZCh0cnVlKVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vLi4vcXVlcnkvaW5kZXguanNcIikuTmVzdGVkUHJlbG9hZFJlY29yZH0gcHJlbG9hZHMgLSBQcmVsb2FkIG1hcCBmb3IgcmVsYXRlZCByZWNvcmRzLlxuICAgKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vLi4vcXVlcnkvbW9kZWwtY2xhc3MtcXVlcnkuanNcIikuZGVmYXVsdDxUTUM+fSAtIFRoZSBwcmVsb2FkLlxuICAgKi9cbiAgcHJlbG9hZChwcmVsb2Fkcykge1xuICAgIHJldHVybiB0aGlzLnF1ZXJ5KCkuY2xvbmUoKS5wcmVsb2FkKHByZWxvYWRzKVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgbnVtYmVyfSBtb2RlbElEIC0gUmVsYXRlZCBtb2RlbCBpZGVudGlmaWVyLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxJbnN0YW5jZVR5cGU8VE1DPj59IC0gUmVzb2x2ZXMgd2l0aCB0aGUgZmluZC5cbiAgICovXG4gIGFzeW5jIGZpbmQobW9kZWxJRCkge1xuICAgIHJldHVybiAvKiogQHR5cGUge1Byb21pc2U8SW5zdGFuY2VUeXBlPFRNQz4+fSAqLyAodGhpcy5xdWVyeSgpLmZpbmQobW9kZWxJRCkpXG4gIH1cblxuICAvKiogQHJldHVybnMge2ltcG9ydChcIi4uLy4uL3F1ZXJ5L21vZGVsLWNsYXNzLXF1ZXJ5LmpzXCIpLmRlZmF1bHQ8VE1DPn0gLSBUaGUgcXVlcnkuICAqL1xuICBxdWVyeSgpIHtcbiAgICBpZiAoIXRoaXMuZ2V0TW9kZWwoKS5pc1BlcnNpc3RlZCgpKSB0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgYnVpbGQgYSBxdWVyeSBmb3IgYW4gdW5wZXJzaXN0ZWQgcGFyZW50IG1vZGVsXCIpXG5cbiAgICBjb25zdCBUYXJnZXRNb2RlbENsYXNzID0gdGhpcy5nZXRUYXJnZXRNb2RlbENsYXNzKClcblxuICAgIGlmICghVGFyZ2V0TW9kZWxDbGFzcykgdGhyb3cgbmV3IEVycm9yKFwiQ2Fubm90IGxvYWQgd2l0aG91dCBhIHRhcmdldCBtb2RlbCBjbGFzc1wiKVxuXG4gICAgY29uc3QgdGhyb3VnaFJlbGF0aW9uc2hpcE5hbWUgPSB0aGlzLmdldFJlbGF0aW9uc2hpcCgpLnRocm91Z2hcblxuICAgIGlmICh0aHJvdWdoUmVsYXRpb25zaGlwTmFtZSkge1xuICAgICAgY29uc3QgcGFyZW50TW9kZWxDbGFzcyA9IHRoaXMuZ2V0TW9kZWwoKS5nZXRNb2RlbENsYXNzKClcbiAgICAgIGNvbnN0IHRocm91Z2hSZWxhdGlvbnNoaXAgPSBwYXJlbnRNb2RlbENsYXNzLmdldFJlbGF0aW9uc2hpcEJ5TmFtZSh0aHJvdWdoUmVsYXRpb25zaGlwTmFtZSlcbiAgICAgIGNvbnN0IHRocm91Z2hNb2RlbENsYXNzID0gdGhyb3VnaFJlbGF0aW9uc2hpcC5nZXRUYXJnZXRNb2RlbENsYXNzKClcblxuICAgICAgaWYgKCF0aHJvdWdoTW9kZWxDbGFzcykgdGhyb3cgbmV3IEVycm9yKGBUaHJvdWdoIHJlbGF0aW9uc2hpcCAke3Rocm91Z2hSZWxhdGlvbnNoaXBOYW1lfSBoYXMgbm8gdGFyZ2V0IG1vZGVsIGNsYXNzYClcblxuICAgICAgY29uc3QgdGhyb3VnaEZvcmVpZ25LZXkgPSB0aHJvdWdoUmVsYXRpb25zaGlwLmdldEZvcmVpZ25LZXkoKVxuICAgICAgY29uc3QgdGhyb3VnaFByaW1hcnlLZXkgPSB0aHJvdWdoUmVsYXRpb25zaGlwLmdldFByaW1hcnlLZXkoKVxuICAgICAgY29uc3QgdGFyZ2V0Rm9yZWlnbktleSA9IHRoaXMuZ2V0Rm9yZWlnbktleSgpXG4gICAgICBjb25zdCB0YXJnZXRUYWJsZSA9IFRhcmdldE1vZGVsQ2xhc3MudGFibGVOYW1lKClcbiAgICAgIGNvbnN0IHRocm91Z2hUYWJsZSA9IHRocm91Z2hNb2RlbENsYXNzLnRhYmxlTmFtZSgpXG4gICAgICBjb25zdCBkcml2ZXIgPSBUYXJnZXRNb2RlbENsYXNzLmNvbm5lY3Rpb24oKVxuICAgICAgY29uc3QgcGFyZW50UHJpbWFyeUtleSA9IHRoaXMuZ2V0UHJpbWFyeUtleSgpXG4gICAgICBjb25zdCBwYXJlbnRJZCA9IC8qKiBAdHlwZSB7c3RyaW5nIHwgbnVtYmVyfSAqLyAodGhpcy5nZXRNb2RlbCgpLnJlYWRDb2x1bW4ocGFyZW50UHJpbWFyeUtleSkpXG4gICAgICBjb25zdCBqb2luU3FsID0gYExFRlQgSk9JTiAke2RyaXZlci5xdW90ZVRhYmxlKHRocm91Z2hUYWJsZSl9IE9OICR7ZHJpdmVyLnF1b3RlVGFibGUodGhyb3VnaFRhYmxlKX0uJHtkcml2ZXIucXVvdGVDb2x1bW4odGhyb3VnaFByaW1hcnlLZXkpfSA9ICR7ZHJpdmVyLnF1b3RlVGFibGUodGFyZ2V0VGFibGUpfS4ke2RyaXZlci5xdW90ZUNvbHVtbih0YXJnZXRGb3JlaWduS2V5KX1gXG4gICAgICBjb25zdCB3aGVyZVNxbCA9IGAke2RyaXZlci5xdW90ZVRhYmxlKHRocm91Z2hUYWJsZSl9LiR7ZHJpdmVyLnF1b3RlQ29sdW1uKHRocm91Z2hGb3JlaWduS2V5KX0gPSAke2RyaXZlci5vcHRpb25zKCkucXVvdGUocGFyZW50SWQpfWBcblxuICAgICAgY29uc3QgcXVlcnkgPSBUYXJnZXRNb2RlbENsYXNzLmpvaW5zKGpvaW5TcWwpLndoZXJlKHdoZXJlU3FsKVxuXG4gICAgICByZXR1cm4gdGhpcy5hcHBseVNjb3BlKHF1ZXJ5KVxuICAgIH1cblxuICAgIGNvbnN0IGZvcmVpZ25LZXkgPSB0aGlzLmdldEZvcmVpZ25LZXkoKVxuICAgIGNvbnN0IHByaW1hcnlLZXkgPSB0aGlzLmdldFByaW1hcnlLZXkoKVxuICAgIGNvbnN0IHByaW1hcnlNb2RlbElEID0gLyoqIEB0eXBlIHtzdHJpbmcgfCBudW1iZXJ9ICovICh0aGlzLmdldE1vZGVsKCkucmVhZENvbHVtbihwcmltYXJ5S2V5KSlcblxuICAgIC8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgc3RyaW5nIHwgbnVtYmVyPn0gKi9cbiAgICBjb25zdCB3aGVyZUFyZ3MgPSB7fVxuXG4gICAgd2hlcmVBcmdzW2ZvcmVpZ25LZXldID0gcHJpbWFyeU1vZGVsSURcblxuICAgIGNvbnN0IHF1ZXJ5ID0gVGFyZ2V0TW9kZWxDbGFzcy53aGVyZSh3aGVyZUFyZ3MpXG5cbiAgICByZXR1cm4gdGhpcy5hcHBseVNjb3BlKHF1ZXJ5KVxuICB9XG5cbiAgLyoqIEByZXR1cm5zIHtBcnJheTxJbnN0YW5jZVR5cGU8VE1DPj59IFRoZSBsb2FkZWQgbW9kZWwgb3IgbW9kZWxzIChkZXBlbmRpbmcgb24gcmVsYXRpb25zaGlwIHR5cGUpICovXG4gIGxvYWRlZCgpIHtcbiAgICBpZiAoIXRoaXMuX3ByZWxvYWRlZCAmJiB0aGlzLm1vZGVsLmlzUGVyc2lzdGVkKCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgJHt0aGlzLm1vZGVsLmNvbnN0cnVjdG9yLm5hbWV9IyR7dGhpcy5yZWxhdGlvbnNoaXAuZ2V0UmVsYXRpb25zaGlwTmFtZSgpfSBoYXNuJ3QgYmVlbiBwcmVsb2FkZWRgKVxuICAgIH1cblxuICAgIGlmICh0aGlzLl9sb2FkZWQgPT09IHVuZGVmaW5lZCAmJiB0aGlzLm1vZGVsLmlzTmV3UmVjb3JkKCkpIHtcbiAgICAgIHJldHVybiBbXVxuICAgIH1cblxuICAgIHJldHVybiBBcnJheS5pc0FycmF5KHRoaXMuX2xvYWRlZCkgPyB0aGlzLl9sb2FkZWQgOiBbXVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7SW5zdGFuY2VUeXBlPFRNQz5bXSB8IEluc3RhbmNlVHlwZTxUTUM+fSBtb2RlbHMgLSBNb2RlbCBpbnN0YW5jZXMuXG4gICAqIEByZXR1cm5zIHt2b2lkfSAtIE5vIHJldHVybiB2YWx1ZS5cbiAgICovXG4gIGFkZFRvTG9hZGVkKG1vZGVscykge1xuICAgIGlmICghbW9kZWxzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJOZWVkIHRvIGdpdmUgc29tZXRoaW5nXCIpXG4gICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KG1vZGVscykpIHtcbiAgICAgIGZvciAoY29uc3QgbW9kZWwgb2YgbW9kZWxzKSB7XG4gICAgICAgIGlmICh0aGlzLl9sb2FkZWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRoaXMuX2xvYWRlZCA9IFttb2RlbF1cbiAgICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHRoaXMuX2xvYWRlZCkpIHtcbiAgICAgICAgICB0aGlzLl9sb2FkZWQucHVzaChtb2RlbClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuZXhwZWN0ZWQgbG9hZGVkIHR5cGU6ICR7dHlwZW9mIHRoaXMuX2xvYWRlZH1gKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLl9sb2FkZWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLl9sb2FkZWQgPSBbbW9kZWxzXVxuICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHRoaXMuX2xvYWRlZCkpIHtcbiAgICAgICAgdGhpcy5fbG9hZGVkLnB1c2gobW9kZWxzKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmV4cGVjdGVkIGxvYWRlZCB0eXBlOiAke3R5cGVvZiB0aGlzLl9sb2FkZWR9YClcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtJbnN0YW5jZVR5cGU8VE1DPltdfSBtb2RlbHMgLSBNb2RlbCBpbnN0YW5jZXMuXG4gICAqIEByZXR1cm5zIHt2b2lkfSAtIE5vIHJldHVybiB2YWx1ZS5cbiAgICovXG4gIHNldExvYWRlZChtb2RlbHMpIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkobW9kZWxzKSkgdGhyb3cgbmV3IEVycm9yKGBBcmd1bWVudCBnaXZlbiB0byBzZXRMb2FkZWQgd2Fzbid0IGFuIGFycmF5OiAke3R5cGVvZiBtb2RlbHN9YClcblxuICAgIHRoaXMuX2xvYWRlZCA9IG1vZGVsc1xuICB9XG59XG4iXX0=
@@ -2,23 +2,16 @@
2
2
  * A generic query over some model type.
3
3
  * @template {typeof import("../index.js").default} MC
4
4
  * @template {typeof import("../index.js").default} TMC
5
+ * @augments {BaseInstanceRelationship<MC, TMC>}
5
6
  */
6
- export default class VelociousDatabaseRecordHasOneInstanceRelationship<MC extends typeof import("../index.js").default, TMC extends typeof import("../index.js").default> extends BaseInstanceRelationship<any, any> {
7
- /** @type {InstanceType<TMC> | undefined} */
8
- _loaded: InstanceType<TMC> | undefined;
9
- /**
10
- * @param {Record<string, any>} data - Data payload.
11
- * @returns {InstanceType<TMC>} - The build.
12
- */
13
- build(data: Record<string, any>): InstanceType<TMC>;
7
+ export default class VelociousDatabaseRecordHasOneInstanceRelationship<MC extends typeof import("../index.js").default, TMC extends typeof import("../index.js").default> extends BaseInstanceRelationship<MC, TMC> {
14
8
  /**
15
- * @returns {InstanceType<TMC> | Array<InstanceType<TMC>> | undefined} The loaded model or models (depending on relationship type)
9
+ * @param {import("./base.js").InstanceRelationshipsBaseArgs<MC, TMC>} args - Options object.
16
10
  */
17
- loaded(): InstanceType<TMC> | Array<InstanceType<TMC>> | undefined;
18
- getLoadedOrUndefined(): InstanceType<TMC>;
19
- /** @param {InstanceType<TMC> | Array<InstanceType<TMC>>} model - Related model(s). */
20
- setLoaded(model: InstanceType<TMC> | Array<InstanceType<TMC>>): void;
21
- getTargetModelClass(): typeof import("../index.js").default;
11
+ constructor(args: import("./base.js").InstanceRelationshipsBaseArgs<MC, TMC>);
12
+ /** @type {InstanceType<TMC> | undefined} */
13
+ _loaded: InstanceType<TMC> | undefined;
14
+ getLoadedOrUndefined(): InstanceType<TMC> | undefined;
22
15
  }
23
16
  import BaseInstanceRelationship from "./base.js";
24
17
  //# sourceMappingURL=has-one.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"has-one.d.ts","sourceRoot":"","sources":["../../../../../src/database/record/instance-relationships/has-one.js"],"names":[],"mappings":"AAIA;;;;GAIG;AACH,uEAHoD,EAAE,SAAzC,cAAe,aAAa,EAAE,OAAQ,EACC,GAAG,SAA1C,cAAe,aAAa,EAAE,OAAQ;IAUjD,4CAA4C;IAC5C,SADW,YAAY,CAAC,GAAG,CAAC,GAAG,SAAS,CACrB;IAEnB;;;OAGG;IACH,YAHW,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GACjB,YAAY,CAAC,GAAG,CAAC,CAY7B;IA0BD;;OAEG;IACH,UAFa,YAAY,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,GAAG,SAAS,CAQpE;IAED,0CAA8C;IAE9C,sFAAsF;IACtF,iBADY,YAAY,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,QAKvD;IAED,4DAAwE;CACzE;qCA/EoC,WAAW"}
1
+ {"version":3,"file":"has-one.d.ts","sourceRoot":"","sources":["../../../../../src/database/record/instance-relationships/has-one.js"],"names":[],"mappings":"AAIA;;;;;GAKG;AACH,uEAJoD,EAAE,SAAzC,cAAe,aAAa,EAAE,OAAQ,EACC,GAAG,SAA1C,cAAe,aAAa,EAAE,OAAQ;IAIjD;;OAEG;IACH,kBAFW,OAAO,WAAW,EAAE,6BAA6B,CAAC,EAAE,EAAE,GAAG,CAAC,EAIpE;IAED,4CAA4C;IAC5C,SADW,YAAY,CAAC,GAAG,CAAC,GAAG,SAAS,CACrB;IAyDnB,sDAA8C;CAU/C;qCApFoC,WAAW"}
@@ -4,6 +4,7 @@ import BaseInstanceRelationship from "./base.js";
4
4
  * A generic query over some model type.
5
5
  * @template {typeof import("../index.js").default} MC
6
6
  * @template {typeof import("../index.js").default} TMC
7
+ * @augments {BaseInstanceRelationship<MC, TMC>}
7
8
  */
8
9
  export default class VelociousDatabaseRecordHasOneInstanceRelationship extends BaseInstanceRelationship {
9
10
  /**
@@ -38,8 +39,13 @@ export default class VelociousDatabaseRecordHasOneInstanceRelationship extends B
38
39
  whereArgs[foreignKey] = primaryModelID;
39
40
  let query = TargetModelClass.where(whereArgs);
40
41
  query = this.applyScope(query);
41
- const foreignModel = /** @type {InstanceType<TMC>} */ (await query.first());
42
- this.setLoaded(foreignModel);
42
+ const foreignModel = await query.first();
43
+ if (foreignModel) {
44
+ this.setLoaded(foreignModel);
45
+ }
46
+ else {
47
+ this.setLoaded(undefined);
48
+ }
43
49
  this.setDirty(false);
44
50
  this.setPreloaded(true);
45
51
  }
@@ -53,12 +59,12 @@ export default class VelociousDatabaseRecordHasOneInstanceRelationship extends B
53
59
  return this._loaded;
54
60
  }
55
61
  getLoadedOrUndefined() { return this._loaded; }
56
- /** @param {InstanceType<TMC> | Array<InstanceType<TMC>>} model - Related model(s). */
62
+ /** @param {InstanceType<TMC> | Array<InstanceType<TMC>> | undefined} model - Related model(s). */
57
63
  setLoaded(model) {
58
64
  if (Array.isArray(model))
59
65
  throw new Error(`Argument given to setLoaded was an array: ${typeof model}`);
60
66
  this._loaded = model;
61
67
  }
62
- getTargetModelClass() { return this.relationship.getTargetModelClass(); }
68
+ getTargetModelClass() { return /** @type {TMC | undefined} */ (this.relationship.getTargetModelClass()); }
63
69
  }
64
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFzLW9uZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9kYXRhYmFzZS9yZWNvcmQvaW5zdGFuY2UtcmVsYXRpb25zaGlwcy9oYXMtb25lLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWixPQUFPLHdCQUF3QixNQUFNLFdBQVcsQ0FBQTtBQUVoRDs7OztHQUlHO0FBQ0gsTUFBTSxDQUFDLE9BQU8sT0FBTyxpREFBa0QsU0FBUSx3QkFBd0I7SUFDckc7O09BRUc7SUFDSCxZQUFZLElBQUk7UUFDZCxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUE7SUFDYixDQUFDO0lBRUQsNENBQTRDO0lBQzVDLE9BQU8sR0FBRyxTQUFTLENBQUE7SUFFbkI7OztPQUdHO0lBQ0gsS0FBSyxDQUFDLElBQUk7UUFDUixNQUFNLGdCQUFnQixHQUFHLGtCQUFrQixDQUFDLENBQUMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUMsQ0FBQTtRQUV4RSxJQUFJLENBQUMsZ0JBQWdCO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyx1REFBdUQsQ0FBQyxDQUFBO1FBRS9GLE1BQU0sV0FBVyxHQUFHLGdDQUFnQyxDQUFDLENBQUMsSUFBSSxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO1FBRWpGLElBQUksQ0FBQyxPQUFPLEdBQUcsV0FBVyxDQUFBO1FBRTFCLE9BQU8sV0FBVyxDQUFBO0lBQ3BCLENBQUM7SUFFRCxLQUFLLENBQUMsSUFBSTtRQUNSLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQTtRQUN2QyxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUE7UUFDdkMsTUFBTSxjQUFjLEdBQUcsOEJBQThCLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUE7UUFDOUYsTUFBTSxnQkFBZ0IsR0FBRyxrQkFBa0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLENBQUE7UUFFeEUsSUFBSSxDQUFDLGdCQUFnQjtZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMseUNBQXlDLENBQUMsQ0FBQTtRQUVqRiw4Q0FBOEM7UUFDOUMsTUFBTSxTQUFTLEdBQUcsRUFBRSxDQUFBO1FBRXBCLFNBQVMsQ0FBQyxVQUFVLENBQUMsR0FBRyxjQUFjLENBQUE7UUFFdEMsSUFBSSxLQUFLLEdBQUcsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFBO1FBRTdDLEtBQUssR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBRTlCLE1BQU0sWUFBWSxHQUFHLGdDQUFnQyxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQTtRQUUzRSxJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxDQUFBO1FBQzVCLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUE7UUFDcEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQTtJQUN6QixDQUFDO0lBRUQ7O09BRUc7SUFDSCxNQUFNO1FBQ0osSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDO1lBQ2pELE1BQU0sSUFBSSxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxtQkFBbUIsRUFBRSx3QkFBd0IsQ0FBQyxDQUFBO1FBQ3BILENBQUM7UUFFRCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUE7SUFDckIsQ0FBQztJQUVELG9CQUFvQixLQUFLLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQSxDQUFDLENBQUM7SUFFOUMsc0ZBQXNGO0lBQ3RGLFNBQVMsQ0FBQyxLQUFLO1FBQ2IsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsNkNBQTZDLE9BQU8sS0FBSyxFQUFFLENBQUMsQ0FBQTtRQUV0RyxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQTtJQUN0QixDQUFDO0lBRUQsbUJBQW1CLEtBQUssT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLG1CQUFtQixFQUFFLENBQUEsQ0FBQyxDQUFDO0NBQ3pFIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbmltcG9ydCBCYXNlSW5zdGFuY2VSZWxhdGlvbnNoaXAgZnJvbSBcIi4vYmFzZS5qc1wiXG5cbi8qKlxuICogQSBnZW5lcmljIHF1ZXJ5IG92ZXIgc29tZSBtb2RlbCB0eXBlLlxuICogQHRlbXBsYXRlIHt0eXBlb2YgaW1wb3J0KFwiLi4vaW5kZXguanNcIikuZGVmYXVsdH0gTUNcbiAqIEB0ZW1wbGF0ZSB7dHlwZW9mIGltcG9ydChcIi4uL2luZGV4LmpzXCIpLmRlZmF1bHR9IFRNQ1xuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWZWxvY2lvdXNEYXRhYmFzZVJlY29yZEhhc09uZUluc3RhbmNlUmVsYXRpb25zaGlwIGV4dGVuZHMgQmFzZUluc3RhbmNlUmVsYXRpb25zaGlwIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi9iYXNlLmpzXCIpLkluc3RhbmNlUmVsYXRpb25zaGlwc0Jhc2VBcmdzPE1DLCBUTUM+fSBhcmdzIC0gT3B0aW9ucyBvYmplY3QuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihhcmdzKSB7XG4gICAgc3VwZXIoYXJncylcbiAgfVxuXG4gIC8qKiBAdHlwZSB7SW5zdGFuY2VUeXBlPFRNQz4gfCB1bmRlZmluZWR9ICovXG4gIF9sb2FkZWQgPSB1bmRlZmluZWRcblxuICAvKipcbiAgICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBhbnk+fSBkYXRhIC0gRGF0YSBwYXlsb2FkLlxuICAgKiBAcmV0dXJucyB7SW5zdGFuY2VUeXBlPFRNQz59IC0gVGhlIGJ1aWxkLlxuICAgKi9cbiAgYnVpbGQoZGF0YSkge1xuICAgIGNvbnN0IFRhcmdldE1vZGVsQ2xhc3MgPSAvKiogQHR5cGUge1RNQ30gKi8gKHRoaXMuZ2V0VGFyZ2V0TW9kZWxDbGFzcygpKVxuXG4gICAgaWYgKCFUYXJnZXRNb2RlbENsYXNzKSB0aHJvdyBuZXcgRXJyb3IoXCJDYW4ndCBidWlsZCBhIG5ldyByZWNvcmQgd2l0aG91dCBhIHRhcmdldCBtb2RlbCBjbGFzc1wiKVxuXG4gICAgY29uc3QgbmV3SW5zdGFuY2UgPSAvKiogQHR5cGUge0luc3RhbmNlVHlwZTxUTUM+fSAqLyAobmV3IFRhcmdldE1vZGVsQ2xhc3MoZGF0YSkpXG5cbiAgICB0aGlzLl9sb2FkZWQgPSBuZXdJbnN0YW5jZVxuXG4gICAgcmV0dXJuIG5ld0luc3RhbmNlXG4gIH1cblxuICBhc3luYyBsb2FkKCkge1xuICAgIGNvbnN0IGZvcmVpZ25LZXkgPSB0aGlzLmdldEZvcmVpZ25LZXkoKVxuICAgIGNvbnN0IHByaW1hcnlLZXkgPSB0aGlzLmdldFByaW1hcnlLZXkoKVxuICAgIGNvbnN0IHByaW1hcnlNb2RlbElEID0gLyoqIEB0eXBlIHtzdHJpbmcgfCBudW1iZXJ9ICovICh0aGlzLmdldE1vZGVsKCkucmVhZENvbHVtbihwcmltYXJ5S2V5KSlcbiAgICBjb25zdCBUYXJnZXRNb2RlbENsYXNzID0gLyoqIEB0eXBlIHtUTUN9ICovICh0aGlzLmdldFRhcmdldE1vZGVsQ2xhc3MoKSlcblxuICAgIGlmICghVGFyZ2V0TW9kZWxDbGFzcykgdGhyb3cgbmV3IEVycm9yKFwiQ2FuJ3QgbG9hZCB3aXRob3V0IGEgdGFyZ2V0IG1vZGVsIGNsYXNzXCIpXG5cbiAgICAvKiogQHR5cGUge1JlY29yZDxzdHJpbmcsIHN0cmluZyB8IG51bWJlcj59ICovXG4gICAgY29uc3Qgd2hlcmVBcmdzID0ge31cblxuICAgIHdoZXJlQXJnc1tmb3JlaWduS2V5XSA9IHByaW1hcnlNb2RlbElEXG5cbiAgICBsZXQgcXVlcnkgPSBUYXJnZXRNb2RlbENsYXNzLndoZXJlKHdoZXJlQXJncylcblxuICAgIHF1ZXJ5ID0gdGhpcy5hcHBseVNjb3BlKHF1ZXJ5KVxuXG4gICAgY29uc3QgZm9yZWlnbk1vZGVsID0gLyoqIEB0eXBlIHtJbnN0YW5jZVR5cGU8VE1DPn0gKi8gKGF3YWl0IHF1ZXJ5LmZpcnN0KCkpXG5cbiAgICB0aGlzLnNldExvYWRlZChmb3JlaWduTW9kZWwpXG4gICAgdGhpcy5zZXREaXJ0eShmYWxzZSlcbiAgICB0aGlzLnNldFByZWxvYWRlZCh0cnVlKVxuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHtJbnN0YW5jZVR5cGU8VE1DPiB8IEFycmF5PEluc3RhbmNlVHlwZTxUTUM+PiB8IHVuZGVmaW5lZH0gVGhlIGxvYWRlZCBtb2RlbCBvciBtb2RlbHMgKGRlcGVuZGluZyBvbiByZWxhdGlvbnNoaXAgdHlwZSlcbiAgICovXG4gIGxvYWRlZCgpIHtcbiAgICBpZiAoIXRoaXMuX3ByZWxvYWRlZCAmJiB0aGlzLm1vZGVsLmlzUGVyc2lzdGVkKCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgJHt0aGlzLm1vZGVsLmNvbnN0cnVjdG9yLm5hbWV9IyR7dGhpcy5yZWxhdGlvbnNoaXAuZ2V0UmVsYXRpb25zaGlwTmFtZSgpfSBoYXNuJ3QgYmVlbiBwcmVsb2FkZWRgKVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9sb2FkZWRcbiAgfVxuXG4gIGdldExvYWRlZE9yVW5kZWZpbmVkKCkgeyByZXR1cm4gdGhpcy5fbG9hZGVkIH1cblxuICAvKiogQHBhcmFtIHtJbnN0YW5jZVR5cGU8VE1DPiB8IEFycmF5PEluc3RhbmNlVHlwZTxUTUM+Pn0gbW9kZWwgLSBSZWxhdGVkIG1vZGVsKHMpLiAqL1xuICBzZXRMb2FkZWQobW9kZWwpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShtb2RlbCkpIHRocm93IG5ldyBFcnJvcihgQXJndW1lbnQgZ2l2ZW4gdG8gc2V0TG9hZGVkIHdhcyBhbiBhcnJheTogJHt0eXBlb2YgbW9kZWx9YClcblxuICAgIHRoaXMuX2xvYWRlZCA9IG1vZGVsXG4gIH1cblxuICBnZXRUYXJnZXRNb2RlbENsYXNzKCkgeyByZXR1cm4gdGhpcy5yZWxhdGlvbnNoaXAuZ2V0VGFyZ2V0TW9kZWxDbGFzcygpIH1cbn1cbiJdfQ==
70
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFzLW9uZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9kYXRhYmFzZS9yZWNvcmQvaW5zdGFuY2UtcmVsYXRpb25zaGlwcy9oYXMtb25lLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWixPQUFPLHdCQUF3QixNQUFNLFdBQVcsQ0FBQTtBQUVoRDs7Ozs7R0FLRztBQUNILE1BQU0sQ0FBQyxPQUFPLE9BQU8saURBQWtELFNBQVEsd0JBQXdCO0lBQ3JHOztPQUVHO0lBQ0gsWUFBWSxJQUFJO1FBQ2QsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFBO0lBQ2IsQ0FBQztJQUVELDRDQUE0QztJQUM1QyxPQUFPLEdBQUcsU0FBUyxDQUFBO0lBRW5COzs7T0FHRztJQUNILEtBQUssQ0FBQyxJQUFJO1FBQ1IsTUFBTSxnQkFBZ0IsR0FBRyxrQkFBa0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLENBQUE7UUFFeEUsSUFBSSxDQUFDLGdCQUFnQjtZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsdURBQXVELENBQUMsQ0FBQTtRQUUvRixNQUFNLFdBQVcsR0FBRyxnQ0FBZ0MsQ0FBQyxDQUFDLElBQUksZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQTtRQUVqRixJQUFJLENBQUMsT0FBTyxHQUFHLFdBQVcsQ0FBQTtRQUUxQixPQUFPLFdBQVcsQ0FBQTtJQUNwQixDQUFDO0lBRUQsS0FBSyxDQUFDLElBQUk7UUFDUixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUE7UUFDdkMsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFBO1FBQ3ZDLE1BQU0sY0FBYyxHQUFHLDhCQUE4QixDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFBO1FBQzlGLE1BQU0sZ0JBQWdCLEdBQUcsa0JBQWtCLENBQUMsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxDQUFBO1FBRXhFLElBQUksQ0FBQyxnQkFBZ0I7WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLHlDQUF5QyxDQUFDLENBQUE7UUFFakYsOENBQThDO1FBQzlDLE1BQU0sU0FBUyxHQUFHLEVBQUUsQ0FBQTtRQUVwQixTQUFTLENBQUMsVUFBVSxDQUFDLEdBQUcsY0FBYyxDQUFBO1FBRXRDLElBQUksS0FBSyxHQUFHLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQTtRQUU3QyxLQUFLLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUU5QixNQUFNLFlBQVksR0FBRyxNQUFNLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQTtRQUV4QyxJQUFJLFlBQVksRUFBRSxDQUFDO1lBQ2pCLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLENBQUE7UUFDOUIsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFBO1FBQzNCLENBQUM7UUFDRCxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBQ3BCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUE7SUFDekIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsTUFBTTtRQUNKLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQztZQUNqRCxNQUFNLElBQUksS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsbUJBQW1CLEVBQUUsd0JBQXdCLENBQUMsQ0FBQTtRQUNwSCxDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFBO0lBQ3JCLENBQUM7SUFFRCxvQkFBb0IsS0FBSyxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUEsQ0FBQyxDQUFDO0lBRTlDLGtHQUFrRztJQUNsRyxTQUFTLENBQUMsS0FBSztRQUNiLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLDZDQUE2QyxPQUFPLEtBQUssRUFBRSxDQUFDLENBQUE7UUFFdEcsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUE7SUFDdEIsQ0FBQztJQUVELG1CQUFtQixLQUFLLE9BQU8sOEJBQThCLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLG1CQUFtQixFQUFFLENBQUMsQ0FBQSxDQUFDLENBQUM7Q0FDMUciLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuaW1wb3J0IEJhc2VJbnN0YW5jZVJlbGF0aW9uc2hpcCBmcm9tIFwiLi9iYXNlLmpzXCJcblxuLyoqXG4gKiBBIGdlbmVyaWMgcXVlcnkgb3ZlciBzb21lIG1vZGVsIHR5cGUuXG4gKiBAdGVtcGxhdGUge3R5cGVvZiBpbXBvcnQoXCIuLi9pbmRleC5qc1wiKS5kZWZhdWx0fSBNQ1xuICogQHRlbXBsYXRlIHt0eXBlb2YgaW1wb3J0KFwiLi4vaW5kZXguanNcIikuZGVmYXVsdH0gVE1DXG4gKiBAYXVnbWVudHMge0Jhc2VJbnN0YW5jZVJlbGF0aW9uc2hpcDxNQywgVE1DPn1cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVmVsb2Npb3VzRGF0YWJhc2VSZWNvcmRIYXNPbmVJbnN0YW5jZVJlbGF0aW9uc2hpcCBleHRlbmRzIEJhc2VJbnN0YW5jZVJlbGF0aW9uc2hpcCB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4vYmFzZS5qc1wiKS5JbnN0YW5jZVJlbGF0aW9uc2hpcHNCYXNlQXJnczxNQywgVE1DPn0gYXJncyAtIE9wdGlvbnMgb2JqZWN0LlxuICAgKi9cbiAgY29uc3RydWN0b3IoYXJncykge1xuICAgIHN1cGVyKGFyZ3MpXG4gIH1cblxuICAvKiogQHR5cGUge0luc3RhbmNlVHlwZTxUTUM+IHwgdW5kZWZpbmVkfSAqL1xuICBfbG9hZGVkID0gdW5kZWZpbmVkXG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgYW55Pn0gZGF0YSAtIERhdGEgcGF5bG9hZC5cbiAgICogQHJldHVybnMge0luc3RhbmNlVHlwZTxUTUM+fSAtIFRoZSBidWlsZC5cbiAgICovXG4gIGJ1aWxkKGRhdGEpIHtcbiAgICBjb25zdCBUYXJnZXRNb2RlbENsYXNzID0gLyoqIEB0eXBlIHtUTUN9ICovICh0aGlzLmdldFRhcmdldE1vZGVsQ2xhc3MoKSlcblxuICAgIGlmICghVGFyZ2V0TW9kZWxDbGFzcykgdGhyb3cgbmV3IEVycm9yKFwiQ2FuJ3QgYnVpbGQgYSBuZXcgcmVjb3JkIHdpdGhvdXQgYSB0YXJnZXQgbW9kZWwgY2xhc3NcIilcblxuICAgIGNvbnN0IG5ld0luc3RhbmNlID0gLyoqIEB0eXBlIHtJbnN0YW5jZVR5cGU8VE1DPn0gKi8gKG5ldyBUYXJnZXRNb2RlbENsYXNzKGRhdGEpKVxuXG4gICAgdGhpcy5fbG9hZGVkID0gbmV3SW5zdGFuY2VcblxuICAgIHJldHVybiBuZXdJbnN0YW5jZVxuICB9XG5cbiAgYXN5bmMgbG9hZCgpIHtcbiAgICBjb25zdCBmb3JlaWduS2V5ID0gdGhpcy5nZXRGb3JlaWduS2V5KClcbiAgICBjb25zdCBwcmltYXJ5S2V5ID0gdGhpcy5nZXRQcmltYXJ5S2V5KClcbiAgICBjb25zdCBwcmltYXJ5TW9kZWxJRCA9IC8qKiBAdHlwZSB7c3RyaW5nIHwgbnVtYmVyfSAqLyAodGhpcy5nZXRNb2RlbCgpLnJlYWRDb2x1bW4ocHJpbWFyeUtleSkpXG4gICAgY29uc3QgVGFyZ2V0TW9kZWxDbGFzcyA9IC8qKiBAdHlwZSB7VE1DfSAqLyAodGhpcy5nZXRUYXJnZXRNb2RlbENsYXNzKCkpXG5cbiAgICBpZiAoIVRhcmdldE1vZGVsQ2xhc3MpIHRocm93IG5ldyBFcnJvcihcIkNhbid0IGxvYWQgd2l0aG91dCBhIHRhcmdldCBtb2RlbCBjbGFzc1wiKVxuXG4gICAgLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBudW1iZXI+fSAqL1xuICAgIGNvbnN0IHdoZXJlQXJncyA9IHt9XG5cbiAgICB3aGVyZUFyZ3NbZm9yZWlnbktleV0gPSBwcmltYXJ5TW9kZWxJRFxuXG4gICAgbGV0IHF1ZXJ5ID0gVGFyZ2V0TW9kZWxDbGFzcy53aGVyZSh3aGVyZUFyZ3MpXG5cbiAgICBxdWVyeSA9IHRoaXMuYXBwbHlTY29wZShxdWVyeSlcblxuICAgIGNvbnN0IGZvcmVpZ25Nb2RlbCA9IGF3YWl0IHF1ZXJ5LmZpcnN0KClcblxuICAgIGlmIChmb3JlaWduTW9kZWwpIHtcbiAgICAgIHRoaXMuc2V0TG9hZGVkKGZvcmVpZ25Nb2RlbClcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZXRMb2FkZWQodW5kZWZpbmVkKVxuICAgIH1cbiAgICB0aGlzLnNldERpcnR5KGZhbHNlKVxuICAgIHRoaXMuc2V0UHJlbG9hZGVkKHRydWUpXG4gIH1cblxuICAvKipcbiAgICogQHJldHVybnMge0luc3RhbmNlVHlwZTxUTUM+IHwgQXJyYXk8SW5zdGFuY2VUeXBlPFRNQz4+IHwgdW5kZWZpbmVkfSBUaGUgbG9hZGVkIG1vZGVsIG9yIG1vZGVscyAoZGVwZW5kaW5nIG9uIHJlbGF0aW9uc2hpcCB0eXBlKVxuICAgKi9cbiAgbG9hZGVkKCkge1xuICAgIGlmICghdGhpcy5fcHJlbG9hZGVkICYmIHRoaXMubW9kZWwuaXNQZXJzaXN0ZWQoKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGAke3RoaXMubW9kZWwuY29uc3RydWN0b3IubmFtZX0jJHt0aGlzLnJlbGF0aW9uc2hpcC5nZXRSZWxhdGlvbnNoaXBOYW1lKCl9IGhhc24ndCBiZWVuIHByZWxvYWRlZGApXG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX2xvYWRlZFxuICB9XG5cbiAgZ2V0TG9hZGVkT3JVbmRlZmluZWQoKSB7IHJldHVybiB0aGlzLl9sb2FkZWQgfVxuXG4gIC8qKiBAcGFyYW0ge0luc3RhbmNlVHlwZTxUTUM+IHwgQXJyYXk8SW5zdGFuY2VUeXBlPFRNQz4+IHwgdW5kZWZpbmVkfSBtb2RlbCAtIFJlbGF0ZWQgbW9kZWwocykuICovXG4gIHNldExvYWRlZChtb2RlbCkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KG1vZGVsKSkgdGhyb3cgbmV3IEVycm9yKGBBcmd1bWVudCBnaXZlbiB0byBzZXRMb2FkZWQgd2FzIGFuIGFycmF5OiAke3R5cGVvZiBtb2RlbH1gKVxuXG4gICAgdGhpcy5fbG9hZGVkID0gbW9kZWxcbiAgfVxuXG4gIGdldFRhcmdldE1vZGVsQ2xhc3MoKSB7IHJldHVybiAvKiogQHR5cGUge1RNQyB8IHVuZGVmaW5lZH0gKi8gKHRoaXMucmVsYXRpb25zaGlwLmdldFRhcmdldE1vZGVsQ2xhc3MoKSkgfVxufVxuIl19
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @typedef {(query: import("../../query/model-class-query.js").default) => (import("../../query/model-class-query.js").default | void)} RelationshipScopeCallback
2
+ * @typedef {(query: import("../../query/model-class-query.js").default<any>) => (import("../../query/model-class-query.js").default<any> | void)} RelationshipScopeCallback
3
3
  */
4
4
  /**
5
5
  * @typedef {object} RelationshipBaseArgsType
@@ -19,17 +19,17 @@
19
19
  export default class VelociousDatabaseRecordBaseRelationship {
20
20
  /** @param {RelationshipBaseArgsType} args - Relationship definition arguments. */
21
21
  constructor({ className, dependent, foreignKey, inverseOf, klass, modelClass, primaryKey, polymorphic, relationshipName, scope, through, type, ...restArgs }: RelationshipBaseArgsType);
22
- className: string;
23
- _dependent: string;
24
- foreignKey: string;
25
- _inverseOf: string;
26
- klass: typeof import("../index.js").default;
22
+ className: string | undefined;
23
+ _dependent: string | undefined;
24
+ foreignKey: string | undefined;
25
+ _inverseOf: string | undefined;
26
+ klass: typeof import("../index.js").default | undefined;
27
27
  modelClass: typeof import("../index.js").default;
28
- _polymorphic: boolean;
28
+ _polymorphic: boolean | undefined;
29
29
  _primaryKey: string;
30
30
  relationshipName: string;
31
- _scope: RelationshipScopeCallback;
32
- through: string;
31
+ _scope: RelationshipScopeCallback | undefined;
32
+ through: string | undefined;
33
33
  type: string;
34
34
  getConfiguration(): import("../../../configuration.js").default;
35
35
  /** @returns {string | undefined} What will be done when the parent record is destroyed. E.g. "destroy", "nullify", "restrict" etc. */
@@ -60,7 +60,7 @@ export default class VelociousDatabaseRecordBaseRelationship {
60
60
  getPolymorphic(): boolean;
61
61
  /** @returns {string} - The polymorphic type column. */
62
62
  getPolymorphicTypeColumn(): string;
63
- _polymorphicTypeColumn: string;
63
+ _polymorphicTypeColumn: string | undefined;
64
64
  /** @returns {string} The name of the foreign key, e.g. "id" etc. */
65
65
  getPrimaryKey(): string;
66
66
  /** @returns {string} The type of the relationship, e.g. "has_many", "belongs_to", "has_one", "has_and_belongs_to_many" etc. */
@@ -73,11 +73,11 @@ export type RelationshipBaseArgsType = {
73
73
  /**
74
74
  * - Name of the related model class.
75
75
  */
76
- className?: string;
76
+ className?: string | undefined;
77
77
  /**
78
78
  * - Dependent action when parent is destroyed.
79
79
  */
80
- dependent?: string;
80
+ dependent?: string | undefined;
81
81
  /**
82
82
  * - Explicit foreign key column name.
83
83
  */
@@ -85,11 +85,11 @@ export type RelationshipBaseArgsType = {
85
85
  /**
86
86
  * - Inverse relationship name on the related model.
87
87
  */
88
- inverseOf?: string;
88
+ inverseOf?: string | undefined;
89
89
  /**
90
90
  * - Related model class.
91
91
  */
92
- klass?: typeof import("../index.js").default;
92
+ klass?: typeof import("../index.js").default | undefined;
93
93
  /**
94
94
  * - Owning model class.
95
95
  */
@@ -97,11 +97,11 @@ export type RelationshipBaseArgsType = {
97
97
  /**
98
98
  * - Primary key column on the owning model.
99
99
  */
100
- primaryKey?: string;
100
+ primaryKey?: string | undefined;
101
101
  /**
102
102
  * - Whether the relationship is polymorphic.
103
103
  */
104
- polymorphic?: boolean;
104
+ polymorphic?: boolean | undefined;
105
105
  /**
106
106
  * - Name of the relationship on the model.
107
107
  */
@@ -109,11 +109,11 @@ export type RelationshipBaseArgsType = {
109
109
  /**
110
110
  * - Optional scope callback for the relationship.
111
111
  */
112
- scope?: RelationshipScopeCallback;
112
+ scope?: RelationshipScopeCallback | undefined;
113
113
  /**
114
114
  * - Name of the through association.
115
115
  */
116
- through?: string;
116
+ through?: string | undefined;
117
117
  /**
118
118
  * - Relationship type (e.g. "hasMany").
119
119
  */