velocious 1.0.146 → 1.0.148

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 (448) hide show
  1. package/README.md +15 -0
  2. package/build/src/application.d.ts +25 -16
  3. package/build/src/application.d.ts.map +1 -1
  4. package/build/src/application.js +17 -17
  5. package/build/src/cli/base-command.d.ts +26 -14
  6. package/build/src/cli/base-command.d.ts.map +1 -1
  7. package/build/src/cli/base-command.js +13 -13
  8. package/build/src/cli/browser-cli.d.ts +5 -5
  9. package/build/src/cli/browser-cli.js +6 -6
  10. package/build/src/cli/commands/db/create.d.ts +4 -4
  11. package/build/src/cli/commands/db/create.js +5 -5
  12. package/build/src/cli/commands/destroy/migration.d.ts +0 -1
  13. package/build/src/cli/commands/destroy/migration.d.ts.map +1 -1
  14. package/build/src/cli/commands/generate/base-models.d.ts +0 -1
  15. package/build/src/cli/commands/generate/base-models.d.ts.map +1 -1
  16. package/build/src/cli/commands/generate/migration.d.ts +0 -1
  17. package/build/src/cli/commands/generate/migration.d.ts.map +1 -1
  18. package/build/src/cli/commands/generate/model.d.ts +0 -1
  19. package/build/src/cli/commands/generate/model.d.ts.map +1 -1
  20. package/build/src/cli/commands/init.d.ts +0 -1
  21. package/build/src/cli/commands/init.d.ts.map +1 -1
  22. package/build/src/cli/commands/routes.d.ts +0 -1
  23. package/build/src/cli/commands/routes.d.ts.map +1 -1
  24. package/build/src/cli/commands/server.d.ts +0 -1
  25. package/build/src/cli/commands/server.d.ts.map +1 -1
  26. package/build/src/cli/commands/test.d.ts +0 -1
  27. package/build/src/cli/commands/test.d.ts.map +1 -1
  28. package/build/src/cli/index.d.ts +11 -11
  29. package/build/src/cli/index.d.ts.map +1 -1
  30. package/build/src/cli/index.js +9 -9
  31. package/build/src/cli/use-browser-cli.d.ts +2 -2
  32. package/build/src/cli/use-browser-cli.js +3 -3
  33. package/build/src/configuration-resolver.d.ts +2 -2
  34. package/build/src/configuration-resolver.js +3 -3
  35. package/build/src/configuration-types.d.ts +149 -44
  36. package/build/src/configuration-types.d.ts.map +1 -1
  37. package/build/src/configuration-types.js +43 -43
  38. package/build/src/configuration.d.ts +75 -59
  39. package/build/src/configuration.d.ts.map +1 -1
  40. package/build/src/configuration.js +68 -56
  41. package/build/src/controller.d.ts +29 -29
  42. package/build/src/controller.d.ts.map +1 -1
  43. package/build/src/controller.js +28 -28
  44. package/build/src/database/drivers/base-column.d.ts +15 -15
  45. package/build/src/database/drivers/base-column.d.ts.map +1 -1
  46. package/build/src/database/drivers/base-column.js +15 -15
  47. package/build/src/database/drivers/base-columns-index.d.ts +10 -10
  48. package/build/src/database/drivers/base-columns-index.js +11 -11
  49. package/build/src/database/drivers/base-foreign-key.d.ts +12 -12
  50. package/build/src/database/drivers/base-foreign-key.d.ts.map +1 -1
  51. package/build/src/database/drivers/base-foreign-key.js +11 -11
  52. package/build/src/database/drivers/base-table.d.ts +15 -15
  53. package/build/src/database/drivers/base-table.d.ts.map +1 -1
  54. package/build/src/database/drivers/base-table.js +16 -15
  55. package/build/src/database/drivers/base.d.ts +189 -131
  56. package/build/src/database/drivers/base.d.ts.map +1 -1
  57. package/build/src/database/drivers/base.js +159 -142
  58. package/build/src/database/drivers/mssql/column.d.ts +5 -4
  59. package/build/src/database/drivers/mssql/column.d.ts.map +1 -1
  60. package/build/src/database/drivers/mssql/column.js +3 -3
  61. package/build/src/database/drivers/mssql/connect-connection.d.ts +6 -1
  62. package/build/src/database/drivers/mssql/connect-connection.d.ts.map +1 -1
  63. package/build/src/database/drivers/mssql/connect-connection.js +6 -2
  64. package/build/src/database/drivers/mssql/index.d.ts +5 -15
  65. package/build/src/database/drivers/mssql/index.d.ts.map +1 -1
  66. package/build/src/database/drivers/mssql/index.js +57 -56
  67. package/build/src/database/drivers/mssql/options.d.ts +2 -2
  68. package/build/src/database/drivers/mssql/options.js +13 -13
  69. package/build/src/database/drivers/mssql/sql/create-database.js +5 -5
  70. package/build/src/database/drivers/mssql/structure-sql.d.ts +6 -6
  71. package/build/src/database/drivers/mssql/structure-sql.d.ts.map +1 -1
  72. package/build/src/database/drivers/mssql/structure-sql.js +23 -15
  73. package/build/src/database/drivers/mssql/table.d.ts +4 -5
  74. package/build/src/database/drivers/mssql/table.d.ts.map +1 -1
  75. package/build/src/database/drivers/mssql/table.js +8 -6
  76. package/build/src/database/drivers/mysql/column.d.ts +5 -4
  77. package/build/src/database/drivers/mysql/column.d.ts.map +1 -1
  78. package/build/src/database/drivers/mysql/column.js +3 -3
  79. package/build/src/database/drivers/mysql/index.d.ts +8 -8
  80. package/build/src/database/drivers/mysql/index.d.ts.map +1 -1
  81. package/build/src/database/drivers/mysql/index.js +45 -45
  82. package/build/src/database/drivers/mysql/options.d.ts +2 -2
  83. package/build/src/database/drivers/mysql/options.js +5 -5
  84. package/build/src/database/drivers/mysql/query.d.ts +4 -3
  85. package/build/src/database/drivers/mysql/query.d.ts.map +1 -1
  86. package/build/src/database/drivers/mysql/query.js +5 -4
  87. package/build/src/database/drivers/mysql/structure-sql.d.ts +7 -7
  88. package/build/src/database/drivers/mysql/structure-sql.d.ts.map +1 -1
  89. package/build/src/database/drivers/mysql/structure-sql.js +12 -10
  90. package/build/src/database/drivers/mysql/table.d.ts +4 -5
  91. package/build/src/database/drivers/mysql/table.d.ts.map +1 -1
  92. package/build/src/database/drivers/mysql/table.js +5 -4
  93. package/build/src/database/drivers/pgsql/column.d.ts +5 -4
  94. package/build/src/database/drivers/pgsql/column.d.ts.map +1 -1
  95. package/build/src/database/drivers/pgsql/column.js +3 -3
  96. package/build/src/database/drivers/pgsql/index.d.ts +1 -6
  97. package/build/src/database/drivers/pgsql/index.d.ts.map +1 -1
  98. package/build/src/database/drivers/pgsql/index.js +31 -31
  99. package/build/src/database/drivers/pgsql/options.d.ts +3 -3
  100. package/build/src/database/drivers/pgsql/options.js +4 -4
  101. package/build/src/database/drivers/pgsql/structure-sql.d.ts +6 -6
  102. package/build/src/database/drivers/pgsql/structure-sql.d.ts.map +1 -1
  103. package/build/src/database/drivers/pgsql/structure-sql.js +21 -14
  104. package/build/src/database/drivers/pgsql/table.d.ts +4 -5
  105. package/build/src/database/drivers/pgsql/table.d.ts.map +1 -1
  106. package/build/src/database/drivers/pgsql/table.js +4 -3
  107. package/build/src/database/drivers/sqlite/base.d.ts +22 -20
  108. package/build/src/database/drivers/sqlite/base.d.ts.map +1 -1
  109. package/build/src/database/drivers/sqlite/base.js +58 -55
  110. package/build/src/database/drivers/sqlite/column.d.ts +7 -6
  111. package/build/src/database/drivers/sqlite/column.d.ts.map +1 -1
  112. package/build/src/database/drivers/sqlite/column.js +5 -5
  113. package/build/src/database/drivers/sqlite/connection-sql-js.d.ts +5 -5
  114. package/build/src/database/drivers/sqlite/connection-sql-js.d.ts.map +1 -1
  115. package/build/src/database/drivers/sqlite/connection-sql-js.js +5 -5
  116. package/build/src/database/drivers/sqlite/foreign-key.d.ts +4 -4
  117. package/build/src/database/drivers/sqlite/foreign-key.d.ts.map +1 -1
  118. package/build/src/database/drivers/sqlite/foreign-key.js +4 -4
  119. package/build/src/database/drivers/sqlite/index.js +3 -3
  120. package/build/src/database/drivers/sqlite/index.web.d.ts +9 -2
  121. package/build/src/database/drivers/sqlite/index.web.d.ts.map +1 -1
  122. package/build/src/database/drivers/sqlite/index.web.js +8 -5
  123. package/build/src/database/drivers/sqlite/options.d.ts +3 -3
  124. package/build/src/database/drivers/sqlite/options.js +4 -4
  125. package/build/src/database/drivers/sqlite/query.d.ts +4 -4
  126. package/build/src/database/drivers/sqlite/query.d.ts.map +1 -1
  127. package/build/src/database/drivers/sqlite/query.js +5 -5
  128. package/build/src/database/drivers/sqlite/query.native.d.ts +9 -1
  129. package/build/src/database/drivers/sqlite/query.native.d.ts.map +1 -1
  130. package/build/src/database/drivers/sqlite/query.native.js +7 -1
  131. package/build/src/database/drivers/sqlite/query.web.d.ts +4 -4
  132. package/build/src/database/drivers/sqlite/query.web.d.ts.map +1 -1
  133. package/build/src/database/drivers/sqlite/query.web.js +5 -5
  134. package/build/src/database/drivers/sqlite/sql/alter-table.js +5 -5
  135. package/build/src/database/drivers/sqlite/structure-sql.d.ts +3 -3
  136. package/build/src/database/drivers/sqlite/structure-sql.js +5 -5
  137. package/build/src/database/drivers/sqlite/table.d.ts +9 -7
  138. package/build/src/database/drivers/sqlite/table.d.ts.map +1 -1
  139. package/build/src/database/drivers/sqlite/table.js +12 -8
  140. package/build/src/database/drivers/structure-sql/utils.d.ts +8 -8
  141. package/build/src/database/drivers/structure-sql/utils.js +9 -9
  142. package/build/src/database/handler.d.ts +1 -1
  143. package/build/src/database/handler.js +2 -2
  144. package/build/src/database/initializer-from-require-context.d.ts +5 -5
  145. package/build/src/database/initializer-from-require-context.js +6 -6
  146. package/build/src/database/migration/index.d.ts +98 -62
  147. package/build/src/database/migration/index.d.ts.map +1 -1
  148. package/build/src/database/migration/index.js +74 -74
  149. package/build/src/database/migrator/files-finder.d.ts +3 -3
  150. package/build/src/database/migrator/files-finder.js +4 -4
  151. package/build/src/database/migrator/types.d.ts +12 -0
  152. package/build/src/database/migrator/types.d.ts.map +1 -1
  153. package/build/src/database/migrator/types.js +1 -1
  154. package/build/src/database/migrator.d.ts +24 -24
  155. package/build/src/database/migrator.d.ts.map +1 -1
  156. package/build/src/database/migrator.js +25 -25
  157. package/build/src/database/pool/async-tracked-multi-connection.d.ts +8 -8
  158. package/build/src/database/pool/async-tracked-multi-connection.js +18 -18
  159. package/build/src/database/pool/base-methods-forward.d.ts +2 -2
  160. package/build/src/database/pool/base-methods-forward.js +3 -3
  161. package/build/src/database/pool/base.d.ts +19 -19
  162. package/build/src/database/pool/base.js +20 -20
  163. package/build/src/database/pool/single-multi-use.js +6 -6
  164. package/build/src/database/query/alter-table-base.d.ts +3 -3
  165. package/build/src/database/query/alter-table-base.js +5 -5
  166. package/build/src/database/query/base.d.ts +5 -5
  167. package/build/src/database/query/base.d.ts.map +1 -1
  168. package/build/src/database/query/base.js +6 -6
  169. package/build/src/database/query/create-database-base.d.ts +11 -2
  170. package/build/src/database/query/create-database-base.d.ts.map +1 -1
  171. package/build/src/database/query/create-database-base.js +6 -6
  172. package/build/src/database/query/create-index-base.d.ts +25 -7
  173. package/build/src/database/query/create-index-base.d.ts.map +1 -1
  174. package/build/src/database/query/create-index-base.js +9 -9
  175. package/build/src/database/query/create-table-base.d.ts +6 -6
  176. package/build/src/database/query/create-table-base.js +7 -7
  177. package/build/src/database/query/delete-base.d.ts +6 -6
  178. package/build/src/database/query/delete-base.d.ts.map +1 -1
  179. package/build/src/database/query/delete-base.js +5 -5
  180. package/build/src/database/query/drop-table-base.d.ts +5 -5
  181. package/build/src/database/query/drop-table-base.js +7 -7
  182. package/build/src/database/query/from-base.d.ts +4 -4
  183. package/build/src/database/query/from-base.js +5 -5
  184. package/build/src/database/query/from-plain.d.ts +1 -1
  185. package/build/src/database/query/from-plain.js +2 -2
  186. package/build/src/database/query/from-table.d.ts +1 -1
  187. package/build/src/database/query/from-table.js +2 -2
  188. package/build/src/database/query/index.d.ts +88 -48
  189. package/build/src/database/query/index.d.ts.map +1 -1
  190. package/build/src/database/query/index.js +46 -46
  191. package/build/src/database/query/insert-base.d.ts +16 -15
  192. package/build/src/database/query/insert-base.d.ts.map +1 -1
  193. package/build/src/database/query/insert-base.js +12 -11
  194. package/build/src/database/query/join-base.d.ts +4 -4
  195. package/build/src/database/query/join-base.js +5 -5
  196. package/build/src/database/query/join-object.d.ts +6 -6
  197. package/build/src/database/query/join-object.js +7 -7
  198. package/build/src/database/query/join-plain.d.ts +1 -1
  199. package/build/src/database/query/join-plain.js +2 -2
  200. package/build/src/database/query/model-class-query.d.ts +28 -28
  201. package/build/src/database/query/model-class-query.d.ts.map +1 -1
  202. package/build/src/database/query/model-class-query.js +25 -25
  203. package/build/src/database/query/order-base.d.ts +4 -4
  204. package/build/src/database/query/order-base.js +5 -5
  205. package/build/src/database/query/order-plain.d.ts +2 -2
  206. package/build/src/database/query/order-plain.js +3 -3
  207. package/build/src/database/query/preloader/belongs-to.d.ts +3 -3
  208. package/build/src/database/query/preloader/belongs-to.d.ts.map +1 -1
  209. package/build/src/database/query/preloader/belongs-to.js +15 -13
  210. package/build/src/database/query/preloader/has-many.d.ts +3 -3
  211. package/build/src/database/query/preloader/has-many.js +7 -7
  212. package/build/src/database/query/preloader/has-one.d.ts +3 -3
  213. package/build/src/database/query/preloader/has-one.js +7 -7
  214. package/build/src/database/query/preloader.d.ts +6 -6
  215. package/build/src/database/query/preloader.d.ts.map +1 -1
  216. package/build/src/database/query/preloader.js +5 -5
  217. package/build/src/database/query/select-base.d.ts +3 -3
  218. package/build/src/database/query/select-base.js +4 -4
  219. package/build/src/database/query/select-plain.d.ts +1 -1
  220. package/build/src/database/query/select-plain.js +2 -2
  221. package/build/src/database/query/select-table-and-column.d.ts +2 -2
  222. package/build/src/database/query/select-table-and-column.js +3 -3
  223. package/build/src/database/query/update-base.d.ts +10 -10
  224. package/build/src/database/query/update-base.d.ts.map +1 -1
  225. package/build/src/database/query/update-base.js +7 -7
  226. package/build/src/database/query/where-base.d.ts +4 -4
  227. package/build/src/database/query/where-base.js +5 -5
  228. package/build/src/database/query/where-hash.d.ts +8 -7
  229. package/build/src/database/query/where-hash.d.ts.map +1 -1
  230. package/build/src/database/query/where-hash.js +11 -7
  231. package/build/src/database/query/where-plain.d.ts +2 -2
  232. package/build/src/database/query/where-plain.js +3 -3
  233. package/build/src/database/query-parser/base-query-parser.d.ts +3 -3
  234. package/build/src/database/query-parser/base-query-parser.js +4 -4
  235. package/build/src/database/query-parser/from-parser.d.ts +4 -4
  236. package/build/src/database/query-parser/from-parser.d.ts.map +1 -1
  237. package/build/src/database/query-parser/from-parser.js +5 -5
  238. package/build/src/database/query-parser/group-parser.d.ts +4 -4
  239. package/build/src/database/query-parser/group-parser.js +5 -5
  240. package/build/src/database/query-parser/joins-parser.d.ts +3 -3
  241. package/build/src/database/query-parser/joins-parser.js +4 -4
  242. package/build/src/database/query-parser/limit-parser.d.ts +3 -3
  243. package/build/src/database/query-parser/limit-parser.js +4 -4
  244. package/build/src/database/query-parser/options.d.ts +35 -20
  245. package/build/src/database/query-parser/options.d.ts.map +1 -1
  246. package/build/src/database/query-parser/options.js +19 -19
  247. package/build/src/database/query-parser/order-parser.d.ts +3 -3
  248. package/build/src/database/query-parser/order-parser.js +4 -4
  249. package/build/src/database/query-parser/select-parser.d.ts +3 -3
  250. package/build/src/database/query-parser/select-parser.js +4 -4
  251. package/build/src/database/query-parser/where-parser.d.ts +3 -3
  252. package/build/src/database/query-parser/where-parser.js +4 -4
  253. package/build/src/database/record/index.d.ts +200 -184
  254. package/build/src/database/record/index.d.ts.map +1 -1
  255. package/build/src/database/record/index.js +193 -167
  256. package/build/src/database/record/instance-relationships/base.d.ts +21 -15
  257. package/build/src/database/record/instance-relationships/base.d.ts.map +1 -1
  258. package/build/src/database/record/instance-relationships/base.js +15 -15
  259. package/build/src/database/record/instance-relationships/belongs-to.d.ts +3 -3
  260. package/build/src/database/record/instance-relationships/belongs-to.d.ts.map +1 -1
  261. package/build/src/database/record/instance-relationships/belongs-to.js +4 -4
  262. package/build/src/database/record/instance-relationships/has-many.d.ts +21 -15
  263. package/build/src/database/record/instance-relationships/has-many.d.ts.map +1 -1
  264. package/build/src/database/record/instance-relationships/has-many.js +23 -17
  265. package/build/src/database/record/instance-relationships/has-one.d.ts +4 -4
  266. package/build/src/database/record/instance-relationships/has-one.d.ts.map +1 -1
  267. package/build/src/database/record/instance-relationships/has-one.js +7 -7
  268. package/build/src/database/record/relationships/base.d.ts +48 -15
  269. package/build/src/database/record/relationships/base.d.ts.map +1 -1
  270. package/build/src/database/record/relationships/base.js +16 -16
  271. package/build/src/database/record/relationships/belongs-to.js +3 -3
  272. package/build/src/database/record/relationships/has-many.js +3 -3
  273. package/build/src/database/record/relationships/has-one.js +3 -3
  274. package/build/src/database/record/user-module.d.ts +3 -3
  275. package/build/src/database/record/user-module.js +4 -4
  276. package/build/src/database/record/validators/base.d.ts +9 -9
  277. package/build/src/database/record/validators/base.d.ts.map +1 -1
  278. package/build/src/database/record/validators/base.js +8 -8
  279. package/build/src/database/record/validators/presence.d.ts.map +1 -1
  280. package/build/src/database/record/validators/presence.js +6 -5
  281. package/build/src/database/record/validators/uniqueness.js +7 -7
  282. package/build/src/database/table-data/index.d.ts +53 -50
  283. package/build/src/database/table-data/index.d.ts.map +1 -1
  284. package/build/src/database/table-data/index.js +51 -51
  285. package/build/src/database/table-data/table-column.d.ts +84 -51
  286. package/build/src/database/table-data/table-column.d.ts.map +1 -1
  287. package/build/src/database/table-data/table-column.js +57 -56
  288. package/build/src/database/table-data/table-foreign-key.d.ts +15 -15
  289. package/build/src/database/table-data/table-foreign-key.js +16 -16
  290. package/build/src/database/table-data/table-index.d.ts +13 -7
  291. package/build/src/database/table-data/table-index.d.ts.map +1 -1
  292. package/build/src/database/table-data/table-index.js +8 -8
  293. package/build/src/database/table-data/table-reference.d.ts +2 -2
  294. package/build/src/database/table-data/table-reference.js +3 -3
  295. package/build/src/database/use-database.d.ts +3 -3
  296. package/build/src/database/use-database.js +4 -4
  297. package/build/src/environment-handlers/base.d.ts +84 -66
  298. package/build/src/environment-handlers/base.d.ts.map +1 -1
  299. package/build/src/environment-handlers/base.js +58 -58
  300. package/build/src/environment-handlers/browser.d.ts +9 -9
  301. package/build/src/environment-handlers/browser.d.ts.map +1 -1
  302. package/build/src/environment-handlers/browser.js +18 -18
  303. package/build/src/environment-handlers/node/cli/commands/destroy/migration.d.ts +1 -1
  304. package/build/src/environment-handlers/node/cli/commands/destroy/migration.js +2 -2
  305. package/build/src/environment-handlers/node/cli/commands/generate/base-models.d.ts +4 -4
  306. package/build/src/environment-handlers/node/cli/commands/generate/base-models.js +11 -11
  307. package/build/src/environment-handlers/node/cli/commands/generate/migration.d.ts +1 -1
  308. package/build/src/environment-handlers/node/cli/commands/generate/migration.js +2 -2
  309. package/build/src/environment-handlers/node/cli/commands/generate/model.d.ts +1 -1
  310. package/build/src/environment-handlers/node/cli/commands/generate/model.js +2 -2
  311. package/build/src/environment-handlers/node/cli/commands/init.d.ts +1 -1
  312. package/build/src/environment-handlers/node/cli/commands/init.js +2 -2
  313. package/build/src/environment-handlers/node/cli/commands/routes.d.ts +5 -5
  314. package/build/src/environment-handlers/node/cli/commands/routes.js +6 -6
  315. package/build/src/environment-handlers/node/cli/commands/server.js +3 -3
  316. package/build/src/environment-handlers/node.d.ts +5 -40
  317. package/build/src/environment-handlers/node.d.ts.map +1 -1
  318. package/build/src/environment-handlers/node.js +46 -46
  319. package/build/src/error-logger.d.ts +3 -2
  320. package/build/src/error-logger.d.ts.map +1 -1
  321. package/build/src/error-logger.js +5 -4
  322. package/build/src/http-client/header.d.ts +2 -2
  323. package/build/src/http-client/header.js +3 -3
  324. package/build/src/http-client/index.d.ts +10 -10
  325. package/build/src/http-client/index.d.ts.map +1 -1
  326. package/build/src/http-client/index.js +11 -11
  327. package/build/src/http-client/request.d.ts +16 -10
  328. package/build/src/http-client/request.d.ts.map +1 -1
  329. package/build/src/http-client/request.js +17 -11
  330. package/build/src/http-client/response.d.ts +7 -7
  331. package/build/src/http-client/response.d.ts.map +1 -1
  332. package/build/src/http-client/response.js +8 -8
  333. package/build/src/http-client/websocket-client.d.ts +28 -28
  334. package/build/src/http-client/websocket-client.d.ts.map +1 -1
  335. package/build/src/http-client/websocket-client.js +26 -26
  336. package/build/src/http-server/client/index.d.ts +13 -13
  337. package/build/src/http-server/client/index.d.ts.map +1 -1
  338. package/build/src/http-server/client/index.js +14 -14
  339. package/build/src/http-server/client/params-to-object.d.ts +15 -15
  340. package/build/src/http-server/client/params-to-object.d.ts.map +1 -1
  341. package/build/src/http-server/client/params-to-object.js +17 -13
  342. package/build/src/http-server/client/request-buffer/form-data-part.d.ts +7 -7
  343. package/build/src/http-server/client/request-buffer/form-data-part.js +8 -8
  344. package/build/src/http-server/client/request-buffer/header.d.ts +2 -2
  345. package/build/src/http-server/client/request-buffer/header.js +3 -3
  346. package/build/src/http-server/client/request-buffer/index.d.ts +20 -20
  347. package/build/src/http-server/client/request-buffer/index.js +22 -22
  348. package/build/src/http-server/client/request-parser.d.ts +21 -20
  349. package/build/src/http-server/client/request-parser.d.ts.map +1 -1
  350. package/build/src/http-server/client/request-parser.js +22 -21
  351. package/build/src/http-server/client/request-runner.d.ts +6 -6
  352. package/build/src/http-server/client/request-runner.d.ts.map +1 -1
  353. package/build/src/http-server/client/request-runner.js +17 -4
  354. package/build/src/http-server/client/request.d.ts +9 -8
  355. package/build/src/http-server/client/request.d.ts.map +1 -1
  356. package/build/src/http-server/client/request.js +9 -8
  357. package/build/src/http-server/client/response.d.ts +17 -17
  358. package/build/src/http-server/client/response.js +18 -18
  359. package/build/src/http-server/client/uploaded-file/memory-uploaded-file.d.ts +6 -6
  360. package/build/src/http-server/client/uploaded-file/memory-uploaded-file.js +9 -9
  361. package/build/src/http-server/client/uploaded-file/temporary-uploaded-file.d.ts +6 -6
  362. package/build/src/http-server/client/uploaded-file/temporary-uploaded-file.js +9 -9
  363. package/build/src/http-server/client/uploaded-file/uploaded-file.d.ts +7 -7
  364. package/build/src/http-server/client/uploaded-file/uploaded-file.js +8 -8
  365. package/build/src/http-server/client/websocket-request.d.ts +17 -13
  366. package/build/src/http-server/client/websocket-request.d.ts.map +1 -1
  367. package/build/src/http-server/client/websocket-request.js +10 -10
  368. package/build/src/http-server/client/websocket-session.d.ts +26 -26
  369. package/build/src/http-server/client/websocket-session.d.ts.map +1 -1
  370. package/build/src/http-server/client/websocket-session.js +27 -27
  371. package/build/src/http-server/index.d.ts +19 -19
  372. package/build/src/http-server/index.d.ts.map +1 -1
  373. package/build/src/http-server/index.js +20 -20
  374. package/build/src/http-server/server-client.d.ts +13 -13
  375. package/build/src/http-server/server-client.d.ts.map +1 -1
  376. package/build/src/http-server/server-client.js +14 -14
  377. package/build/src/http-server/websocket-events-host.d.ts +7 -7
  378. package/build/src/http-server/websocket-events-host.d.ts.map +1 -1
  379. package/build/src/http-server/websocket-events-host.js +7 -7
  380. package/build/src/http-server/websocket-events.d.ts +7 -7
  381. package/build/src/http-server/websocket-events.d.ts.map +1 -1
  382. package/build/src/http-server/websocket-events.js +7 -7
  383. package/build/src/http-server/worker-handler/index.d.ts +22 -22
  384. package/build/src/http-server/worker-handler/index.d.ts.map +1 -1
  385. package/build/src/http-server/worker-handler/index.js +20 -20
  386. package/build/src/http-server/worker-handler/worker-thread.d.ts +17 -17
  387. package/build/src/http-server/worker-handler/worker-thread.d.ts.map +1 -1
  388. package/build/src/http-server/worker-handler/worker-thread.js +16 -16
  389. package/build/src/initializer.d.ts +6 -6
  390. package/build/src/initializer.js +7 -7
  391. package/build/src/logger.d.ts +38 -34
  392. package/build/src/logger.d.ts.map +1 -1
  393. package/build/src/logger.js +53 -47
  394. package/build/src/routes/app-routes.d.ts +2 -2
  395. package/build/src/routes/app-routes.js +3 -3
  396. package/build/src/routes/base-route.d.ts +22 -22
  397. package/build/src/routes/base-route.d.ts.map +1 -1
  398. package/build/src/routes/base-route.js +21 -21
  399. package/build/src/routes/basic-route.d.ts +3 -3
  400. package/build/src/routes/basic-route.js +15 -15
  401. package/build/src/routes/get-route.d.ts +2 -2
  402. package/build/src/routes/get-route.js +8 -8
  403. package/build/src/routes/index.d.ts +2 -2
  404. package/build/src/routes/index.js +3 -3
  405. package/build/src/routes/namespace-route.d.ts +2 -2
  406. package/build/src/routes/namespace-route.js +8 -8
  407. package/build/src/routes/post-route.d.ts +2 -2
  408. package/build/src/routes/post-route.js +8 -8
  409. package/build/src/routes/resolver.d.ts +21 -19
  410. package/build/src/routes/resolver.d.ts.map +1 -1
  411. package/build/src/routes/resolver.js +50 -25
  412. package/build/src/routes/resource-route.d.ts +6 -6
  413. package/build/src/routes/resource-route.js +12 -12
  414. package/build/src/testing/format-value.d.ts +6 -6
  415. package/build/src/testing/format-value.d.ts.map +1 -1
  416. package/build/src/testing/format-value.js +11 -11
  417. package/build/src/testing/request-client.d.ts +10 -10
  418. package/build/src/testing/request-client.d.ts.map +1 -1
  419. package/build/src/testing/request-client.js +11 -11
  420. package/build/src/testing/test-files-finder.d.ts +17 -16
  421. package/build/src/testing/test-files-finder.d.ts.map +1 -1
  422. package/build/src/testing/test-files-finder.js +17 -16
  423. package/build/src/testing/test-runner.d.ts +78 -39
  424. package/build/src/testing/test-runner.d.ts.map +1 -1
  425. package/build/src/testing/test-runner.js +40 -40
  426. package/build/src/testing/test.d.ts +61 -61
  427. package/build/src/testing/test.d.ts.map +1 -1
  428. package/build/src/testing/test.js +77 -56
  429. package/build/src/utils/backtrace-cleaner.d.ts +4 -4
  430. package/build/src/utils/backtrace-cleaner.js +5 -5
  431. package/build/src/utils/ensure-error.d.ts +3 -3
  432. package/build/src/utils/ensure-error.d.ts.map +1 -1
  433. package/build/src/utils/ensure-error.js +3 -3
  434. package/build/src/utils/file-exists.d.ts +2 -2
  435. package/build/src/utils/file-exists.js +3 -3
  436. package/build/src/utils/nest-callbacks.d.ts +3 -3
  437. package/build/src/utils/nest-callbacks.js +4 -4
  438. package/build/src/utils/rest-args-error.d.ts +2 -2
  439. package/build/src/utils/rest-args-error.js +3 -3
  440. package/build/src/utils/singularize-model-name.d.ts +2 -2
  441. package/build/src/utils/singularize-model-name.js +3 -3
  442. package/build/src/utils/with-tracked-stack-async-hooks.d.ts +4 -4
  443. package/build/src/utils/with-tracked-stack-async-hooks.d.ts.map +1 -1
  444. package/build/src/utils/with-tracked-stack-async-hooks.js +5 -5
  445. package/build/src/utils/with-tracked-stack.d.ts +5 -4
  446. package/build/src/utils/with-tracked-stack.d.ts.map +1 -1
  447. package/build/src/utils/with-tracked-stack.js +12 -18
  448. package/package.json +1 -1
@@ -17,7 +17,7 @@ import RecordNotFoundError from "../record/record-not-found-error.js";
17
17
  * @template {typeof import("../record/index.js").default} MC
18
18
  */
19
19
  export default class VelociousDatabaseQueryModelClassQuery extends DatabaseQuery {
20
- /** @param {ModelClassQueryArgsType<MC>} args */
20
+ /** @param {ModelClassQueryArgsType<MC>} args - Query constructor arguments. */
21
21
  constructor(args) {
22
22
  const { modelClass } = args;
23
23
  if (!modelClass)
@@ -27,7 +27,7 @@ export default class VelociousDatabaseQueryModelClassQuery extends DatabaseQuery
27
27
  /** @type {MC} */
28
28
  this.modelClass = modelClass;
29
29
  }
30
- /** @returns {this} */
30
+ /** @returns {this} - The clone. */
31
31
  clone() {
32
32
  const newQuery = /** @type {VelociousDatabaseQueryModelClassQuery<MC>} */ (new VelociousDatabaseQueryModelClassQuery({
33
33
  driver: this._driverFn,
@@ -49,7 +49,7 @@ export default class VelociousDatabaseQueryModelClassQuery extends DatabaseQuery
49
49
  // @ts-expect-error
50
50
  return newQuery;
51
51
  }
52
- /** @returns {Promise<number>} */
52
+ /** @returns {Promise<number>} - Resolves with the count. */
53
53
  async count() {
54
54
  // Generate count SQL
55
55
  const primaryKey = `${this.driver.quoteTable(this.getModelClass().tableName())}.${this.driver.quoteColumn(this.getModelClass().primaryKey())}`;
@@ -78,13 +78,13 @@ export default class VelociousDatabaseQueryModelClassQuery extends DatabaseQuery
78
78
  }
79
79
  return countResult;
80
80
  }
81
- /** @returns {MC} */
81
+ /** @returns {MC} - The model class. */
82
82
  getModelClass() {
83
83
  if (!this.modelClass)
84
84
  throw new Error("modelClass not set");
85
85
  return this.modelClass;
86
86
  }
87
- /** @returns {Promise<void>} */
87
+ /** @returns {Promise<void>} - Resolves when complete. */
88
88
  async destroyAll() {
89
89
  const records = await this.toArray();
90
90
  for (const record of records) {
@@ -92,8 +92,8 @@ export default class VelociousDatabaseQueryModelClassQuery extends DatabaseQuery
92
92
  }
93
93
  }
94
94
  /**
95
- * @param {number|string} recordId
96
- * @returns {Promise<InstanceType<MC>>}
95
+ * @param {number|string} recordId - Record id.
96
+ * @returns {Promise<InstanceType<MC>>} - Resolves with the find.
97
97
  */
98
98
  async find(recordId) {
99
99
  /** @type {{[key: string]: number | string}} */
@@ -108,8 +108,8 @@ export default class VelociousDatabaseQueryModelClassQuery extends DatabaseQuery
108
108
  return record;
109
109
  }
110
110
  /**
111
- * @param {{[key: string]: any}} conditions
112
- * @returns {Promise<InstanceType<MC> | null>}
111
+ * @param {{[key: string]: string | number}} conditions - Conditions hash keyed by attribute name.
112
+ * @returns {Promise<InstanceType<MC> | null>} - Resolves with the by.
113
113
  */
114
114
  async findBy(conditions) {
115
115
  /** @type {{[key: string]: number | string}} */
@@ -123,9 +123,9 @@ export default class VelociousDatabaseQueryModelClassQuery extends DatabaseQuery
123
123
  return await newQuery.first();
124
124
  }
125
125
  /**
126
- * @param {{[key: string]: any}} conditions
127
- * @param {function(InstanceType<MC>) : void} [callback]
128
- * @returns {Promise<InstanceType<MC>>}
126
+ * @param {{[key: string]: string | number}} conditions - Conditions hash keyed by attribute name.
127
+ * @param {function(InstanceType<MC>) : void} [callback] - Callback function.
128
+ * @returns {Promise<InstanceType<MC>>} - Resolves with the or create by.
129
129
  */
130
130
  async findOrCreateBy(conditions, callback) {
131
131
  const record = await this.findOrInitializeBy(conditions, callback);
@@ -135,8 +135,8 @@ export default class VelociousDatabaseQueryModelClassQuery extends DatabaseQuery
135
135
  return record;
136
136
  }
137
137
  /**
138
- * @param {{[key: string]: any}} conditions
139
- * @returns {Promise<InstanceType<MC>>}
138
+ * @param {{[key: string]: string | number}} conditions - Conditions hash keyed by attribute name.
139
+ * @returns {Promise<InstanceType<MC>>} - Resolves with the by or fail.
140
140
  */
141
141
  async findByOrFail(conditions) {
142
142
  /** @type {{[key: string]: number | string}} */
@@ -154,9 +154,9 @@ export default class VelociousDatabaseQueryModelClassQuery extends DatabaseQuery
154
154
  return model;
155
155
  }
156
156
  /**
157
- * @param {object} conditions
158
- * @param {function(InstanceType<MC>) : void} [callback]
159
- * @returns {Promise<InstanceType<MC>>}
157
+ * @param {object} conditions - Conditions.
158
+ * @param {function(InstanceType<MC>) : void} [callback] - Callback function.
159
+ * @returns {Promise<InstanceType<MC>>} - Resolves with the or initialize by.
160
160
  */
161
161
  async findOrInitializeBy(conditions, callback) {
162
162
  const record = await this.findBy(conditions);
@@ -169,13 +169,13 @@ export default class VelociousDatabaseQueryModelClassQuery extends DatabaseQuery
169
169
  }
170
170
  return newRecord;
171
171
  }
172
- /** @returns {Promise<InstanceType<MC> | undefined>} */
172
+ /** @returns {Promise<InstanceType<MC> | undefined>} - Resolves with the first. */
173
173
  async first() {
174
174
  const newQuery = this.clone().limit(1).reorder(`${this.driver.quoteTable(this.getModelClass().tableName())}.${this.driver.quoteColumn(this.getModelClass().orderableColumn())}`);
175
175
  const results = await newQuery.toArray();
176
176
  return results[0];
177
177
  }
178
- /** @returns {Promise<InstanceType<MC> | undefined>} */
178
+ /** @returns {Promise<InstanceType<MC> | undefined>} - Resolves with the last. */
179
179
  async last() {
180
180
  const primaryKey = this.getModelClass().primaryKey();
181
181
  const tableName = this.getModelClass().tableName();
@@ -183,8 +183,8 @@ export default class VelociousDatabaseQueryModelClassQuery extends DatabaseQuery
183
183
  return results[0];
184
184
  }
185
185
  /**
186
- * @param {import("./index.js").NestedPreloadRecord} data
187
- * @returns {this}
186
+ * @param {import("./index.js").NestedPreloadRecord} data - Data payload.
187
+ * @returns {this} - The preload.
188
188
  */
189
189
  preload(data) {
190
190
  incorporate(this._preload, data);
@@ -192,7 +192,7 @@ export default class VelociousDatabaseQueryModelClassQuery extends DatabaseQuery
192
192
  }
193
193
  /**
194
194
  * Converts query results to array of model instances
195
- * @returns {Promise<Array<InstanceType<MC>>>}
195
+ * @returns {Promise<Array<InstanceType<MC>>>} - Resolves with the array.
196
196
  */
197
197
  async toArray() {
198
198
  const models = [];
@@ -215,8 +215,8 @@ export default class VelociousDatabaseQueryModelClassQuery extends DatabaseQuery
215
215
  }
216
216
  /**
217
217
  * Plucks one or more columns directly from the database without instantiating models.
218
- * @param {...string|string[]} columns
219
- * @returns {Promise<any[]>}
218
+ * @param {...string|string[]} columns - Column names.
219
+ * @returns {Promise<unknown[]>} - Resolves with the pluck.
220
220
  */
221
221
  async pluck(...columns) {
222
222
  const flatColumns = columns.flat();
@@ -241,4 +241,4 @@ export default class VelociousDatabaseQueryModelClassQuery extends DatabaseQuery
241
241
  return rows.map((row) => columnNames.map((columnName) => row[columnName]));
242
242
  }
243
243
  }
244
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWwtY2xhc3MtcXVlcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZGF0YWJhc2UvcXVlcnkvbW9kZWwtY2xhc3MtcXVlcnkuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxjQUFjLENBQUE7QUFDeEMsT0FBTyxLQUFLLFVBQVUsTUFBTSxZQUFZLENBQUE7QUFDeEMsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLGlCQUFpQixDQUFBO0FBQ3RDLE9BQU8sU0FBUyxNQUFNLGdCQUFnQixDQUFBO0FBQ3RDLE9BQU8sYUFBYSxNQUFNLFlBQVksQ0FBQTtBQUN0QyxPQUFPLG1CQUFtQixNQUFNLHFDQUFxQyxDQUFBO0FBRXJFOztHQUVHO0FBQ0g7OztHQUdHO0FBRUg7OztHQUdHO0FBQ0gsTUFBTSxDQUFDLE9BQU8sT0FBTyxxQ0FBc0MsU0FBUSxhQUFhO0lBQzlFLGdEQUFnRDtJQUNoRCxZQUFZLElBQUk7UUFDZCxNQUFNLEVBQUMsVUFBVSxFQUFDLEdBQUcsSUFBSSxDQUFBO1FBRXpCLElBQUksQ0FBQyxVQUFVO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQywwQkFBMEIsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFBO1FBRTFGLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUNYLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUE7UUFFOUIsaUJBQWlCO1FBQ2pCLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFBO0lBQzlCLENBQUM7SUFFRCxzQkFBc0I7SUFDdEIsS0FBSztRQUNILE1BQU0sUUFBUSxHQUFHLHdEQUF3RCxDQUFDLENBQUMsSUFBSSxxQ0FBcUMsQ0FBQztZQUNuSCxNQUFNLEVBQUUsSUFBSSxDQUFDLFNBQVM7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LENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFBO1lBRS9GLEtBQUssQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUE7UUFDekIsQ0FBQyxDQUFDLENBQUE7UUFFRixNQUFNLElBQUksR0FBRyxNQUFNLEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQTtRQUV4QyxJQUFJLFdBQVcsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDN0IsTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFHLFdBQVcsQ0FBQTtZQUNoQyxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFBO1FBQzNDLENBQUM7UUFFRCxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDNUUsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbmltcG9ydCB7aW5jb3Jwb3JhdGV9IGZyb20gXCJpbmNvcnBvcmF0b3JcIlxuaW1wb3J0ICogYXMgaW5mbGVjdGlvbiBmcm9tIFwiaW5mbGVjdGlvblwiXG5pbXBvcnQge0xvZ2dlcn0gZnJvbSBcIi4uLy4uL2xvZ2dlci5qc1wiXG5pbXBvcnQgUHJlbG9hZGVyIGZyb20gXCIuL3ByZWxvYWRlci5qc1wiXG5pbXBvcnQgRGF0YWJhc2VRdWVyeSBmcm9tIFwiLi9pbmRleC5qc1wiXG5pbXBvcnQgUmVjb3JkTm90Rm91bmRFcnJvciBmcm9tIFwiLi4vcmVjb3JkL3JlY29yZC1ub3QtZm91bmQtZXJyb3IuanNcIlxuXG4vKipcbiAqIEB0ZW1wbGF0ZSB7dHlwZW9mIGltcG9ydChcIi4uL3JlY29yZC9pbmRleC5qc1wiKS5kZWZhdWx0fSBNQ1xuICovXG4vKipcbiAqIEB0ZW1wbGF0ZSB7dHlwZW9mIGltcG9ydChcIi4uL3JlY29yZC9pbmRleC5qc1wiKS5kZWZhdWx0fSBNQ1xuICogQHR5cGVkZWYge2ltcG9ydChcIi4vaW5kZXguanNcIikuUXVlcnlBcmdzVHlwZSAmIHttb2RlbENsYXNzOiBNQ319IE1vZGVsQ2xhc3NRdWVyeUFyZ3NUeXBlXG4gKi9cblxuLyoqXG4gKiBBIGdlbmVyaWMgcXVlcnkgb3ZlciBzb21lIG1vZGVsIHR5cGUuXG4gKiBAdGVtcGxhdGUge3R5cGVvZiBpbXBvcnQoXCIuLi9yZWNvcmQvaW5kZXguanNcIikuZGVmYXVsdH0gTUNcbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVmVsb2Npb3VzRGF0YWJhc2VRdWVyeU1vZGVsQ2xhc3NRdWVyeSBleHRlbmRzIERhdGFiYXNlUXVlcnkge1xuICAvKiogQHBhcmFtIHtNb2RlbENsYXNzUXVlcnlBcmdzVHlwZTxNQz59IGFyZ3MgKi9cbiAgY29uc3RydWN0b3IoYXJncykge1xuICAgIGNvbnN0IHttb2RlbENsYXNzfSA9IGFyZ3NcblxuICAgIGlmICghbW9kZWxDbGFzcykgdGhyb3cgbmV3IEVycm9yKGBObyBtb2RlbENsYXNzIGdpdmVuIGluICR7T2JqZWN0LmtleXMoYXJncykuam9pbihcIiwgXCIpfWApXG5cbiAgICBzdXBlcihhcmdzKVxuICAgIHRoaXMubG9nZ2VyID0gbmV3IExvZ2dlcih0aGlzKVxuXG4gICAgLyoqIEB0eXBlIHtNQ30gKi9cbiAgICB0aGlzLm1vZGVsQ2xhc3MgPSBtb2RlbENsYXNzXG4gIH1cblxuICAvKiogQHJldHVybnMge3RoaXN9ICovXG4gIGNsb25lKCkge1xuICAgIGNvbnN0IG5ld1F1ZXJ5ID0gLyoqIEB0eXBlIHtWZWxvY2lvdXNEYXRhYmFzZVF1ZXJ5TW9kZWxDbGFzc1F1ZXJ5PE1DPn0gKi8gKG5ldyBWZWxvY2lvdXNEYXRhYmFzZVF1ZXJ5TW9kZWxDbGFzc1F1ZXJ5KHtcbiAgICAgIGRyaXZlcjogdGhpcy5fZHJpdmVyRm4sXG4gICAgICBmcm9tczogWy4uLnRoaXMuX2Zyb21zXSxcbiAgICAgIGhhbmRsZXI6IHRoaXMuaGFuZGxlci5jbG9uZSgpLFxuICAgICAgZ3JvdXBzOiBbLi4udGhpcy5fZ3JvdXBzXSxcbiAgICAgIGpvaW5zOiBbLi4udGhpcy5fam9pbnNdLFxuICAgICAgbGltaXQ6IHRoaXMuX2xpbWl0LFxuICAgICAgbW9kZWxDbGFzczogdGhpcy5tb2RlbENsYXNzLFxuICAgICAgb2Zmc2V0OiB0aGlzLl9vZmZzZXQsXG4gICAgICBvcmRlcnM6IFsuLi50aGlzLl9vcmRlcnNdLFxuICAgICAgcGFnZTogdGhpcy5fcGFnZSxcbiAgICAgIHBlclBhZ2U6IHRoaXMuX3BlclBhZ2UsXG4gICAgICBwcmVsb2FkOiB7Li4udGhpcy5fcHJlbG9hZH0sXG4gICAgICBkaXN0aW5jdDogdGhpcy5fZGlzdGluY3QsXG4gICAgICBzZWxlY3RzOiBbLi4udGhpcy5fc2VsZWN0c10sXG4gICAgICB3aGVyZXM6IFsuLi50aGlzLl93aGVyZXNdXG4gICAgfSkpXG5cbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgcmV0dXJuIG5ld1F1ZXJ5XG4gIH1cblxuICAvKiogQHJldHVybnMge1Byb21pc2U8bnVtYmVyPn0gKi9cbiAgYXN5bmMgY291bnQoKSB7XG4gICAgLy8gR2VuZXJhdGUgY291bnQgU1FMXG4gICAgY29uc3QgcHJpbWFyeUtleSA9IGAke3RoaXMuZHJpdmVyLnF1b3RlVGFibGUodGhpcy5nZXRNb2RlbENsYXNzKCkudGFibGVOYW1lKCkpfS4ke3RoaXMuZHJpdmVyLnF1b3RlQ29sdW1uKHRoaXMuZ2V0TW9kZWxDbGFzcygpLnByaW1hcnlLZXkoKSl9YFxuICAgIGNvbnN0IGRpc3RpbmN0UHJlZml4ID0gdGhpcy5fZGlzdGluY3QgPyBcIkRJU1RJTkNUIFwiIDogXCJcIlxuICAgIGxldCBzcWwgPSBgQ09VTlQoJHtkaXN0aW5jdFByZWZpeH0ke3ByaW1hcnlLZXl9KWBcblxuICAgIGlmICh0aGlzLmRyaXZlci5nZXRUeXBlKCkgPT0gXCJwZ3NxbFwiKSBzcWwgKz0gXCI6OmludFwiXG5cbiAgICBzcWwgKz0gXCIgQVMgY291bnRcIlxuXG5cbiAgICAvLyBDbG9uZSBxdWVyeSBhbmQgZXhlY3V0ZSBjb3VudFxuICAgIGNvbnN0IGNvdW50UXVlcnkgPSB0aGlzLmNsb25lKClcblxuICAgIGNvdW50UXVlcnkuX2Rpc3RpbmN0ID0gZmFsc2VcbiAgICBjb3VudFF1ZXJ5Ll9zZWxlY3RzID0gW11cbiAgICBjb3VudFF1ZXJ5LnNlbGVjdChzcWwpXG5cbiAgICBjb25zdCByZXN1bHRzID0gLyoqIEB0eXBlIHt7Y291bnQ6IG51bWJlcn1bXX0gKi8gKGF3YWl0IGNvdW50UXVlcnkuX2V4ZWN1dGVRdWVyeSgpKVxuXG4gICAgLy8gVGhlIHF1ZXJ5IGlzbid0IGdyb3VwZWQgYW5kIGEgc2luZ2xlIHJlc3VsdCBoYXMgYmVlbiBnaXZlblxuICAgIGlmIChyZXN1bHRzLmxlbmd0aCA9PSAxKSB7XG4gICAgICByZXR1cm4gcmVzdWx0c1swXS5jb3VudFxuICAgIH1cblxuICAgIC8vIFRoZSBxdWVyeSBtYXkgYmUgZ3JvdXBlZCBhbmQgYSBsb3Qgb2YgZGlmZmVyZW50IGNvdW50cyBhIGdpdmVuXG4gICAgbGV0IGNvdW50UmVzdWx0ID0gMFxuXG4gICAgZm9yIChjb25zdCByZXN1bHQgb2YgcmVzdWx0cykge1xuICAgICAgaWYgKCEoXCJjb3VudFwiIGluIHJlc3VsdCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBjb3VudCByZXN1bHRcIilcbiAgICAgIH1cblxuICAgICAgY291bnRSZXN1bHQgKz0gcmVzdWx0LmNvdW50XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvdW50UmVzdWx0XG4gIH1cblxuICAvKiogQHJldHVybnMge01DfSAqL1xuICBnZXRNb2RlbENsYXNzKCkge1xuICAgIGlmICghdGhpcy5tb2RlbENsYXNzKSB0aHJvdyBuZXcgRXJyb3IoXCJtb2RlbENsYXNzIG5vdCBzZXRcIilcblxuICAgIHJldHVybiB0aGlzLm1vZGVsQ2xhc3NcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gKi9cbiAgYXN5bmMgZGVzdHJveUFsbCgpIHtcbiAgICBjb25zdCByZWNvcmRzID0gYXdhaXQgdGhpcy50b0FycmF5KClcblxuICAgIGZvciAoY29uc3QgcmVjb3JkIG9mIHJlY29yZHMpIHtcbiAgICAgIGF3YWl0IHJlY29yZC5kZXN0cm95KClcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtudW1iZXJ8c3RyaW5nfSByZWNvcmRJZFxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxJbnN0YW5jZVR5cGU8TUM+Pn1cbiAgICovXG4gIGFzeW5jIGZpbmQocmVjb3JkSWQpIHtcbiAgICAvKiogQHR5cGUge3tba2V5OiBzdHJpbmddOiBudW1iZXIgfCBzdHJpbmd9fSAqL1xuICAgIGNvbnN0IGNvbmRpdGlvbnMgPSB7fVxuXG4gICAgY29uZGl0aW9uc1t0aGlzLmdldE1vZGVsQ2xhc3MoKS5wcmltYXJ5S2V5KCldID0gcmVjb3JkSWRcblxuICAgIGNvbnN0IG5ld1F1ZXJ5ID0gLyoqIEB0eXBlIHtWZWxvY2lvdXNEYXRhYmFzZVF1ZXJ5TW9kZWxDbGFzc1F1ZXJ5PE1DPn0gKi8gKHRoaXMuY2xvbmUoKSlcblxuICAgIG5ld1F1ZXJ5LndoZXJlKGNvbmRpdGlvbnMpXG5cbiAgICBjb25zdCByZWNvcmQgPSAoYXdhaXQgbmV3UXVlcnkuZmlyc3QoKSlcblxuICAgIGlmICghcmVjb3JkKSB7XG4gICAgICB0aHJvdyBuZXcgUmVjb3JkTm90Rm91bmRFcnJvcihgQ291bGRuJ3QgZmluZCAke3RoaXMuZ2V0TW9kZWxDbGFzcygpLm5hbWV9IHdpdGggJyR7dGhpcy5nZXRNb2RlbENsYXNzKCkucHJpbWFyeUtleSgpfSc9JHtyZWNvcmRJZH1gKVxuICAgIH1cblxuICAgIHJldHVybiByZWNvcmRcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3tba2V5OiBzdHJpbmddOiBhbnl9fSBjb25kaXRpb25zXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPEluc3RhbmNlVHlwZTxNQz4gfCBudWxsPn1cbiAgICovXG4gIGFzeW5jIGZpbmRCeShjb25kaXRpb25zKSB7XG4gICAgLyoqIEB0eXBlIHt7W2tleTogc3RyaW5nXTogbnVtYmVyIHwgc3RyaW5nfX0gKi9cbiAgICBjb25zdCBuZXdDb25kaXRpb25zID0ge31cblxuICAgIGZvciAoY29uc3Qga2V5IGluIGNvbmRpdGlvbnMpIHtcbiAgICAgIGNvbnN0IGtleVVuZGVyc2NvcmUgPSBpbmZsZWN0aW9uLnVuZGVyc2NvcmUoa2V5KVxuXG4gICAgICBuZXdDb25kaXRpb25zW2tleVVuZGVyc2NvcmVdID0gY29uZGl0aW9uc1trZXldXG4gICAgfVxuXG4gICAgY29uc3QgbmV3UXVlcnkgPSAvKiogQHR5cGUge1ZlbG9jaW91c0RhdGFiYXNlUXVlcnlNb2RlbENsYXNzUXVlcnk8TUM+fSAqLyAodGhpcy5jbG9uZSgpKVxuXG4gICAgbmV3UXVlcnkud2hlcmUobmV3Q29uZGl0aW9ucylcblxuICAgIHJldHVybiBhd2FpdCBuZXdRdWVyeS5maXJzdCgpXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHt7W2tleTogc3RyaW5nXTogYW55fX0gY29uZGl0aW9uc1xuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKEluc3RhbmNlVHlwZTxNQz4pIDogdm9pZH0gW2NhbGxiYWNrXVxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxJbnN0YW5jZVR5cGU8TUM+Pn1cbiAgICovXG4gIGFzeW5jIGZpbmRPckNyZWF0ZUJ5KGNvbmRpdGlvbnMsIGNhbGxiYWNrKSB7XG4gICAgY29uc3QgcmVjb3JkID0gYXdhaXQgdGhpcy5maW5kT3JJbml0aWFsaXplQnkoY29uZGl0aW9ucywgY2FsbGJhY2spXG5cbiAgICBpZiAocmVjb3JkLmlzTmV3UmVjb3JkKCkpIHtcbiAgICAgIGF3YWl0IHJlY29yZC5zYXZlKClcbiAgICB9XG5cbiAgICByZXR1cm4gcmVjb3JkXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHt7W2tleTogc3RyaW5nXTogYW55fX0gY29uZGl0aW9uc1xuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxJbnN0YW5jZVR5cGU8TUM+Pn1cbiAgICovXG4gIGFzeW5jIGZpbmRCeU9yRmFpbChjb25kaXRpb25zKSB7XG4gICAgLyoqIEB0eXBlIHt7W2tleTogc3RyaW5nXTogbnVtYmVyIHwgc3RyaW5nfX0gKi9cbiAgICBjb25zdCBuZXdDb25kaXRpb25zID0ge31cblxuICAgIGZvciAoY29uc3Qga2V5IGluIGNvbmRpdGlvbnMpIHtcbiAgICAgIGNvbnN0IGtleVVuZGVyc2NvcmUgPSBpbmZsZWN0aW9uLnVuZGVyc2NvcmUoa2V5KVxuXG4gICAgICBuZXdDb25kaXRpb25zW2tleVVuZGVyc2NvcmVdID0gY29uZGl0aW9uc1trZXldXG4gICAgfVxuXG4gICAgY29uc3QgbmV3UXVlcnkgPSAvKiogQHR5cGUge1ZlbG9jaW91c0RhdGFiYXNlUXVlcnlNb2RlbENsYXNzUXVlcnk8TUM+fSAqLyAodGhpcy5jbG9uZSgpKVxuXG4gICAgbmV3UXVlcnkud2hlcmUobmV3Q29uZGl0aW9ucylcblxuICAgIGNvbnN0IG1vZGVsID0gYXdhaXQgbmV3UXVlcnkuZmlyc3QoKVxuXG4gICAgaWYgKCFtb2RlbCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUmVjb3JkIG5vdCBmb3VuZFwiKVxuICAgIH1cblxuICAgIHJldHVybiBtb2RlbFxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBjb25kaXRpb25zXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24oSW5zdGFuY2VUeXBlPE1DPikgOiB2b2lkfSBbY2FsbGJhY2tdXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPEluc3RhbmNlVHlwZTxNQz4+fVxuICAgKi9cbiAgYXN5bmMgZmluZE9ySW5pdGlhbGl6ZUJ5KGNvbmRpdGlvbnMsIGNhbGxiYWNrKSB7XG4gICAgY29uc3QgcmVjb3JkID0gYXdhaXQgdGhpcy5maW5kQnkoY29uZGl0aW9ucylcblxuICAgIGlmIChyZWNvcmQpIHJldHVybiByZWNvcmRcblxuICAgIGNvbnN0IE1vZGVsQ2xhc3MgPSB0aGlzLmdldE1vZGVsQ2xhc3MoKVxuICAgIGNvbnN0IG5ld1JlY29yZCA9IC8qKiBAdHlwZSB7SW5zdGFuY2VUeXBlPE1DPn0gKi8gKG5ldyBNb2RlbENsYXNzKGNvbmRpdGlvbnMpKVxuXG4gICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICBjYWxsYmFjayhuZXdSZWNvcmQpXG4gICAgfVxuXG4gICAgcmV0dXJuIG5ld1JlY29yZFxuICB9XG5cbiAgLyoqIEByZXR1cm5zIHtQcm9taXNlPEluc3RhbmNlVHlwZTxNQz4gfCB1bmRlZmluZWQ+fSAqL1xuICBhc3luYyBmaXJzdCgpIHtcbiAgICBjb25zdCBuZXdRdWVyeSA9IHRoaXMuY2xvbmUoKS5saW1pdCgxKS5yZW9yZGVyKGAke3RoaXMuZHJpdmVyLnF1b3RlVGFibGUodGhpcy5nZXRNb2RlbENsYXNzKCkudGFibGVOYW1lKCkpfS4ke3RoaXMuZHJpdmVyLnF1b3RlQ29sdW1uKHRoaXMuZ2V0TW9kZWxDbGFzcygpLm9yZGVyYWJsZUNvbHVtbigpKX1gKVxuICAgIGNvbnN0IHJlc3VsdHMgPSBhd2FpdCBuZXdRdWVyeS50b0FycmF5KClcblxuICAgIHJldHVybiByZXN1bHRzWzBdXG4gIH1cblxuICAvKiogQHJldHVybnMge1Byb21pc2U8SW5zdGFuY2VUeXBlPE1DPiB8IHVuZGVmaW5lZD59ICovXG4gIGFzeW5jIGxhc3QoKSB7XG4gICAgY29uc3QgcHJpbWFyeUtleSA9IHRoaXMuZ2V0TW9kZWxDbGFzcygpLnByaW1hcnlLZXkoKVxuICAgIGNvbnN0IHRhYmxlTmFtZSA9IHRoaXMuZ2V0TW9kZWxDbGFzcygpLnRhYmxlTmFtZSgpXG4gICAgY29uc3QgcmVzdWx0cyA9IGF3YWl0IHRoaXMuY2xvbmUoKS5yZW9yZGVyKGAke3RoaXMuZHJpdmVyLnF1b3RlVGFibGUodGFibGVOYW1lKX0uJHt0aGlzLmRyaXZlci5xdW90ZUNvbHVtbihwcmltYXJ5S2V5KX0gREVTQ2ApLmxpbWl0KDEpLnRvQXJyYXkoKVxuXG4gICAgcmV0dXJuIHJlc3VsdHNbMF1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4vaW5kZXguanNcIikuTmVzdGVkUHJlbG9hZFJlY29yZH0gZGF0YVxuICAgKiBAcmV0dXJucyB7dGhpc31cbiAgICovXG4gIHByZWxvYWQoZGF0YSkge1xuICAgIGluY29ycG9yYXRlKHRoaXMuX3ByZWxvYWQsIGRhdGEpXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0cyBxdWVyeSByZXN1bHRzIHRvIGFycmF5IG9mIG1vZGVsIGluc3RhbmNlc1xuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxBcnJheTxJbnN0YW5jZVR5cGU8TUM+Pj59XG4gICAqL1xuICBhc3luYyB0b0FycmF5KCkge1xuICAgIGNvbnN0IG1vZGVscyA9IFtdXG4gICAgY29uc3QgcmVzdWx0cyA9IGF3YWl0IHRoaXMucmVzdWx0cygpXG5cbiAgICBmb3IgKGNvbnN0IHJlc3VsdCBvZiByZXN1bHRzKSB7XG4gICAgICBjb25zdCBNb2RlbENsYXNzID0gdGhpcy5nZXRNb2RlbENsYXNzKClcbiAgICAgIGNvbnN0IG1vZGVsID0gLyoqIEB0eXBlIHtJbnN0YW5jZVR5cGU8TUM+fSAqLyAobmV3IE1vZGVsQ2xhc3MoKSlcblxuICAgICAgbW9kZWwubG9hZEV4aXN0aW5nUmVjb3JkKHJlc3VsdClcbiAgICAgIG1vZGVscy5wdXNoKG1vZGVsKVxuICAgIH1cblxuICAgIGlmIChPYmplY3Qua2V5cyh0aGlzLl9wcmVsb2FkKS5sZW5ndGggPiAwICYmIG1vZGVscy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBwcmVsb2FkZXIgPSBuZXcgUHJlbG9hZGVyKHtcbiAgICAgICAgbW9kZWxDbGFzczogdGhpcy5tb2RlbENsYXNzLFxuICAgICAgICBtb2RlbHMsXG4gICAgICAgIHByZWxvYWQ6IHRoaXMuX3ByZWxvYWRcbiAgICAgIH0pXG5cbiAgICAgIGF3YWl0IHByZWxvYWRlci5ydW4oKVxuICAgIH1cblxuICAgIHJldHVybiBtb2RlbHNcbiAgfVxuXG4gIC8qKlxuICAgKiBQbHVja3Mgb25lIG9yIG1vcmUgY29sdW1ucyBkaXJlY3RseSBmcm9tIHRoZSBkYXRhYmFzZSB3aXRob3V0IGluc3RhbnRpYXRpbmcgbW9kZWxzLlxuICAgKiBAcGFyYW0gey4uLnN0cmluZ3xzdHJpbmdbXX0gY29sdW1uc1xuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxhbnlbXT59XG4gICAqL1xuICBhc3luYyBwbHVjayguLi5jb2x1bW5zKSB7XG4gICAgY29uc3QgZmxhdENvbHVtbnMgPSBjb2x1bW5zLmZsYXQoKVxuXG4gICAgaWYgKGZsYXRDb2x1bW5zLmxlbmd0aCA9PT0gMCkgdGhyb3cgbmV3IEVycm9yKFwiTm8gY29sdW1ucyBnaXZlbiB0byBwbHVja1wiKVxuXG4gICAgY29uc3QgbW9kZWxDbGFzcyA9IHRoaXMuZ2V0TW9kZWxDbGFzcygpXG4gICAgY29uc3QgdGFibGVOYW1lID0gbW9kZWxDbGFzcy50YWJsZU5hbWUoKVxuICAgIGNvbnN0IGF0dHJpYnV0ZU1hcCA9IG1vZGVsQ2xhc3MuZ2V0QXR0cmlidXRlTmFtZVRvQ29sdW1uTmFtZU1hcCgpXG4gICAgY29uc3QgY29sdW1uTmFtZXMgPSBmbGF0Q29sdW1ucy5tYXAoKGNvbHVtbikgPT4gYXR0cmlidXRlTWFwW2NvbHVtbl0gfHwgY29sdW1uKVxuXG4gICAgY29uc3QgcXVlcnkgPSAvKiogQHR5cGUge1ZlbG9jaW91c0RhdGFiYXNlUXVlcnlNb2RlbENsYXNzUXVlcnk8TUM+fSAqLyAodGhpcy5jbG9uZSgpKVxuXG4gICAgcXVlcnkuX3ByZWxvYWQgPSB7fVxuICAgIHF1ZXJ5Ll9zZWxlY3RzID0gW11cblxuICAgIGNvbHVtbk5hbWVzLmZvckVhY2goKGNvbHVtbk5hbWUpID0+IHtcbiAgICAgIGNvbnN0IHNlbGVjdFNxbCA9IGAke3RoaXMuZHJpdmVyLnF1b3RlVGFibGUodGFibGVOYW1lKX0uJHt0aGlzLmRyaXZlci5xdW90ZUNvbHVtbihjb2x1bW5OYW1lKX1gXG5cbiAgICAgIHF1ZXJ5LnNlbGVjdChzZWxlY3RTcWwpXG4gICAgfSlcblxuICAgIGNvbnN0IHJvd3MgPSBhd2FpdCBxdWVyeS5fZXhlY3V0ZVF1ZXJ5KClcblxuICAgIGlmIChjb2x1bW5OYW1lcy5sZW5ndGggPT09IDEpIHtcbiAgICAgIGNvbnN0IFtjb2x1bW5OYW1lXSA9IGNvbHVtbk5hbWVzXG4gICAgICByZXR1cm4gcm93cy5tYXAoKHJvdykgPT4gcm93W2NvbHVtbk5hbWVdKVxuICAgIH1cblxuICAgIHJldHVybiByb3dzLm1hcCgocm93KSA9PiBjb2x1bW5OYW1lcy5tYXAoKGNvbHVtbk5hbWUpID0+IHJvd1tjb2x1bW5OYW1lXSkpXG4gIH1cbn1cbiJdfQ==
244
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWwtY2xhc3MtcXVlcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZGF0YWJhc2UvcXVlcnkvbW9kZWwtY2xhc3MtcXVlcnkuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxjQUFjLENBQUE7QUFDeEMsT0FBTyxLQUFLLFVBQVUsTUFBTSxZQUFZLENBQUE7QUFDeEMsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLGlCQUFpQixDQUFBO0FBQ3RDLE9BQU8sU0FBUyxNQUFNLGdCQUFnQixDQUFBO0FBQ3RDLE9BQU8sYUFBYSxNQUFNLFlBQVksQ0FBQTtBQUN0QyxPQUFPLG1CQUFtQixNQUFNLHFDQUFxQyxDQUFBO0FBRXJFOztHQUVHO0FBQ0g7OztHQUdHO0FBRUg7OztHQUdHO0FBQ0gsTUFBTSxDQUFDLE9BQU8sT0FBTyxxQ0FBc0MsU0FBUSxhQUFhO0lBQzlFLCtFQUErRTtJQUMvRSxZQUFZLElBQUk7UUFDZCxNQUFNLEVBQUMsVUFBVSxFQUFDLEdBQUcsSUFBSSxDQUFBO1FBRXpCLElBQUksQ0FBQyxVQUFVO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQywwQkFBMEIsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFBO1FBRTFGLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUNYLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUE7UUFFOUIsaUJBQWlCO1FBQ2pCLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFBO0lBQzlCLENBQUM7SUFFRCxvQ0FBb0M7SUFDcEMsS0FBSztRQUNILE1BQU0sUUFBUSxHQUFHLHdEQUF3RCxDQUFDLENBQUMsSUFBSSxxQ0FBcUMsQ0FBQztZQUNuSCxNQUFNLEVBQUUsSUFBSSxDQUFDLFNBQVM7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LENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFBO1lBRS9GLEtBQUssQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUE7UUFDekIsQ0FBQyxDQUFDLENBQUE7UUFFRixNQUFNLElBQUksR0FBRyxNQUFNLEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQTtRQUV4QyxJQUFJLFdBQVcsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDN0IsTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFHLFdBQVcsQ0FBQTtZQUNoQyxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFBO1FBQzNDLENBQUM7UUFFRCxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDNUUsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbmltcG9ydCB7aW5jb3Jwb3JhdGV9IGZyb20gXCJpbmNvcnBvcmF0b3JcIlxuaW1wb3J0ICogYXMgaW5mbGVjdGlvbiBmcm9tIFwiaW5mbGVjdGlvblwiXG5pbXBvcnQge0xvZ2dlcn0gZnJvbSBcIi4uLy4uL2xvZ2dlci5qc1wiXG5pbXBvcnQgUHJlbG9hZGVyIGZyb20gXCIuL3ByZWxvYWRlci5qc1wiXG5pbXBvcnQgRGF0YWJhc2VRdWVyeSBmcm9tIFwiLi9pbmRleC5qc1wiXG5pbXBvcnQgUmVjb3JkTm90Rm91bmRFcnJvciBmcm9tIFwiLi4vcmVjb3JkL3JlY29yZC1ub3QtZm91bmQtZXJyb3IuanNcIlxuXG4vKipcbiAqIEB0ZW1wbGF0ZSB7dHlwZW9mIGltcG9ydChcIi4uL3JlY29yZC9pbmRleC5qc1wiKS5kZWZhdWx0fSBNQ1xuICovXG4vKipcbiAqIEB0ZW1wbGF0ZSB7dHlwZW9mIGltcG9ydChcIi4uL3JlY29yZC9pbmRleC5qc1wiKS5kZWZhdWx0fSBNQ1xuICogQHR5cGVkZWYge2ltcG9ydChcIi4vaW5kZXguanNcIikuUXVlcnlBcmdzVHlwZSAmIHttb2RlbENsYXNzOiBNQ319IE1vZGVsQ2xhc3NRdWVyeUFyZ3NUeXBlXG4gKi9cblxuLyoqXG4gKiBBIGdlbmVyaWMgcXVlcnkgb3ZlciBzb21lIG1vZGVsIHR5cGUuXG4gKiBAdGVtcGxhdGUge3R5cGVvZiBpbXBvcnQoXCIuLi9yZWNvcmQvaW5kZXguanNcIikuZGVmYXVsdH0gTUNcbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVmVsb2Npb3VzRGF0YWJhc2VRdWVyeU1vZGVsQ2xhc3NRdWVyeSBleHRlbmRzIERhdGFiYXNlUXVlcnkge1xuICAvKiogQHBhcmFtIHtNb2RlbENsYXNzUXVlcnlBcmdzVHlwZTxNQz59IGFyZ3MgLSBRdWVyeSBjb25zdHJ1Y3RvciBhcmd1bWVudHMuICovXG4gIGNvbnN0cnVjdG9yKGFyZ3MpIHtcbiAgICBjb25zdCB7bW9kZWxDbGFzc30gPSBhcmdzXG5cbiAgICBpZiAoIW1vZGVsQ2xhc3MpIHRocm93IG5ldyBFcnJvcihgTm8gbW9kZWxDbGFzcyBnaXZlbiBpbiAke09iamVjdC5rZXlzKGFyZ3MpLmpvaW4oXCIsIFwiKX1gKVxuXG4gICAgc3VwZXIoYXJncylcbiAgICB0aGlzLmxvZ2dlciA9IG5ldyBMb2dnZXIodGhpcylcblxuICAgIC8qKiBAdHlwZSB7TUN9ICovXG4gICAgdGhpcy5tb2RlbENsYXNzID0gbW9kZWxDbGFzc1xuICB9XG5cbiAgLyoqIEByZXR1cm5zIHt0aGlzfSAtIFRoZSBjbG9uZS4gICovXG4gIGNsb25lKCkge1xuICAgIGNvbnN0IG5ld1F1ZXJ5ID0gLyoqIEB0eXBlIHtWZWxvY2lvdXNEYXRhYmFzZVF1ZXJ5TW9kZWxDbGFzc1F1ZXJ5PE1DPn0gKi8gKG5ldyBWZWxvY2lvdXNEYXRhYmFzZVF1ZXJ5TW9kZWxDbGFzc1F1ZXJ5KHtcbiAgICAgIGRyaXZlcjogdGhpcy5fZHJpdmVyRm4sXG4gICAgICBmcm9tczogWy4uLnRoaXMuX2Zyb21zXSxcbiAgICAgIGhhbmRsZXI6IHRoaXMuaGFuZGxlci5jbG9uZSgpLFxuICAgICAgZ3JvdXBzOiBbLi4udGhpcy5fZ3JvdXBzXSxcbiAgICAgIGpvaW5zOiBbLi4udGhpcy5fam9pbnNdLFxuICAgICAgbGltaXQ6IHRoaXMuX2xpbWl0LFxuICAgICAgbW9kZWxDbGFzczogdGhpcy5tb2RlbENsYXNzLFxuICAgICAgb2Zmc2V0OiB0aGlzLl9vZmZzZXQsXG4gICAgICBvcmRlcnM6IFsuLi50aGlzLl9vcmRlcnNdLFxuICAgICAgcGFnZTogdGhpcy5fcGFnZSxcbiAgICAgIHBlclBhZ2U6IHRoaXMuX3BlclBhZ2UsXG4gICAgICBwcmVsb2FkOiB7Li4udGhpcy5fcHJlbG9hZH0sXG4gICAgICBkaXN0aW5jdDogdGhpcy5fZGlzdGluY3QsXG4gICAgICBzZWxlY3RzOiBbLi4udGhpcy5fc2VsZWN0c10sXG4gICAgICB3aGVyZXM6IFsuLi50aGlzLl93aGVyZXNdXG4gICAgfSkpXG5cbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgcmV0dXJuIG5ld1F1ZXJ5XG4gIH1cblxuICAvKiogQHJldHVybnMge1Byb21pc2U8bnVtYmVyPn0gLSBSZXNvbHZlcyB3aXRoIHRoZSBjb3VudC4gICovXG4gIGFzeW5jIGNvdW50KCkge1xuICAgIC8vIEdlbmVyYXRlIGNvdW50IFNRTFxuICAgIGNvbnN0IHByaW1hcnlLZXkgPSBgJHt0aGlzLmRyaXZlci5xdW90ZVRhYmxlKHRoaXMuZ2V0TW9kZWxDbGFzcygpLnRhYmxlTmFtZSgpKX0uJHt0aGlzLmRyaXZlci5xdW90ZUNvbHVtbih0aGlzLmdldE1vZGVsQ2xhc3MoKS5wcmltYXJ5S2V5KCkpfWBcbiAgICBjb25zdCBkaXN0aW5jdFByZWZpeCA9IHRoaXMuX2Rpc3RpbmN0ID8gXCJESVNUSU5DVCBcIiA6IFwiXCJcbiAgICBsZXQgc3FsID0gYENPVU5UKCR7ZGlzdGluY3RQcmVmaXh9JHtwcmltYXJ5S2V5fSlgXG5cbiAgICBpZiAodGhpcy5kcml2ZXIuZ2V0VHlwZSgpID09IFwicGdzcWxcIikgc3FsICs9IFwiOjppbnRcIlxuXG4gICAgc3FsICs9IFwiIEFTIGNvdW50XCJcblxuXG4gICAgLy8gQ2xvbmUgcXVlcnkgYW5kIGV4ZWN1dGUgY291bnRcbiAgICBjb25zdCBjb3VudFF1ZXJ5ID0gdGhpcy5jbG9uZSgpXG5cbiAgICBjb3VudFF1ZXJ5Ll9kaXN0aW5jdCA9IGZhbHNlXG4gICAgY291bnRRdWVyeS5fc2VsZWN0cyA9IFtdXG4gICAgY291bnRRdWVyeS5zZWxlY3Qoc3FsKVxuXG4gICAgY29uc3QgcmVzdWx0cyA9IC8qKiBAdHlwZSB7e2NvdW50OiBudW1iZXJ9W119ICovIChhd2FpdCBjb3VudFF1ZXJ5Ll9leGVjdXRlUXVlcnkoKSlcblxuICAgIC8vIFRoZSBxdWVyeSBpc24ndCBncm91cGVkIGFuZCBhIHNpbmdsZSByZXN1bHQgaGFzIGJlZW4gZ2l2ZW5cbiAgICBpZiAocmVzdWx0cy5sZW5ndGggPT0gMSkge1xuICAgICAgcmV0dXJuIHJlc3VsdHNbMF0uY291bnRcbiAgICB9XG5cbiAgICAvLyBUaGUgcXVlcnkgbWF5IGJlIGdyb3VwZWQgYW5kIGEgbG90IG9mIGRpZmZlcmVudCBjb3VudHMgYSBnaXZlblxuICAgIGxldCBjb3VudFJlc3VsdCA9IDBcblxuICAgIGZvciAoY29uc3QgcmVzdWx0IG9mIHJlc3VsdHMpIHtcbiAgICAgIGlmICghKFwiY291bnRcIiBpbiByZXN1bHQpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgY291bnQgcmVzdWx0XCIpXG4gICAgICB9XG5cbiAgICAgIGNvdW50UmVzdWx0ICs9IHJlc3VsdC5jb3VudFxuICAgIH1cblxuICAgIHJldHVybiBjb3VudFJlc3VsdFxuICB9XG5cbiAgLyoqIEByZXR1cm5zIHtNQ30gLSBUaGUgbW9kZWwgY2xhc3MuICAqL1xuICBnZXRNb2RlbENsYXNzKCkge1xuICAgIGlmICghdGhpcy5tb2RlbENsYXNzKSB0aHJvdyBuZXcgRXJyb3IoXCJtb2RlbENsYXNzIG5vdCBzZXRcIilcblxuICAgIHJldHVybiB0aGlzLm1vZGVsQ2xhc3NcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gLSBSZXNvbHZlcyB3aGVuIGNvbXBsZXRlLiAgKi9cbiAgYXN5bmMgZGVzdHJveUFsbCgpIHtcbiAgICBjb25zdCByZWNvcmRzID0gYXdhaXQgdGhpcy50b0FycmF5KClcblxuICAgIGZvciAoY29uc3QgcmVjb3JkIG9mIHJlY29yZHMpIHtcbiAgICAgIGF3YWl0IHJlY29yZC5kZXN0cm95KClcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtudW1iZXJ8c3RyaW5nfSByZWNvcmRJZCAtIFJlY29yZCBpZC5cbiAgICogQHJldHVybnMge1Byb21pc2U8SW5zdGFuY2VUeXBlPE1DPj59IC0gUmVzb2x2ZXMgd2l0aCB0aGUgZmluZC5cbiAgICovXG4gIGFzeW5jIGZpbmQocmVjb3JkSWQpIHtcbiAgICAvKiogQHR5cGUge3tba2V5OiBzdHJpbmddOiBudW1iZXIgfCBzdHJpbmd9fSAqL1xuICAgIGNvbnN0IGNvbmRpdGlvbnMgPSB7fVxuXG4gICAgY29uZGl0aW9uc1t0aGlzLmdldE1vZGVsQ2xhc3MoKS5wcmltYXJ5S2V5KCldID0gcmVjb3JkSWRcblxuICAgIGNvbnN0IG5ld1F1ZXJ5ID0gLyoqIEB0eXBlIHtWZWxvY2lvdXNEYXRhYmFzZVF1ZXJ5TW9kZWxDbGFzc1F1ZXJ5PE1DPn0gKi8gKHRoaXMuY2xvbmUoKSlcblxuICAgIG5ld1F1ZXJ5LndoZXJlKGNvbmRpdGlvbnMpXG5cbiAgICBjb25zdCByZWNvcmQgPSAoYXdhaXQgbmV3UXVlcnkuZmlyc3QoKSlcblxuICAgIGlmICghcmVjb3JkKSB7XG4gICAgICB0aHJvdyBuZXcgUmVjb3JkTm90Rm91bmRFcnJvcihgQ291bGRuJ3QgZmluZCAke3RoaXMuZ2V0TW9kZWxDbGFzcygpLm5hbWV9IHdpdGggJyR7dGhpcy5nZXRNb2RlbENsYXNzKCkucHJpbWFyeUtleSgpfSc9JHtyZWNvcmRJZH1gKVxuICAgIH1cblxuICAgIHJldHVybiByZWNvcmRcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3tba2V5OiBzdHJpbmddOiBzdHJpbmcgfCBudW1iZXJ9fSBjb25kaXRpb25zIC0gQ29uZGl0aW9ucyBoYXNoIGtleWVkIGJ5IGF0dHJpYnV0ZSBuYW1lLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxJbnN0YW5jZVR5cGU8TUM+IHwgbnVsbD59IC0gUmVzb2x2ZXMgd2l0aCB0aGUgYnkuXG4gICAqL1xuICBhc3luYyBmaW5kQnkoY29uZGl0aW9ucykge1xuICAgIC8qKiBAdHlwZSB7e1trZXk6IHN0cmluZ106IG51bWJlciB8IHN0cmluZ319ICovXG4gICAgY29uc3QgbmV3Q29uZGl0aW9ucyA9IHt9XG5cbiAgICBmb3IgKGNvbnN0IGtleSBpbiBjb25kaXRpb25zKSB7XG4gICAgICBjb25zdCBrZXlVbmRlcnNjb3JlID0gaW5mbGVjdGlvbi51bmRlcnNjb3JlKGtleSlcblxuICAgICAgbmV3Q29uZGl0aW9uc1trZXlVbmRlcnNjb3JlXSA9IGNvbmRpdGlvbnNba2V5XVxuICAgIH1cblxuICAgIGNvbnN0IG5ld1F1ZXJ5ID0gLyoqIEB0eXBlIHtWZWxvY2lvdXNEYXRhYmFzZVF1ZXJ5TW9kZWxDbGFzc1F1ZXJ5PE1DPn0gKi8gKHRoaXMuY2xvbmUoKSlcblxuICAgIG5ld1F1ZXJ5LndoZXJlKG5ld0NvbmRpdGlvbnMpXG5cbiAgICByZXR1cm4gYXdhaXQgbmV3UXVlcnkuZmlyc3QoKVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7e1trZXk6IHN0cmluZ106IHN0cmluZyB8IG51bWJlcn19IGNvbmRpdGlvbnMgLSBDb25kaXRpb25zIGhhc2gga2V5ZWQgYnkgYXR0cmlidXRlIG5hbWUuXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24oSW5zdGFuY2VUeXBlPE1DPikgOiB2b2lkfSBbY2FsbGJhY2tdIC0gQ2FsbGJhY2sgZnVuY3Rpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPEluc3RhbmNlVHlwZTxNQz4+fSAtIFJlc29sdmVzIHdpdGggdGhlIG9yIGNyZWF0ZSBieS5cbiAgICovXG4gIGFzeW5jIGZpbmRPckNyZWF0ZUJ5KGNvbmRpdGlvbnMsIGNhbGxiYWNrKSB7XG4gICAgY29uc3QgcmVjb3JkID0gYXdhaXQgdGhpcy5maW5kT3JJbml0aWFsaXplQnkoY29uZGl0aW9ucywgY2FsbGJhY2spXG5cbiAgICBpZiAocmVjb3JkLmlzTmV3UmVjb3JkKCkpIHtcbiAgICAgIGF3YWl0IHJlY29yZC5zYXZlKClcbiAgICB9XG5cbiAgICByZXR1cm4gcmVjb3JkXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHt7W2tleTogc3RyaW5nXTogc3RyaW5nIHwgbnVtYmVyfX0gY29uZGl0aW9ucyAtIENvbmRpdGlvbnMgaGFzaCBrZXllZCBieSBhdHRyaWJ1dGUgbmFtZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8SW5zdGFuY2VUeXBlPE1DPj59IC0gUmVzb2x2ZXMgd2l0aCB0aGUgYnkgb3IgZmFpbC5cbiAgICovXG4gIGFzeW5jIGZpbmRCeU9yRmFpbChjb25kaXRpb25zKSB7XG4gICAgLyoqIEB0eXBlIHt7W2tleTogc3RyaW5nXTogbnVtYmVyIHwgc3RyaW5nfX0gKi9cbiAgICBjb25zdCBuZXdDb25kaXRpb25zID0ge31cblxuICAgIGZvciAoY29uc3Qga2V5IGluIGNvbmRpdGlvbnMpIHtcbiAgICAgIGNvbnN0IGtleVVuZGVyc2NvcmUgPSBpbmZsZWN0aW9uLnVuZGVyc2NvcmUoa2V5KVxuXG4gICAgICBuZXdDb25kaXRpb25zW2tleVVuZGVyc2NvcmVdID0gY29uZGl0aW9uc1trZXldXG4gICAgfVxuXG4gICAgY29uc3QgbmV3UXVlcnkgPSAvKiogQHR5cGUge1ZlbG9jaW91c0RhdGFiYXNlUXVlcnlNb2RlbENsYXNzUXVlcnk8TUM+fSAqLyAodGhpcy5jbG9uZSgpKVxuXG4gICAgbmV3UXVlcnkud2hlcmUobmV3Q29uZGl0aW9ucylcblxuICAgIGNvbnN0IG1vZGVsID0gYXdhaXQgbmV3UXVlcnkuZmlyc3QoKVxuXG4gICAgaWYgKCFtb2RlbCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUmVjb3JkIG5vdCBmb3VuZFwiKVxuICAgIH1cblxuICAgIHJldHVybiBtb2RlbFxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBjb25kaXRpb25zIC0gQ29uZGl0aW9ucy5cbiAgICogQHBhcmFtIHtmdW5jdGlvbihJbnN0YW5jZVR5cGU8TUM+KSA6IHZvaWR9IFtjYWxsYmFja10gLSBDYWxsYmFjayBmdW5jdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8SW5zdGFuY2VUeXBlPE1DPj59IC0gUmVzb2x2ZXMgd2l0aCB0aGUgb3IgaW5pdGlhbGl6ZSBieS5cbiAgICovXG4gIGFzeW5jIGZpbmRPckluaXRpYWxpemVCeShjb25kaXRpb25zLCBjYWxsYmFjaykge1xuICAgIGNvbnN0IHJlY29yZCA9IGF3YWl0IHRoaXMuZmluZEJ5KGNvbmRpdGlvbnMpXG5cbiAgICBpZiAocmVjb3JkKSByZXR1cm4gcmVjb3JkXG5cbiAgICBjb25zdCBNb2RlbENsYXNzID0gdGhpcy5nZXRNb2RlbENsYXNzKClcbiAgICBjb25zdCBuZXdSZWNvcmQgPSAvKiogQHR5cGUge0luc3RhbmNlVHlwZTxNQz59ICovIChuZXcgTW9kZWxDbGFzcyhjb25kaXRpb25zKSlcblxuICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgY2FsbGJhY2sobmV3UmVjb3JkKVxuICAgIH1cblxuICAgIHJldHVybiBuZXdSZWNvcmRcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7UHJvbWlzZTxJbnN0YW5jZVR5cGU8TUM+IHwgdW5kZWZpbmVkPn0gLSBSZXNvbHZlcyB3aXRoIHRoZSBmaXJzdC4gICovXG4gIGFzeW5jIGZpcnN0KCkge1xuICAgIGNvbnN0IG5ld1F1ZXJ5ID0gdGhpcy5jbG9uZSgpLmxpbWl0KDEpLnJlb3JkZXIoYCR7dGhpcy5kcml2ZXIucXVvdGVUYWJsZSh0aGlzLmdldE1vZGVsQ2xhc3MoKS50YWJsZU5hbWUoKSl9LiR7dGhpcy5kcml2ZXIucXVvdGVDb2x1bW4odGhpcy5nZXRNb2RlbENsYXNzKCkub3JkZXJhYmxlQ29sdW1uKCkpfWApXG4gICAgY29uc3QgcmVzdWx0cyA9IGF3YWl0IG5ld1F1ZXJ5LnRvQXJyYXkoKVxuXG4gICAgcmV0dXJuIHJlc3VsdHNbMF1cbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7UHJvbWlzZTxJbnN0YW5jZVR5cGU8TUM+IHwgdW5kZWZpbmVkPn0gLSBSZXNvbHZlcyB3aXRoIHRoZSBsYXN0LiAgKi9cbiAgYXN5bmMgbGFzdCgpIHtcbiAgICBjb25zdCBwcmltYXJ5S2V5ID0gdGhpcy5nZXRNb2RlbENsYXNzKCkucHJpbWFyeUtleSgpXG4gICAgY29uc3QgdGFibGVOYW1lID0gdGhpcy5nZXRNb2RlbENsYXNzKCkudGFibGVOYW1lKClcbiAgICBjb25zdCByZXN1bHRzID0gYXdhaXQgdGhpcy5jbG9uZSgpLnJlb3JkZXIoYCR7dGhpcy5kcml2ZXIucXVvdGVUYWJsZSh0YWJsZU5hbWUpfS4ke3RoaXMuZHJpdmVyLnF1b3RlQ29sdW1uKHByaW1hcnlLZXkpfSBERVNDYCkubGltaXQoMSkudG9BcnJheSgpXG5cbiAgICByZXR1cm4gcmVzdWx0c1swXVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi9pbmRleC5qc1wiKS5OZXN0ZWRQcmVsb2FkUmVjb3JkfSBkYXRhIC0gRGF0YSBwYXlsb2FkLlxuICAgKiBAcmV0dXJucyB7dGhpc30gLSBUaGUgcHJlbG9hZC5cbiAgICovXG4gIHByZWxvYWQoZGF0YSkge1xuICAgIGluY29ycG9yYXRlKHRoaXMuX3ByZWxvYWQsIGRhdGEpXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0cyBxdWVyeSByZXN1bHRzIHRvIGFycmF5IG9mIG1vZGVsIGluc3RhbmNlc1xuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxBcnJheTxJbnN0YW5jZVR5cGU8TUM+Pj59IC0gUmVzb2x2ZXMgd2l0aCB0aGUgYXJyYXkuXG4gICAqL1xuICBhc3luYyB0b0FycmF5KCkge1xuICAgIGNvbnN0IG1vZGVscyA9IFtdXG4gICAgY29uc3QgcmVzdWx0cyA9IGF3YWl0IHRoaXMucmVzdWx0cygpXG5cbiAgICBmb3IgKGNvbnN0IHJlc3VsdCBvZiByZXN1bHRzKSB7XG4gICAgICBjb25zdCBNb2RlbENsYXNzID0gdGhpcy5nZXRNb2RlbENsYXNzKClcbiAgICAgIGNvbnN0IG1vZGVsID0gLyoqIEB0eXBlIHtJbnN0YW5jZVR5cGU8TUM+fSAqLyAobmV3IE1vZGVsQ2xhc3MoKSlcblxuICAgICAgbW9kZWwubG9hZEV4aXN0aW5nUmVjb3JkKHJlc3VsdClcbiAgICAgIG1vZGVscy5wdXNoKG1vZGVsKVxuICAgIH1cblxuICAgIGlmIChPYmplY3Qua2V5cyh0aGlzLl9wcmVsb2FkKS5sZW5ndGggPiAwICYmIG1vZGVscy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBwcmVsb2FkZXIgPSBuZXcgUHJlbG9hZGVyKHtcbiAgICAgICAgbW9kZWxDbGFzczogdGhpcy5tb2RlbENsYXNzLFxuICAgICAgICBtb2RlbHMsXG4gICAgICAgIHByZWxvYWQ6IHRoaXMuX3ByZWxvYWRcbiAgICAgIH0pXG5cbiAgICAgIGF3YWl0IHByZWxvYWRlci5ydW4oKVxuICAgIH1cblxuICAgIHJldHVybiBtb2RlbHNcbiAgfVxuXG4gIC8qKlxuICAgKiBQbHVja3Mgb25lIG9yIG1vcmUgY29sdW1ucyBkaXJlY3RseSBmcm9tIHRoZSBkYXRhYmFzZSB3aXRob3V0IGluc3RhbnRpYXRpbmcgbW9kZWxzLlxuICAgKiBAcGFyYW0gey4uLnN0cmluZ3xzdHJpbmdbXX0gY29sdW1ucyAtIENvbHVtbiBuYW1lcy5cbiAgICogQHJldHVybnMge1Byb21pc2U8dW5rbm93bltdPn0gLSBSZXNvbHZlcyB3aXRoIHRoZSBwbHVjay5cbiAgICovXG4gIGFzeW5jIHBsdWNrKC4uLmNvbHVtbnMpIHtcbiAgICBjb25zdCBmbGF0Q29sdW1ucyA9IGNvbHVtbnMuZmxhdCgpXG5cbiAgICBpZiAoZmxhdENvbHVtbnMubGVuZ3RoID09PSAwKSB0aHJvdyBuZXcgRXJyb3IoXCJObyBjb2x1bW5zIGdpdmVuIHRvIHBsdWNrXCIpXG5cbiAgICBjb25zdCBtb2RlbENsYXNzID0gdGhpcy5nZXRNb2RlbENsYXNzKClcbiAgICBjb25zdCB0YWJsZU5hbWUgPSBtb2RlbENsYXNzLnRhYmxlTmFtZSgpXG4gICAgY29uc3QgYXR0cmlidXRlTWFwID0gbW9kZWxDbGFzcy5nZXRBdHRyaWJ1dGVOYW1lVG9Db2x1bW5OYW1lTWFwKClcbiAgICBjb25zdCBjb2x1bW5OYW1lcyA9IGZsYXRDb2x1bW5zLm1hcCgoY29sdW1uKSA9PiBhdHRyaWJ1dGVNYXBbY29sdW1uXSB8fCBjb2x1bW4pXG5cbiAgICBjb25zdCBxdWVyeSA9IC8qKiBAdHlwZSB7VmVsb2Npb3VzRGF0YWJhc2VRdWVyeU1vZGVsQ2xhc3NRdWVyeTxNQz59ICovICh0aGlzLmNsb25lKCkpXG5cbiAgICBxdWVyeS5fcHJlbG9hZCA9IHt9XG4gICAgcXVlcnkuX3NlbGVjdHMgPSBbXVxuXG4gICAgY29sdW1uTmFtZXMuZm9yRWFjaCgoY29sdW1uTmFtZSkgPT4ge1xuICAgICAgY29uc3Qgc2VsZWN0U3FsID0gYCR7dGhpcy5kcml2ZXIucXVvdGVUYWJsZSh0YWJsZU5hbWUpfS4ke3RoaXMuZHJpdmVyLnF1b3RlQ29sdW1uKGNvbHVtbk5hbWUpfWBcblxuICAgICAgcXVlcnkuc2VsZWN0KHNlbGVjdFNxbClcbiAgICB9KVxuXG4gICAgY29uc3Qgcm93cyA9IGF3YWl0IHF1ZXJ5Ll9leGVjdXRlUXVlcnkoKVxuXG4gICAgaWYgKGNvbHVtbk5hbWVzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgY29uc3QgW2NvbHVtbk5hbWVdID0gY29sdW1uTmFtZXNcbiAgICAgIHJldHVybiByb3dzLm1hcCgocm93KSA9PiByb3dbY29sdW1uTmFtZV0pXG4gICAgfVxuXG4gICAgcmV0dXJuIHJvd3MubWFwKChyb3cpID0+IGNvbHVtbk5hbWVzLm1hcCgoY29sdW1uTmFtZSkgPT4gcm93W2NvbHVtbk5hbWVdKSlcbiAgfVxufVxuIl19
@@ -1,17 +1,17 @@
1
1
  export default class VelociousDatabaseQueryOrderBase {
2
2
  /**
3
- * @param {import("./index.js").default} query
3
+ * @param {import("./index.js").default} query - Query instance.
4
4
  */
5
5
  constructor(query: import("./index.js").default);
6
6
  query: import("./index.js").default;
7
7
  /**
8
- * @returns {import("../query-parser/options.js").default}
8
+ * @returns {import("../query-parser/options.js").default} - The options options.
9
9
  */
10
10
  getOptions(): import("../query-parser/options.js").default;
11
11
  /**
12
12
  * @abstract
13
- * @param {boolean} _reverseOrder
14
- * @returns {void}
13
+ * @param {boolean} _reverseOrder - Whether reverse order.
14
+ * @returns {void} - No return value.
15
15
  */
16
16
  setReverseOrder(_reverseOrder: boolean): void;
17
17
  toSql(): void;
@@ -1,21 +1,21 @@
1
1
  // @ts-check
2
2
  export default class VelociousDatabaseQueryOrderBase {
3
3
  /**
4
- * @param {import("./index.js").default} query
4
+ * @param {import("./index.js").default} query - Query instance.
5
5
  */
6
6
  constructor(query) {
7
7
  this.query = query;
8
8
  }
9
9
  /**
10
- * @returns {import("../query-parser/options.js").default}
10
+ * @returns {import("../query-parser/options.js").default} - The options options.
11
11
  */
12
12
  getOptions() {
13
13
  return this.query.driver.options();
14
14
  }
15
15
  /**
16
16
  * @abstract
17
- * @param {boolean} _reverseOrder
18
- * @returns {void}
17
+ * @param {boolean} _reverseOrder - Whether reverse order.
18
+ * @returns {void} - No return value.
19
19
  */
20
20
  setReverseOrder(_reverseOrder) {
21
21
  throw new Error("setReverseOrder not implemented");
@@ -24,4 +24,4 @@ export default class VelociousDatabaseQueryOrderBase {
24
24
  throw new Error("'toSql' wasn't implemented");
25
25
  }
26
26
  }
27
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JkZXItYmFzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kYXRhYmFzZS9xdWVyeS9vcmRlci1iYXNlLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWixNQUFNLENBQUMsT0FBTyxPQUFPLCtCQUErQjtJQUNsRDs7T0FFRztJQUNILFlBQVksS0FBSztRQUNmLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFBO0lBQ3BCLENBQUM7SUFFRDs7T0FFRztJQUNILFVBQVU7UUFDUixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFBO0lBQ3BDLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsZUFBZSxDQUFDLGFBQWE7UUFDM0IsTUFBTSxJQUFJLEtBQUssQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFBO0lBQ3BELENBQUM7SUFFRCxLQUFLO1FBQ0gsTUFBTSxJQUFJLEtBQUssQ0FBQyw0QkFBNEIsQ0FBQyxDQUFBO0lBQy9DLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWZWxvY2lvdXNEYXRhYmFzZVF1ZXJ5T3JkZXJCYXNlIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi9pbmRleC5qc1wiKS5kZWZhdWx0fSBxdWVyeVxuICAgKi9cbiAgY29uc3RydWN0b3IocXVlcnkpIHtcbiAgICB0aGlzLnF1ZXJ5ID0gcXVlcnlcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vcXVlcnktcGFyc2VyL29wdGlvbnMuanNcIikuZGVmYXVsdH1cbiAgICovXG4gIGdldE9wdGlvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMucXVlcnkuZHJpdmVyLm9wdGlvbnMoKVxuICB9XG5cbiAgLyoqXG4gICAqIEBhYnN0cmFjdFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IF9yZXZlcnNlT3JkZXJcbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBzZXRSZXZlcnNlT3JkZXIoX3JldmVyc2VPcmRlcikgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgdGhyb3cgbmV3IEVycm9yKFwic2V0UmV2ZXJzZU9yZGVyIG5vdCBpbXBsZW1lbnRlZFwiKVxuICB9XG5cbiAgdG9TcWwoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiJ3RvU3FsJyB3YXNuJ3QgaW1wbGVtZW50ZWRcIilcbiAgfVxufVxuIl19
27
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JkZXItYmFzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kYXRhYmFzZS9xdWVyeS9vcmRlci1iYXNlLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWixNQUFNLENBQUMsT0FBTyxPQUFPLCtCQUErQjtJQUNsRDs7T0FFRztJQUNILFlBQVksS0FBSztRQUNmLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFBO0lBQ3BCLENBQUM7SUFFRDs7T0FFRztJQUNILFVBQVU7UUFDUixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFBO0lBQ3BDLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsZUFBZSxDQUFDLGFBQWE7UUFDM0IsTUFBTSxJQUFJLEtBQUssQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFBO0lBQ3BELENBQUM7SUFFRCxLQUFLO1FBQ0gsTUFBTSxJQUFJLEtBQUssQ0FBQyw0QkFBNEIsQ0FBQyxDQUFBO0lBQy9DLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWZWxvY2lvdXNEYXRhYmFzZVF1ZXJ5T3JkZXJCYXNlIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi9pbmRleC5qc1wiKS5kZWZhdWx0fSBxdWVyeSAtIFF1ZXJ5IGluc3RhbmNlLlxuICAgKi9cbiAgY29uc3RydWN0b3IocXVlcnkpIHtcbiAgICB0aGlzLnF1ZXJ5ID0gcXVlcnlcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vcXVlcnktcGFyc2VyL29wdGlvbnMuanNcIikuZGVmYXVsdH0gLSBUaGUgb3B0aW9ucyBvcHRpb25zLlxuICAgKi9cbiAgZ2V0T3B0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5xdWVyeS5kcml2ZXIub3B0aW9ucygpXG4gIH1cblxuICAvKipcbiAgICogQGFic3RyYWN0XG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gX3JldmVyc2VPcmRlciAtIFdoZXRoZXIgcmV2ZXJzZSBvcmRlci5cbiAgICogQHJldHVybnMge3ZvaWR9IC0gTm8gcmV0dXJuIHZhbHVlLlxuICAgKi9cbiAgc2V0UmV2ZXJzZU9yZGVyKF9yZXZlcnNlT3JkZXIpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICAgIHRocm93IG5ldyBFcnJvcihcInNldFJldmVyc2VPcmRlciBub3QgaW1wbGVtZW50ZWRcIilcbiAgfVxuXG4gIHRvU3FsKCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIid0b1NxbCcgd2Fzbid0IGltcGxlbWVudGVkXCIpXG4gIH1cbn1cbiJdfQ==
@@ -1,7 +1,7 @@
1
1
  export default class VelociousDatabaseQueryOrderPlain extends OrderBase {
2
2
  /**
3
- * @param {import("./index.js").default} query
4
- * @param {string} plain
3
+ * @param {import("./index.js").default} query - Query instance.
4
+ * @param {string} plain - Plain.
5
5
  */
6
6
  constructor(query: import("./index.js").default, plain: string);
7
7
  plain: string;
@@ -2,8 +2,8 @@
2
2
  import OrderBase from "./order-base.js";
3
3
  export default class VelociousDatabaseQueryOrderPlain extends OrderBase {
4
4
  /**
5
- * @param {import("./index.js").default} query
6
- * @param {string} plain
5
+ * @param {import("./index.js").default} query - Query instance.
6
+ * @param {string} plain - Plain.
7
7
  */
8
8
  constructor(query, plain) {
9
9
  super(query);
@@ -20,4 +20,4 @@ export default class VelociousDatabaseQueryOrderPlain extends OrderBase {
20
20
  return this.plain;
21
21
  }
22
22
  }
23
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JkZXItcGxhaW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZGF0YWJhc2UvcXVlcnkvb3JkZXItcGxhaW4uanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaLE9BQU8sU0FBUyxNQUFNLGlCQUFpQixDQUFBO0FBRXZDLE1BQU0sQ0FBQyxPQUFPLE9BQU8sZ0NBQWlDLFNBQVEsU0FBUztJQUNyRTs7O09BR0c7SUFDSCxZQUFZLEtBQUssRUFBRSxLQUFLO1FBQ3RCLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUNaLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFBO1FBQ2xCLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFBO0lBQzNCLENBQUM7SUFFRCxlQUFlO1FBQ2IsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUE7SUFDMUIsQ0FBQztJQUVELEtBQUs7UUFDSCxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUN0QixPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssT0FBTyxDQUFBO1FBQzdCLENBQUM7UUFFRCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUE7SUFDbkIsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbmltcG9ydCBPcmRlckJhc2UgZnJvbSBcIi4vb3JkZXItYmFzZS5qc1wiXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFZlbG9jaW91c0RhdGFiYXNlUXVlcnlPcmRlclBsYWluIGV4dGVuZHMgT3JkZXJCYXNlIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi9pbmRleC5qc1wiKS5kZWZhdWx0fSBxdWVyeVxuICAgKiBAcGFyYW0ge3N0cmluZ30gcGxhaW5cbiAgICovXG4gIGNvbnN0cnVjdG9yKHF1ZXJ5LCBwbGFpbikge1xuICAgIHN1cGVyKHF1ZXJ5KVxuICAgIHRoaXMucGxhaW4gPSBwbGFpblxuICAgIHRoaXMucmV2ZXJzZU9yZGVyID0gZmFsc2VcbiAgfVxuXG4gIHNldFJldmVyc2VPcmRlcigpIHtcbiAgICB0aGlzLnJldmVyc2VPcmRlciA9IHRydWVcbiAgfVxuXG4gIHRvU3FsKCkge1xuICAgIGlmICh0aGlzLnJldmVyc2VPcmRlcikge1xuICAgICAgcmV0dXJuIGAke3RoaXMucGxhaW59IERFU0NgXG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMucGxhaW5cbiAgfVxufVxuIl19
23
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JkZXItcGxhaW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZGF0YWJhc2UvcXVlcnkvb3JkZXItcGxhaW4uanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaLE9BQU8sU0FBUyxNQUFNLGlCQUFpQixDQUFBO0FBRXZDLE1BQU0sQ0FBQyxPQUFPLE9BQU8sZ0NBQWlDLFNBQVEsU0FBUztJQUNyRTs7O09BR0c7SUFDSCxZQUFZLEtBQUssRUFBRSxLQUFLO1FBQ3RCLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUNaLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFBO1FBQ2xCLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFBO0lBQzNCLENBQUM7SUFFRCxlQUFlO1FBQ2IsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUE7SUFDMUIsQ0FBQztJQUVELEtBQUs7UUFDSCxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUN0QixPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssT0FBTyxDQUFBO1FBQzdCLENBQUM7UUFFRCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUE7SUFDbkIsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbmltcG9ydCBPcmRlckJhc2UgZnJvbSBcIi4vb3JkZXItYmFzZS5qc1wiXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFZlbG9jaW91c0RhdGFiYXNlUXVlcnlPcmRlclBsYWluIGV4dGVuZHMgT3JkZXJCYXNlIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi9pbmRleC5qc1wiKS5kZWZhdWx0fSBxdWVyeSAtIFF1ZXJ5IGluc3RhbmNlLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcGxhaW4gLSBQbGFpbi5cbiAgICovXG4gIGNvbnN0cnVjdG9yKHF1ZXJ5LCBwbGFpbikge1xuICAgIHN1cGVyKHF1ZXJ5KVxuICAgIHRoaXMucGxhaW4gPSBwbGFpblxuICAgIHRoaXMucmV2ZXJzZU9yZGVyID0gZmFsc2VcbiAgfVxuXG4gIHNldFJldmVyc2VPcmRlcigpIHtcbiAgICB0aGlzLnJldmVyc2VPcmRlciA9IHRydWVcbiAgfVxuXG4gIHRvU3FsKCkge1xuICAgIGlmICh0aGlzLnJldmVyc2VPcmRlcikge1xuICAgICAgcmV0dXJuIGAke3RoaXMucGxhaW59IERFU0NgXG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMucGxhaW5cbiAgfVxufVxuIl19
@@ -1,8 +1,8 @@
1
1
  export default class VelociousDatabaseQueryPreloaderBelongsTo {
2
2
  /**
3
- * @param {object} args
4
- * @param {import("../../record/index.js").default[]} args.models
5
- * @param {import("../../record/relationships/belongs-to.js").default} args.relationship
3
+ * @param {object} args - Options object.
4
+ * @param {import("../../record/index.js").default[]} args.models - Model instances.
5
+ * @param {import("../../record/relationships/belongs-to.js").default} args.relationship - Relationship.
6
6
  */
7
7
  constructor({ models, relationship, ...restArgs }: {
8
8
  models: import("../../record/index.js").default[];
@@ -1 +1 @@
1
- {"version":3,"file":"belongs-to.d.ts","sourceRoot":"","sources":["../../../../../src/database/query/preloader/belongs-to.js"],"names":[],"mappings":"AAIA;IACE;;;;OAIG;IACH,mDAHG;QAAwD,MAAM,EAAtD,OAAO,uBAAuB,EAAE,OAAO,EAAE;QACwB,YAAY,EAA7E,OAAO,0CAA0C,EAAE,OAAO;KACpE,EAMA;IAFC,kDAAoB;IACpB,yEAAgC;IAGlC;;;OAgHC;CACF"}
1
+ {"version":3,"file":"belongs-to.d.ts","sourceRoot":"","sources":["../../../../../src/database/query/preloader/belongs-to.js"],"names":[],"mappings":"AAIA;IACE;;;;OAIG;IACH,mDAHG;QAAwD,MAAM,EAAtD,OAAO,uBAAuB,EAAE,OAAO,EAAE;QACwB,YAAY,EAA7E,OAAO,0CAA0C,EAAE,OAAO;KACpE,EAMA;IAFC,kDAAoB;IACpB,yEAAgC;IAGlC;;;OAkHC;CACF"}
@@ -2,9 +2,9 @@
2
2
  import restArgsError from "../../../utils/rest-args-error.js";
3
3
  export default class VelociousDatabaseQueryPreloaderBelongsTo {
4
4
  /**
5
- * @param {object} args
6
- * @param {import("../../record/index.js").default[]} args.models
7
- * @param {import("../../record/relationships/belongs-to.js").default} args.relationship
5
+ * @param {object} args - Options object.
6
+ * @param {import("../../record/index.js").default[]} args.models - Model instances.
7
+ * @param {import("../../record/relationships/belongs-to.js").default} args.relationship - Relationship.
8
8
  */
9
9
  constructor({ models, relationship, ...restArgs }) {
10
10
  restArgsError(restArgs);
@@ -21,9 +21,9 @@ export default class VelociousDatabaseQueryPreloaderBelongsTo {
21
21
  const modelMeta = [];
22
22
  for (const model of this.models) {
23
23
  modelMeta.push({
24
- foreignKeyValue: model.readColumn(foreignKey),
24
+ foreignKeyValue: /** @type {string | number | undefined} */ (model.readColumn(foreignKey)),
25
25
  model,
26
- targetType: model.readColumn(typeColumn)
26
+ targetType: /** @type {string | undefined} */ (model.readColumn(typeColumn))
27
27
  });
28
28
  }
29
29
  /** @type {Record<string, Array<number | string>>} */
@@ -46,7 +46,7 @@ export default class VelociousDatabaseQueryPreloaderBelongsTo {
46
46
  const targetModels = [];
47
47
  for (const targetType in foreignKeyValuesByType) {
48
48
  const targetModelClass = configuration.getModelClass(targetType);
49
- /** @type {Record<string, any>} */
49
+ /** @type {Record<string, string | number | Array<string | number>>} */
50
50
  const whereArgs = {};
51
51
  whereArgs[primaryKey] = foreignKeyValuesByType[targetType];
52
52
  const foundTargetModels = await targetModelClass.where(whereArgs).toArray();
@@ -54,13 +54,15 @@ export default class VelociousDatabaseQueryPreloaderBelongsTo {
54
54
  targetModelsByClassName[targetModelClass.name] = foundTargetModels;
55
55
  targetModelsByTypeAndId[targetType] = {};
56
56
  for (const targetModel of foundTargetModels) {
57
- const primaryKeyValue = targetModel.readColumn(primaryKey);
57
+ const primaryKeyValue = /** @type {string | number} */ (targetModel.readColumn(primaryKey));
58
58
  targetModelsByTypeAndId[targetType][primaryKeyValue] = targetModel;
59
59
  }
60
60
  }
61
61
  for (const meta of modelMeta) {
62
62
  const modelRelationship = meta.model.getRelationshipByName(this.relationship.getRelationshipName());
63
- const targetModel = meta.targetType ? targetModelsByTypeAndId[meta.targetType]?.[meta.foreignKeyValue] : undefined;
63
+ const targetModel = (meta.targetType && meta.foreignKeyValue !== undefined && meta.foreignKeyValue !== null)
64
+ ? targetModelsByTypeAndId[meta.targetType]?.[meta.foreignKeyValue]
65
+ : undefined;
64
66
  modelRelationship.setPreloaded(true);
65
67
  modelRelationship.setLoaded(targetModel);
66
68
  }
@@ -69,11 +71,11 @@ export default class VelociousDatabaseQueryPreloaderBelongsTo {
69
71
  /** @type {Array<number | string>} */
70
72
  const foreignKeyValues = [];
71
73
  for (const model of this.models) {
72
- const foreignKeyValue = model.readColumn(foreignKey);
74
+ const foreignKeyValue = /** @type {string | number} */ (model.readColumn(foreignKey));
73
75
  if (!foreignKeyValues.includes(foreignKeyValue))
74
76
  foreignKeyValues.push(foreignKeyValue);
75
77
  }
76
- /** @type {Record<string, any>} */
78
+ /** @type {Record<string, string | number | Array<string | number>>} */
77
79
  const whereArgs = {};
78
80
  whereArgs[primaryKey] = foreignKeyValues;
79
81
  const targetModelClass = this.relationship.getTargetModelClass();
@@ -84,12 +86,12 @@ export default class VelociousDatabaseQueryPreloaderBelongsTo {
84
86
  /** @type {Record<string, import("../../record/index.js").default>} */
85
87
  const targetModelsById = {};
86
88
  for (const targetModel of targetModels) {
87
- const primaryKeyValue = targetModel.readColumn(this.relationship.getPrimaryKey());
89
+ const primaryKeyValue = /** @type {string | number} */ (targetModel.readColumn(this.relationship.getPrimaryKey()));
88
90
  targetModelsById[primaryKeyValue] = targetModel;
89
91
  }
90
92
  // Set the target preloaded models on the given models
91
93
  for (const model of this.models) {
92
- const foreignKeyValue = model.readColumn(foreignKey);
94
+ const foreignKeyValue = /** @type {string | number} */ (model.readColumn(foreignKey));
93
95
  const targetModel = targetModelsById[foreignKeyValue];
94
96
  const modelRelationship = model.getRelationshipByName(this.relationship.getRelationshipName());
95
97
  modelRelationship.setPreloaded(true);
@@ -98,4 +100,4 @@ export default class VelociousDatabaseQueryPreloaderBelongsTo {
98
100
  return targetModels;
99
101
  }
100
102
  }
101
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmVsb25ncy10by5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9kYXRhYmFzZS9xdWVyeS9wcmVsb2FkZXIvYmVsb25ncy10by5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVosT0FBTyxhQUFhLE1BQU0sbUNBQW1DLENBQUE7QUFFN0QsTUFBTSxDQUFDLE9BQU8sT0FBTyx3Q0FBd0M7SUFDM0Q7Ozs7T0FJRztJQUNILFlBQVksRUFBQyxNQUFNLEVBQUUsWUFBWSxFQUFFLEdBQUcsUUFBUSxFQUFDO1FBQzdDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQTtRQUV2QixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQTtRQUNwQixJQUFJLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQTtJQUNsQyxDQUFDO0lBRUQsS0FBSyxDQUFDLEdBQUc7UUFDUCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsRUFBRSxDQUFBO1FBQ3BELE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxFQUFFLENBQUE7UUFFcEQsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQUM7WUFDdkMsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyx3QkFBd0IsRUFBRSxDQUFBO1lBQy9ELE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQTtZQUUxRCwrSUFBK0k7WUFDL0ksTUFBTSxTQUFTLEdBQUcsRUFBRSxDQUFBO1lBRXBCLEtBQUssTUFBTSxLQUFLLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUNoQyxTQUFTLENBQUMsSUFBSSxDQUFDO29CQUNiLGVBQWUsRUFBRSxLQUFLLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQztvQkFDN0MsS0FBSztvQkFDTCxVQUFVLEVBQUUsS0FBSyxD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Q3JELE1BQU0saUJBQWlCLEdBQUcsS0FBSyxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxDQUFBO1lBRTlGLGlCQUFpQixDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQTtZQUNwQyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLENBQUE7UUFDMUMsQ0FBQztRQUVELE9BQU8sWUFBWSxDQUFBO0lBQ3JCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG5pbXBvcnQgcmVzdEFyZ3NFcnJvciBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvcmVzdC1hcmdzLWVycm9yLmpzXCJcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVmVsb2Npb3VzRGF0YWJhc2VRdWVyeVByZWxvYWRlckJlbG9uZ3NUbyB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gYXJnc1xuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uLy4uL3JlY29yZC9pbmRleC5qc1wiKS5kZWZhdWx0W119IGFyZ3MubW9kZWxzXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vLi4vcmVjb3JkL3JlbGF0aW9uc2hpcHMvYmVsb25ncy10by5qc1wiKS5kZWZhdWx0fSBhcmdzLnJlbGF0aW9uc2hpcFxuICAgKi9cbiAgY29uc3RydWN0b3Ioe21vZGVscywgcmVsYXRpb25zaGlwLCAuLi5yZXN0QXJnc30pIHtcbiAgICByZXN0QXJnc0Vycm9yKHJlc3RBcmdzKVxuXG4gICAgdGhpcy5tb2RlbHMgPSBtb2RlbHNcbiAgICB0aGlzLnJlbGF0aW9uc2hpcCA9IHJlbGF0aW9uc2hpcFxuICB9XG5cbiAgYXN5bmMgcnVuKCkge1xuICAgIGNvbnN0IGZvcmVpZ25LZXkgPSB0aGlzLnJlbGF0aW9uc2hpcC5nZXRGb3JlaWduS2V5KClcbiAgICBjb25zdCBwcmltYXJ5S2V5ID0gdGhpcy5yZWxhdGlvbnNoaXAuZ2V0UHJpbWFyeUtleSgpXG5cbiAgICBpZiAodGhpcy5yZWxhdGlvbnNoaXAuZ2V0UG9seW1vcnBoaWMoKSkge1xuICAgICAgY29uc3QgdHlwZUNvbHVtbiA9IHRoaXMucmVsYXRpb25zaGlwLmdldFBvbHltb3JwaGljVHlwZUNvbHVtbigpXG4gICAgICBjb25zdCBjb25maWd1cmF0aW9uID0gdGhpcy5yZWxhdGlvbnNoaXAuZ2V0Q29uZmlndXJhdGlvbigpXG5cbiAgICAgIC8qKiBAdHlwZSB7e2ZvcmVpZ25LZXlWYWx1ZTogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkLCBtb2RlbDogaW1wb3J0KFwiLi4vLi4vcmVjb3JkL2luZGV4LmpzXCIpLmRlZmF1bHQsIHRhcmdldFR5cGU6IHN0cmluZyB8IHVuZGVmaW5lZH1bXX0gKi9cbiAgICAgIGNvbnN0IG1vZGVsTWV0YSA9IFtdXG5cbiAgICAgIGZvciAoY29uc3QgbW9kZWwgb2YgdGhpcy5tb2RlbHMpIHtcbiAgICAgICAgbW9kZWxNZXRhLnB1c2goe1xuICAgICAgICAgIGZvcmVpZ25LZXlWYWx1ZTogbW9kZWwucmVhZENvbHVtbihmb3JlaWduS2V5KSxcbiAgICAgICAgICBtb2RlbCxcbiAgICAgICAgICB0YXJnZXRUeXBlOiBtb2RlbC5yZWFkQ29sdW1uKHR5cGVDb2x1bW4pXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIC8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgQXJyYXk8bnVtYmVyIHwgc3RyaW5nPj59ICovXG4gICAgICBjb25zdCBmb3JlaWduS2V5VmFsdWVzQnlUeXBlID0ge31cblxuICAgICAgZm9yIChjb25zdCBtZXRhIG9mIG1vZGVsTWV0YSkge1xuICAgICAgICBpZiAobWV0YS50YXJnZXRUeXBlID09PSB1bmRlZmluZWQgfHwgbWV0YS50YXJnZXRUeXBlID09PSBudWxsKSBjb250aW51ZVxuICAgICAgICBpZiAobWV0YS5mb3JlaWduS2V5VmFsdWUgPT09IHVuZGVmaW5lZCB8fCBtZXRhLmZvcmVpZ25LZXlWYWx1ZSA9PT0gbnVsbCkgY29udGludWVcblxuICAgICAgICBpZiAoIWZvcmVpZ25LZXlWYWx1ZXNCeVR5cGVbbWV0YS50YXJnZXRUeXBlXSkgZm9yZWlnbktleVZhbHVlc0J5VHlwZVttZXRhLnRhcmdldFR5cGVdID0gW11cbiAgICAgICAgaWYgKCFmb3JlaWduS2V5VmFsdWVzQnlUeXBlW21ldGEudGFyZ2V0VHlwZV0uaW5jbHVkZXMobWV0YS5mb3JlaWduS2V5VmFsdWUpKSBmb3JlaWduS2V5VmFsdWVzQnlUeXBlW21ldGEudGFyZ2V0VHlwZV0ucHVzaChtZXRhLmZvcmVpZ25LZXlWYWx1ZSlcbiAgICAgIH1cblxuICAgICAgLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8bnVtYmVyIHwgc3RyaW5nLCBpbXBvcnQoXCIuLi8uLi9yZWNvcmQvaW5kZXguanNcIikuZGVmYXVsdD4+fSAqL1xuICAgICAgY29uc3QgdGFyZ2V0TW9kZWxzQnlUeXBlQW5kSWQgPSB7fVxuXG4gICAgICAvKiogQHR5cGUge1JlY29yZDxzdHJpbmcsIGltcG9ydChcIi4uLy4uL3JlY29yZC9pbmRleC5qc1wiKS5kZWZhdWx0W10+fSAqL1xuICAgICAgY29uc3QgdGFyZ2V0TW9kZWxzQnlDbGFzc05hbWUgPSB7fVxuXG4gICAgICAvKiogQHR5cGUge2ltcG9ydChcIi4uLy4uL3JlY29yZC9pbmRleC5qc1wiKS5kZWZhdWx0W119ICovXG4gICAgICBjb25zdCB0YXJnZXRNb2RlbHMgPSBbXVxuXG4gICAgICBmb3IgKGNvbnN0IHRhcmdldFR5cGUgaW4gZm9yZWlnbktleVZhbHVlc0J5VHlwZSkge1xuICAgICAgICBjb25zdCB0YXJnZXRNb2RlbENsYXNzID0gY29uZmlndXJhdGlvbi5nZXRNb2RlbENsYXNzKHRhcmdldFR5cGUpXG5cbiAgICAgICAgLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCBhbnk+fSAqL1xuICAgICAgICBjb25zdCB3aGVyZUFyZ3MgPSB7fVxuXG4gICAgICAgIHdoZXJlQXJnc1twcmltYXJ5S2V5XSA9IGZvcmVpZ25LZXlWYWx1ZXNCeVR5cGVbdGFyZ2V0VHlwZV1cblxuICAgICAgICBjb25zdCBmb3VuZFRhcmdldE1vZGVscyA9IGF3YWl0IHRhcmdldE1vZGVsQ2xhc3Mud2hlcmUod2hlcmVBcmdzKS50b0FycmF5KClcblxuICAgICAgICB0YXJnZXRNb2RlbHMucHVzaCguLi5mb3VuZFRhcmdldE1vZGVscylcbiAgICAgICAgdGFyZ2V0TW9kZWxzQnlDbGFzc05hbWVbdGFyZ2V0TW9kZWxDbGFzcy5uYW1lXSA9IGZvdW5kVGFyZ2V0TW9kZWxzXG4gICAgICAgIHRhcmdldE1vZGVsc0J5VHlwZUFuZElkW3RhcmdldFR5cGVdID0ge31cblxuICAgICAgICBmb3IgKGNvbnN0IHRhcmdldE1vZGVsIG9mIGZvdW5kVGFyZ2V0TW9kZWxzKSB7XG4gICAgICAgICAgY29uc3QgcHJpbWFyeUtleVZhbHVlID0gdGFyZ2V0TW9kZWwucmVhZENvbHVtbihwcmltYXJ5S2V5KVxuXG4gICAgICAgICAgdGFyZ2V0TW9kZWxzQnlUeXBlQW5kSWRbdGFyZ2V0VHlwZV1bcHJpbWFyeUtleVZhbHVlXSA9IHRhcmdldE1vZGVsXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZm9yIChjb25zdCBtZXRhIG9mIG1vZGVsTWV0YSkge1xuICAgICAgICBjb25zdCBtb2RlbFJlbGF0aW9uc2hpcCA9IG1ldGEubW9kZWwuZ2V0UmVsYXRpb25zaGlwQnlOYW1lKHRoaXMucmVsYXRpb25zaGlwLmdldFJlbGF0aW9uc2hpcE5hbWUoKSlcbiAgICAgICAgY29uc3QgdGFyZ2V0TW9kZWwgPSBtZXRhLnRhcmdldFR5cGUgPyB0YXJnZXRNb2RlbHNCeVR5cGVBbmRJZFttZXRhLnRhcmdldFR5cGVdPy5bbWV0YS5mb3JlaWduS2V5VmFsdWVdIDogdW5kZWZpbmVkXG5cbiAgICAgICAgbW9kZWxSZWxhdGlvbnNoaXAuc2V0UHJlbG9hZGVkKHRydWUpXG4gICAgICAgIG1vZGVsUmVsYXRpb25zaGlwLnNldExvYWRlZCh0YXJnZXRNb2RlbClcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHt0YXJnZXRNb2RlbHMsIHRhcmdldE1vZGVsc0J5Q2xhc3NOYW1lfVxuICAgIH1cblxuICAgIC8qKiBAdHlwZSB7QXJyYXk8bnVtYmVyIHwgc3RyaW5nPn0gKi9cbiAgICBjb25zdCBmb3JlaWduS2V5VmFsdWVzID0gW11cblxuICAgIGZvciAoY29uc3QgbW9kZWwgb2YgdGhpcy5tb2RlbHMpIHtcbiAgICAgIGNvbnN0IGZvcmVpZ25LZXlWYWx1ZSA9IG1vZGVsLnJlYWRDb2x1bW4oZm9yZWlnbktleSlcblxuICAgICAgaWYgKCFmb3JlaWduS2V5VmFsdWVzLmluY2x1ZGVzKGZvcmVpZ25LZXlWYWx1ZSkpIGZvcmVpZ25LZXlWYWx1ZXMucHVzaChmb3JlaWduS2V5VmFsdWUpXG4gICAgfVxuXG4gICAgLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCBhbnk+fSAqL1xuICAgIGNvbnN0IHdoZXJlQXJncyA9IHt9XG5cbiAgICB3aGVyZUFyZ3NbcHJpbWFyeUtleV0gPSBmb3JlaWduS2V5VmFsdWVzXG5cbiAgICBjb25zdCB0YXJnZXRNb2RlbENsYXNzID0gdGhpcy5yZWxhdGlvbnNoaXAuZ2V0VGFyZ2V0TW9kZWxDbGFzcygpXG5cbiAgICBpZiAoIXRhcmdldE1vZGVsQ2xhc3MpIHRocm93IG5ldyBFcnJvcihcIk5vIHRhcmdldCBtb2RlbCBjbGFzcyBjb3VsZCBiZSBnb3R0ZW4gZnJvbSByZWxhdGlvbnNoaXBcIilcblxuICAgIC8vIExvYWQgdGFyZ2V0IG1vZGVscyB0byBiZSBwcmVsb2FkZWQgb24gdGhlIGdpdmVuIG1vZGVsc1xuICAgIGNvbnN0IHRhcmdldE1vZGVscyA9IGF3YWl0IHRhcmdldE1vZGVsQ2xhc3Mud2hlcmUod2hlcmVBcmdzKS50b0FycmF5KClcblxuICAgIC8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgaW1wb3J0KFwiLi4vLi4vcmVjb3JkL2luZGV4LmpzXCIpLmRlZmF1bHQ+fSAqL1xuICAgIGNvbnN0IHRhcmdldE1vZGVsc0J5SWQgPSB7fVxuXG4gICAgZm9yIChjb25zdCB0YXJnZXRNb2RlbCBvZiB0YXJnZXRNb2RlbHMpIHtcbiAgICAgIGNvbnN0IHByaW1hcnlLZXlWYWx1ZSA9IHRhcmdldE1vZGVsLnJlYWRDb2x1bW4odGhpcy5yZWxhdGlvbnNoaXAuZ2V0UHJpbWFyeUtleSgpKVxuXG4gICAgICB0YXJnZXRNb2RlbHNCeUlkW3ByaW1hcnlLZXlWYWx1ZV0gPSB0YXJnZXRNb2RlbFxuICAgIH1cblxuICAgIC8vIFNldCB0aGUgdGFyZ2V0IHByZWxvYWRlZCBtb2RlbHMgb24gdGhlIGdpdmVuIG1vZGVsc1xuICAgIGZvciAoY29uc3QgbW9kZWwgb2YgdGhpcy5tb2RlbHMpIHtcbiAgICAgIGNvbnN0IGZvcmVpZ25LZXlWYWx1ZSA9IG1vZGVsLnJlYWRDb2x1bW4oZm9yZWlnbktleSlcbiAgICAgIGNvbnN0IHRhcmdldE1vZGVsID0gdGFyZ2V0TW9kZWxzQnlJZFtmb3JlaWduS2V5VmFsdWVdXG4gICAgICBjb25zdCBtb2RlbFJlbGF0aW9uc2hpcCA9IG1vZGVsLmdldFJlbGF0aW9uc2hpcEJ5TmFtZSh0aGlzLnJlbGF0aW9uc2hpcC5nZXRSZWxhdGlvbnNoaXBOYW1lKCkpXG5cbiAgICAgIG1vZGVsUmVsYXRpb25zaGlwLnNldFByZWxvYWRlZCh0cnVlKVxuICAgICAgbW9kZWxSZWxhdGlvbnNoaXAuc2V0TG9hZGVkKHRhcmdldE1vZGVsKVxuICAgIH1cblxuICAgIHJldHVybiB0YXJnZXRNb2RlbHNcbiAgfVxufVxuIl19
103
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmVsb25ncy10by5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9kYXRhYmFzZS9xdWVyeS9wcmVsb2FkZXIvYmVsb25ncy10by5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVosT0FBTyxhQUFhLE1BQU0sbUNBQW1DLENBQUE7QUFFN0QsTUFBTSxDQUFDLE9BQU8sT0FBTyx3Q0FBd0M7SUFDM0Q7Ozs7T0FJRztJQUNILFlBQVksRUFBQyxNQUFNLEVBQUUsWUFBWSxFQUFFLEdBQUcsUUFBUSxFQUFDO1FBQzdDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQTtRQUV2QixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQTtRQUNwQixJQUFJLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQTtJQUNsQyxDQUFDO0lBRUQsS0FBSyxDQUFDLEdBQUc7UUFDUCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsRUFBRSxDQUFBO1FBQ3BELE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxFQUFFLENBQUE7UUFFcEQsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQUM7WUFDdkMsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyx3QkFBd0IsRUFBRSxDQUFBO1lBQy9ELE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQTtZQUUxRCwrSUFBK0k7WUFDL0ksTUFBTSxTQUFTLEdBQUcsRUFBRSxDQUFBO1lBRXBCLEtBQUssTUFBTSxLQUFLLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUNoQyxTQUFTLENBQUMsSUFBSSxDQUFDO29CQUNiLGVBQWUsRUFBRSwwQ0FBMEMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUM7b0JBQzFGLEtBQUs7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QUE7UUFDakQsQ0FBQztRQUVELHNEQUFzRDtRQUN0RCxLQUFLLE1BQU0sS0FBSyxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNoQyxNQUFNLGVBQWUsR0FBRyw4QkFBOEIsQ0FBQyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQTtZQUNyRixNQUFNLFdBQVcsR0FBRyxnQkFBZ0IsQ0FBQyxlQUFlLENBQUMsQ0FBQTtZQUNyRCxNQUFNLGlCQUFpQixHQUFHLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLG1CQUFtQixFQUFFLENBQUMsQ0FBQTtZQUU5RixpQkFBaUIsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUE7WUFDcEMsaUJBQWlCLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxDQUFBO1FBQzFDLENBQUM7UUFFRCxPQUFPLFlBQVksQ0FBQTtJQUNyQixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuaW1wb3J0IHJlc3RBcmdzRXJyb3IgZnJvbSBcIi4uLy4uLy4uL3V0aWxzL3Jlc3QtYXJncy1lcnJvci5qc1wiXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFZlbG9jaW91c0RhdGFiYXNlUXVlcnlQcmVsb2FkZXJCZWxvbmdzVG8ge1xuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IGFyZ3MgLSBPcHRpb25zIG9iamVjdC5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuLi8uLi9yZWNvcmQvaW5kZXguanNcIikuZGVmYXVsdFtdfSBhcmdzLm1vZGVscyAtIE1vZGVsIGluc3RhbmNlcy5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuLi8uLi9yZWNvcmQvcmVsYXRpb25zaGlwcy9iZWxvbmdzLXRvLmpzXCIpLmRlZmF1bHR9IGFyZ3MucmVsYXRpb25zaGlwIC0gUmVsYXRpb25zaGlwLlxuICAgKi9cbiAgY29uc3RydWN0b3Ioe21vZGVscywgcmVsYXRpb25zaGlwLCAuLi5yZXN0QXJnc30pIHtcbiAgICByZXN0QXJnc0Vycm9yKHJlc3RBcmdzKVxuXG4gICAgdGhpcy5tb2RlbHMgPSBtb2RlbHNcbiAgICB0aGlzLnJlbGF0aW9uc2hpcCA9IHJlbGF0aW9uc2hpcFxuICB9XG5cbiAgYXN5bmMgcnVuKCkge1xuICAgIGNvbnN0IGZvcmVpZ25LZXkgPSB0aGlzLnJlbGF0aW9uc2hpcC5nZXRGb3JlaWduS2V5KClcbiAgICBjb25zdCBwcmltYXJ5S2V5ID0gdGhpcy5yZWxhdGlvbnNoaXAuZ2V0UHJpbWFyeUtleSgpXG5cbiAgICBpZiAodGhpcy5yZWxhdGlvbnNoaXAuZ2V0UG9seW1vcnBoaWMoKSkge1xuICAgICAgY29uc3QgdHlwZUNvbHVtbiA9IHRoaXMucmVsYXRpb25zaGlwLmdldFBvbHltb3JwaGljVHlwZUNvbHVtbigpXG4gICAgICBjb25zdCBjb25maWd1cmF0aW9uID0gdGhpcy5yZWxhdGlvbnNoaXAuZ2V0Q29uZmlndXJhdGlvbigpXG5cbiAgICAgIC8qKiBAdHlwZSB7e2ZvcmVpZ25LZXlWYWx1ZTogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkLCBtb2RlbDogaW1wb3J0KFwiLi4vLi4vcmVjb3JkL2luZGV4LmpzXCIpLmRlZmF1bHQsIHRhcmdldFR5cGU6IHN0cmluZyB8IHVuZGVmaW5lZH1bXX0gKi9cbiAgICAgIGNvbnN0IG1vZGVsTWV0YSA9IFtdXG5cbiAgICAgIGZvciAoY29uc3QgbW9kZWwgb2YgdGhpcy5tb2RlbHMpIHtcbiAgICAgICAgbW9kZWxNZXRhLnB1c2goe1xuICAgICAgICAgIGZvcmVpZ25LZXlWYWx1ZTogLyoqIEB0eXBlIHtzdHJpbmcgfCBudW1iZXIgfCB1bmRlZmluZWR9ICovIChtb2RlbC5yZWFkQ29sdW1uKGZvcmVpZ25LZXkpKSxcbiAgICAgICAgICBtb2RlbCxcbiAgICAgICAgICB0YXJnZXRUeXBlOiAvKiogQHR5cGUge3N0cmluZyB8IHVuZGVmaW5lZH0gKi8gKG1vZGVsLnJlYWRDb2x1bW4odHlwZUNvbHVtbikpXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIC8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgQXJyYXk8bnVtYmVyIHwgc3RyaW5nPj59ICovXG4gICAgICBjb25zdCBmb3JlaWduS2V5VmFsdWVzQnlUeXBlID0ge31cblxuICAgICAgZm9yIChjb25zdCBtZXRhIG9mIG1vZGVsTWV0YSkge1xuICAgICAgICBpZiAobWV0YS50YXJnZXRUeXBlID09PSB1bmRlZmluZWQgfHwgbWV0YS50YXJnZXRUeXBlID09PSBudWxsKSBjb250aW51ZVxuICAgICAgICBpZiAobWV0YS5mb3JlaWduS2V5VmFsdWUgPT09IHVuZGVmaW5lZCB8fCBtZXRhLmZvcmVpZ25LZXlWYWx1ZSA9PT0gbnVsbCkgY29udGludWVcblxuICAgICAgICBpZiAoIWZvcmVpZ25LZXlWYWx1ZXNCeVR5cGVbbWV0YS50YXJnZXRUeXBlXSkgZm9yZWlnbktleVZhbHVlc0J5VHlwZVttZXRhLnRhcmdldFR5cGVdID0gW11cbiAgICAgICAgaWYgKCFmb3JlaWduS2V5VmFsdWVzQnlUeXBlW21ldGEudGFyZ2V0VHlwZV0uaW5jbHVkZXMobWV0YS5mb3JlaWduS2V5VmFsdWUpKSBmb3JlaWduS2V5VmFsdWVzQnlUeXBlW21ldGEudGFyZ2V0VHlwZV0ucHVzaChtZXRhLmZvcmVpZ25LZXlWYWx1ZSlcbiAgICAgIH1cblxuICAgICAgLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8bnVtYmVyIHwgc3RyaW5nLCBpbXBvcnQoXCIuLi8uLi9yZWNvcmQvaW5kZXguanNcIikuZGVmYXVsdD4+fSAqL1xuICAgICAgY29uc3QgdGFyZ2V0TW9kZWxzQnlUeXBlQW5kSWQgPSB7fVxuXG4gICAgICAvKiogQHR5cGUge1JlY29yZDxzdHJpbmcsIGltcG9ydChcIi4uLy4uL3JlY29yZC9pbmRleC5qc1wiKS5kZWZhdWx0W10+fSAqL1xuICAgICAgY29uc3QgdGFyZ2V0TW9kZWxzQnlDbGFzc05hbWUgPSB7fVxuXG4gICAgICAvKiogQHR5cGUge2ltcG9ydChcIi4uLy4uL3JlY29yZC9pbmRleC5qc1wiKS5kZWZhdWx0W119ICovXG4gICAgICBjb25zdCB0YXJnZXRNb2RlbHMgPSBbXVxuXG4gICAgICBmb3IgKGNvbnN0IHRhcmdldFR5cGUgaW4gZm9yZWlnbktleVZhbHVlc0J5VHlwZSkge1xuICAgICAgICBjb25zdCB0YXJnZXRNb2RlbENsYXNzID0gY29uZmlndXJhdGlvbi5nZXRNb2RlbENsYXNzKHRhcmdldFR5cGUpXG5cbiAgICAgICAgLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBudW1iZXIgfCBBcnJheTxzdHJpbmcgfCBudW1iZXI+Pn0gKi9cbiAgICAgICAgY29uc3Qgd2hlcmVBcmdzID0ge31cblxuICAgICAgICB3aGVyZUFyZ3NbcHJpbWFyeUtleV0gPSBmb3JlaWduS2V5VmFsdWVzQnlUeXBlW3RhcmdldFR5cGVdXG5cbiAgICAgICAgY29uc3QgZm91bmRUYXJnZXRNb2RlbHMgPSBhd2FpdCB0YXJnZXRNb2RlbENsYXNzLndoZXJlKHdoZXJlQXJncykudG9BcnJheSgpXG5cbiAgICAgICAgdGFyZ2V0TW9kZWxzLnB1c2goLi4uZm91bmRUYXJnZXRNb2RlbHMpXG4gICAgICAgIHRhcmdldE1vZGVsc0J5Q2xhc3NOYW1lW3RhcmdldE1vZGVsQ2xhc3MubmFtZV0gPSBmb3VuZFRhcmdldE1vZGVsc1xuICAgICAgICB0YXJnZXRNb2RlbHNCeVR5cGVBbmRJZFt0YXJnZXRUeXBlXSA9IHt9XG5cbiAgICAgICAgZm9yIChjb25zdCB0YXJnZXRNb2RlbCBvZiBmb3VuZFRhcmdldE1vZGVscykge1xuICAgICAgICAgIGNvbnN0IHByaW1hcnlLZXlWYWx1ZSA9IC8qKiBAdHlwZSB7c3RyaW5nIHwgbnVtYmVyfSAqLyAodGFyZ2V0TW9kZWwucmVhZENvbHVtbihwcmltYXJ5S2V5KSlcblxuICAgICAgICAgIHRhcmdldE1vZGVsc0J5VHlwZUFuZElkW3RhcmdldFR5cGVdW3ByaW1hcnlLZXlWYWx1ZV0gPSB0YXJnZXRNb2RlbFxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGZvciAoY29uc3QgbWV0YSBvZiBtb2RlbE1ldGEpIHtcbiAgICAgICAgY29uc3QgbW9kZWxSZWxhdGlvbnNoaXAgPSBtZXRhLm1vZGVsLmdldFJlbGF0aW9uc2hpcEJ5TmFtZSh0aGlzLnJlbGF0aW9uc2hpcC5nZXRSZWxhdGlvbnNoaXBOYW1lKCkpXG4gICAgICAgIGNvbnN0IHRhcmdldE1vZGVsID0gKG1ldGEudGFyZ2V0VHlwZSAmJiBtZXRhLmZvcmVpZ25LZXlWYWx1ZSAhPT0gdW5kZWZpbmVkICYmIG1ldGEuZm9yZWlnbktleVZhbHVlICE9PSBudWxsKVxuICAgICAgICAgID8gdGFyZ2V0TW9kZWxzQnlUeXBlQW5kSWRbbWV0YS50YXJnZXRUeXBlXT8uW21ldGEuZm9yZWlnbktleVZhbHVlXVxuICAgICAgICAgIDogdW5kZWZpbmVkXG5cbiAgICAgICAgbW9kZWxSZWxhdGlvbnNoaXAuc2V0UHJlbG9hZGVkKHRydWUpXG4gICAgICAgIG1vZGVsUmVsYXRpb25zaGlwLnNldExvYWRlZCh0YXJnZXRNb2RlbClcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHt0YXJnZXRNb2RlbHMsIHRhcmdldE1vZGVsc0J5Q2xhc3NOYW1lfVxuICAgIH1cblxuICAgIC8qKiBAdHlwZSB7QXJyYXk8bnVtYmVyIHwgc3RyaW5nPn0gKi9cbiAgICBjb25zdCBmb3JlaWduS2V5VmFsdWVzID0gW11cblxuICAgIGZvciAoY29uc3QgbW9kZWwgb2YgdGhpcy5tb2RlbHMpIHtcbiAgICAgIGNvbnN0IGZvcmVpZ25LZXlWYWx1ZSA9IC8qKiBAdHlwZSB7c3RyaW5nIHwgbnVtYmVyfSAqLyAobW9kZWwucmVhZENvbHVtbihmb3JlaWduS2V5KSlcblxuICAgICAgaWYgKCFmb3JlaWduS2V5VmFsdWVzLmluY2x1ZGVzKGZvcmVpZ25LZXlWYWx1ZSkpIGZvcmVpZ25LZXlWYWx1ZXMucHVzaChmb3JlaWduS2V5VmFsdWUpXG4gICAgfVxuXG4gICAgLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBudW1iZXIgfCBBcnJheTxzdHJpbmcgfCBudW1iZXI+Pn0gKi9cbiAgICBjb25zdCB3aGVyZUFyZ3MgPSB7fVxuXG4gICAgd2hlcmVBcmdzW3ByaW1hcnlLZXldID0gZm9yZWlnbktleVZhbHVlc1xuXG4gICAgY29uc3QgdGFyZ2V0TW9kZWxDbGFzcyA9IHRoaXMucmVsYXRpb25zaGlwLmdldFRhcmdldE1vZGVsQ2xhc3MoKVxuXG4gICAgaWYgKCF0YXJnZXRNb2RlbENsYXNzKSB0aHJvdyBuZXcgRXJyb3IoXCJObyB0YXJnZXQgbW9kZWwgY2xhc3MgY291bGQgYmUgZ290dGVuIGZyb20gcmVsYXRpb25zaGlwXCIpXG5cbiAgICAvLyBMb2FkIHRhcmdldCBtb2RlbHMgdG8gYmUgcHJlbG9hZGVkIG9uIHRoZSBnaXZlbiBtb2RlbHNcbiAgICBjb25zdCB0YXJnZXRNb2RlbHMgPSBhd2FpdCB0YXJnZXRNb2RlbENsYXNzLndoZXJlKHdoZXJlQXJncykudG9BcnJheSgpXG5cbiAgICAvKiogQHR5cGUge1JlY29yZDxzdHJpbmcsIGltcG9ydChcIi4uLy4uL3JlY29yZC9pbmRleC5qc1wiKS5kZWZhdWx0Pn0gKi9cbiAgICBjb25zdCB0YXJnZXRNb2RlbHNCeUlkID0ge31cblxuICAgIGZvciAoY29uc3QgdGFyZ2V0TW9kZWwgb2YgdGFyZ2V0TW9kZWxzKSB7XG4gICAgICBjb25zdCBwcmltYXJ5S2V5VmFsdWUgPSAvKiogQHR5cGUge3N0cmluZyB8IG51bWJlcn0gKi8gKHRhcmdldE1vZGVsLnJlYWRDb2x1bW4odGhpcy5yZWxhdGlvbnNoaXAuZ2V0UHJpbWFyeUtleSgpKSlcblxuICAgICAgdGFyZ2V0TW9kZWxzQnlJZFtwcmltYXJ5S2V5VmFsdWVdID0gdGFyZ2V0TW9kZWxcbiAgICB9XG5cbiAgICAvLyBTZXQgdGhlIHRhcmdldCBwcmVsb2FkZWQgbW9kZWxzIG9uIHRoZSBnaXZlbiBtb2RlbHNcbiAgICBmb3IgKGNvbnN0IG1vZGVsIG9mIHRoaXMubW9kZWxzKSB7XG4gICAgICBjb25zdCBmb3JlaWduS2V5VmFsdWUgPSAvKiogQHR5cGUge3N0cmluZyB8IG51bWJlcn0gKi8gKG1vZGVsLnJlYWRDb2x1bW4oZm9yZWlnbktleSkpXG4gICAgICBjb25zdCB0YXJnZXRNb2RlbCA9IHRhcmdldE1vZGVsc0J5SWRbZm9yZWlnbktleVZhbHVlXVxuICAgICAgY29uc3QgbW9kZWxSZWxhdGlvbnNoaXAgPSBtb2RlbC5nZXRSZWxhdGlvbnNoaXBCeU5hbWUodGhpcy5yZWxhdGlvbnNoaXAuZ2V0UmVsYXRpb25zaGlwTmFtZSgpKVxuXG4gICAgICBtb2RlbFJlbGF0aW9uc2hpcC5zZXRQcmVsb2FkZWQodHJ1ZSlcbiAgICAgIG1vZGVsUmVsYXRpb25zaGlwLnNldExvYWRlZCh0YXJnZXRNb2RlbClcbiAgICB9XG5cbiAgICByZXR1cm4gdGFyZ2V0TW9kZWxzXG4gIH1cbn1cbiJdfQ==
@@ -1,8 +1,8 @@
1
1
  export default class VelociousDatabaseQueryPreloaderHasMany {
2
2
  /**
3
- * @param {object} args
4
- * @param {import("../../record/index.js").default[]} args.models
5
- * @param {import("../../record/relationships/has-many.js").default} args.relationship
3
+ * @param {object} args - Options object.
4
+ * @param {import("../../record/index.js").default[]} args.models - Model instances.
5
+ * @param {import("../../record/relationships/has-many.js").default} args.relationship - Relationship.
6
6
  */
7
7
  constructor({ models, relationship, ...restArgs }: {
8
8
  models: import("../../record/index.js").default[];
@@ -2,9 +2,9 @@
2
2
  import restArgsError from "../../../utils/rest-args-error.js";
3
3
  export default class VelociousDatabaseQueryPreloaderHasMany {
4
4
  /**
5
- * @param {object} args
6
- * @param {import("../../record/index.js").default[]} args.models
7
- * @param {import("../../record/relationships/has-many.js").default} args.relationship
5
+ * @param {object} args - Options object.
6
+ * @param {import("../../record/index.js").default[]} args.models - Model instances.
7
+ * @param {import("../../record/relationships/has-many.js").default} args.relationship - Relationship.
8
8
  */
9
9
  constructor({ models, relationship, ...restArgs }) {
10
10
  restArgsError(restArgs);
@@ -24,7 +24,7 @@ export default class VelociousDatabaseQueryPreloaderHasMany {
24
24
  throw new Error(`${this.relationship.getModelClass().name}#${this.relationship.getRelationshipName()} doesn't have a primary key`);
25
25
  }
26
26
  for (const model of this.models) {
27
- const primaryKeyValue = model.readColumn(primaryKey);
27
+ const primaryKeyValue = /** @type {string | number} */ (model.readColumn(primaryKey));
28
28
  preloadCollections[primaryKeyValue] = [];
29
29
  if (!modelsPrimaryKeyValues.includes(primaryKeyValue))
30
30
  modelsPrimaryKeyValues.push(primaryKeyValue);
@@ -32,7 +32,7 @@ export default class VelociousDatabaseQueryPreloaderHasMany {
32
32
  modelsByPrimaryKeyValue[primaryKeyValue] = [];
33
33
  modelsByPrimaryKeyValue[primaryKeyValue].push(model);
34
34
  }
35
- /** @type {Record<string, any>} */
35
+ /** @type {Record<string, string | number | Array<string | number>>} */
36
36
  const whereArgs = {};
37
37
  whereArgs[foreignKey] = modelsPrimaryKeyValues;
38
38
  if (this.relationship.getPolymorphic()) {
@@ -45,7 +45,7 @@ export default class VelociousDatabaseQueryPreloaderHasMany {
45
45
  // Load target models to be preloaded on the given models
46
46
  const targetModels = await targetModelClass.where(whereArgs).toArray();
47
47
  for (const targetModel of targetModels) {
48
- const foreignKeyValue = targetModel.readColumn(foreignKey);
48
+ const foreignKeyValue = /** @type {string | number} */ (targetModel.readColumn(foreignKey));
49
49
  preloadCollections[foreignKeyValue].push(targetModel);
50
50
  }
51
51
  // Set the target preloaded models on the given models
@@ -65,4 +65,4 @@ export default class VelociousDatabaseQueryPreloaderHasMany {
65
65
  return targetModels;
66
66
  }
67
67
  }
68
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFzLW1hbnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvZGF0YWJhc2UvcXVlcnkvcHJlbG9hZGVyL2hhcy1tYW55LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWixPQUFPLGFBQWEsTUFBTSxtQ0FBbUMsQ0FBQTtBQUU3RCxNQUFNLENBQUMsT0FBTyxPQUFPLHNDQUFzQztJQUN6RDs7OztPQUlHO0lBQ0gsWUFBWSxFQUFDLE1BQU0sRUFBRSxZQUFZLEVBQUUsR0FBRyxRQUFRLEVBQUM7UUFDN0MsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFBO1FBRXZCLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFBO1FBQ3BCLElBQUksQ0FBQyxZQUFZLEdBQUcsWUFBWSxDQUFBO0lBQ2xDLENBQUM7SUFFRCxLQUFLLENBQUMsR0FBRztRQUNQLHFDQUFxQztRQUNyQyxNQUFNLHNCQUFzQixHQUFHLEVBQUUsQ0FBQTtRQUVqQyxzRkFBc0Y7UUFDdEYsTUFBTSx1QkFBdUIsR0FBRyxFQUFFLENBQUE7UUFFbEMsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLEVBQUUsQ0FBQTtRQUNwRCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsRUFBRSxDQUFBO1FBRXBELHNGQUFzRjtRQUN0RixNQUFNLGtCQUFrQixHQUFHLEVBQUUsQ0FBQTtRQUU3QixJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDaEIsTUFBTSxJQUFJLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxFQUFFLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsbUJBQW1CLEVBQUUsNkJBQTZCLENBQUMsQ0FBQTtRQUNwSSxDQUFDO1FBRUQsS0FBSyxNQUFNLEtBQUssSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDaEMsTUFBTSxlQUFlLEdBQUcsS0FBSyxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQTtZQUVwRCxrQkFBa0IsQ0FBQyxlQUFlLENBQUMsR0FBRyxFQUFFLENBQUE7WUFFeEMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUM7Z0JBQUUsc0JBQXNCLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFBO1lBQ25HLElBQUksQ0FBQyxDQUFDLGVBQWUsSUFBSSx1QkFBdUIsQ0FBQztnQkFBRSx1QkFBdUIsQ0FBQyxlQUFlLENBQUMsR0FBRyxFQUFFLENBQUE7WUFFaEcsdUJBQXVCLENBQUMsZUFBZSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBQ3RELENBQUM7UUFFRCxrQ0FBa0M7UUFDbEMsTUFBTSxTQUFTLEdBQUcsRUFBRSxDQUFBO1FBRXBCLFNBQVMsQ0FBQyxVQUFVLENBQUMsR0FBRyxzQkFBc0IsQ0FBQTtRQUU5QyxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsY0FBYyxFQUFFLEVBQUUsQ0FBQztZQUN2QyxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLHdCQUF3QixFQUFFLENBQUE7WUFFL0QsU0FBUyxDQUFDLFVBQVUsQ0FBQyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxFQUFFLENBQUMsSUFBSSxDQUFBO1FBQ2hFLENBQUM7UUFFRCxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsbUJBQW1CLEVBQUUsQ0FBQTtRQUVoRSxJQUFJLENBQUMsZ0JBQWdCO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyx5REFBeUQsQ0FBQyxDQUFBO1FBRWpHLHlEQUF5RDtRQUN6RCxNQUFNLFlBQVksR0FBRyxNQUFNLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQTtRQUV0RSxLQUFLLE1BQU0sV0FBVyxJQUFJLFlBQVksRUFBRSxDQUFDO1lBQ3ZDLE1BQU0sZUFBZSxHQUFHLFdBQVcsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUE7WUFFMUQsa0JBQWtCLENBQUMsZUFBZSxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFBO1FBQ3ZELENBQUM7UUFFRCxzREFBc0Q7UUFDdEQsS0FBSyxNQUFNLFVBQVUsSUFBSSxrQkFBa0IsRUFBRSxDQUFDO1lBQzVDLE1BQU0sbUJBQW1CLEdBQUcsa0JBQWtCLENBQUMsVUFBVSxDQUFDLENBQUE7WUFFMUQsS0FBSyxNQUFNLEtBQUssSUFBSSx1QkFBdUIsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO2dCQUN4RCxNQUFNLGlCQUFpQixHQUFHLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLG1CQUFtQixFQUFFLENBQUMsQ0FBQTtnQkFFOUYsSUFBSSxtQkFBbUIsQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFLENBQUM7b0JBQ3BDLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQTtnQkFDakMsQ0FBQztxQkFBTSxDQUFDO29CQUNOLGlCQUFpQixDQUFDLFdBQVcsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFBO2dCQUNwRCxDQUFDO2dCQUVELGlCQUFpQixDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQTtZQUN0QyxDQUFDO1FBQ0gsQ0FBQztRQUVELE9BQU8sWUFBWSxDQUFBO0lBQ3JCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG5pbXBvcnQgcmVzdEFyZ3NFcnJvciBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvcmVzdC1hcmdzLWVycm9yLmpzXCJcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVmVsb2Npb3VzRGF0YWJhc2VRdWVyeVByZWxvYWRlckhhc01hbnkge1xuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IGFyZ3NcbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuLi8uLi9yZWNvcmQvaW5kZXguanNcIikuZGVmYXVsdFtdfSBhcmdzLm1vZGVsc1xuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uLy4uL3JlY29yZC9yZWxhdGlvbnNoaXBzL2hhcy1tYW55LmpzXCIpLmRlZmF1bHR9IGFyZ3MucmVsYXRpb25zaGlwXG4gICAqL1xuICBjb25zdHJ1Y3Rvcih7bW9kZWxzLCByZWxhdGlvbnNoaXAsIC4uLnJlc3RBcmdzfSkge1xuICAgIHJlc3RBcmdzRXJyb3IocmVzdEFyZ3MpXG5cbiAgICB0aGlzLm1vZGVscyA9IG1vZGVsc1xuICAgIHRoaXMucmVsYXRpb25zaGlwID0gcmVsYXRpb25zaGlwXG4gIH1cblxuICBhc3luYyBydW4oKSB7XG4gICAgLyoqIEB0eXBlIHtBcnJheTxudW1iZXIgfCBzdHJpbmc+fSAqL1xuICAgIGNvbnN0IG1vZGVsc1ByaW1hcnlLZXlWYWx1ZXMgPSBbXVxuXG4gICAgLyoqIEB0eXBlIHtSZWNvcmQ8bnVtYmVyIHwgc3RyaW5nLCBBcnJheTxpbXBvcnQoXCIuLi8uLi9yZWNvcmQvaW5kZXguanNcIikuZGVmYXVsdD4+fSAqL1xuICAgIGNvbnN0IG1vZGVsc0J5UHJpbWFyeUtleVZhbHVlID0ge31cblxuICAgIGNvbnN0IGZvcmVpZ25LZXkgPSB0aGlzLnJlbGF0aW9uc2hpcC5nZXRGb3JlaWduS2V5KClcbiAgICBjb25zdCBwcmltYXJ5S2V5ID0gdGhpcy5yZWxhdGlvbnNoaXAuZ2V0UHJpbWFyeUtleSgpXG5cbiAgICAvKiogQHR5cGUge1JlY29yZDxudW1iZXIgfCBzdHJpbmcsIEFycmF5PGltcG9ydChcIi4uLy4uL3JlY29yZC9pbmRleC5qc1wiKS5kZWZhdWx0Pj59ICovXG4gICAgY29uc3QgcHJlbG9hZENvbGxlY3Rpb25zID0ge31cblxuICAgIGlmICghcHJpbWFyeUtleSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGAke3RoaXMucmVsYXRpb25zaGlwLmdldE1vZGVsQ2xhc3MoKS5uYW1lfSMke3RoaXMucmVsYXRpb25zaGlwLmdldFJlbGF0aW9uc2hpcE5hbWUoKX0gZG9lc24ndCBoYXZlIGEgcHJpbWFyeSBrZXlgKVxuICAgIH1cblxuICAgIGZvciAoY29uc3QgbW9kZWwgb2YgdGhpcy5tb2RlbHMpIHtcbiAgICAgIGNvbnN0IHByaW1hcnlLZXlWYWx1ZSA9IG1vZGVsLnJlYWRDb2x1bW4ocHJpbWFyeUtleSlcblxuICAgICAgcHJlbG9hZENvbGxlY3Rpb25zW3ByaW1hcnlLZXlWYWx1ZV0gPSBbXVxuXG4gICAgICBpZiAoIW1vZGVsc1ByaW1hcnlLZXlWYWx1ZXMuaW5jbHVkZXMocHJpbWFyeUtleVZhbHVlKSkgbW9kZWxzUHJpbWFyeUtleVZhbHVlcy5wdXNoKHByaW1hcnlLZXlWYWx1ZSlcbiAgICAgIGlmICghKHByaW1hcnlLZXlWYWx1ZSBpbiBtb2RlbHNCeVByaW1hcnlLZXlWYWx1ZSkpIG1vZGVsc0J5UHJpbWFyeUtleVZhbHVlW3ByaW1hcnlLZXlWYWx1ZV0gPSBbXVxuXG4gICAgICBtb2RlbHNCeVByaW1hcnlLZXlWYWx1ZVtwcmltYXJ5S2V5VmFsdWVdLnB1c2gobW9kZWwpXG4gICAgfVxuXG4gICAgLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCBhbnk+fSAqL1xuICAgIGNvbnN0IHdoZXJlQXJncyA9IHt9XG5cbiAgICB3aGVyZUFyZ3NbZm9yZWlnbktleV0gPSBtb2RlbHNQcmltYXJ5S2V5VmFsdWVzXG5cbiAgICBpZiAodGhpcy5yZWxhdGlvbnNoaXAuZ2V0UG9seW1vcnBoaWMoKSkge1xuICAgICAgY29uc3QgdHlwZUNvbHVtbiA9IHRoaXMucmVsYXRpb25zaGlwLmdldFBvbHltb3JwaGljVHlwZUNvbHVtbigpXG5cbiAgICAgIHdoZXJlQXJnc1t0eXBlQ29sdW1uXSA9IHRoaXMucmVsYXRpb25zaGlwLmdldE1vZGVsQ2xhc3MoKS5uYW1lXG4gICAgfVxuXG4gICAgY29uc3QgdGFyZ2V0TW9kZWxDbGFzcyA9IHRoaXMucmVsYXRpb25zaGlwLmdldFRhcmdldE1vZGVsQ2xhc3MoKVxuXG4gICAgaWYgKCF0YXJnZXRNb2RlbENsYXNzKSB0aHJvdyBuZXcgRXJyb3IoXCJObyB0YXJnZXQgbW9kZWwgY2xhc3MgY291bGQgYmUgZ290dGVuIGZyb20gcmVsYXRpb25zaGlwXCIpXG5cbiAgICAvLyBMb2FkIHRhcmdldCBtb2RlbHMgdG8gYmUgcHJlbG9hZGVkIG9uIHRoZSBnaXZlbiBtb2RlbHNcbiAgICBjb25zdCB0YXJnZXRNb2RlbHMgPSBhd2FpdCB0YXJnZXRNb2RlbENsYXNzLndoZXJlKHdoZXJlQXJncykudG9BcnJheSgpXG5cbiAgICBmb3IgKGNvbnN0IHRhcmdldE1vZGVsIG9mIHRhcmdldE1vZGVscykge1xuICAgICAgY29uc3QgZm9yZWlnbktleVZhbHVlID0gdGFyZ2V0TW9kZWwucmVhZENvbHVtbihmb3JlaWduS2V5KVxuXG4gICAgICBwcmVsb2FkQ29sbGVjdGlvbnNbZm9yZWlnbktleVZhbHVlXS5wdXNoKHRhcmdldE1vZGVsKVxuICAgIH1cblxuICAgIC8vIFNldCB0aGUgdGFyZ2V0IHByZWxvYWRlZCBtb2RlbHMgb24gdGhlIGdpdmVuIG1vZGVsc1xuICAgIGZvciAoY29uc3QgbW9kZWxWYWx1ZSBpbiBwcmVsb2FkQ29sbGVjdGlvbnMpIHtcbiAgICAgIGNvbnN0IHByZWxvYWRlZENvbGxlY3Rpb24gPSBwcmVsb2FkQ29sbGVjdGlvbnNbbW9kZWxWYWx1ZV1cblxuICAgICAgZm9yIChjb25zdCBtb2RlbCBvZiBtb2RlbHNCeVByaW1hcnlLZXlWYWx1ZVttb2RlbFZhbHVlXSkge1xuICAgICAgICBjb25zdCBtb2RlbFJlbGF0aW9uc2hpcCA9IG1vZGVsLmdldFJlbGF0aW9uc2hpcEJ5TmFtZSh0aGlzLnJlbGF0aW9uc2hpcC5nZXRSZWxhdGlvbnNoaXBOYW1lKCkpXG5cbiAgICAgICAgaWYgKHByZWxvYWRlZENvbGxlY3Rpb24ubGVuZ3RoID09IDApIHtcbiAgICAgICAgICBtb2RlbFJlbGF0aW9uc2hpcC5zZXRMb2FkZWQoW10pXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbW9kZWxSZWxhdGlvbnNoaXAuYWRkVG9Mb2FkZWQocHJlbG9hZGVkQ29sbGVjdGlvbilcbiAgICAgICAgfVxuXG4gICAgICAgIG1vZGVsUmVsYXRpb25zaGlwLnNldFByZWxvYWRlZCh0cnVlKVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0YXJnZXRNb2RlbHNcbiAgfVxufVxuIl19
68
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFzLW1hbnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvZGF0YWJhc2UvcXVlcnkvcHJlbG9hZGVyL2hhcy1tYW55LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWixPQUFPLGFBQWEsTUFBTSxtQ0FBbUMsQ0FBQTtBQUU3RCxNQUFNLENBQUMsT0FBTyxPQUFPLHNDQUFzQztJQUN6RDs7OztPQUlHO0lBQ0gsWUFBWSxFQUFDLE1BQU0sRUFBRSxZQUFZLEVBQUUsR0FBRyxRQUFRLEVBQUM7UUFDN0MsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFBO1FBRXZCLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFBO1FBQ3BCLElBQUksQ0FBQyxZQUFZLEdBQUcsWUFBWSxDQUFBO0lBQ2xDLENBQUM7SUFFRCxLQUFLLENBQUMsR0FBRztRQUNQLHFDQUFxQztRQUNyQyxNQUFNLHNCQUFzQixHQUFHLEVBQUUsQ0FBQTtRQUVqQyxzRkFBc0Y7UUFDdEYsTUFBTSx1QkFBdUIsR0FBRyxFQUFFLENBQUE7UUFFbEMsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLEVBQUUsQ0FBQTtRQUNwRCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsRUFBRSxDQUFBO1FBRXBELHNGQUFzRjtRQUN0RixNQUFNLGtCQUFrQixHQUFHLEVBQUUsQ0FBQTtRQUU3QixJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDaEIsTUFBTSxJQUFJLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxFQUFFLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsbUJBQW1CLEVBQUUsNkJBQTZCLENBQUMsQ0FBQTtRQUNwSSxDQUFDO1FBRUQsS0FBSyxNQUFNLEtBQUssSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDaEMsTUFBTSxlQUFlLEdBQUcsOEJBQThCLENBQUMsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUE7WUFFckYsa0JBQWtCLENBQUMsZUFBZSxDQUFDLEdBQUcsRUFBRSxDQUFBO1lBRXhDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDO2dCQUFFLHNCQUFzQixDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQTtZQUNuRyxJQUFJLENBQUMsQ0FBQyxlQUFlLElBQUksdUJBQXVCLENBQUM7Z0JBQUUsdUJBQXVCLENBQUMsZUFBZSxDQUFDLEdBQUcsRUFBRSxDQUFBO1lBRWhHLHVCQUF1QixDQUFDLGVBQWUsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUN0RCxDQUFDO1FBRUQsdUVBQXVFO1FBQ3ZFLE1BQU0sU0FBUyxHQUFHLEVBQUUsQ0FBQTtRQUVwQixTQUFTLENBQUMsVUFBVSxDQUFDLEdBQUcsc0JBQXNCLENBQUE7UUFFOUMsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQUM7WUFDdkMsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyx3QkFBd0IsRUFBRSxDQUFBO1lBRS9ELFNBQVMsQ0FBQyxVQUFVLENBQUMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsRUFBRSxDQUFDLElBQUksQ0FBQTtRQUNoRSxDQUFDO1FBRUQsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLG1CQUFtQixFQUFFLENBQUE7UUFFaEUsSUFBSSxDQUFDLGdCQUFnQjtZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMseURBQXlELENBQUMsQ0FBQTtRQUVqRyx5REFBeUQ7UUFDekQsTUFBTSxZQUFZLEdBQUcsTUFBTSxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUE7UUFFdEUsS0FBSyxNQUFNLFdBQVcsSUFBSSxZQUFZLEVBQUUsQ0FBQztZQUN2QyxNQUFNLGVBQWUsR0FBRyw4QkFBOEIsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQTtZQUUzRixrQkFBa0IsQ0FBQyxlQUFlLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUE7UUFDdkQsQ0FBQztRQUVELHNEQUFzRDtRQUN0RCxLQUFLLE1BQU0sVUFBVSxJQUFJLGtCQUFrQixFQUFFLENBQUM7WUFDNUMsTUFBTSxtQkFBbUIsR0FBRyxrQkFBa0IsQ0FBQyxVQUFVLENBQUMsQ0FBQTtZQUUxRCxLQUFLLE1BQU0sS0FBSyxJQUFJLHVCQUF1QixDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7Z0JBQ3hELE1BQU0saUJBQWlCLEdBQUcsS0FBSyxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxDQUFBO2dCQUU5RixJQUFJLG1CQUFtQixDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUUsQ0FBQztvQkFDcEMsaUJBQWlCLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFBO2dCQUNqQyxDQUFDO3FCQUFNLENBQUM7b0JBQ04saUJBQWlCLENBQUMsV0FBVyxDQUFDLG1CQUFtQixDQUFDLENBQUE7Z0JBQ3BELENBQUM7Z0JBRUQsaUJBQWlCLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFBO1lBQ3RDLENBQUM7UUFDSCxDQUFDO1FBRUQsT0FBTyxZQUFZLENBQUE7SUFDckIsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbmltcG9ydCByZXN0QXJnc0Vycm9yIGZyb20gXCIuLi8uLi8uLi91dGlscy9yZXN0LWFyZ3MtZXJyb3IuanNcIlxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWZWxvY2lvdXNEYXRhYmFzZVF1ZXJ5UHJlbG9hZGVySGFzTWFueSB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIE9wdGlvbnMgb2JqZWN0LlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uLy4uL3JlY29yZC9pbmRleC5qc1wiKS5kZWZhdWx0W119IGFyZ3MubW9kZWxzIC0gTW9kZWwgaW5zdGFuY2VzLlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uLy4uL3JlY29yZC9yZWxhdGlvbnNoaXBzL2hhcy1tYW55LmpzXCIpLmRlZmF1bHR9IGFyZ3MucmVsYXRpb25zaGlwIC0gUmVsYXRpb25zaGlwLlxuICAgKi9cbiAgY29uc3RydWN0b3Ioe21vZGVscywgcmVsYXRpb25zaGlwLCAuLi5yZXN0QXJnc30pIHtcbiAgICByZXN0QXJnc0Vycm9yKHJlc3RBcmdzKVxuXG4gICAgdGhpcy5tb2RlbHMgPSBtb2RlbHNcbiAgICB0aGlzLnJlbGF0aW9uc2hpcCA9IHJlbGF0aW9uc2hpcFxuICB9XG5cbiAgYXN5bmMgcnVuKCkge1xuICAgIC8qKiBAdHlwZSB7QXJyYXk8bnVtYmVyIHwgc3RyaW5nPn0gKi9cbiAgICBjb25zdCBtb2RlbHNQcmltYXJ5S2V5VmFsdWVzID0gW11cblxuICAgIC8qKiBAdHlwZSB7UmVjb3JkPG51bWJlciB8IHN0cmluZywgQXJyYXk8aW1wb3J0KFwiLi4vLi4vcmVjb3JkL2luZGV4LmpzXCIpLmRlZmF1bHQ+Pn0gKi9cbiAgICBjb25zdCBtb2RlbHNCeVByaW1hcnlLZXlWYWx1ZSA9IHt9XG5cbiAgICBjb25zdCBmb3JlaWduS2V5ID0gdGhpcy5yZWxhdGlvbnNoaXAuZ2V0Rm9yZWlnbktleSgpXG4gICAgY29uc3QgcHJpbWFyeUtleSA9IHRoaXMucmVsYXRpb25zaGlwLmdldFByaW1hcnlLZXkoKVxuXG4gICAgLyoqIEB0eXBlIHtSZWNvcmQ8bnVtYmVyIHwgc3RyaW5nLCBBcnJheTxpbXBvcnQoXCIuLi8uLi9yZWNvcmQvaW5kZXguanNcIikuZGVmYXVsdD4+fSAqL1xuICAgIGNvbnN0IHByZWxvYWRDb2xsZWN0aW9ucyA9IHt9XG5cbiAgICBpZiAoIXByaW1hcnlLZXkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgJHt0aGlzLnJlbGF0aW9uc2hpcC5nZXRNb2RlbENsYXNzKCkubmFtZX0jJHt0aGlzLnJlbGF0aW9uc2hpcC5nZXRSZWxhdGlvbnNoaXBOYW1lKCl9IGRvZXNuJ3QgaGF2ZSBhIHByaW1hcnkga2V5YClcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IG1vZGVsIG9mIHRoaXMubW9kZWxzKSB7XG4gICAgICBjb25zdCBwcmltYXJ5S2V5VmFsdWUgPSAvKiogQHR5cGUge3N0cmluZyB8IG51bWJlcn0gKi8gKG1vZGVsLnJlYWRDb2x1bW4ocHJpbWFyeUtleSkpXG5cbiAgICAgIHByZWxvYWRDb2xsZWN0aW9uc1twcmltYXJ5S2V5VmFsdWVdID0gW11cblxuICAgICAgaWYgKCFtb2RlbHNQcmltYXJ5S2V5VmFsdWVzLmluY2x1ZGVzKHByaW1hcnlLZXlWYWx1ZSkpIG1vZGVsc1ByaW1hcnlLZXlWYWx1ZXMucHVzaChwcmltYXJ5S2V5VmFsdWUpXG4gICAgICBpZiAoIShwcmltYXJ5S2V5VmFsdWUgaW4gbW9kZWxzQnlQcmltYXJ5S2V5VmFsdWUpKSBtb2RlbHNCeVByaW1hcnlLZXlWYWx1ZVtwcmltYXJ5S2V5VmFsdWVdID0gW11cblxuICAgICAgbW9kZWxzQnlQcmltYXJ5S2V5VmFsdWVbcHJpbWFyeUtleVZhbHVlXS5wdXNoKG1vZGVsKVxuICAgIH1cblxuICAgIC8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgc3RyaW5nIHwgbnVtYmVyIHwgQXJyYXk8c3RyaW5nIHwgbnVtYmVyPj59ICovXG4gICAgY29uc3Qgd2hlcmVBcmdzID0ge31cblxuICAgIHdoZXJlQXJnc1tmb3JlaWduS2V5XSA9IG1vZGVsc1ByaW1hcnlLZXlWYWx1ZXNcblxuICAgIGlmICh0aGlzLnJlbGF0aW9uc2hpcC5nZXRQb2x5bW9ycGhpYygpKSB7XG4gICAgICBjb25zdCB0eXBlQ29sdW1uID0gdGhpcy5yZWxhdGlvbnNoaXAuZ2V0UG9seW1vcnBoaWNUeXBlQ29sdW1uKClcblxuICAgICAgd2hlcmVBcmdzW3R5cGVDb2x1bW5dID0gdGhpcy5yZWxhdGlvbnNoaXAuZ2V0TW9kZWxDbGFzcygpLm5hbWVcbiAgICB9XG5cbiAgICBjb25zdCB0YXJnZXRNb2RlbENsYXNzID0gdGhpcy5yZWxhdGlvbnNoaXAuZ2V0VGFyZ2V0TW9kZWxDbGFzcygpXG5cbiAgICBpZiAoIXRhcmdldE1vZGVsQ2xhc3MpIHRocm93IG5ldyBFcnJvcihcIk5vIHRhcmdldCBtb2RlbCBjbGFzcyBjb3VsZCBiZSBnb3R0ZW4gZnJvbSByZWxhdGlvbnNoaXBcIilcblxuICAgIC8vIExvYWQgdGFyZ2V0IG1vZGVscyB0byBiZSBwcmVsb2FkZWQgb24gdGhlIGdpdmVuIG1vZGVsc1xuICAgIGNvbnN0IHRhcmdldE1vZGVscyA9IGF3YWl0IHRhcmdldE1vZGVsQ2xhc3Mud2hlcmUod2hlcmVBcmdzKS50b0FycmF5KClcblxuICAgIGZvciAoY29uc3QgdGFyZ2V0TW9kZWwgb2YgdGFyZ2V0TW9kZWxzKSB7XG4gICAgICBjb25zdCBmb3JlaWduS2V5VmFsdWUgPSAvKiogQHR5cGUge3N0cmluZyB8IG51bWJlcn0gKi8gKHRhcmdldE1vZGVsLnJlYWRDb2x1bW4oZm9yZWlnbktleSkpXG5cbiAgICAgIHByZWxvYWRDb2xsZWN0aW9uc1tmb3JlaWduS2V5VmFsdWVdLnB1c2godGFyZ2V0TW9kZWwpXG4gICAgfVxuXG4gICAgLy8gU2V0IHRoZSB0YXJnZXQgcHJlbG9hZGVkIG1vZGVscyBvbiB0aGUgZ2l2ZW4gbW9kZWxzXG4gICAgZm9yIChjb25zdCBtb2RlbFZhbHVlIGluIHByZWxvYWRDb2xsZWN0aW9ucykge1xuICAgICAgY29uc3QgcHJlbG9hZGVkQ29sbGVjdGlvbiA9IHByZWxvYWRDb2xsZWN0aW9uc1ttb2RlbFZhbHVlXVxuXG4gICAgICBmb3IgKGNvbnN0IG1vZGVsIG9mIG1vZGVsc0J5UHJpbWFyeUtleVZhbHVlW21vZGVsVmFsdWVdKSB7XG4gICAgICAgIGNvbnN0IG1vZGVsUmVsYXRpb25zaGlwID0gbW9kZWwuZ2V0UmVsYXRpb25zaGlwQnlOYW1lKHRoaXMucmVsYXRpb25zaGlwLmdldFJlbGF0aW9uc2hpcE5hbWUoKSlcblxuICAgICAgICBpZiAocHJlbG9hZGVkQ29sbGVjdGlvbi5sZW5ndGggPT0gMCkge1xuICAgICAgICAgIG1vZGVsUmVsYXRpb25zaGlwLnNldExvYWRlZChbXSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBtb2RlbFJlbGF0aW9uc2hpcC5hZGRUb0xvYWRlZChwcmVsb2FkZWRDb2xsZWN0aW9uKVxuICAgICAgICB9XG5cbiAgICAgICAgbW9kZWxSZWxhdGlvbnNoaXAuc2V0UHJlbG9hZGVkKHRydWUpXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRhcmdldE1vZGVsc1xuICB9XG59XG4iXX0=
@@ -1,8 +1,8 @@
1
1
  export default class VelociousDatabaseQueryPreloaderHasOne {
2
2
  /**
3
- * @param {object} args
4
- * @param {Array<import("../../record/index.js").default>} args.models
5
- * @param {import("../../record/relationships/has-one.js").default} args.relationship
3
+ * @param {object} args - Options object.
4
+ * @param {Array<import("../../record/index.js").default>} args.models - Model instances.
5
+ * @param {import("../../record/relationships/has-one.js").default} args.relationship - Relationship.
6
6
  */
7
7
  constructor({ models, relationship, ...restArgs }: {
8
8
  models: Array<import("../../record/index.js").default>;