velocious 1.0.577 → 1.0.579

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 (1676) hide show
  1. package/README.md +12 -6
  2. package/build/application.js +3 -3
  3. package/build/authorization/ability.js +6 -6
  4. package/build/authorization/base-resource.js +1 -1
  5. package/build/background-jobs/client.js +2 -2
  6. package/build/background-jobs/forked-runner-child.js +4 -4
  7. package/build/background-jobs/job-runner.js +2 -2
  8. package/build/background-jobs/job.js +6 -6
  9. package/build/background-jobs/json-socket.js +1 -1
  10. package/build/background-jobs/main.js +13 -13
  11. package/build/background-jobs/normalize-error.js +2 -2
  12. package/build/background-jobs/pooled-runner-child.js +3 -3
  13. package/build/background-jobs/scheduler.js +1 -1
  14. package/build/background-jobs/status-reporter.js +2 -2
  15. package/build/background-jobs/store.js +23 -23
  16. package/build/background-jobs/types.js +6 -6
  17. package/build/background-jobs/web/controller.js +6 -6
  18. package/build/background-jobs/web/counts-channel.js +1 -1
  19. package/build/background-jobs/worker.js +8 -8
  20. package/build/beacon/client.js +3 -3
  21. package/build/beacon/in-process-client.js +3 -3
  22. package/build/beacon/types.js +1 -1
  23. package/build/cli/base-command.js +1 -1
  24. package/build/cli/commands/console.js +1 -1
  25. package/build/cli/commands/db/schema/dump.js +1 -1
  26. package/build/cli/commands/db/schema/load.js +1 -1
  27. package/build/cli/commands/db/seed.js +1 -1
  28. package/build/cli/commands/generate/frontend-models.js +1 -1
  29. package/build/cli/commands/lint/relationships.js +1 -1
  30. package/build/cli/commands/run-script.js +1 -1
  31. package/build/cli/commands/runner.js +1 -1
  32. package/build/cli/index.js +2 -2
  33. package/build/cli/tenant-database-command-helper.js +2 -2
  34. package/build/configuration-types.js +48 -47
  35. package/build/configuration.js +150 -65
  36. package/build/controller.js +11 -8
  37. package/build/current.js +2 -2
  38. package/build/database/annotations-async-hooks.js +3 -3
  39. package/build/database/annotations.js +1 -1
  40. package/build/database/drivers/base-column.js +1 -1
  41. package/build/database/drivers/base-foreign-key.js +1 -1
  42. package/build/database/drivers/base-table.js +1 -1
  43. package/build/database/drivers/base.js +18 -18
  44. package/build/database/drivers/mssql/column.js +1 -1
  45. package/build/database/drivers/mssql/index.js +2 -2
  46. package/build/database/drivers/mssql/options.js +1 -1
  47. package/build/database/drivers/mssql/structure-sql.js +1 -1
  48. package/build/database/drivers/mssql/table.js +1 -1
  49. package/build/database/drivers/mysql/column.js +1 -1
  50. package/build/database/drivers/mysql/index.js +4 -4
  51. package/build/database/drivers/mysql/options.js +1 -1
  52. package/build/database/drivers/mysql/query.js +7 -7
  53. package/build/database/drivers/mysql/structure-sql.js +71 -10
  54. package/build/database/drivers/pgsql/column.js +1 -1
  55. package/build/database/drivers/pgsql/index.js +6 -6
  56. package/build/database/drivers/pgsql/structure-sql.js +1 -1
  57. package/build/database/drivers/sqlite/base.js +7 -7
  58. package/build/database/drivers/sqlite/column.js +1 -1
  59. package/build/database/drivers/sqlite/connection-sql-js.js +1 -1
  60. package/build/database/drivers/sqlite/foreign-key.js +1 -1
  61. package/build/database/drivers/sqlite/index.js +1 -1
  62. package/build/database/drivers/sqlite/index.native.js +2 -2
  63. package/build/database/drivers/sqlite/index.web.js +2 -2
  64. package/build/database/drivers/sqlite/query.js +2 -2
  65. package/build/database/drivers/sqlite/query.native.js +2 -2
  66. package/build/database/drivers/sqlite/query.web.js +2 -2
  67. package/build/database/drivers/sqlite/table-rebuilder.js +1 -1
  68. package/build/database/migration/index.js +2 -2
  69. package/build/database/migrator/types.js +2 -2
  70. package/build/database/operation.js +59 -6
  71. package/build/database/pool/async-tracked-multi-connection.js +75 -24
  72. package/build/database/pool/base-methods-forward.js +2 -2
  73. package/build/database/pool/base.js +48 -17
  74. package/build/database/pool/single-multi-use.js +501 -103
  75. package/build/database/query/delete-base.js +1 -1
  76. package/build/database/query/index.js +3 -3
  77. package/build/database/query/insert-base.js +4 -4
  78. package/build/database/query/model-class-query.js +39 -39
  79. package/build/database/query/preloader/belongs-to.js +2 -2
  80. package/build/database/query/preloader/ensure-model-class-initialized.js +3 -2
  81. package/build/database/query/preloader/has-many.js +3 -3
  82. package/build/database/query/preloader/has-one.js +1 -1
  83. package/build/database/query/preloader.js +9 -2
  84. package/build/database/query/query-data.js +7 -7
  85. package/build/database/query/update-base.js +3 -3
  86. package/build/database/query/upsert-base.js +2 -2
  87. package/build/database/query/where-model-class-hash.js +13 -13
  88. package/build/database/query/with-count.js +12 -12
  89. package/build/database/query-parser/options.js +2 -2
  90. package/build/database/query-parser/select-parser.js +1 -1
  91. package/build/database/record/acts-as-list.js +2 -2
  92. package/build/database/record/attachments/handle.js +6 -6
  93. package/build/database/record/attachments/normalize-input.js +11 -11
  94. package/build/database/record/attachments/storage-drivers/filesystem.js +1 -1
  95. package/build/database/record/attachments/storage-drivers/native.js +5 -5
  96. package/build/database/record/attachments/storage-drivers/s3.js +10 -10
  97. package/build/database/record/attachments/store.js +24 -20
  98. package/build/database/record/auditing.js +123 -29
  99. package/build/database/record/counter-cache-magnitude.js +11 -11
  100. package/build/database/record/index.js +227 -174
  101. package/build/database/record/instance-relationships/base.js +4 -4
  102. package/build/database/record/instance-relationships/belongs-to.js +1 -1
  103. package/build/database/record/instance-relationships/has-many.js +3 -3
  104. package/build/database/record/instance-relationships/has-one.js +1 -1
  105. package/build/database/record/record-not-found-error.js +1 -0
  106. package/build/database/record/relationships/base.js +22 -0
  107. package/build/database/record/state-machine.js +6 -6
  108. package/build/database/record/validators/base.js +1 -1
  109. package/build/database/structure-sql-loader.js +3 -3
  110. package/build/database/table-data/table-column.js +3 -3
  111. package/build/database/use-live-query.js +3 -3
  112. package/build/environment-handlers/base.js +56 -37
  113. package/build/environment-handlers/browser.js +1 -1
  114. package/build/environment-handlers/node/cli/commands/console.js +4 -4
  115. package/build/environment-handlers/node/cli/commands/db/seed.js +2 -2
  116. package/build/environment-handlers/node/cli/commands/generate/base-models.js +1 -1
  117. package/build/environment-handlers/node/cli/commands/run-script.js +2 -2
  118. package/build/environment-handlers/node/cli/commands/runner.js +2 -2
  119. package/build/environment-handlers/node/cli/commands/server.js +1 -1
  120. package/build/environment-handlers/node.js +36 -36
  121. package/build/error-logger.js +2 -2
  122. package/build/error-reporting/request-details.js +32 -32
  123. package/build/frontend-model-controller.js +215 -213
  124. package/build/frontend-model-resource/base-resource.js +44 -44
  125. package/build/frontend-model-resource/velocious-attachment-resource.js +1 -1
  126. package/build/frontend-models/base.js +146 -142
  127. package/build/frontend-models/clear-pending-debounced-callback.js +2 -2
  128. package/build/frontend-models/model-registry.js +4 -4
  129. package/build/frontend-models/outgoing-event-buffer.js +1 -1
  130. package/build/frontend-models/preloader.js +1 -1
  131. package/build/frontend-models/query.js +60 -60
  132. package/build/frontend-models/resource-definition.js +9 -9
  133. package/build/frontend-models/transport-serialization.js +27 -27
  134. package/build/frontend-models/websocket-channel.js +4 -4
  135. package/build/frontend-models/websocket-publishers.js +1 -1
  136. package/build/http-client/request.js +1 -1
  137. package/build/http-client/response.js +1 -1
  138. package/build/http-server/client/index.js +4 -4
  139. package/build/http-server/client/params-to-object.js +16 -16
  140. package/build/http-server/client/request-buffer/index.js +5 -2
  141. package/build/http-server/client/request-parser.js +2 -2
  142. package/build/http-server/client/request-runner.js +2 -2
  143. package/build/http-server/client/request.js +2 -2
  144. package/build/http-server/client/websocket-request.js +6 -6
  145. package/build/http-server/client/websocket-session.js +28 -28
  146. package/build/http-server/cookie.js +2 -2
  147. package/build/http-server/development-reloader.js +1 -1
  148. package/build/http-server/index.js +5 -5
  149. package/build/http-server/remote-address.js +1 -1
  150. package/build/http-server/server-lock.js +4 -4
  151. package/build/http-server/websocket-channel-subscribers.js +4 -4
  152. package/build/http-server/websocket-channel.js +1 -1
  153. package/build/http-server/websocket-connection.js +3 -3
  154. package/build/http-server/websocket-event-log-store.js +9 -9
  155. package/build/http-server/websocket-events-host.js +7 -7
  156. package/build/http-server/websocket-events.js +4 -4
  157. package/build/http-server/worker-handler/channel-subscriber-dispatch.js +1 -1
  158. package/build/http-server/worker-handler/in-process.js +5 -5
  159. package/build/http-server/worker-handler/index.js +10 -10
  160. package/build/http-server/worker-handler/worker-thread.js +8 -8
  161. package/build/index.d.ts.map +1 -1
  162. package/build/logger/base-logger.js +1 -1
  163. package/build/logger.js +12 -12
  164. package/build/mailer/backends/smtp.js +3 -3
  165. package/build/mailer/base.js +14 -14
  166. package/build/mailer/delivery.js +3 -3
  167. package/build/mailer/index.js +1 -1
  168. package/build/mailer.js +1 -1
  169. package/build/plugins/sqljs-wasm-route-controller.js +1 -1
  170. package/build/record-payload-values.js +3 -3
  171. package/build/routes/base-route.js +5 -5
  172. package/build/routes/basic-route.js +4 -4
  173. package/build/routes/get-route.js +2 -2
  174. package/build/routes/hooks/frontend-model-command-route-hook.js +1 -1
  175. package/build/routes/index.js +3 -3
  176. package/build/routes/namespace-route.js +1 -1
  177. package/build/routes/plugin-routes.js +1 -1
  178. package/build/routes/post-route.js +2 -2
  179. package/build/routes/resolver.js +5 -5
  180. package/build/routes/resource-route.js +1 -1
  181. package/build/src/application.d.ts +26 -29
  182. package/build/src/application.d.ts.map +1 -1
  183. package/build/src/application.js +4 -4
  184. package/build/src/authorization/ability.d.ts +47 -53
  185. package/build/src/authorization/ability.d.ts.map +1 -1
  186. package/build/src/authorization/ability.js +7 -7
  187. package/build/src/authorization/base-resource.d.ts +13 -13
  188. package/build/src/authorization/base-resource.d.ts.map +1 -1
  189. package/build/src/authorization/base-resource.js +2 -2
  190. package/build/src/background-jobs/client.d.ts +9 -9
  191. package/build/src/background-jobs/client.d.ts.map +1 -1
  192. package/build/src/background-jobs/client.js +3 -3
  193. package/build/src/background-jobs/cron-expression.d.ts +25 -16
  194. package/build/src/background-jobs/cron-expression.d.ts.map +1 -1
  195. package/build/src/background-jobs/forked-runner-child.js +5 -5
  196. package/build/src/background-jobs/job-record.d.ts +4 -3
  197. package/build/src/background-jobs/job-record.d.ts.map +1 -1
  198. package/build/src/background-jobs/job-registry.d.ts +6 -6
  199. package/build/src/background-jobs/job-registry.d.ts.map +1 -1
  200. package/build/src/background-jobs/job-runner.d.ts +9 -9
  201. package/build/src/background-jobs/job-runner.d.ts.map +1 -1
  202. package/build/src/background-jobs/job-runner.js +3 -3
  203. package/build/src/background-jobs/job.d.ts +14 -14
  204. package/build/src/background-jobs/job.d.ts.map +1 -1
  205. package/build/src/background-jobs/job.js +7 -7
  206. package/build/src/background-jobs/json-socket.d.ts +9 -10
  207. package/build/src/background-jobs/json-socket.d.ts.map +1 -1
  208. package/build/src/background-jobs/json-socket.js +2 -2
  209. package/build/src/background-jobs/main.d.ts +56 -59
  210. package/build/src/background-jobs/main.d.ts.map +1 -1
  211. package/build/src/background-jobs/main.js +14 -14
  212. package/build/src/background-jobs/normalize-error.d.ts +2 -2
  213. package/build/src/background-jobs/normalize-error.d.ts.map +1 -1
  214. package/build/src/background-jobs/normalize-error.js +3 -3
  215. package/build/src/background-jobs/pooled-runner-child.js +4 -4
  216. package/build/src/background-jobs/runner-graceful-shutdown.d.ts +7 -12
  217. package/build/src/background-jobs/runner-graceful-shutdown.d.ts.map +1 -1
  218. package/build/src/background-jobs/runner-process-title.d.ts.map +1 -1
  219. package/build/src/background-jobs/scheduler.d.ts +41 -41
  220. package/build/src/background-jobs/scheduler.d.ts.map +1 -1
  221. package/build/src/background-jobs/scheduler.js +2 -2
  222. package/build/src/background-jobs/socket-request.d.ts +14 -14
  223. package/build/src/background-jobs/socket-request.d.ts.map +1 -1
  224. package/build/src/background-jobs/status-reporter.d.ts +28 -28
  225. package/build/src/background-jobs/status-reporter.d.ts.map +1 -1
  226. package/build/src/background-jobs/status-reporter.js +3 -3
  227. package/build/src/background-jobs/store.d.ts +100 -103
  228. package/build/src/background-jobs/store.d.ts.map +1 -1
  229. package/build/src/background-jobs/store.js +24 -24
  230. package/build/src/background-jobs/types.d.ts +124 -124
  231. package/build/src/background-jobs/types.d.ts.map +1 -1
  232. package/build/src/background-jobs/types.js +7 -7
  233. package/build/src/background-jobs/web/authorization.d.ts +2 -2
  234. package/build/src/background-jobs/web/authorization.d.ts.map +1 -1
  235. package/build/src/background-jobs/web/controller.d.ts +13 -13
  236. package/build/src/background-jobs/web/controller.d.ts.map +1 -1
  237. package/build/src/background-jobs/web/controller.js +7 -7
  238. package/build/src/background-jobs/web/counts-channel.d.ts +8 -8
  239. package/build/src/background-jobs/web/counts-channel.d.ts.map +1 -1
  240. package/build/src/background-jobs/web/counts-channel.js +2 -2
  241. package/build/src/background-jobs/web/index.d.ts +4 -4
  242. package/build/src/background-jobs/web/index.d.ts.map +1 -1
  243. package/build/src/background-jobs/web/path-matcher.d.ts +18 -13
  244. package/build/src/background-jobs/web/path-matcher.d.ts.map +1 -1
  245. package/build/src/background-jobs/web/registry.d.ts +21 -24
  246. package/build/src/background-jobs/web/registry.d.ts.map +1 -1
  247. package/build/src/background-jobs/worker.d.ts +74 -77
  248. package/build/src/background-jobs/worker.d.ts.map +1 -1
  249. package/build/src/background-jobs/worker.js +9 -9
  250. package/build/src/beacon/client.d.ts +30 -34
  251. package/build/src/beacon/client.d.ts.map +1 -1
  252. package/build/src/beacon/client.js +4 -4
  253. package/build/src/beacon/in-process-broker.d.ts +6 -9
  254. package/build/src/beacon/in-process-broker.d.ts.map +1 -1
  255. package/build/src/beacon/in-process-client.d.ts +17 -21
  256. package/build/src/beacon/in-process-client.d.ts.map +1 -1
  257. package/build/src/beacon/in-process-client.js +4 -4
  258. package/build/src/beacon/server.d.ts +15 -15
  259. package/build/src/beacon/server.d.ts.map +1 -1
  260. package/build/src/beacon/types.d.ts +21 -46
  261. package/build/src/beacon/types.d.ts.map +1 -1
  262. package/build/src/beacon/types.js +2 -2
  263. package/build/src/cli/base-command.d.ts +25 -28
  264. package/build/src/cli/base-command.d.ts.map +1 -1
  265. package/build/src/cli/base-command.js +2 -2
  266. package/build/src/cli/browser-cli.d.ts +1 -1
  267. package/build/src/cli/browser-cli.d.ts.map +1 -1
  268. package/build/src/cli/commands/background-jobs-main.d.ts +2 -1
  269. package/build/src/cli/commands/background-jobs-main.d.ts.map +1 -1
  270. package/build/src/cli/commands/background-jobs-runner.d.ts +2 -1
  271. package/build/src/cli/commands/background-jobs-runner.d.ts.map +1 -1
  272. package/build/src/cli/commands/background-jobs-worker.d.ts +2 -1
  273. package/build/src/cli/commands/background-jobs-worker.d.ts.map +1 -1
  274. package/build/src/cli/commands/beacon.d.ts +2 -1
  275. package/build/src/cli/commands/beacon.d.ts.map +1 -1
  276. package/build/src/cli/commands/console.d.ts +6 -1
  277. package/build/src/cli/commands/console.d.ts.map +1 -1
  278. package/build/src/cli/commands/console.js +2 -2
  279. package/build/src/cli/commands/db/base-command.d.ts +1 -1
  280. package/build/src/cli/commands/db/base-command.d.ts.map +1 -1
  281. package/build/src/cli/commands/db/create.d.ts +1 -1
  282. package/build/src/cli/commands/db/create.d.ts.map +1 -1
  283. package/build/src/cli/commands/db/drop.d.ts +1 -1
  284. package/build/src/cli/commands/db/drop.d.ts.map +1 -1
  285. package/build/src/cli/commands/db/migrate.d.ts +1 -1
  286. package/build/src/cli/commands/db/migrate.d.ts.map +1 -1
  287. package/build/src/cli/commands/db/reset.d.ts +1 -1
  288. package/build/src/cli/commands/db/reset.d.ts.map +1 -1
  289. package/build/src/cli/commands/db/rollback.d.ts +1 -1
  290. package/build/src/cli/commands/db/rollback.d.ts.map +1 -1
  291. package/build/src/cli/commands/db/schema/dump.d.ts +6 -1
  292. package/build/src/cli/commands/db/schema/dump.d.ts.map +1 -1
  293. package/build/src/cli/commands/db/schema/dump.js +2 -2
  294. package/build/src/cli/commands/db/schema/load.d.ts +6 -1
  295. package/build/src/cli/commands/db/schema/load.d.ts.map +1 -1
  296. package/build/src/cli/commands/db/schema/load.js +2 -2
  297. package/build/src/cli/commands/db/seed.d.ts +6 -1
  298. package/build/src/cli/commands/db/seed.d.ts.map +1 -1
  299. package/build/src/cli/commands/db/seed.js +2 -2
  300. package/build/src/cli/commands/db/tenants/check.d.ts +1 -1
  301. package/build/src/cli/commands/db/tenants/check.d.ts.map +1 -1
  302. package/build/src/cli/commands/db/tenants/create.d.ts +1 -1
  303. package/build/src/cli/commands/db/tenants/create.d.ts.map +1 -1
  304. package/build/src/cli/commands/db/tenants/drop.d.ts +1 -1
  305. package/build/src/cli/commands/db/tenants/drop.d.ts.map +1 -1
  306. package/build/src/cli/commands/db/tenants/migrate.d.ts +1 -1
  307. package/build/src/cli/commands/db/tenants/migrate.d.ts.map +1 -1
  308. package/build/src/cli/commands/destroy/migration.d.ts +2 -1
  309. package/build/src/cli/commands/destroy/migration.d.ts.map +1 -1
  310. package/build/src/cli/commands/generate/base-models.d.ts +2 -1
  311. package/build/src/cli/commands/generate/base-models.d.ts.map +1 -1
  312. package/build/src/cli/commands/generate/frontend-models.d.ts +6 -1
  313. package/build/src/cli/commands/generate/frontend-models.d.ts.map +1 -1
  314. package/build/src/cli/commands/generate/frontend-models.js +2 -2
  315. package/build/src/cli/commands/generate/migration.d.ts +2 -1
  316. package/build/src/cli/commands/generate/migration.d.ts.map +1 -1
  317. package/build/src/cli/commands/generate/model.d.ts +2 -1
  318. package/build/src/cli/commands/generate/model.d.ts.map +1 -1
  319. package/build/src/cli/commands/init.d.ts +4 -2
  320. package/build/src/cli/commands/init.d.ts.map +1 -1
  321. package/build/src/cli/commands/lint/relationships.d.ts +6 -1
  322. package/build/src/cli/commands/lint/relationships.d.ts.map +1 -1
  323. package/build/src/cli/commands/lint/relationships.js +2 -2
  324. package/build/src/cli/commands/routes.d.ts +2 -1
  325. package/build/src/cli/commands/routes.d.ts.map +1 -1
  326. package/build/src/cli/commands/run-script.d.ts +6 -1
  327. package/build/src/cli/commands/run-script.d.ts.map +1 -1
  328. package/build/src/cli/commands/run-script.js +2 -2
  329. package/build/src/cli/commands/runner.d.ts +6 -1
  330. package/build/src/cli/commands/runner.d.ts.map +1 -1
  331. package/build/src/cli/commands/runner.js +2 -2
  332. package/build/src/cli/commands/server.d.ts +2 -1
  333. package/build/src/cli/commands/server.d.ts.map +1 -1
  334. package/build/src/cli/commands/test.d.ts +2 -1
  335. package/build/src/cli/commands/test.d.ts.map +1 -1
  336. package/build/src/cli/index.d.ts +20 -20
  337. package/build/src/cli/index.d.ts.map +1 -1
  338. package/build/src/cli/index.js +3 -3
  339. package/build/src/cli/tenant-database-command-helper.d.ts +13 -13
  340. package/build/src/cli/tenant-database-command-helper.d.ts.map +1 -1
  341. package/build/src/cli/tenant-database-command-helper.js +3 -3
  342. package/build/src/cli/use-browser-cli.d.ts +1 -1
  343. package/build/src/cli/use-browser-cli.d.ts.map +1 -1
  344. package/build/src/configuration-resolver.d.ts +1 -1
  345. package/build/src/configuration-resolver.d.ts.map +1 -1
  346. package/build/src/configuration-types.d.ts +947 -1038
  347. package/build/src/configuration-types.d.ts.map +1 -1
  348. package/build/src/configuration-types.js +49 -48
  349. package/build/src/configuration.d.ts +145 -139
  350. package/build/src/configuration.d.ts.map +1 -1
  351. package/build/src/configuration.js +149 -66
  352. package/build/src/controller.d.ts +37 -35
  353. package/build/src/controller.d.ts.map +1 -1
  354. package/build/src/controller.js +11 -9
  355. package/build/src/current-configuration.d.ts +5 -4
  356. package/build/src/current-configuration.d.ts.map +1 -1
  357. package/build/src/current.d.ts +3 -3
  358. package/build/src/current.d.ts.map +1 -1
  359. package/build/src/current.js +3 -3
  360. package/build/src/database/advisory-lock-runner.d.ts +61 -60
  361. package/build/src/database/advisory-lock-runner.d.ts.map +1 -1
  362. package/build/src/database/annotations-async-hooks.js +4 -4
  363. package/build/src/database/annotations.d.ts +4 -6
  364. package/build/src/database/annotations.d.ts.map +1 -1
  365. package/build/src/database/annotations.js +2 -2
  366. package/build/src/database/column-types.d.ts +1 -1
  367. package/build/src/database/column-types.d.ts.map +1 -1
  368. package/build/src/database/datetime-storage.d.ts +6 -6
  369. package/build/src/database/datetime-storage.d.ts.map +1 -1
  370. package/build/src/database/drivers/base-column.d.ts +3 -3
  371. package/build/src/database/drivers/base-column.d.ts.map +1 -1
  372. package/build/src/database/drivers/base-column.js +2 -2
  373. package/build/src/database/drivers/base-columns-index.d.ts +2 -2
  374. package/build/src/database/drivers/base-columns-index.d.ts.map +1 -1
  375. package/build/src/database/drivers/base-foreign-key.d.ts +7 -7
  376. package/build/src/database/drivers/base-foreign-key.d.ts.map +1 -1
  377. package/build/src/database/drivers/base-foreign-key.js +2 -2
  378. package/build/src/database/drivers/base-table.d.ts +3 -3
  379. package/build/src/database/drivers/base-table.d.ts.map +1 -1
  380. package/build/src/database/drivers/base-table.js +2 -2
  381. package/build/src/database/drivers/base.d.ts +297 -342
  382. package/build/src/database/drivers/base.d.ts.map +1 -1
  383. package/build/src/database/drivers/base.js +19 -19
  384. package/build/src/database/drivers/index-metadata.d.ts +15 -18
  385. package/build/src/database/drivers/index-metadata.d.ts.map +1 -1
  386. package/build/src/database/drivers/mssql/column.d.ts +10 -5
  387. package/build/src/database/drivers/mssql/column.d.ts.map +1 -1
  388. package/build/src/database/drivers/mssql/column.js +2 -2
  389. package/build/src/database/drivers/mssql/columns-index.d.ts +30 -22
  390. package/build/src/database/drivers/mssql/columns-index.d.ts.map +1 -1
  391. package/build/src/database/drivers/mssql/connect-connection.d.ts.map +1 -1
  392. package/build/src/database/drivers/mssql/foreign-key.d.ts +1 -1
  393. package/build/src/database/drivers/mssql/foreign-key.d.ts.map +1 -1
  394. package/build/src/database/drivers/mssql/index.d.ts +250 -9
  395. package/build/src/database/drivers/mssql/index.d.ts.map +1 -1
  396. package/build/src/database/drivers/mssql/index.js +3 -3
  397. package/build/src/database/drivers/mssql/options.d.ts +31 -1
  398. package/build/src/database/drivers/mssql/options.d.ts.map +1 -1
  399. package/build/src/database/drivers/mssql/options.js +2 -2
  400. package/build/src/database/drivers/mssql/query-parser.d.ts +1 -1
  401. package/build/src/database/drivers/mssql/query-parser.d.ts.map +1 -1
  402. package/build/src/database/drivers/mssql/sql/alter-table.d.ts +1 -1
  403. package/build/src/database/drivers/mssql/sql/alter-table.d.ts.map +1 -1
  404. package/build/src/database/drivers/mssql/sql/create-database.d.ts +3 -2
  405. package/build/src/database/drivers/mssql/sql/create-database.d.ts.map +1 -1
  406. package/build/src/database/drivers/mssql/sql/create-index.d.ts +1 -1
  407. package/build/src/database/drivers/mssql/sql/create-index.d.ts.map +1 -1
  408. package/build/src/database/drivers/mssql/sql/create-table.d.ts +1 -1
  409. package/build/src/database/drivers/mssql/sql/create-table.d.ts.map +1 -1
  410. package/build/src/database/drivers/mssql/sql/delete.d.ts +1 -1
  411. package/build/src/database/drivers/mssql/sql/delete.d.ts.map +1 -1
  412. package/build/src/database/drivers/mssql/sql/drop-database.d.ts +14 -1
  413. package/build/src/database/drivers/mssql/sql/drop-database.d.ts.map +1 -1
  414. package/build/src/database/drivers/mssql/sql/drop-table.d.ts +1 -1
  415. package/build/src/database/drivers/mssql/sql/drop-table.d.ts.map +1 -1
  416. package/build/src/database/drivers/mssql/sql/insert.d.ts +1 -1
  417. package/build/src/database/drivers/mssql/sql/insert.d.ts.map +1 -1
  418. package/build/src/database/drivers/mssql/sql/remove-index.d.ts +1 -1
  419. package/build/src/database/drivers/mssql/sql/remove-index.d.ts.map +1 -1
  420. package/build/src/database/drivers/mssql/sql/update.d.ts +1 -1
  421. package/build/src/database/drivers/mssql/sql/update.d.ts.map +1 -1
  422. package/build/src/database/drivers/mssql/sql/upsert.d.ts +1 -1
  423. package/build/src/database/drivers/mssql/sql/upsert.d.ts.map +1 -1
  424. package/build/src/database/drivers/mssql/structure-sql.d.ts +3 -3
  425. package/build/src/database/drivers/mssql/structure-sql.d.ts.map +1 -1
  426. package/build/src/database/drivers/mssql/structure-sql.js +2 -2
  427. package/build/src/database/drivers/mssql/table.d.ts +39 -29
  428. package/build/src/database/drivers/mssql/table.d.ts.map +1 -1
  429. package/build/src/database/drivers/mssql/table.js +2 -2
  430. package/build/src/database/drivers/mysql/column.d.ts +10 -6
  431. package/build/src/database/drivers/mysql/column.d.ts.map +1 -1
  432. package/build/src/database/drivers/mysql/column.js +2 -2
  433. package/build/src/database/drivers/mysql/columns-index.d.ts +3 -1
  434. package/build/src/database/drivers/mysql/columns-index.d.ts.map +1 -1
  435. package/build/src/database/drivers/mysql/foreign-key.d.ts +1 -1
  436. package/build/src/database/drivers/mysql/foreign-key.d.ts.map +1 -1
  437. package/build/src/database/drivers/mysql/index.d.ts +225 -6
  438. package/build/src/database/drivers/mysql/index.d.ts.map +1 -1
  439. package/build/src/database/drivers/mysql/index.js +5 -5
  440. package/build/src/database/drivers/mysql/options.d.ts +7 -1
  441. package/build/src/database/drivers/mysql/options.d.ts.map +1 -1
  442. package/build/src/database/drivers/mysql/options.js +2 -2
  443. package/build/src/database/drivers/mysql/query-parser.d.ts +1 -1
  444. package/build/src/database/drivers/mysql/query-parser.d.ts.map +1 -1
  445. package/build/src/database/drivers/mysql/query-stream.d.ts.map +1 -1
  446. package/build/src/database/drivers/mysql/query.d.ts +2 -2
  447. package/build/src/database/drivers/mysql/query.d.ts.map +1 -1
  448. package/build/src/database/drivers/mysql/query.js +8 -8
  449. package/build/src/database/drivers/mysql/sql/alter-table.d.ts +12 -1
  450. package/build/src/database/drivers/mysql/sql/alter-table.d.ts.map +1 -1
  451. package/build/src/database/drivers/mysql/sql/create-database.d.ts +6 -1
  452. package/build/src/database/drivers/mysql/sql/create-database.d.ts.map +1 -1
  453. package/build/src/database/drivers/mysql/sql/create-index.d.ts +1 -1
  454. package/build/src/database/drivers/mysql/sql/create-index.d.ts.map +1 -1
  455. package/build/src/database/drivers/mysql/sql/create-table.d.ts +1 -1
  456. package/build/src/database/drivers/mysql/sql/create-table.d.ts.map +1 -1
  457. package/build/src/database/drivers/mysql/sql/delete.d.ts +1 -1
  458. package/build/src/database/drivers/mysql/sql/delete.d.ts.map +1 -1
  459. package/build/src/database/drivers/mysql/sql/drop-database.d.ts +1 -1
  460. package/build/src/database/drivers/mysql/sql/drop-database.d.ts.map +1 -1
  461. package/build/src/database/drivers/mysql/sql/drop-table.d.ts +1 -1
  462. package/build/src/database/drivers/mysql/sql/drop-table.d.ts.map +1 -1
  463. package/build/src/database/drivers/mysql/sql/insert.d.ts +1 -1
  464. package/build/src/database/drivers/mysql/sql/insert.d.ts.map +1 -1
  465. package/build/src/database/drivers/mysql/sql/remove-index.d.ts +1 -1
  466. package/build/src/database/drivers/mysql/sql/remove-index.d.ts.map +1 -1
  467. package/build/src/database/drivers/mysql/sql/update.d.ts +1 -1
  468. package/build/src/database/drivers/mysql/sql/update.d.ts.map +1 -1
  469. package/build/src/database/drivers/mysql/sql/upsert.d.ts +1 -1
  470. package/build/src/database/drivers/mysql/sql/upsert.d.ts.map +1 -1
  471. package/build/src/database/drivers/mysql/structure-sql.d.ts +14 -3
  472. package/build/src/database/drivers/mysql/structure-sql.d.ts.map +1 -1
  473. package/build/src/database/drivers/mysql/structure-sql.js +62 -11
  474. package/build/src/database/drivers/mysql/table.d.ts +11 -6
  475. package/build/src/database/drivers/mysql/table.d.ts.map +1 -1
  476. package/build/src/database/drivers/pgsql/column.d.ts +10 -5
  477. package/build/src/database/drivers/pgsql/column.d.ts.map +1 -1
  478. package/build/src/database/drivers/pgsql/column.js +2 -2
  479. package/build/src/database/drivers/pgsql/columns-index.d.ts +30 -22
  480. package/build/src/database/drivers/pgsql/columns-index.d.ts.map +1 -1
  481. package/build/src/database/drivers/pgsql/foreign-key.d.ts +1 -1
  482. package/build/src/database/drivers/pgsql/foreign-key.d.ts.map +1 -1
  483. package/build/src/database/drivers/pgsql/index.d.ts +157 -6
  484. package/build/src/database/drivers/pgsql/index.d.ts.map +1 -1
  485. package/build/src/database/drivers/pgsql/index.js +7 -7
  486. package/build/src/database/drivers/pgsql/options.d.ts +1 -1
  487. package/build/src/database/drivers/pgsql/options.d.ts.map +1 -1
  488. package/build/src/database/drivers/pgsql/query-parser.d.ts +1 -1
  489. package/build/src/database/drivers/pgsql/query-parser.d.ts.map +1 -1
  490. package/build/src/database/drivers/pgsql/sql/alter-table.d.ts +1 -1
  491. package/build/src/database/drivers/pgsql/sql/alter-table.d.ts.map +1 -1
  492. package/build/src/database/drivers/pgsql/sql/create-database.d.ts +2 -1
  493. package/build/src/database/drivers/pgsql/sql/create-database.d.ts.map +1 -1
  494. package/build/src/database/drivers/pgsql/sql/create-index.d.ts +1 -1
  495. package/build/src/database/drivers/pgsql/sql/create-index.d.ts.map +1 -1
  496. package/build/src/database/drivers/pgsql/sql/create-table.d.ts +1 -1
  497. package/build/src/database/drivers/pgsql/sql/create-table.d.ts.map +1 -1
  498. package/build/src/database/drivers/pgsql/sql/delete.d.ts +1 -1
  499. package/build/src/database/drivers/pgsql/sql/delete.d.ts.map +1 -1
  500. package/build/src/database/drivers/pgsql/sql/drop-database.d.ts +1 -1
  501. package/build/src/database/drivers/pgsql/sql/drop-database.d.ts.map +1 -1
  502. package/build/src/database/drivers/pgsql/sql/drop-table.d.ts +1 -1
  503. package/build/src/database/drivers/pgsql/sql/drop-table.d.ts.map +1 -1
  504. package/build/src/database/drivers/pgsql/sql/insert.d.ts +1 -1
  505. package/build/src/database/drivers/pgsql/sql/insert.d.ts.map +1 -1
  506. package/build/src/database/drivers/pgsql/sql/remove-index.d.ts +1 -1
  507. package/build/src/database/drivers/pgsql/sql/remove-index.d.ts.map +1 -1
  508. package/build/src/database/drivers/pgsql/sql/update.d.ts +1 -1
  509. package/build/src/database/drivers/pgsql/sql/update.d.ts.map +1 -1
  510. package/build/src/database/drivers/pgsql/sql/upsert.d.ts +1 -1
  511. package/build/src/database/drivers/pgsql/sql/upsert.d.ts.map +1 -1
  512. package/build/src/database/drivers/pgsql/structure-sql.d.ts +3 -3
  513. package/build/src/database/drivers/pgsql/structure-sql.d.ts.map +1 -1
  514. package/build/src/database/drivers/pgsql/structure-sql.js +2 -2
  515. package/build/src/database/drivers/pgsql/table.d.ts +33 -31
  516. package/build/src/database/drivers/pgsql/table.d.ts.map +1 -1
  517. package/build/src/database/drivers/sqlite/base.d.ts +162 -12
  518. package/build/src/database/drivers/sqlite/base.d.ts.map +1 -1
  519. package/build/src/database/drivers/sqlite/base.js +8 -8
  520. package/build/src/database/drivers/sqlite/column.d.ts +12 -6
  521. package/build/src/database/drivers/sqlite/column.d.ts.map +1 -1
  522. package/build/src/database/drivers/sqlite/column.js +2 -2
  523. package/build/src/database/drivers/sqlite/columns-index.d.ts +5 -1
  524. package/build/src/database/drivers/sqlite/columns-index.d.ts.map +1 -1
  525. package/build/src/database/drivers/sqlite/connection-sql-js.d.ts +9 -9
  526. package/build/src/database/drivers/sqlite/connection-sql-js.d.ts.map +1 -1
  527. package/build/src/database/drivers/sqlite/connection-sql-js.js +2 -2
  528. package/build/src/database/drivers/sqlite/foreign-key.d.ts +5 -4
  529. package/build/src/database/drivers/sqlite/foreign-key.d.ts.map +1 -1
  530. package/build/src/database/drivers/sqlite/foreign-key.js +2 -2
  531. package/build/src/database/drivers/sqlite/index.d.ts +53 -3
  532. package/build/src/database/drivers/sqlite/index.d.ts.map +1 -1
  533. package/build/src/database/drivers/sqlite/index.js +2 -2
  534. package/build/src/database/drivers/sqlite/index.native.d.ts +13 -5
  535. package/build/src/database/drivers/sqlite/index.native.d.ts.map +1 -1
  536. package/build/src/database/drivers/sqlite/index.native.js +3 -3
  537. package/build/src/database/drivers/sqlite/index.web.d.ts +48 -14
  538. package/build/src/database/drivers/sqlite/index.web.d.ts.map +1 -1
  539. package/build/src/database/drivers/sqlite/index.web.js +3 -3
  540. package/build/src/database/drivers/sqlite/options.d.ts +1 -1
  541. package/build/src/database/drivers/sqlite/options.d.ts.map +1 -1
  542. package/build/src/database/drivers/sqlite/query-parser.d.ts +1 -1
  543. package/build/src/database/drivers/sqlite/query-parser.d.ts.map +1 -1
  544. package/build/src/database/drivers/sqlite/query.d.ts +2 -2
  545. package/build/src/database/drivers/sqlite/query.d.ts.map +1 -1
  546. package/build/src/database/drivers/sqlite/query.js +3 -3
  547. package/build/src/database/drivers/sqlite/query.native.d.ts +4 -4
  548. package/build/src/database/drivers/sqlite/query.native.d.ts.map +1 -1
  549. package/build/src/database/drivers/sqlite/query.native.js +3 -3
  550. package/build/src/database/drivers/sqlite/query.web.d.ts +2 -2
  551. package/build/src/database/drivers/sqlite/query.web.d.ts.map +1 -1
  552. package/build/src/database/drivers/sqlite/query.web.js +3 -3
  553. package/build/src/database/drivers/sqlite/sql/alter-table.d.ts +19 -4
  554. package/build/src/database/drivers/sqlite/sql/alter-table.d.ts.map +1 -1
  555. package/build/src/database/drivers/sqlite/sql/create-index.d.ts +1 -1
  556. package/build/src/database/drivers/sqlite/sql/create-index.d.ts.map +1 -1
  557. package/build/src/database/drivers/sqlite/sql/create-table.d.ts +1 -1
  558. package/build/src/database/drivers/sqlite/sql/create-table.d.ts.map +1 -1
  559. package/build/src/database/drivers/sqlite/sql/delete.d.ts +1 -1
  560. package/build/src/database/drivers/sqlite/sql/delete.d.ts.map +1 -1
  561. package/build/src/database/drivers/sqlite/sql/drop-table.d.ts +1 -1
  562. package/build/src/database/drivers/sqlite/sql/drop-table.d.ts.map +1 -1
  563. package/build/src/database/drivers/sqlite/sql/insert.d.ts +1 -1
  564. package/build/src/database/drivers/sqlite/sql/insert.d.ts.map +1 -1
  565. package/build/src/database/drivers/sqlite/sql/remove-index.d.ts +1 -1
  566. package/build/src/database/drivers/sqlite/sql/remove-index.d.ts.map +1 -1
  567. package/build/src/database/drivers/sqlite/sql/update.d.ts +1 -1
  568. package/build/src/database/drivers/sqlite/sql/update.d.ts.map +1 -1
  569. package/build/src/database/drivers/sqlite/sql/upsert.d.ts +1 -1
  570. package/build/src/database/drivers/sqlite/sql/upsert.d.ts.map +1 -1
  571. package/build/src/database/drivers/sqlite/structure-sql.d.ts +1 -1
  572. package/build/src/database/drivers/sqlite/structure-sql.d.ts.map +1 -1
  573. package/build/src/database/drivers/sqlite/table-rebuilder.d.ts +5 -5
  574. package/build/src/database/drivers/sqlite/table-rebuilder.d.ts.map +1 -1
  575. package/build/src/database/drivers/sqlite/table-rebuilder.js +2 -2
  576. package/build/src/database/drivers/sqlite/table.d.ts +15 -5
  577. package/build/src/database/drivers/sqlite/table.d.ts.map +1 -1
  578. package/build/src/database/drivers/sqlite/web-persistence.d.ts +28 -34
  579. package/build/src/database/drivers/sqlite/web-persistence.d.ts.map +1 -1
  580. package/build/src/database/drivers/structure-sql/utils.d.ts +2 -2
  581. package/build/src/database/drivers/structure-sql/utils.d.ts.map +1 -1
  582. package/build/src/database/handler.d.ts.map +1 -1
  583. package/build/src/database/initializer-from-require-context.d.ts +18 -16
  584. package/build/src/database/initializer-from-require-context.d.ts.map +1 -1
  585. package/build/src/database/live-query.d.ts +13 -24
  586. package/build/src/database/live-query.d.ts.map +1 -1
  587. package/build/src/database/migration/index.d.ts +146 -169
  588. package/build/src/database/migration/index.d.ts.map +1 -1
  589. package/build/src/database/migration/index.js +3 -3
  590. package/build/src/database/migrations-ledger.d.ts.map +1 -1
  591. package/build/src/database/migrator/files-finder.d.ts +1 -1
  592. package/build/src/database/migrator/files-finder.d.ts.map +1 -1
  593. package/build/src/database/migrator/types.d.ts +26 -2
  594. package/build/src/database/migrator/types.d.ts.map +1 -1
  595. package/build/src/database/migrator/types.js +24 -1
  596. package/build/src/database/migrator.d.ts +10 -10
  597. package/build/src/database/migrator.d.ts.map +1 -1
  598. package/build/src/database/operation-connection.d.ts +3 -3
  599. package/build/src/database/operation-connection.d.ts.map +1 -1
  600. package/build/src/database/operation-lease.d.ts +4 -4
  601. package/build/src/database/operation-lease.d.ts.map +1 -1
  602. package/build/src/database/operation.d.ts +38 -7
  603. package/build/src/database/operation.d.ts.map +1 -1
  604. package/build/src/database/operation.js +55 -8
  605. package/build/src/database/pool/async-tracked-multi-connection.d.ts +174 -79
  606. package/build/src/database/pool/async-tracked-multi-connection.d.ts.map +1 -1
  607. package/build/src/database/pool/async-tracked-multi-connection.js +70 -25
  608. package/build/src/database/pool/base-methods-forward.d.ts.map +1 -1
  609. package/build/src/database/pool/base-methods-forward.js +3 -3
  610. package/build/src/database/pool/base.d.ts +93 -71
  611. package/build/src/database/pool/base.d.ts.map +1 -1
  612. package/build/src/database/pool/base.js +47 -17
  613. package/build/src/database/pool/single-multi-use.d.ts +243 -10
  614. package/build/src/database/pool/single-multi-use.d.ts.map +1 -1
  615. package/build/src/database/pool/single-multi-use.js +467 -103
  616. package/build/src/database/query/alter-table-base.d.ts +8 -3
  617. package/build/src/database/query/alter-table-base.d.ts.map +1 -1
  618. package/build/src/database/query/base.d.ts +3 -3
  619. package/build/src/database/query/base.d.ts.map +1 -1
  620. package/build/src/database/query/create-database-base.d.ts +28 -22
  621. package/build/src/database/query/create-database-base.d.ts.map +1 -1
  622. package/build/src/database/query/create-index-base.d.ts +32 -30
  623. package/build/src/database/query/create-index-base.d.ts.map +1 -1
  624. package/build/src/database/query/create-table-base.d.ts +7 -7
  625. package/build/src/database/query/create-table-base.d.ts.map +1 -1
  626. package/build/src/database/query/delete-base.d.ts +5 -5
  627. package/build/src/database/query/delete-base.d.ts.map +1 -1
  628. package/build/src/database/query/delete-base.js +2 -2
  629. package/build/src/database/query/drop-database-base.d.ts +22 -18
  630. package/build/src/database/query/drop-database-base.d.ts.map +1 -1
  631. package/build/src/database/query/drop-table-base.d.ts +11 -6
  632. package/build/src/database/query/drop-table-base.d.ts.map +1 -1
  633. package/build/src/database/query/from-base.d.ts.map +1 -1
  634. package/build/src/database/query/from-plain.d.ts +3 -2
  635. package/build/src/database/query/from-plain.d.ts.map +1 -1
  636. package/build/src/database/query/from-table.d.ts +3 -2
  637. package/build/src/database/query/from-table.d.ts.map +1 -1
  638. package/build/src/database/query/index.d.ts +92 -107
  639. package/build/src/database/query/index.d.ts.map +1 -1
  640. package/build/src/database/query/index.js +4 -4
  641. package/build/src/database/query/insert-base.d.ts +18 -18
  642. package/build/src/database/query/insert-base.d.ts.map +1 -1
  643. package/build/src/database/query/insert-base.js +5 -5
  644. package/build/src/database/query/join-base.d.ts +1 -1
  645. package/build/src/database/query/join-base.d.ts.map +1 -1
  646. package/build/src/database/query/join-object.d.ts +9 -15
  647. package/build/src/database/query/join-object.d.ts.map +1 -1
  648. package/build/src/database/query/join-plain.d.ts +2 -2
  649. package/build/src/database/query/join-plain.d.ts.map +1 -1
  650. package/build/src/database/query/join-tracker.d.ts +3 -3
  651. package/build/src/database/query/join-tracker.d.ts.map +1 -1
  652. package/build/src/database/query/model-class-query.d.ts +39 -36
  653. package/build/src/database/query/model-class-query.d.ts.map +1 -1
  654. package/build/src/database/query/model-class-query.js +40 -40
  655. package/build/src/database/query/order-base.d.ts +1 -1
  656. package/build/src/database/query/order-base.d.ts.map +1 -1
  657. package/build/src/database/query/order-column.d.ts +19 -22
  658. package/build/src/database/query/order-column.d.ts.map +1 -1
  659. package/build/src/database/query/order-plain.d.ts +3 -3
  660. package/build/src/database/query/order-plain.d.ts.map +1 -1
  661. package/build/src/database/query/preloader/belongs-to.d.ts +5 -5
  662. package/build/src/database/query/preloader/belongs-to.d.ts.map +1 -1
  663. package/build/src/database/query/preloader/belongs-to.js +3 -3
  664. package/build/src/database/query/preloader/ensure-model-class-initialized.d.ts +2 -1
  665. package/build/src/database/query/preloader/ensure-model-class-initialized.d.ts.map +1 -1
  666. package/build/src/database/query/preloader/ensure-model-class-initialized.js +4 -3
  667. package/build/src/database/query/preloader/has-many.d.ts +6 -6
  668. package/build/src/database/query/preloader/has-many.d.ts.map +1 -1
  669. package/build/src/database/query/preloader/has-many.js +4 -4
  670. package/build/src/database/query/preloader/has-one.d.ts +5 -5
  671. package/build/src/database/query/preloader/has-one.d.ts.map +1 -1
  672. package/build/src/database/query/preloader/has-one.js +2 -2
  673. package/build/src/database/query/preloader/query-for-model.d.ts.map +1 -1
  674. package/build/src/database/query/preloader/selection.d.ts +6 -6
  675. package/build/src/database/query/preloader/selection.d.ts.map +1 -1
  676. package/build/src/database/query/preloader.d.ts +8 -8
  677. package/build/src/database/query/preloader.d.ts.map +1 -1
  678. package/build/src/database/query/preloader.js +9 -3
  679. package/build/src/database/query/query-data.d.ts +43 -55
  680. package/build/src/database/query/query-data.d.ts.map +1 -1
  681. package/build/src/database/query/query-data.js +8 -8
  682. package/build/src/database/query/remove-index-base.d.ts +21 -19
  683. package/build/src/database/query/remove-index-base.d.ts.map +1 -1
  684. package/build/src/database/query/select-base.d.ts +1 -1
  685. package/build/src/database/query/select-base.d.ts.map +1 -1
  686. package/build/src/database/query/select-plain.d.ts +3 -2
  687. package/build/src/database/query/select-plain.d.ts.map +1 -1
  688. package/build/src/database/query/select-table-and-column.d.ts +4 -3
  689. package/build/src/database/query/select-table-and-column.d.ts.map +1 -1
  690. package/build/src/database/query/update-base.d.ts +10 -10
  691. package/build/src/database/query/update-base.d.ts.map +1 -1
  692. package/build/src/database/query/update-base.js +4 -4
  693. package/build/src/database/query/upsert-base.d.ts +9 -9
  694. package/build/src/database/query/upsert-base.d.ts.map +1 -1
  695. package/build/src/database/query/upsert-base.js +3 -3
  696. package/build/src/database/query/where-base.d.ts +1 -1
  697. package/build/src/database/query/where-base.d.ts.map +1 -1
  698. package/build/src/database/query/where-combinator.d.ts +9 -4
  699. package/build/src/database/query/where-combinator.d.ts.map +1 -1
  700. package/build/src/database/query/where-hash.d.ts +11 -9
  701. package/build/src/database/query/where-hash.d.ts.map +1 -1
  702. package/build/src/database/query/where-model-class-hash.d.ts +28 -26
  703. package/build/src/database/query/where-model-class-hash.d.ts.map +1 -1
  704. package/build/src/database/query/where-model-class-hash.js +14 -14
  705. package/build/src/database/query/where-not.d.ts +8 -3
  706. package/build/src/database/query/where-not.d.ts.map +1 -1
  707. package/build/src/database/query/where-plain.d.ts +4 -3
  708. package/build/src/database/query/where-plain.d.ts.map +1 -1
  709. package/build/src/database/query/with-count.d.ts +22 -28
  710. package/build/src/database/query/with-count.d.ts.map +1 -1
  711. package/build/src/database/query/with-count.js +12 -12
  712. package/build/src/database/query-aborted-error.d.ts +5 -5
  713. package/build/src/database/query-aborted-error.d.ts.map +1 -1
  714. package/build/src/database/query-parser/base-query-parser.d.ts +3 -3
  715. package/build/src/database/query-parser/base-query-parser.d.ts.map +1 -1
  716. package/build/src/database/query-parser/from-parser.d.ts +2 -2
  717. package/build/src/database/query-parser/from-parser.d.ts.map +1 -1
  718. package/build/src/database/query-parser/group-parser.d.ts +2 -2
  719. package/build/src/database/query-parser/group-parser.d.ts.map +1 -1
  720. package/build/src/database/query-parser/joins-parser.d.ts +3 -3
  721. package/build/src/database/query-parser/joins-parser.d.ts.map +1 -1
  722. package/build/src/database/query-parser/limit-parser.d.ts +2 -2
  723. package/build/src/database/query-parser/limit-parser.d.ts.map +1 -1
  724. package/build/src/database/query-parser/options.d.ts +31 -34
  725. package/build/src/database/query-parser/options.d.ts.map +1 -1
  726. package/build/src/database/query-parser/options.js +3 -3
  727. package/build/src/database/query-parser/order-parser.d.ts +2 -2
  728. package/build/src/database/query-parser/order-parser.d.ts.map +1 -1
  729. package/build/src/database/query-parser/select-parser.d.ts +2 -2
  730. package/build/src/database/query-parser/select-parser.d.ts.map +1 -1
  731. package/build/src/database/query-parser/select-parser.js +2 -2
  732. package/build/src/database/query-parser/where-parser.d.ts +2 -2
  733. package/build/src/database/query-parser/where-parser.d.ts.map +1 -1
  734. package/build/src/database/record/acts-as-list.d.ts.map +1 -1
  735. package/build/src/database/record/acts-as-list.js +3 -3
  736. package/build/src/database/record/attachments/attachment-record.d.ts +7 -3
  737. package/build/src/database/record/attachments/attachment-record.d.ts.map +1 -1
  738. package/build/src/database/record/attachments/download.d.ts +9 -9
  739. package/build/src/database/record/attachments/download.d.ts.map +1 -1
  740. package/build/src/database/record/attachments/handle.d.ts +12 -12
  741. package/build/src/database/record/attachments/handle.d.ts.map +1 -1
  742. package/build/src/database/record/attachments/handle.js +7 -7
  743. package/build/src/database/record/attachments/normalize-input.d.ts +16 -22
  744. package/build/src/database/record/attachments/normalize-input.d.ts.map +1 -1
  745. package/build/src/database/record/attachments/normalize-input.js +12 -12
  746. package/build/src/database/record/attachments/storage-drivers/filesystem.d.ts +4 -4
  747. package/build/src/database/record/attachments/storage-drivers/filesystem.d.ts.map +1 -1
  748. package/build/src/database/record/attachments/storage-drivers/filesystem.js +2 -2
  749. package/build/src/database/record/attachments/storage-drivers/native.d.ts +12 -12
  750. package/build/src/database/record/attachments/storage-drivers/native.d.ts.map +1 -1
  751. package/build/src/database/record/attachments/storage-drivers/native.js +6 -6
  752. package/build/src/database/record/attachments/storage-drivers/s3.d.ts +17 -17
  753. package/build/src/database/record/attachments/storage-drivers/s3.d.ts.map +1 -1
  754. package/build/src/database/record/attachments/storage-drivers/s3.js +11 -11
  755. package/build/src/database/record/attachments/store.d.ts +38 -41
  756. package/build/src/database/record/attachments/store.d.ts.map +1 -1
  757. package/build/src/database/record/attachments/store.js +24 -21
  758. package/build/src/database/record/auditing.d.ts +67 -87
  759. package/build/src/database/record/auditing.d.ts.map +1 -1
  760. package/build/src/database/record/auditing.js +109 -30
  761. package/build/src/database/record/counter-cache-magnitude.d.ts +15 -35
  762. package/build/src/database/record/counter-cache-magnitude.d.ts.map +1 -1
  763. package/build/src/database/record/counter-cache-magnitude.js +12 -12
  764. package/build/src/database/record/index.d.ts +2390 -488
  765. package/build/src/database/record/index.d.ts.map +1 -1
  766. package/build/src/database/record/index.js +222 -172
  767. package/build/src/database/record/instance-relationships/base.d.ts +20 -23
  768. package/build/src/database/record/instance-relationships/base.d.ts.map +1 -1
  769. package/build/src/database/record/instance-relationships/base.js +5 -5
  770. package/build/src/database/record/instance-relationships/belongs-to.d.ts +9 -1
  771. package/build/src/database/record/instance-relationships/belongs-to.d.ts.map +1 -1
  772. package/build/src/database/record/instance-relationships/belongs-to.js +2 -2
  773. package/build/src/database/record/instance-relationships/has-many.d.ts +15 -3
  774. package/build/src/database/record/instance-relationships/has-many.d.ts.map +1 -1
  775. package/build/src/database/record/instance-relationships/has-many.js +4 -4
  776. package/build/src/database/record/instance-relationships/has-one.d.ts +19 -1
  777. package/build/src/database/record/instance-relationships/has-one.d.ts.map +1 -1
  778. package/build/src/database/record/instance-relationships/has-one.js +2 -2
  779. package/build/src/database/record/record-not-found-error.d.ts +1 -0
  780. package/build/src/database/record/record-not-found-error.d.ts.map +1 -1
  781. package/build/src/database/record/record-not-found-error.js +2 -1
  782. package/build/src/database/record/relationships/base.d.ts +83 -71
  783. package/build/src/database/record/relationships/base.d.ts.map +1 -1
  784. package/build/src/database/record/relationships/base.js +21 -1
  785. package/build/src/database/record/relationships/belongs-to.d.ts +11 -1
  786. package/build/src/database/record/relationships/belongs-to.d.ts.map +1 -1
  787. package/build/src/database/record/relationships/has-many.d.ts +11 -1
  788. package/build/src/database/record/relationships/has-many.d.ts.map +1 -1
  789. package/build/src/database/record/relationships/has-one.d.ts +11 -1
  790. package/build/src/database/record/relationships/has-one.d.ts.map +1 -1
  791. package/build/src/database/record/state-machine.d.ts +20 -29
  792. package/build/src/database/record/state-machine.d.ts.map +1 -1
  793. package/build/src/database/record/state-machine.js +7 -7
  794. package/build/src/database/record/user-module.d.ts +1 -1
  795. package/build/src/database/record/user-module.d.ts.map +1 -1
  796. package/build/src/database/record/validation-messages.d.ts +19 -22
  797. package/build/src/database/record/validation-messages.d.ts.map +1 -1
  798. package/build/src/database/record/validators/base.d.ts +4 -4
  799. package/build/src/database/record/validators/base.d.ts.map +1 -1
  800. package/build/src/database/record/validators/base.js +2 -2
  801. package/build/src/database/record/validators/format.d.ts +12 -1
  802. package/build/src/database/record/validators/format.d.ts.map +1 -1
  803. package/build/src/database/record/validators/length.d.ts +14 -1
  804. package/build/src/database/record/validators/length.d.ts.map +1 -1
  805. package/build/src/database/record/validators/presence.d.ts +11 -1
  806. package/build/src/database/record/validators/presence.d.ts.map +1 -1
  807. package/build/src/database/record/validators/uniqueness.d.ts +12 -1
  808. package/build/src/database/record/validators/uniqueness.d.ts.map +1 -1
  809. package/build/src/database/record-changes.d.ts +7 -18
  810. package/build/src/database/record-changes.d.ts.map +1 -1
  811. package/build/src/database/structure-sql-loader.d.ts +2 -2
  812. package/build/src/database/structure-sql-loader.d.ts.map +1 -1
  813. package/build/src/database/structure-sql-loader.js +4 -4
  814. package/build/src/database/table-data/index.d.ts +21 -24
  815. package/build/src/database/table-data/index.d.ts.map +1 -1
  816. package/build/src/database/table-data/table-column.d.ts +74 -80
  817. package/build/src/database/table-data/table-column.d.ts.map +1 -1
  818. package/build/src/database/table-data/table-column.js +4 -4
  819. package/build/src/database/table-data/table-foreign-key.d.ts +10 -10
  820. package/build/src/database/table-data/table-foreign-key.d.ts.map +1 -1
  821. package/build/src/database/table-data/table-index.d.ts +12 -15
  822. package/build/src/database/table-data/table-index.d.ts.map +1 -1
  823. package/build/src/database/table-data/table-reference.d.ts +2 -2
  824. package/build/src/database/table-data/table-reference.d.ts.map +1 -1
  825. package/build/src/database/tenants/data-copier.d.ts +7 -7
  826. package/build/src/database/tenants/data-copier.d.ts.map +1 -1
  827. package/build/src/database/tenants/schema-cloner.d.ts +3 -3
  828. package/build/src/database/tenants/schema-cloner.d.ts.map +1 -1
  829. package/build/src/database/tenants/tenant-table-plan.d.ts +20 -14
  830. package/build/src/database/tenants/tenant-table-plan.d.ts.map +1 -1
  831. package/build/src/database/tenants/tenant-table-plan.js +17 -1
  832. package/build/src/database/use-database.d.ts.map +1 -1
  833. package/build/src/database/use-live-query.d.ts +17 -29
  834. package/build/src/database/use-live-query.d.ts.map +1 -1
  835. package/build/src/database/use-live-query.js +4 -4
  836. package/build/src/environment-handlers/base.d.ts +112 -103
  837. package/build/src/environment-handlers/base.d.ts.map +1 -1
  838. package/build/src/environment-handlers/base.js +54 -38
  839. package/build/src/environment-handlers/browser.d.ts +63 -56
  840. package/build/src/environment-handlers/browser.d.ts.map +1 -1
  841. package/build/src/environment-handlers/browser.js +2 -2
  842. package/build/src/environment-handlers/node/attachment-path-source.d.ts +9 -9
  843. package/build/src/environment-handlers/node/attachment-path-source.d.ts.map +1 -1
  844. package/build/src/environment-handlers/node/cli/commands/background-jobs-main.d.ts +1 -1
  845. package/build/src/environment-handlers/node/cli/commands/background-jobs-main.d.ts.map +1 -1
  846. package/build/src/environment-handlers/node/cli/commands/background-jobs-runner.d.ts +1 -1
  847. package/build/src/environment-handlers/node/cli/commands/background-jobs-runner.d.ts.map +1 -1
  848. package/build/src/environment-handlers/node/cli/commands/background-jobs-worker.d.ts +1 -1
  849. package/build/src/environment-handlers/node/cli/commands/background-jobs-worker.d.ts.map +1 -1
  850. package/build/src/environment-handlers/node/cli/commands/beacon.d.ts +1 -1
  851. package/build/src/environment-handlers/node/cli/commands/beacon.d.ts.map +1 -1
  852. package/build/src/environment-handlers/node/cli/commands/cli-command-context.d.ts +7 -10
  853. package/build/src/environment-handlers/node/cli/commands/cli-command-context.d.ts.map +1 -1
  854. package/build/src/environment-handlers/node/cli/commands/console.d.ts +9 -7
  855. package/build/src/environment-handlers/node/cli/commands/console.d.ts.map +1 -1
  856. package/build/src/environment-handlers/node/cli/commands/console.js +5 -5
  857. package/build/src/environment-handlers/node/cli/commands/db/schema/dump.d.ts +1 -1
  858. package/build/src/environment-handlers/node/cli/commands/db/schema/dump.d.ts.map +1 -1
  859. package/build/src/environment-handlers/node/cli/commands/db/schema/load.d.ts +1 -1
  860. package/build/src/environment-handlers/node/cli/commands/db/schema/load.d.ts.map +1 -1
  861. package/build/src/environment-handlers/node/cli/commands/db/seed.d.ts +7 -5
  862. package/build/src/environment-handlers/node/cli/commands/db/seed.d.ts.map +1 -1
  863. package/build/src/environment-handlers/node/cli/commands/db/seed.js +3 -3
  864. package/build/src/environment-handlers/node/cli/commands/destroy/migration.d.ts +4 -7
  865. package/build/src/environment-handlers/node/cli/commands/destroy/migration.d.ts.map +1 -1
  866. package/build/src/environment-handlers/node/cli/commands/generate/base-models.d.ts +1 -1
  867. package/build/src/environment-handlers/node/cli/commands/generate/base-models.d.ts.map +1 -1
  868. package/build/src/environment-handlers/node/cli/commands/generate/base-models.js +2 -2
  869. package/build/src/environment-handlers/node/cli/commands/generate/frontend-models.d.ts +93 -108
  870. package/build/src/environment-handlers/node/cli/commands/generate/frontend-models.d.ts.map +1 -1
  871. package/build/src/environment-handlers/node/cli/commands/generate/generated-file-banner.d.ts.map +1 -1
  872. package/build/src/environment-handlers/node/cli/commands/generate/migration.d.ts +9 -12
  873. package/build/src/environment-handlers/node/cli/commands/generate/migration.d.ts.map +1 -1
  874. package/build/src/environment-handlers/node/cli/commands/generate/model.d.ts +8 -11
  875. package/build/src/environment-handlers/node/cli/commands/generate/model.d.ts.map +1 -1
  876. package/build/src/environment-handlers/node/cli/commands/init.d.ts +7 -9
  877. package/build/src/environment-handlers/node/cli/commands/init.d.ts.map +1 -1
  878. package/build/src/environment-handlers/node/cli/commands/lint/relationships.d.ts +7 -7
  879. package/build/src/environment-handlers/node/cli/commands/lint/relationships.d.ts.map +1 -1
  880. package/build/src/environment-handlers/node/cli/commands/routes.d.ts +1 -1
  881. package/build/src/environment-handlers/node/cli/commands/routes.d.ts.map +1 -1
  882. package/build/src/environment-handlers/node/cli/commands/run-script.d.ts +7 -5
  883. package/build/src/environment-handlers/node/cli/commands/run-script.d.ts.map +1 -1
  884. package/build/src/environment-handlers/node/cli/commands/run-script.js +3 -3
  885. package/build/src/environment-handlers/node/cli/commands/runner.d.ts +9 -7
  886. package/build/src/environment-handlers/node/cli/commands/runner.d.ts.map +1 -1
  887. package/build/src/environment-handlers/node/cli/commands/runner.js +3 -3
  888. package/build/src/environment-handlers/node/cli/commands/server.d.ts +24 -30
  889. package/build/src/environment-handlers/node/cli/commands/server.d.ts.map +1 -1
  890. package/build/src/environment-handlers/node/cli/commands/server.js +2 -2
  891. package/build/src/environment-handlers/node/cli/commands/test.d.ts +5 -5
  892. package/build/src/environment-handlers/node/cli/commands/test.d.ts.map +1 -1
  893. package/build/src/environment-handlers/node/source-peer-package.d.ts +5 -7
  894. package/build/src/environment-handlers/node/source-peer-package.d.ts.map +1 -1
  895. package/build/src/environment-handlers/node/source-peer-package.js +1 -1
  896. package/build/src/environment-handlers/node.d.ts +362 -13
  897. package/build/src/environment-handlers/node.d.ts.map +1 -1
  898. package/build/src/environment-handlers/node.js +37 -37
  899. package/build/src/error-logger.d.ts +3 -3
  900. package/build/src/error-logger.d.ts.map +1 -1
  901. package/build/src/error-logger.js +3 -3
  902. package/build/src/error-reporting/request-details.d.ts +1 -1
  903. package/build/src/error-reporting/request-details.d.ts.map +1 -1
  904. package/build/src/error-reporting/request-details.js +33 -33
  905. package/build/src/frontend-model-controller.d.ts +216 -230
  906. package/build/src/frontend-model-controller.d.ts.map +1 -1
  907. package/build/src/frontend-model-controller.js +217 -211
  908. package/build/src/frontend-model-resource/base-resource.d.ts +315 -365
  909. package/build/src/frontend-model-resource/base-resource.d.ts.map +1 -1
  910. package/build/src/frontend-model-resource/base-resource.js +45 -45
  911. package/build/src/frontend-model-resource/velocious-attachment-resource.d.ts +11 -5
  912. package/build/src/frontend-model-resource/velocious-attachment-resource.d.ts.map +1 -1
  913. package/build/src/frontend-model-resource/velocious-attachment-resource.js +2 -2
  914. package/build/src/frontend-models/base.d.ts +632 -726
  915. package/build/src/frontend-models/base.d.ts.map +1 -1
  916. package/build/src/frontend-models/base.js +147 -143
  917. package/build/src/frontend-models/built-in-resources.d.ts +2 -2
  918. package/build/src/frontend-models/built-in-resources.d.ts.map +1 -1
  919. package/build/src/frontend-models/clear-pending-debounced-callback.d.ts +2 -2
  920. package/build/src/frontend-models/clear-pending-debounced-callback.d.ts.map +1 -1
  921. package/build/src/frontend-models/clear-pending-debounced-callback.js +3 -3
  922. package/build/src/frontend-models/event-hook-models.d.ts +3 -6
  923. package/build/src/frontend-models/event-hook-models.d.ts.map +1 -1
  924. package/build/src/frontend-models/model-registry.d.ts +5 -5
  925. package/build/src/frontend-models/model-registry.d.ts.map +1 -1
  926. package/build/src/frontend-models/model-registry.js +5 -5
  927. package/build/src/frontend-models/outgoing-event-buffer.d.ts +20 -17
  928. package/build/src/frontend-models/outgoing-event-buffer.d.ts.map +1 -1
  929. package/build/src/frontend-models/outgoing-event-buffer.js +2 -2
  930. package/build/src/frontend-models/preloader.d.ts.map +1 -1
  931. package/build/src/frontend-models/preloader.js +2 -2
  932. package/build/src/frontend-models/query.d.ts +286 -331
  933. package/build/src/frontend-models/query.d.ts.map +1 -1
  934. package/build/src/frontend-models/query.js +61 -61
  935. package/build/src/frontend-models/resource-config-validation.d.ts +2 -2
  936. package/build/src/frontend-models/resource-config-validation.d.ts.map +1 -1
  937. package/build/src/frontend-models/resource-definition.d.ts +30 -33
  938. package/build/src/frontend-models/resource-definition.d.ts.map +1 -1
  939. package/build/src/frontend-models/resource-definition.js +10 -10
  940. package/build/src/frontend-models/transport-deadline.d.ts.map +1 -1
  941. package/build/src/frontend-models/transport-serialization.d.ts +26 -32
  942. package/build/src/frontend-models/transport-serialization.d.ts.map +1 -1
  943. package/build/src/frontend-models/transport-serialization.js +28 -28
  944. package/build/src/frontend-models/use-created-event.d.ts +4 -4
  945. package/build/src/frontend-models/use-created-event.d.ts.map +1 -1
  946. package/build/src/frontend-models/use-destroyed-event.d.ts +8 -29
  947. package/build/src/frontend-models/use-destroyed-event.d.ts.map +1 -1
  948. package/build/src/frontend-models/use-model-class-event.d.ts +9 -33
  949. package/build/src/frontend-models/use-model-class-event.d.ts.map +1 -1
  950. package/build/src/frontend-models/use-updated-event.d.ts +8 -29
  951. package/build/src/frontend-models/use-updated-event.d.ts.map +1 -1
  952. package/build/src/frontend-models/websocket-channel.d.ts +30 -34
  953. package/build/src/frontend-models/websocket-channel.d.ts.map +1 -1
  954. package/build/src/frontend-models/websocket-channel.js +5 -5
  955. package/build/src/frontend-models/websocket-publishers.d.ts +4 -4
  956. package/build/src/frontend-models/websocket-publishers.d.ts.map +1 -1
  957. package/build/src/frontend-models/websocket-publishers.js +2 -2
  958. package/build/src/http-client/header.d.ts +2 -2
  959. package/build/src/http-client/header.d.ts.map +1 -1
  960. package/build/src/http-client/index.d.ts +23 -23
  961. package/build/src/http-client/index.d.ts.map +1 -1
  962. package/build/src/http-client/request.d.ts +9 -9
  963. package/build/src/http-client/request.d.ts.map +1 -1
  964. package/build/src/http-client/request.js +2 -2
  965. package/build/src/http-client/response.d.ts +12 -12
  966. package/build/src/http-client/response.d.ts.map +1 -1
  967. package/build/src/http-client/response.js +2 -2
  968. package/build/src/http-client/websocket-client.d.ts +20 -4
  969. package/build/src/http-client/websocket-client.d.ts.map +1 -1
  970. package/build/src/http-server/client/index.d.ts +26 -26
  971. package/build/src/http-server/client/index.d.ts.map +1 -1
  972. package/build/src/http-server/client/index.js +5 -5
  973. package/build/src/http-server/client/params-to-object.d.ts +11 -11
  974. package/build/src/http-server/client/params-to-object.d.ts.map +1 -1
  975. package/build/src/http-server/client/params-to-object.js +17 -17
  976. package/build/src/http-server/client/request-buffer/form-data-part.d.ts +9 -9
  977. package/build/src/http-server/client/request-buffer/form-data-part.d.ts.map +1 -1
  978. package/build/src/http-server/client/request-buffer/header.d.ts +3 -3
  979. package/build/src/http-server/client/request-buffer/header.d.ts.map +1 -1
  980. package/build/src/http-server/client/request-buffer/index.d.ts +28 -30
  981. package/build/src/http-server/client/request-buffer/index.d.ts.map +1 -1
  982. package/build/src/http-server/client/request-buffer/index.js +5 -3
  983. package/build/src/http-server/client/request-parser.d.ts +11 -11
  984. package/build/src/http-server/client/request-parser.d.ts.map +1 -1
  985. package/build/src/http-server/client/request-parser.js +3 -3
  986. package/build/src/http-server/client/request-runner.d.ts +11 -11
  987. package/build/src/http-server/client/request-runner.d.ts.map +1 -1
  988. package/build/src/http-server/client/request-runner.js +3 -3
  989. package/build/src/http-server/client/request-timing.d.ts +5 -11
  990. package/build/src/http-server/client/request-timing.d.ts.map +1 -1
  991. package/build/src/http-server/client/request.d.ts +10 -10
  992. package/build/src/http-server/client/request.d.ts.map +1 -1
  993. package/build/src/http-server/client/request.js +3 -3
  994. package/build/src/http-server/client/response-compression.d.ts +5 -5
  995. package/build/src/http-server/client/response-compression.d.ts.map +1 -1
  996. package/build/src/http-server/client/response.d.ts +13 -13
  997. package/build/src/http-server/client/response.d.ts.map +1 -1
  998. package/build/src/http-server/client/uploaded-file/memory-uploaded-file.d.ts +8 -2
  999. package/build/src/http-server/client/uploaded-file/memory-uploaded-file.d.ts.map +1 -1
  1000. package/build/src/http-server/client/uploaded-file/temporary-uploaded-file.d.ts +8 -2
  1001. package/build/src/http-server/client/uploaded-file/temporary-uploaded-file.d.ts.map +1 -1
  1002. package/build/src/http-server/client/uploaded-file/uploaded-file.d.ts +4 -4
  1003. package/build/src/http-server/client/uploaded-file/uploaded-file.d.ts.map +1 -1
  1004. package/build/src/http-server/client/websocket-request.d.ts +26 -26
  1005. package/build/src/http-server/client/websocket-request.d.ts.map +1 -1
  1006. package/build/src/http-server/client/websocket-request.js +7 -7
  1007. package/build/src/http-server/client/websocket-session.d.ts +105 -108
  1008. package/build/src/http-server/client/websocket-session.d.ts.map +1 -1
  1009. package/build/src/http-server/client/websocket-session.js +29 -29
  1010. package/build/src/http-server/client-delivery-queue.d.ts +30 -30
  1011. package/build/src/http-server/client-delivery-queue.d.ts.map +1 -1
  1012. package/build/src/http-server/cookie.d.ts +80 -108
  1013. package/build/src/http-server/cookie.d.ts.map +1 -1
  1014. package/build/src/http-server/cookie.js +3 -3
  1015. package/build/src/http-server/development-reloader.d.ts +24 -24
  1016. package/build/src/http-server/development-reloader.d.ts.map +1 -1
  1017. package/build/src/http-server/development-reloader.js +2 -2
  1018. package/build/src/http-server/index.d.ts +66 -72
  1019. package/build/src/http-server/index.d.ts.map +1 -1
  1020. package/build/src/http-server/index.js +6 -6
  1021. package/build/src/http-server/remote-address.d.ts.map +1 -1
  1022. package/build/src/http-server/remote-address.js +2 -2
  1023. package/build/src/http-server/server-client.d.ts +9 -9
  1024. package/build/src/http-server/server-client.d.ts.map +1 -1
  1025. package/build/src/http-server/server-lock.d.ts +11 -11
  1026. package/build/src/http-server/server-lock.d.ts.map +1 -1
  1027. package/build/src/http-server/server-lock.js +5 -5
  1028. package/build/src/http-server/websocket-channel-subscribers.d.ts +11 -10
  1029. package/build/src/http-server/websocket-channel-subscribers.d.ts.map +1 -1
  1030. package/build/src/http-server/websocket-channel-subscribers.js +6 -6
  1031. package/build/src/http-server/websocket-channel.d.ts +8 -14
  1032. package/build/src/http-server/websocket-channel.d.ts.map +1 -1
  1033. package/build/src/http-server/websocket-channel.js +2 -2
  1034. package/build/src/http-server/websocket-connection.d.ts +10 -10
  1035. package/build/src/http-server/websocket-connection.d.ts.map +1 -1
  1036. package/build/src/http-server/websocket-connection.js +4 -4
  1037. package/build/src/http-server/websocket-event-log-store.d.ts +58 -64
  1038. package/build/src/http-server/websocket-event-log-store.d.ts.map +1 -1
  1039. package/build/src/http-server/websocket-event-log-store.js +10 -10
  1040. package/build/src/http-server/websocket-events-host.d.ts +17 -16
  1041. package/build/src/http-server/websocket-events-host.d.ts.map +1 -1
  1042. package/build/src/http-server/websocket-events-host.js +8 -8
  1043. package/build/src/http-server/websocket-events.d.ts +9 -9
  1044. package/build/src/http-server/websocket-events.d.ts.map +1 -1
  1045. package/build/src/http-server/websocket-events.js +5 -5
  1046. package/build/src/http-server/worker-handler/channel-subscriber-dispatch.d.ts +2 -2
  1047. package/build/src/http-server/worker-handler/channel-subscriber-dispatch.d.ts.map +1 -1
  1048. package/build/src/http-server/worker-handler/channel-subscriber-dispatch.js +2 -2
  1049. package/build/src/http-server/worker-handler/in-process.d.ts +22 -22
  1050. package/build/src/http-server/worker-handler/in-process.d.ts.map +1 -1
  1051. package/build/src/http-server/worker-handler/in-process.js +6 -6
  1052. package/build/src/http-server/worker-handler/index.d.ts +50 -50
  1053. package/build/src/http-server/worker-handler/index.d.ts.map +1 -1
  1054. package/build/src/http-server/worker-handler/index.js +11 -11
  1055. package/build/src/http-server/worker-handler/worker-thread.d.ts +61 -61
  1056. package/build/src/http-server/worker-handler/worker-thread.d.ts.map +1 -1
  1057. package/build/src/http-server/worker-handler/worker-thread.js +9 -9
  1058. package/build/src/initializer.d.ts +2 -2
  1059. package/build/src/initializer.d.ts.map +1 -1
  1060. package/build/src/jobs/mail-delivery.d.ts +7 -2
  1061. package/build/src/jobs/mail-delivery.d.ts.map +1 -1
  1062. package/build/src/jobs/prune-terminal-background-jobs.d.ts +15 -2
  1063. package/build/src/jobs/prune-terminal-background-jobs.d.ts.map +1 -1
  1064. package/build/src/jobs/prune-terminal-background-jobs.js +1 -1
  1065. package/build/src/logger/base-logger.d.ts.map +1 -1
  1066. package/build/src/logger/base-logger.js +2 -2
  1067. package/build/src/logger/console-logger.d.ts +3 -3
  1068. package/build/src/logger/console-logger.d.ts.map +1 -1
  1069. package/build/src/logger/file-logger.d.ts +4 -4
  1070. package/build/src/logger/file-logger.d.ts.map +1 -1
  1071. package/build/src/logger/outputs/array-output.d.ts +9 -12
  1072. package/build/src/logger/outputs/array-output.d.ts.map +1 -1
  1073. package/build/src/logger/outputs/console-output.d.ts +1 -4
  1074. package/build/src/logger/outputs/console-output.d.ts.map +1 -1
  1075. package/build/src/logger/outputs/file-output.d.ts +13 -16
  1076. package/build/src/logger/outputs/file-output.d.ts.map +1 -1
  1077. package/build/src/logger/outputs/stdout-output.d.ts +1 -4
  1078. package/build/src/logger/outputs/stdout-output.d.ts.map +1 -1
  1079. package/build/src/logger.d.ts +30 -29
  1080. package/build/src/logger.d.ts.map +1 -1
  1081. package/build/src/logger.js +13 -13
  1082. package/build/src/mailer/backends/smtp.d.ts +8 -11
  1083. package/build/src/mailer/backends/smtp.d.ts.map +1 -1
  1084. package/build/src/mailer/backends/smtp.js +4 -4
  1085. package/build/src/mailer/base.d.ts +61 -61
  1086. package/build/src/mailer/base.d.ts.map +1 -1
  1087. package/build/src/mailer/base.js +15 -15
  1088. package/build/src/mailer/delivery.d.ts +16 -16
  1089. package/build/src/mailer/delivery.d.ts.map +1 -1
  1090. package/build/src/mailer/delivery.js +4 -4
  1091. package/build/src/mailer/index.d.ts +8 -13
  1092. package/build/src/mailer/index.d.ts.map +1 -1
  1093. package/build/src/mailer/index.js +2 -2
  1094. package/build/src/mailer.d.ts +9 -7
  1095. package/build/src/mailer.d.ts.map +1 -1
  1096. package/build/src/mailer.js +2 -2
  1097. package/build/src/packages/velocious-package.d.ts +5 -5
  1098. package/build/src/packages/velocious-package.d.ts.map +1 -1
  1099. package/build/src/plugins/sqljs-wasm-route-controller.d.ts +1 -1
  1100. package/build/src/plugins/sqljs-wasm-route-controller.d.ts.map +1 -1
  1101. package/build/src/plugins/sqljs-wasm-route-controller.js +2 -2
  1102. package/build/src/plugins/sqljs-wasm-route.d.ts +14 -20
  1103. package/build/src/plugins/sqljs-wasm-route.d.ts.map +1 -1
  1104. package/build/src/plugins/sqljs-wasm-route.js +1 -1
  1105. package/build/src/record-payload-values.d.ts +14 -14
  1106. package/build/src/record-payload-values.d.ts.map +1 -1
  1107. package/build/src/record-payload-values.js +4 -4
  1108. package/build/src/routes/app-routes.d.ts.map +1 -1
  1109. package/build/src/routes/base-route.d.ts +11 -10
  1110. package/build/src/routes/base-route.d.ts.map +1 -1
  1111. package/build/src/routes/base-route.js +6 -6
  1112. package/build/src/routes/basic-route.d.ts +36 -3
  1113. package/build/src/routes/basic-route.d.ts.map +1 -1
  1114. package/build/src/routes/basic-route.js +5 -5
  1115. package/build/src/routes/built-in/api-manifest/controller.d.ts +1 -1
  1116. package/build/src/routes/built-in/api-manifest/controller.d.ts.map +1 -1
  1117. package/build/src/routes/built-in/debug/controller.d.ts +1 -1
  1118. package/build/src/routes/built-in/debug/controller.d.ts.map +1 -1
  1119. package/build/src/routes/built-in/errors/controller.d.ts +1 -1
  1120. package/build/src/routes/built-in/errors/controller.d.ts.map +1 -1
  1121. package/build/src/routes/get-route.d.ts +19 -4
  1122. package/build/src/routes/get-route.d.ts.map +1 -1
  1123. package/build/src/routes/get-route.js +3 -3
  1124. package/build/src/routes/hooks/frontend-model-command-route-hook.d.ts +1 -1
  1125. package/build/src/routes/hooks/frontend-model-command-route-hook.d.ts.map +1 -1
  1126. package/build/src/routes/hooks/frontend-model-command-route-hook.js +2 -2
  1127. package/build/src/routes/index.d.ts +5 -5
  1128. package/build/src/routes/index.d.ts.map +1 -1
  1129. package/build/src/routes/index.js +4 -4
  1130. package/build/src/routes/namespace-route.d.ts +19 -4
  1131. package/build/src/routes/namespace-route.d.ts.map +1 -1
  1132. package/build/src/routes/namespace-route.js +2 -2
  1133. package/build/src/routes/plugin-routes.d.ts +16 -19
  1134. package/build/src/routes/plugin-routes.d.ts.map +1 -1
  1135. package/build/src/routes/plugin-routes.js +2 -2
  1136. package/build/src/routes/post-route.d.ts +19 -4
  1137. package/build/src/routes/post-route.d.ts.map +1 -1
  1138. package/build/src/routes/post-route.js +3 -3
  1139. package/build/src/routes/resolver.d.ts +16 -16
  1140. package/build/src/routes/resolver.d.ts.map +1 -1
  1141. package/build/src/routes/resolver.js +6 -6
  1142. package/build/src/routes/resource-route.d.ts +23 -8
  1143. package/build/src/routes/resource-route.d.ts.map +1 -1
  1144. package/build/src/routes/resource-route.js +2 -2
  1145. package/build/src/routes/root-route.d.ts +1 -1
  1146. package/build/src/routes/root-route.d.ts.map +1 -1
  1147. package/build/src/sync/conflict-strategy.d.ts +50 -35
  1148. package/build/src/sync/conflict-strategy.d.ts.map +1 -1
  1149. package/build/src/sync/conflict-strategy.js +2 -2
  1150. package/build/src/sync/device-identity.d.ts +109 -79
  1151. package/build/src/sync/device-identity.d.ts.map +1 -1
  1152. package/build/src/sync/local-mutation-log.d.ts +115 -92
  1153. package/build/src/sync/local-mutation-log.d.ts.map +1 -1
  1154. package/build/src/sync/offline-grant.d.ts +80 -63
  1155. package/build/src/sync/offline-grant.d.ts.map +1 -1
  1156. package/build/src/sync/peer-mutation-bundle.d.ts +33 -39
  1157. package/build/src/sync/peer-mutation-bundle.d.ts.map +1 -1
  1158. package/build/src/sync/query-scope.d.ts +3 -3
  1159. package/build/src/sync/query-scope.d.ts.map +1 -1
  1160. package/build/src/sync/query-scope.js +8 -8
  1161. package/build/src/sync/server-change-feed.d.ts +129 -129
  1162. package/build/src/sync/server-change-feed.d.ts.map +1 -1
  1163. package/build/src/sync/server-change-feed.js +14 -14
  1164. package/build/src/sync/server-sequence-allocator.d.ts +36 -36
  1165. package/build/src/sync/server-sequence-allocator.d.ts.map +1 -1
  1166. package/build/src/sync/server-sequence-allocator.js +6 -6
  1167. package/build/src/sync/signed-sync-envelope-replay-service.d.ts +60 -48
  1168. package/build/src/sync/signed-sync-envelope-replay-service.d.ts.map +1 -1
  1169. package/build/src/sync/signed-sync-envelope-replay-service.js +21 -21
  1170. package/build/src/sync/stable-json.d.ts +2 -2
  1171. package/build/src/sync/stable-json.d.ts.map +1 -1
  1172. package/build/src/sync/stable-json.js +5 -5
  1173. package/build/src/sync/sync-api-client-types.d.ts +98 -25
  1174. package/build/src/sync/sync-api-client-types.d.ts.map +1 -1
  1175. package/build/src/sync/sync-api-client-types.js +73 -1
  1176. package/build/src/sync/sync-api-client.d.ts +71 -71
  1177. package/build/src/sync/sync-api-client.d.ts.map +1 -1
  1178. package/build/src/sync/sync-api-client.js +30 -30
  1179. package/build/src/sync/sync-api-controller.d.ts +23 -23
  1180. package/build/src/sync/sync-api-controller.d.ts.map +1 -1
  1181. package/build/src/sync/sync-change-fanout.d.ts +32 -38
  1182. package/build/src/sync/sync-change-fanout.d.ts.map +1 -1
  1183. package/build/src/sync/sync-change-fanout.js +7 -7
  1184. package/build/src/sync/sync-channel-name.d.ts +1 -1
  1185. package/build/src/sync/sync-channel-name.d.ts.map +1 -1
  1186. package/build/src/sync/sync-client-registry.d.ts +4 -4
  1187. package/build/src/sync/sync-client-registry.d.ts.map +1 -1
  1188. package/build/src/sync/sync-client-registry.js +4 -4
  1189. package/build/src/sync/sync-client-types.d.ts +130 -82
  1190. package/build/src/sync/sync-client-types.d.ts.map +1 -1
  1191. package/build/src/sync/sync-client-types.js +89 -1
  1192. package/build/src/sync/sync-client.d.ts +76 -76
  1193. package/build/src/sync/sync-client.d.ts.map +1 -1
  1194. package/build/src/sync/sync-client.js +19 -19
  1195. package/build/src/sync/sync-envelope-replay-service.d.ts +266 -298
  1196. package/build/src/sync/sync-envelope-replay-service.d.ts.map +1 -1
  1197. package/build/src/sync/sync-envelope-replay-service.js +77 -77
  1198. package/build/src/sync/sync-model-change-feed-service.d.ts +23 -23
  1199. package/build/src/sync/sync-model-change-feed-service.d.ts.map +1 -1
  1200. package/build/src/sync/sync-model-change-feed-service.js +8 -8
  1201. package/build/src/sync/sync-publish-suppression.d.ts +5 -5
  1202. package/build/src/sync/sync-publish-suppression.d.ts.map +1 -1
  1203. package/build/src/sync/sync-publish-suppression.js +3 -3
  1204. package/build/src/sync/sync-publisher-types.d.ts +98 -55
  1205. package/build/src/sync/sync-publisher-types.d.ts.map +1 -1
  1206. package/build/src/sync/sync-publisher-types.js +75 -1
  1207. package/build/src/sync/sync-publisher.d.ts +43 -43
  1208. package/build/src/sync/sync-publisher.d.ts.map +1 -1
  1209. package/build/src/sync/sync-publisher.js +20 -20
  1210. package/build/src/sync/sync-realtime-bridge.d.ts +23 -23
  1211. package/build/src/sync/sync-realtime-bridge.d.ts.map +1 -1
  1212. package/build/src/sync/sync-realtime-bridge.js +9 -9
  1213. package/build/src/sync/sync-replay-upsert-applier.d.ts +70 -70
  1214. package/build/src/sync/sync-replay-upsert-applier.d.ts.map +1 -1
  1215. package/build/src/sync/sync-replay-upsert-applier.js +17 -17
  1216. package/build/src/sync/sync-resource-base.d.ts +52 -51
  1217. package/build/src/sync/sync-resource-base.d.ts.map +1 -1
  1218. package/build/src/sync/sync-resource-base.js +15 -15
  1219. package/build/src/sync/sync-scope-attributes.d.ts +2 -2
  1220. package/build/src/sync/sync-scope-attributes.d.ts.map +1 -1
  1221. package/build/src/sync/sync-scope-attributes.js +2 -2
  1222. package/build/src/sync/sync-scope-store.d.ts +36 -36
  1223. package/build/src/sync/sync-scope-store.d.ts.map +1 -1
  1224. package/build/src/sync/sync-scope-store.js +6 -6
  1225. package/build/src/sync/sync-websocket-channel.d.ts +11 -6
  1226. package/build/src/sync/sync-websocket-channel.d.ts.map +1 -1
  1227. package/build/src/sync/sync-websocket-channel.js +6 -6
  1228. package/build/src/tenants/default-tenant-database-provisioning.d.ts +4 -4
  1229. package/build/src/tenants/default-tenant-database-provisioning.d.ts.map +1 -1
  1230. package/build/src/tenants/default-tenant-database-provisioning.js +2 -2
  1231. package/build/src/tenants/tenant-aggregator.d.ts +81 -81
  1232. package/build/src/tenants/tenant-aggregator.d.ts.map +1 -1
  1233. package/build/src/tenants/tenant-aggregator.js +13 -13
  1234. package/build/src/tenants/tenant-handle.d.ts +64 -0
  1235. package/build/src/tenants/tenant-handle.d.ts.map +1 -0
  1236. package/build/src/tenants/tenant-handle.js +221 -0
  1237. package/build/src/tenants/tenant-iterator.d.ts +17 -17
  1238. package/build/src/tenants/tenant-iterator.d.ts.map +1 -1
  1239. package/build/src/tenants/tenant-iterator.js +7 -7
  1240. package/build/src/tenants/tenant-model-scope.d.ts +73 -0
  1241. package/build/src/tenants/tenant-model-scope.d.ts.map +1 -0
  1242. package/build/src/tenants/tenant-model-scope.js +115 -0
  1243. package/build/src/tenants/tenant.d.ts +16 -6
  1244. package/build/src/tenants/tenant.d.ts.map +1 -1
  1245. package/build/src/tenants/tenant.js +15 -3
  1246. package/build/src/testing/base-expect.d.ts.map +1 -1
  1247. package/build/src/testing/browser-frontend-model-event-hook-scenarios.d.ts +19 -31
  1248. package/build/src/testing/browser-frontend-model-event-hook-scenarios.d.ts.map +1 -1
  1249. package/build/src/testing/browser-test-app.js +6 -6
  1250. package/build/src/testing/expect-to-change.d.ts +9 -7
  1251. package/build/src/testing/expect-to-change.d.ts.map +1 -1
  1252. package/build/src/testing/expect-to-change.js +2 -2
  1253. package/build/src/testing/expect-utils.d.ts +30 -29
  1254. package/build/src/testing/expect-utils.d.ts.map +1 -1
  1255. package/build/src/testing/expect-utils.js +30 -30
  1256. package/build/src/testing/expect.d.ts +30 -30
  1257. package/build/src/testing/expect.d.ts.map +1 -1
  1258. package/build/src/testing/expect.js +19 -19
  1259. package/build/src/testing/factory/association-declaration.d.ts +16 -16
  1260. package/build/src/testing/factory/association-declaration.d.ts.map +1 -1
  1261. package/build/src/testing/factory/association-declaration.js +3 -3
  1262. package/build/src/testing/factory/declarations.d.ts +90 -115
  1263. package/build/src/testing/factory/declarations.d.ts.map +1 -1
  1264. package/build/src/testing/factory/declarations.js +6 -6
  1265. package/build/src/testing/factory/definition-builder.d.ts +72 -70
  1266. package/build/src/testing/factory/definition-builder.d.ts.map +1 -1
  1267. package/build/src/testing/factory/definition-builder.js +40 -40
  1268. package/build/src/testing/factory/errors.d.ts +30 -29
  1269. package/build/src/testing/factory/errors.d.ts.map +1 -1
  1270. package/build/src/testing/factory/evaluation-context.d.ts +29 -29
  1271. package/build/src/testing/factory/evaluation-context.d.ts.map +1 -1
  1272. package/build/src/testing/factory/evaluation-context.js +17 -17
  1273. package/build/src/testing/factory/events.d.ts +4 -5
  1274. package/build/src/testing/factory/events.d.ts.map +1 -1
  1275. package/build/src/testing/factory/factory-definition.d.ts +14 -14
  1276. package/build/src/testing/factory/factory-definition.d.ts.map +1 -1
  1277. package/build/src/testing/factory/factory-definition.js +3 -3
  1278. package/build/src/testing/factory/factory-registry.d.ts +56 -54
  1279. package/build/src/testing/factory/factory-registry.d.ts.map +1 -1
  1280. package/build/src/testing/factory/factory-registry.js +35 -35
  1281. package/build/src/testing/factory/factory-runner.d.ts +67 -73
  1282. package/build/src/testing/factory/factory-runner.d.ts.map +1 -1
  1283. package/build/src/testing/factory/factory-runner.js +9 -9
  1284. package/build/src/testing/factory/index.d.ts +7 -7
  1285. package/build/src/testing/factory/index.d.ts.map +1 -1
  1286. package/build/src/testing/factory/linter.d.ts +7 -7
  1287. package/build/src/testing/factory/linter.d.ts.map +1 -1
  1288. package/build/src/testing/factory/linter.js +3 -3
  1289. package/build/src/testing/factory/model-contract.d.ts +3 -3
  1290. package/build/src/testing/factory/model-contract.d.ts.map +1 -1
  1291. package/build/src/testing/factory/model-contract.js +4 -4
  1292. package/build/src/testing/factory/node/load-definitions.d.ts +2 -2
  1293. package/build/src/testing/factory/node/load-definitions.d.ts.map +1 -1
  1294. package/build/src/testing/factory/sequence.d.ts +19 -23
  1295. package/build/src/testing/factory/sequence.d.ts.map +1 -1
  1296. package/build/src/testing/factory/sequence.js +3 -3
  1297. package/build/src/testing/factory/strategies/attributes-for.d.ts +3 -3
  1298. package/build/src/testing/factory/strategies/attributes-for.d.ts.map +1 -1
  1299. package/build/src/testing/factory/strategies/attributes-for.js +2 -2
  1300. package/build/src/testing/factory/strategies/base.d.ts +32 -32
  1301. package/build/src/testing/factory/strategies/base.d.ts.map +1 -1
  1302. package/build/src/testing/factory/strategies/base.js +25 -25
  1303. package/build/src/testing/factory/strategies/build.d.ts +3 -3
  1304. package/build/src/testing/factory/strategies/build.d.ts.map +1 -1
  1305. package/build/src/testing/factory/strategies/build.js +3 -3
  1306. package/build/src/testing/factory/strategies/create.d.ts +6 -6
  1307. package/build/src/testing/factory/strategies/create.d.ts.map +1 -1
  1308. package/build/src/testing/factory/strategies/create.js +5 -5
  1309. package/build/src/testing/factory/trait-definition.d.ts +4 -4
  1310. package/build/src/testing/factory/trait-definition.d.ts.map +1 -1
  1311. package/build/src/testing/request-client.d.ts +19 -19
  1312. package/build/src/testing/request-client.d.ts.map +1 -1
  1313. package/build/src/testing/test-files-finder.d.ts +15 -15
  1314. package/build/src/testing/test-files-finder.d.ts.map +1 -1
  1315. package/build/src/testing/test-files-finder.js +2 -2
  1316. package/build/src/testing/test-filter-parser.d.ts +19 -12
  1317. package/build/src/testing/test-filter-parser.d.ts.map +1 -1
  1318. package/build/src/testing/test-runner.d.ts +204 -251
  1319. package/build/src/testing/test-runner.d.ts.map +1 -1
  1320. package/build/src/testing/test-runner.js +15 -15
  1321. package/build/src/testing/test-suite-splitter.d.ts +25 -31
  1322. package/build/src/testing/test-suite-splitter.d.ts.map +1 -1
  1323. package/build/src/testing/test.d.ts +51 -55
  1324. package/build/src/testing/test.d.ts.map +1 -1
  1325. package/build/src/testing/test.js +20 -18
  1326. package/build/src/testing/wait-for-event.d.ts +25 -25
  1327. package/build/src/testing/wait-for-event.d.ts.map +1 -1
  1328. package/build/src/testing/wait-for-event.js +6 -6
  1329. package/build/src/time-zone.d.ts +3 -3
  1330. package/build/src/time-zone.d.ts.map +1 -1
  1331. package/build/src/utils/backtrace-cleaner-node.d.ts +35 -2
  1332. package/build/src/utils/backtrace-cleaner-node.d.ts.map +1 -1
  1333. package/build/src/utils/backtrace-cleaner-node.js +1 -1
  1334. package/build/src/utils/backtrace-cleaner.d.ts +33 -28
  1335. package/build/src/utils/backtrace-cleaner.d.ts.map +1 -1
  1336. package/build/src/utils/bearer-token.d.ts +2 -2
  1337. package/build/src/utils/bearer-token.d.ts.map +1 -1
  1338. package/build/src/utils/deburr-column-name.d.ts.map +1 -1
  1339. package/build/src/utils/event-emitter.d.ts +1 -1
  1340. package/build/src/utils/event-emitter.d.ts.map +1 -1
  1341. package/build/src/utils/event-emitter.js +2 -2
  1342. package/build/src/utils/file-exists.d.ts.map +1 -1
  1343. package/build/src/utils/format-value.d.ts +9 -8
  1344. package/build/src/utils/format-value.d.ts.map +1 -1
  1345. package/build/src/utils/format-value.js +7 -7
  1346. package/build/src/utils/is-date.d.ts +2 -2
  1347. package/build/src/utils/is-date.d.ts.map +1 -1
  1348. package/build/src/utils/is-date.js +2 -2
  1349. package/build/src/utils/model-scope.d.ts +29 -24
  1350. package/build/src/utils/model-scope.d.ts.map +1 -1
  1351. package/build/src/utils/model-scope.js +11 -11
  1352. package/build/src/utils/mount-prefix.d.ts +2 -2
  1353. package/build/src/utils/mount-prefix.d.ts.map +1 -1
  1354. package/build/src/utils/nest-callbacks.d.ts.map +1 -1
  1355. package/build/src/utils/plain-object.d.ts +3 -3
  1356. package/build/src/utils/plain-object.d.ts.map +1 -1
  1357. package/build/src/utils/plain-object.js +3 -3
  1358. package/build/src/utils/ransack.d.ts +69 -90
  1359. package/build/src/utils/ransack.d.ts.map +1 -1
  1360. package/build/src/utils/ransack.js +36 -36
  1361. package/build/src/utils/rest-args-error.d.ts.map +1 -1
  1362. package/build/src/utils/sha256-hex.d.ts.map +1 -1
  1363. package/build/src/utils/shutdown-lifecycle.d.ts +1 -1
  1364. package/build/src/utils/shutdown-lifecycle.d.ts.map +1 -1
  1365. package/build/src/utils/singularize-model-name.d.ts.map +1 -1
  1366. package/build/src/utils/split-sql-statements.d.ts.map +1 -1
  1367. package/build/src/utils/to-import-specifier.d.ts.map +1 -1
  1368. package/build/src/utils/with-tracked-stack-async-hooks.d.ts +6 -5
  1369. package/build/src/utils/with-tracked-stack-async-hooks.d.ts.map +1 -1
  1370. package/build/src/utils/with-tracked-stack-async-hooks.js +9 -9
  1371. package/build/src/utils/with-tracked-stack.d.ts +6 -5
  1372. package/build/src/utils/with-tracked-stack.d.ts.map +1 -1
  1373. package/build/src/utils/with-tracked-stack.js +7 -7
  1374. package/build/src/velocious-error.d.ts +27 -17
  1375. package/build/src/velocious-error.d.ts.map +1 -1
  1376. package/build/src/velocious-error.js +10 -4
  1377. package/build/sync/conflict-strategy.js +1 -1
  1378. package/build/sync/query-scope.js +7 -7
  1379. package/build/sync/server-change-feed.js +13 -13
  1380. package/build/sync/server-sequence-allocator.js +5 -5
  1381. package/build/sync/signed-sync-envelope-replay-service.js +20 -20
  1382. package/build/sync/stable-json.js +4 -4
  1383. package/build/sync/sync-api-client-types.js +7 -7
  1384. package/build/sync/sync-api-client.js +26 -26
  1385. package/build/sync/sync-change-fanout.js +6 -6
  1386. package/build/sync/sync-client-registry.js +3 -3
  1387. package/build/sync/sync-client-types.js +10 -10
  1388. package/build/sync/sync-client.js +18 -18
  1389. package/build/sync/sync-envelope-replay-service.js +76 -76
  1390. package/build/sync/sync-model-change-feed-service.js +7 -7
  1391. package/build/sync/sync-publish-suppression.js +2 -2
  1392. package/build/sync/sync-publisher-types.js +11 -11
  1393. package/build/sync/sync-publisher.js +19 -19
  1394. package/build/sync/sync-realtime-bridge.js +8 -8
  1395. package/build/sync/sync-replay-upsert-applier.js +16 -16
  1396. package/build/sync/sync-resource-base.js +14 -14
  1397. package/build/sync/sync-scope-attributes.js +1 -1
  1398. package/build/sync/sync-scope-store.js +5 -5
  1399. package/build/sync/sync-websocket-channel.js +5 -5
  1400. package/build/tenants/default-tenant-database-provisioning.js +1 -1
  1401. package/build/tenants/tenant-aggregator.js +13 -13
  1402. package/build/tenants/tenant-handle.js +252 -0
  1403. package/build/tenants/tenant-iterator.js +6 -6
  1404. package/build/tenants/tenant-model-scope.js +132 -0
  1405. package/build/tenants/tenant.js +15 -2
  1406. package/build/testing/browser-test-app.js +2 -2
  1407. package/build/testing/expect-to-change.js +1 -1
  1408. package/build/testing/expect-utils.js +29 -29
  1409. package/build/testing/expect.js +18 -18
  1410. package/build/testing/factory/association-declaration.js +2 -2
  1411. package/build/testing/factory/declarations.js +5 -5
  1412. package/build/testing/factory/definition-builder.js +39 -39
  1413. package/build/testing/factory/evaluation-context.js +16 -16
  1414. package/build/testing/factory/factory-definition.js +2 -2
  1415. package/build/testing/factory/factory-registry.js +34 -34
  1416. package/build/testing/factory/factory-runner.js +8 -8
  1417. package/build/testing/factory/linter.js +2 -2
  1418. package/build/testing/factory/model-contract.js +3 -3
  1419. package/build/testing/factory/sequence.js +2 -2
  1420. package/build/testing/factory/strategies/attributes-for.js +1 -1
  1421. package/build/testing/factory/strategies/base.js +24 -24
  1422. package/build/testing/factory/strategies/build.js +2 -2
  1423. package/build/testing/factory/strategies/create.js +4 -4
  1424. package/build/testing/test-files-finder.js +1 -1
  1425. package/build/testing/test-runner.js +14 -14
  1426. package/build/testing/test.js +19 -17
  1427. package/build/testing/wait-for-event.js +5 -5
  1428. package/build/tsconfig.tsbuildinfo +1 -1
  1429. package/build/utils/event-emitter.js +1 -1
  1430. package/build/utils/format-value.js +6 -6
  1431. package/build/utils/is-date.js +1 -1
  1432. package/build/utils/model-scope.js +10 -10
  1433. package/build/utils/plain-object.js +2 -2
  1434. package/build/utils/ransack.js +35 -35
  1435. package/build/utils/with-tracked-stack-async-hooks.js +8 -8
  1436. package/build/utils/with-tracked-stack.js +6 -6
  1437. package/build/velocious-error.js +9 -3
  1438. package/package.json +3 -3
  1439. package/src/application.js +3 -3
  1440. package/src/authorization/ability.js +6 -6
  1441. package/src/authorization/base-resource.js +1 -1
  1442. package/src/background-jobs/client.js +2 -2
  1443. package/src/background-jobs/forked-runner-child.js +4 -4
  1444. package/src/background-jobs/job-runner.js +2 -2
  1445. package/src/background-jobs/job.js +6 -6
  1446. package/src/background-jobs/json-socket.js +1 -1
  1447. package/src/background-jobs/main.js +13 -13
  1448. package/src/background-jobs/normalize-error.js +2 -2
  1449. package/src/background-jobs/pooled-runner-child.js +3 -3
  1450. package/src/background-jobs/scheduler.js +1 -1
  1451. package/src/background-jobs/status-reporter.js +2 -2
  1452. package/src/background-jobs/store.js +23 -23
  1453. package/src/background-jobs/types.js +6 -6
  1454. package/src/background-jobs/web/controller.js +6 -6
  1455. package/src/background-jobs/web/counts-channel.js +1 -1
  1456. package/src/background-jobs/worker.js +8 -8
  1457. package/src/beacon/client.js +3 -3
  1458. package/src/beacon/in-process-client.js +3 -3
  1459. package/src/beacon/types.js +1 -1
  1460. package/src/cli/base-command.js +1 -1
  1461. package/src/cli/commands/console.js +1 -1
  1462. package/src/cli/commands/db/schema/dump.js +1 -1
  1463. package/src/cli/commands/db/schema/load.js +1 -1
  1464. package/src/cli/commands/db/seed.js +1 -1
  1465. package/src/cli/commands/generate/frontend-models.js +1 -1
  1466. package/src/cli/commands/lint/relationships.js +1 -1
  1467. package/src/cli/commands/run-script.js +1 -1
  1468. package/src/cli/commands/runner.js +1 -1
  1469. package/src/cli/index.js +2 -2
  1470. package/src/cli/tenant-database-command-helper.js +2 -2
  1471. package/src/configuration-types.js +48 -47
  1472. package/src/configuration.js +150 -65
  1473. package/src/controller.js +11 -8
  1474. package/src/current.js +2 -2
  1475. package/src/database/annotations-async-hooks.js +3 -3
  1476. package/src/database/annotations.js +1 -1
  1477. package/src/database/drivers/base-column.js +1 -1
  1478. package/src/database/drivers/base-foreign-key.js +1 -1
  1479. package/src/database/drivers/base-table.js +1 -1
  1480. package/src/database/drivers/base.js +18 -18
  1481. package/src/database/drivers/mssql/column.js +1 -1
  1482. package/src/database/drivers/mssql/index.js +2 -2
  1483. package/src/database/drivers/mssql/options.js +1 -1
  1484. package/src/database/drivers/mssql/structure-sql.js +1 -1
  1485. package/src/database/drivers/mssql/table.js +1 -1
  1486. package/src/database/drivers/mysql/column.js +1 -1
  1487. package/src/database/drivers/mysql/index.js +4 -4
  1488. package/src/database/drivers/mysql/options.js +1 -1
  1489. package/src/database/drivers/mysql/query.js +7 -7
  1490. package/src/database/drivers/mysql/structure-sql.js +71 -10
  1491. package/src/database/drivers/pgsql/column.js +1 -1
  1492. package/src/database/drivers/pgsql/index.js +6 -6
  1493. package/src/database/drivers/pgsql/structure-sql.js +1 -1
  1494. package/src/database/drivers/sqlite/base.js +7 -7
  1495. package/src/database/drivers/sqlite/column.js +1 -1
  1496. package/src/database/drivers/sqlite/connection-sql-js.js +1 -1
  1497. package/src/database/drivers/sqlite/foreign-key.js +1 -1
  1498. package/src/database/drivers/sqlite/index.js +1 -1
  1499. package/src/database/drivers/sqlite/index.native.js +2 -2
  1500. package/src/database/drivers/sqlite/index.web.js +2 -2
  1501. package/src/database/drivers/sqlite/query.js +2 -2
  1502. package/src/database/drivers/sqlite/query.native.js +2 -2
  1503. package/src/database/drivers/sqlite/query.web.js +2 -2
  1504. package/src/database/drivers/sqlite/table-rebuilder.js +1 -1
  1505. package/src/database/migration/index.js +2 -2
  1506. package/src/database/migrator/types.js +2 -2
  1507. package/src/database/operation.js +59 -6
  1508. package/src/database/pool/async-tracked-multi-connection.js +75 -24
  1509. package/src/database/pool/base-methods-forward.js +2 -2
  1510. package/src/database/pool/base.js +48 -17
  1511. package/src/database/pool/single-multi-use.js +501 -103
  1512. package/src/database/query/delete-base.js +1 -1
  1513. package/src/database/query/index.js +3 -3
  1514. package/src/database/query/insert-base.js +4 -4
  1515. package/src/database/query/model-class-query.js +39 -39
  1516. package/src/database/query/preloader/belongs-to.js +2 -2
  1517. package/src/database/query/preloader/ensure-model-class-initialized.js +3 -2
  1518. package/src/database/query/preloader/has-many.js +3 -3
  1519. package/src/database/query/preloader/has-one.js +1 -1
  1520. package/src/database/query/preloader.js +9 -2
  1521. package/src/database/query/query-data.js +7 -7
  1522. package/src/database/query/update-base.js +3 -3
  1523. package/src/database/query/upsert-base.js +2 -2
  1524. package/src/database/query/where-model-class-hash.js +13 -13
  1525. package/src/database/query/with-count.js +12 -12
  1526. package/src/database/query-parser/options.js +2 -2
  1527. package/src/database/query-parser/select-parser.js +1 -1
  1528. package/src/database/record/acts-as-list.js +2 -2
  1529. package/src/database/record/attachments/handle.js +6 -6
  1530. package/src/database/record/attachments/normalize-input.js +11 -11
  1531. package/src/database/record/attachments/storage-drivers/filesystem.js +1 -1
  1532. package/src/database/record/attachments/storage-drivers/native.js +5 -5
  1533. package/src/database/record/attachments/storage-drivers/s3.js +10 -10
  1534. package/src/database/record/attachments/store.js +24 -20
  1535. package/src/database/record/auditing.js +123 -29
  1536. package/src/database/record/counter-cache-magnitude.js +11 -11
  1537. package/src/database/record/index.js +227 -174
  1538. package/src/database/record/instance-relationships/base.js +4 -4
  1539. package/src/database/record/instance-relationships/belongs-to.js +1 -1
  1540. package/src/database/record/instance-relationships/has-many.js +3 -3
  1541. package/src/database/record/instance-relationships/has-one.js +1 -1
  1542. package/src/database/record/record-not-found-error.js +1 -0
  1543. package/src/database/record/relationships/base.js +22 -0
  1544. package/src/database/record/state-machine.js +6 -6
  1545. package/src/database/record/validators/base.js +1 -1
  1546. package/src/database/structure-sql-loader.js +3 -3
  1547. package/src/database/table-data/table-column.js +3 -3
  1548. package/src/database/use-live-query.js +3 -3
  1549. package/src/environment-handlers/base.js +56 -37
  1550. package/src/environment-handlers/browser.js +1 -1
  1551. package/src/environment-handlers/node/cli/commands/console.js +4 -4
  1552. package/src/environment-handlers/node/cli/commands/db/seed.js +2 -2
  1553. package/src/environment-handlers/node/cli/commands/generate/base-models.js +1 -1
  1554. package/src/environment-handlers/node/cli/commands/run-script.js +2 -2
  1555. package/src/environment-handlers/node/cli/commands/runner.js +2 -2
  1556. package/src/environment-handlers/node/cli/commands/server.js +1 -1
  1557. package/src/environment-handlers/node.js +36 -36
  1558. package/src/error-logger.js +2 -2
  1559. package/src/error-reporting/request-details.js +32 -32
  1560. package/src/frontend-model-controller.js +215 -213
  1561. package/src/frontend-model-resource/base-resource.js +44 -44
  1562. package/src/frontend-model-resource/velocious-attachment-resource.js +1 -1
  1563. package/src/frontend-models/base.js +146 -142
  1564. package/src/frontend-models/clear-pending-debounced-callback.js +2 -2
  1565. package/src/frontend-models/model-registry.js +4 -4
  1566. package/src/frontend-models/outgoing-event-buffer.js +1 -1
  1567. package/src/frontend-models/preloader.js +1 -1
  1568. package/src/frontend-models/query.js +60 -60
  1569. package/src/frontend-models/resource-definition.js +9 -9
  1570. package/src/frontend-models/transport-serialization.js +27 -27
  1571. package/src/frontend-models/websocket-channel.js +4 -4
  1572. package/src/frontend-models/websocket-publishers.js +1 -1
  1573. package/src/http-client/request.js +1 -1
  1574. package/src/http-client/response.js +1 -1
  1575. package/src/http-server/client/index.js +4 -4
  1576. package/src/http-server/client/params-to-object.js +16 -16
  1577. package/src/http-server/client/request-buffer/index.js +5 -2
  1578. package/src/http-server/client/request-parser.js +2 -2
  1579. package/src/http-server/client/request-runner.js +2 -2
  1580. package/src/http-server/client/request.js +2 -2
  1581. package/src/http-server/client/websocket-request.js +6 -6
  1582. package/src/http-server/client/websocket-session.js +28 -28
  1583. package/src/http-server/cookie.js +2 -2
  1584. package/src/http-server/development-reloader.js +1 -1
  1585. package/src/http-server/index.js +5 -5
  1586. package/src/http-server/remote-address.js +1 -1
  1587. package/src/http-server/server-lock.js +4 -4
  1588. package/src/http-server/websocket-channel-subscribers.js +4 -4
  1589. package/src/http-server/websocket-channel.js +1 -1
  1590. package/src/http-server/websocket-connection.js +3 -3
  1591. package/src/http-server/websocket-event-log-store.js +9 -9
  1592. package/src/http-server/websocket-events-host.js +7 -7
  1593. package/src/http-server/websocket-events.js +4 -4
  1594. package/src/http-server/worker-handler/channel-subscriber-dispatch.js +1 -1
  1595. package/src/http-server/worker-handler/in-process.js +5 -5
  1596. package/src/http-server/worker-handler/index.js +10 -10
  1597. package/src/http-server/worker-handler/worker-thread.js +8 -8
  1598. package/src/logger/base-logger.js +1 -1
  1599. package/src/logger.js +12 -12
  1600. package/src/mailer/backends/smtp.js +3 -3
  1601. package/src/mailer/base.js +14 -14
  1602. package/src/mailer/delivery.js +3 -3
  1603. package/src/mailer/index.js +1 -1
  1604. package/src/mailer.js +1 -1
  1605. package/src/plugins/sqljs-wasm-route-controller.js +1 -1
  1606. package/src/record-payload-values.js +3 -3
  1607. package/src/routes/base-route.js +5 -5
  1608. package/src/routes/basic-route.js +4 -4
  1609. package/src/routes/get-route.js +2 -2
  1610. package/src/routes/hooks/frontend-model-command-route-hook.js +1 -1
  1611. package/src/routes/index.js +3 -3
  1612. package/src/routes/namespace-route.js +1 -1
  1613. package/src/routes/plugin-routes.js +1 -1
  1614. package/src/routes/post-route.js +2 -2
  1615. package/src/routes/resolver.js +5 -5
  1616. package/src/routes/resource-route.js +1 -1
  1617. package/src/sync/conflict-strategy.js +1 -1
  1618. package/src/sync/query-scope.js +7 -7
  1619. package/src/sync/server-change-feed.js +13 -13
  1620. package/src/sync/server-sequence-allocator.js +5 -5
  1621. package/src/sync/signed-sync-envelope-replay-service.js +20 -20
  1622. package/src/sync/stable-json.js +4 -4
  1623. package/src/sync/sync-api-client-types.js +7 -7
  1624. package/src/sync/sync-api-client.js +26 -26
  1625. package/src/sync/sync-change-fanout.js +6 -6
  1626. package/src/sync/sync-client-registry.js +3 -3
  1627. package/src/sync/sync-client-types.js +10 -10
  1628. package/src/sync/sync-client.js +18 -18
  1629. package/src/sync/sync-envelope-replay-service.js +76 -76
  1630. package/src/sync/sync-model-change-feed-service.js +7 -7
  1631. package/src/sync/sync-publish-suppression.js +2 -2
  1632. package/src/sync/sync-publisher-types.js +11 -11
  1633. package/src/sync/sync-publisher.js +19 -19
  1634. package/src/sync/sync-realtime-bridge.js +8 -8
  1635. package/src/sync/sync-replay-upsert-applier.js +16 -16
  1636. package/src/sync/sync-resource-base.js +14 -14
  1637. package/src/sync/sync-scope-attributes.js +1 -1
  1638. package/src/sync/sync-scope-store.js +5 -5
  1639. package/src/sync/sync-websocket-channel.js +5 -5
  1640. package/src/tenants/default-tenant-database-provisioning.js +1 -1
  1641. package/src/tenants/tenant-aggregator.js +13 -13
  1642. package/src/tenants/tenant-handle.js +252 -0
  1643. package/src/tenants/tenant-iterator.js +6 -6
  1644. package/src/tenants/tenant-model-scope.js +132 -0
  1645. package/src/tenants/tenant.js +15 -2
  1646. package/src/testing/browser-test-app.js +2 -2
  1647. package/src/testing/expect-to-change.js +1 -1
  1648. package/src/testing/expect-utils.js +29 -29
  1649. package/src/testing/expect.js +18 -18
  1650. package/src/testing/factory/association-declaration.js +2 -2
  1651. package/src/testing/factory/declarations.js +5 -5
  1652. package/src/testing/factory/definition-builder.js +39 -39
  1653. package/src/testing/factory/evaluation-context.js +16 -16
  1654. package/src/testing/factory/factory-definition.js +2 -2
  1655. package/src/testing/factory/factory-registry.js +34 -34
  1656. package/src/testing/factory/factory-runner.js +8 -8
  1657. package/src/testing/factory/linter.js +2 -2
  1658. package/src/testing/factory/model-contract.js +3 -3
  1659. package/src/testing/factory/sequence.js +2 -2
  1660. package/src/testing/factory/strategies/attributes-for.js +1 -1
  1661. package/src/testing/factory/strategies/base.js +24 -24
  1662. package/src/testing/factory/strategies/build.js +2 -2
  1663. package/src/testing/factory/strategies/create.js +4 -4
  1664. package/src/testing/test-files-finder.js +1 -1
  1665. package/src/testing/test-runner.js +14 -14
  1666. package/src/testing/test.js +19 -17
  1667. package/src/testing/wait-for-event.js +5 -5
  1668. package/src/utils/event-emitter.js +1 -1
  1669. package/src/utils/format-value.js +6 -6
  1670. package/src/utils/is-date.js +1 -1
  1671. package/src/utils/model-scope.js +10 -10
  1672. package/src/utils/plain-object.js +2 -2
  1673. package/src/utils/ransack.js +35 -35
  1674. package/src/utils/with-tracked-stack-async-hooks.js +8 -8
  1675. package/src/utils/with-tracked-stack.js +6 -6
  1676. package/src/velocious-error.js +9 -3
@@ -4,7 +4,7 @@ import { isPlainObject } from "is-plain-object";
4
4
  import WhereBase from "./where-base.js";
5
5
  /**
6
6
  * No match.
7
- * @typedef {{[key: string]: string | number | boolean | null | Array<string | number | boolean | null> | Record<string, ?>}} WhereHash
7
+ * @typedef {{[key: string]: string | number | boolean | null | Array<string | number | boolean | null> | Record<string, ReturnType<typeof JSON.parse>>}} WhereHash
8
8
  */
9
9
  const NO_MATCH = Symbol("no-match");
10
10
  const relationshipWhereOperators = new Set(["eq", "notEq", "gt", "gteq", "lt", "lteq", "like", ">", ">=", "<", "<="]);
@@ -90,7 +90,7 @@ export default class VelociousDatabaseQueryWhereModelClassHash extends WhereBase
90
90
  }
91
91
  /**
92
92
  * Runs is relationship where operator tuple.
93
- * @param {?} tupleValue - Candidate tuple.
93
+ * @param {ReturnType<typeof JSON.parse>} tupleValue - Candidate tuple.
94
94
  * @returns {boolean} - Whether this is a relationship where tuple.
95
95
  */
96
96
  _isRelationshipWhereOperatorTuple(tupleValue) {
@@ -103,7 +103,7 @@ export default class VelociousDatabaseQueryWhereModelClassHash extends WhereBase
103
103
  }
104
104
  /**
105
105
  * Runs normalize relationship where operator tuples.
106
- * @param {?} value - Candidate relationship where value.
106
+ * @param {ReturnType<typeof JSON.parse>} value - Candidate relationship where value.
107
107
  * @returns {Array<[string, "eq" | "notEq" | "gt" | "gteq" | "lt" | "lteq" | "like", unknown]>} - Normalized tuples.
108
108
  */
109
109
  _normalizeRelationshipWhereOperatorTuples(value) {
@@ -116,7 +116,7 @@ export default class VelociousDatabaseQueryWhereModelClassHash extends WhereBase
116
116
  const normalized = [];
117
117
  /**
118
118
  * Add condition.
119
- * @param {?} conditionValue - Candidate nested condition.
119
+ * @param {ReturnType<typeof JSON.parse>} conditionValue - Candidate nested condition.
120
120
  */
121
121
  const addCondition = (conditionValue) => {
122
122
  if (this._isRelationshipWhereOperatorTuple(conditionValue)) {
@@ -149,7 +149,7 @@ export default class VelociousDatabaseQueryWhereModelClassHash extends WhereBase
149
149
  }
150
150
  /**
151
151
  * Runs is relationship where operator tuple container.
152
- * @param {?} value - Candidate relationship where value.
152
+ * @param {ReturnType<typeof JSON.parse>} value - Candidate relationship where value.
153
153
  * @returns {boolean} - Whether value can be normalized to relationship tuples.
154
154
  */
155
155
  _isRelationshipWhereOperatorTupleContainer(value) {
@@ -264,8 +264,8 @@ export default class VelociousDatabaseQueryWhereModelClassHash extends WhereBase
264
264
  * @param {object} args - Options object.
265
265
  * @param {typeof import("../record/index.js").default} args.modelClass - Model class.
266
266
  * @param {string} args.columnName - Column name.
267
- * @param {?} args.value - Value to normalize.
268
- * @returns {?} - Normalized value.
267
+ * @param {ReturnType<typeof JSON.parse>} args.value - Value to normalize.
268
+ * @returns {ReturnType<typeof JSON.parse>} - Normalized value.
269
269
  */
270
270
  _normalizeSqliteBooleanValue({ modelClass, columnName, value }) {
271
271
  if (modelClass.getDatabaseType() != "sqlite")
@@ -277,8 +277,8 @@ export default class VelociousDatabaseQueryWhereModelClassHash extends WhereBase
277
277
  return value;
278
278
  /**
279
279
  * Normalize.
280
- * @param {?} entry - Value to normalize.
281
- * @returns {?} - SQLite predicate value with booleans encoded as 1 or 0.
280
+ * @param {ReturnType<typeof JSON.parse>} entry - Value to normalize.
281
+ * @returns {ReturnType<typeof JSON.parse>} - SQLite predicate value with booleans encoded as 1 or 0.
282
282
  */
283
283
  const normalize = (entry) => {
284
284
  if (entry === true)
@@ -297,8 +297,8 @@ export default class VelociousDatabaseQueryWhereModelClassHash extends WhereBase
297
297
  * @param {object} args - Options object.
298
298
  * @param {typeof import("../record/index.js").default} args.modelClass - Model class.
299
299
  * @param {string} args.columnName - Column name.
300
- * @param {?} args.value - Value to normalize.
301
- * @returns {?} - Normalized value.
300
+ * @param {ReturnType<typeof JSON.parse>} args.value - Value to normalize.
301
+ * @returns {ReturnType<typeof JSON.parse>} - Normalized value.
302
302
  */
303
303
  _normalizeValueForColumnType({ modelClass, columnName, value }) {
304
304
  const columnType = modelClass.getColumnTypeByName(columnName);
@@ -312,8 +312,8 @@ export default class VelociousDatabaseQueryWhereModelClassHash extends WhereBase
312
312
  stringTypes.has(normalizedType);
313
313
  /**
314
314
  * Normalize.
315
- * @param {?} entry - Value to normalize.
316
- * @returns {?} - Column-compatible predicate value, or the no-match sentinel for numeric UUIDs.
315
+ * @param {ReturnType<typeof JSON.parse>} entry - Value to normalize.
316
+ * @returns {ReturnType<typeof JSON.parse>} - Column-compatible predicate value, or the no-match sentinel for numeric UUIDs.
317
317
  */
318
318
  const normalize = (entry) => {
319
319
  if (isUuidType && typeof entry === "number")
@@ -439,4 +439,4 @@ export default class VelociousDatabaseQueryWhereModelClassHash extends WhereBase
439
439
  return sql;
440
440
  }
441
441
  }
442
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2hlcmUtbW9kZWwtY2xhc3MtaGFzaC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kYXRhYmFzZS9xdWVyeS93aGVyZS1tb2RlbC1jbGFzcy1oYXNoLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWixPQUFPLEtBQUssVUFBVSxNQUFNLFlBQVksQ0FBQTtBQUN4QyxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0saUJBQWlCLENBQUE7QUFDN0MsT0FBTyxTQUFTLE1BQU0saUJBQWlCLENBQUE7QUFFdkM7OztHQUdHO0FBRUgsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFBO0FBQ25DLE1BQU0sMEJBQTBCLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQTtBQUVySDs7OztHQUlHO0FBQ0gsU0FBUyxrQ0FBa0MsQ0FBQyxRQUFRO0lBQ2xELE1BQU0sZUFBZSxHQUFHO1FBQ3RCLEdBQUcsRUFBRSxJQUFJO1FBQ1QsSUFBSSxFQUFFLE1BQU07UUFDWixHQUFHLEVBQUUsSUFBSTtRQUNULElBQUksRUFBRSxNQUFNO0tBQ2IsQ0FBQTtJQUVELE9BQU8sc0VBQXNFLENBQUMsQ0FDNUUsZUFBZSxFQUFDLHNDQUF1QyxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksUUFBUSxDQUMvRSxDQUFBO0FBQ0gsQ0FBQztBQUVELE1BQU0sQ0FBQyxPQUFPLE9BQU8seUNBQTBDLFNBQVEsU0FBUztJQUM5RTs7Ozs7OztPQU9HO0lBQ0gsWUFBWSxFQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLGdCQUFnQixHQUFHLEtBQUssRUFBQztRQUM3RCxLQUFLLEVBQUUsQ0FBQTtRQUNQ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O2dCQUVoQixJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztvQkFDOUIsR0FBRyxJQUFJLFFBQVEsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFBO2dCQUM5RSxDQUFDO3FCQUFNLElBQUksVUFBVSxLQUFLLElBQUksRUFBRSxDQUFDO29CQUMvQixHQUFHLElBQUksVUFBVSxDQUFBO2dCQUNuQixDQUFDO3FCQUFNLENBQUM7b0JBQ04sR0FBRyxJQUFJLE1BQU0sT0FBTyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFBO2dCQUMxQyxDQUFDO1lBQ0gsQ0FBQztZQUVELEtBQUssRUFBRSxDQUFBO1FBQ1QsQ0FBQztRQUVELE9BQU8sR0FBRyxDQUFBO0lBQ1osQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbmltcG9ydCAqIGFzIGluZmxlY3Rpb24gZnJvbSBcImluZmxlY3Rpb25cIlxuaW1wb3J0IHtpc1BsYWluT2JqZWN0fSBmcm9tIFwiaXMtcGxhaW4tb2JqZWN0XCJcbmltcG9ydCBXaGVyZUJhc2UgZnJvbSBcIi4vd2hlcmUtYmFzZS5qc1wiXG5cbi8qKlxuICogTm8gbWF0Y2guXG4gKiBAdHlwZWRlZiB7e1trZXk6IHN0cmluZ106IHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCBudWxsIHwgQXJyYXk8c3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IG51bGw+IHwgUmVjb3JkPHN0cmluZywgPz59fSBXaGVyZUhhc2hcbiAqL1xuXG5jb25zdCBOT19NQVRDSCA9IFN5bWJvbChcIm5vLW1hdGNoXCIpXG5jb25zdCByZWxhdGlvbnNoaXBXaGVyZU9wZXJhdG9ycyA9IG5ldyBTZXQoW1wiZXFcIiwgXCJub3RFcVwiLCBcImd0XCIsIFwiZ3RlcVwiLCBcImx0XCIsIFwibHRlcVwiLCBcImxpa2VcIiwgXCI+XCIsIFwiPj1cIiwgXCI8XCIsIFwiPD1cIl0pXG5cbi8qKlxuICogUnVucyBub3JtYWxpemUgcmVsYXRpb25zaGlwIHdoZXJlIG9wZXJhdG9yLlxuICogQHBhcmFtIHtzdHJpbmd9IG9wZXJhdG9yIC0gUmF3IHJlbGF0aW9uc2hpcCB3aGVyZSBvcGVyYXRvci5cbiAqIEByZXR1cm5zIHtcImVxXCIgfCBcIm5vdEVxXCIgfCBcImd0XCIgfCBcImd0ZXFcIiB8IFwibHRcIiB8IFwibHRlcVwiIHwgXCJsaWtlXCJ9IC0gTm9ybWFsaXplZCBvcGVyYXRvci5cbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplUmVsYXRpb25zaGlwV2hlcmVPcGVyYXRvcihvcGVyYXRvcikge1xuICBjb25zdCBvcGVyYXRvckFsaWFzZXMgPSB7XG4gICAgXCI8XCI6IFwibHRcIixcbiAgICBcIjw9XCI6IFwibHRlcVwiLFxuICAgIFwiPlwiOiBcImd0XCIsXG4gICAgXCI+PVwiOiBcImd0ZXFcIlxuICB9XG5cbiAgcmV0dXJuIC8qKiBAdHlwZSB7XCJlcVwiIHwgXCJub3RFcVwiIHwgXCJndFwiIHwgXCJndGVxXCIgfCBcImx0XCIgfCBcImx0ZXFcIiB8IFwibGlrZVwifSAqLyAoXG4gICAgb3BlcmF0b3JBbGlhc2VzWy8qKiBAdHlwZSB7XCI8XCIgfCBcIjw9XCIgfCBcIj5cIiB8IFwiPj1cIn0gKi8gKG9wZXJhdG9yKV0gfHwgb3BlcmF0b3JcbiAgKVxufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWZWxvY2lvdXNEYXRhYmFzZVF1ZXJ5V2hlcmVNb2RlbENsYXNzSGFzaCBleHRlbmRzIFdoZXJlQmFzZSB7XG4gIC8qKlxuICAgKiBSdW5zIGNvbnN0cnVjdG9yLlxuICAgKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIE9wdGlvbnMgb2JqZWN0LlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4vaW5kZXguanNcIikuZGVmYXVsdH0gYXJncy5xdWVyeSAtIFF1ZXJ5IGluc3RhbmNlLlxuICAgKiBAcGFyYW0ge1doZXJlSGFzaH0gYXJncy5oYXNoIC0gSGFzaC5cbiAgICogQHBhcmFtIHt0eXBlb2YgaW1wb3J0KFwiLi4vcmVjb3JkL2luZGV4LmpzXCIpLmRlZmF1bHR9IGFyZ3MubW9kZWxDbGFzcyAtIE1vZGVsIGNsYXNzLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFthcmdzLnF1YWxpZnlCYXNlVGFibGVdIC0gV2hldGhlciB0byBxdWFsaWZ5IGJhc2UgdGFibGUgY29sdW1ucy5cbiAgICovXG4gIGNvbnN0cnVjdG9yKHtxdWVyeSwgaGFzaCwgbW9kZWxDbGFzcywgcXVhbGlmeUJhc2VUYWJsZSA9IGZhbHNlfSkge1xuICAgIHN1cGVyKClcbiAgICB0aGlzLmhhc2ggPSBoYXNoXG4gICAgdGhpcy5tb2RlbENsYXNzID0gbW9kZWxDbGFzc1xuICAgIHRoaXMucXVhbGlmeUJhc2VUYWJsZSA9IHF1YWxpZnlCYXNlVGFibGVcbiAgICB0aGlzLnF1ZXJ5ID0gcXVlcnlcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIGdldCBtb2RlbCBjbGFzcy5cbiAgICogQHJldHVybnMge3R5cGVvZiBpbXBvcnQoXCIuLi9yZWNvcmQvaW5kZXguanNcIikuZGVmYXVsdH0gLSBUaGUgbW9kZWwgY2xhc3MuXG4gICAqL1xuICBnZXRNb2RlbENsYXNzKCkge1xuICAgIGlmICghdGhpcy5tb2RlbENsYXNzKSB0aHJvdyBuZXcgRXJyb3IoXCJtb2RlbENsYXNzIG5vdCBzZXRcIilcblxuICAgIHJldHVybiB0aGlzLm1vZGVsQ2xhc3NcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIHRvIHNxbC5cbiAgICogQHJldHVybnMge3N0cmluZ30gLSBTUUwgc3RyaW5nLlxuICAgKi9cbiAgdG9TcWwoKSB7XG4gICAgbGV0IHNxbCA9IFwiKFwiXG5cbiAgICBjb25zdCBtb2RlbFF1ZXJ5ID0gLyoqIEB0eXBlIHtpbXBvcnQoXCIuL21vZGVsLWNsYXNzLXF1ZXJ5LmpzXCIpLmRlZmF1bHR9ICovICh0aGlzLnF1ZXJ5KVxuICAgIGNvbnN0IGJhc2VUYWJsZU5hbWUgPSB0aGlzLnF1YWxpZnlCYXNlVGFibGVcbiAgICAgID8gbW9kZWxRdWVyeS5nZXRUYWJsZVJlZmVyZW5jZUZvckpvaW4oKVxuICAgICAgOiB1bmRlZmluZWRcblxuICAgIHNxbCArPSB0aGlzLl93aGVyZVNRTEZyb21IYXNoKHRoaXMuaGFzaCwgdGhpcy5nZXRNb2RlbENsYXNzKCksIFtdLCBiYXNlVGFibGVOYW1lKVxuICAgIHNxbCArPSBcIilcIlxuXG4gICAgcmV0dXJuIHNxbFxuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgcmVzb2x2ZSBjb2x1bW4gbmFtZS5cbiAgICogQHBhcmFtIHt0eXBlb2YgaW1wb3J0KFwiLi4vcmVjb3JkL2luZGV4LmpzXCIpLmRlZmF1bHR9IG1vZGVsQ2xhc3MgLSBNb2RlbCBjbGFzcy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIEF0dHJpYnV0ZSBvciBjb2x1bW4gbmFtZS5cbiAgICogQHJldHVybnMge3N0cmluZyB8IHVuZGVmaW5lZH0gLSBUaGUgcmVzb2x2ZWQgY29sdW1uIG5hbWUuXG4gICAqL1xuICBfcmVzb2x2ZUNvbHVtbk5hbWUobW9kZWxDbGFzcywga2V5KSB7XG4gICAgY29uc3QgYXR0cmlidXRlTWFwID0gbW9kZWxDbGFzcy5nZXRBdHRyaWJ1dGVOYW1lVG9Db2x1bW5OYW1lTWFwKClcblxuICAgIGlmIChhdHRyaWJ1dGVNYXBba2V5XSkgcmV0dXJuIGF0dHJpYnV0ZU1hcFtrZXldXG5cbiAgICBjb25zdCBjb2x1bW5NYXAgPSBtb2RlbENsYXNzLmdldENvbHVtbk5hbWVUb0F0dHJpYnV0ZU5hbWVNYXAoKVxuICAgIGNvbnN0IHVuZGVyc2NvcmVkID0gaW5mbGVjdGlvbi51bmRlcnNjb3JlKGtleSlcblxuICAgIGlmIChjb2x1bW5NYXBba2V5XSkgcmV0dXJuIGtleVxuICAgIGlmIChjb2x1bW5NYXBbdW5kZXJzY29yZWRdKSByZXR1cm4gdW5kZXJzY29yZWRcblxuICAgIHJldHVybiB1bmRlZmluZWRcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIGdldCByZWxhdGlvbnNoaXAuXG4gICAqIEBwYXJhbSB7dHlwZW9mIGltcG9ydChcIi4uL3JlY29yZC9pbmRleC5qc1wiKS5kZWZhdWx0fSBtb2RlbENsYXNzIC0gTW9kZWwgY2xhc3MuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSByZWxhdGlvbnNoaXBOYW1lIC0gUmVsYXRpb25zaGlwIG5hbWUuXG4gICAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9yZWNvcmQvcmVsYXRpb25zaGlwcy9iYXNlLmpzXCIpLmRlZmF1bHQgfCB1bmRlZmluZWR9IC0gVGhlIHJlbGF0aW9uc2hpcC5cbiAgICovXG4gIF9nZXRSZWxhdGlvbnNoaXAobW9kZWxDbGFzcywgcmVsYXRpb25zaGlwTmFtZSkge1xuICAgIHJldHVybiBtb2RlbENsYXNzLmdldFJlbGF0aW9uc2hpcHNNYXAoKVtyZWxhdGlvbnNoaXBOYW1lXVxuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgaXMgcmVsYXRpb25zaGlwIHdoZXJlIG9wZXJhdG9yIHR1cGxlLlxuICAgKiBAcGFyYW0gez99IHR1cGxlVmFsdWUgLSBDYW5kaWRhdGUgdHVwbGUuXG4gICAqIEByZXR1cm5zIHtib29sZWFufSAtIFdoZXRoZXIgdGhpcyBpcyBhIHJlbGF0aW9uc2hpcCB3aGVyZSB0dXBsZS5cbiAgICovXG4gIF9pc1JlbGF0aW9uc2hpcFdoZXJlT3BlcmF0b3JUdXBsZSh0dXBsZVZhbHVlKSB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHR1cGxlVmFsdWUpIHx8IHR1cGxlVmFsdWUubGVuZ3RoIDwgMykge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgcmV0dXJuIHR5cGVvZiB0dXBsZVZhbHVlWzBdID09PSBcInN0cmluZ1wiICYmXG4gICAgICB0eXBlb2YgdHVwbGVWYWx1ZVsxXSA9PT0gXCJzdHJpbmdcIiAmJlxuICAgICAgcmVsYXRpb25zaGlwV2hlcmVPcGVyYXRvcnMuaGFzKHR1cGxlVmFsdWVbMV0pXG4gIH1cblxuICAvKipcbiAgICogUnVucyBub3JtYWxpemUgcmVsYXRpb25zaGlwIHdoZXJlIG9wZXJhdG9yIHR1cGxlcy5cbiAgICogQHBhcmFtIHs/fSB2YWx1ZSAtIENhbmRpZGF0ZSByZWxhdGlvbnNoaXAgd2hlcmUgdmFsdWUuXG4gICAqIEByZXR1cm5zIHtBcnJheTxbc3RyaW5nLCBcImVxXCIgfCBcIm5vdEVxXCIgfCBcImd0XCIgfCBcImd0ZXFcIiB8IFwibHRcIiB8IFwibHRlcVwiIHwgXCJsaWtlXCIsIHVua25vd25dPn0gLSBOb3JtYWxpemVkIHR1cGxlcy5cbiAgICovXG4gIF9ub3JtYWxpemVSZWxhdGlvbnNoaXBXaGVyZU9wZXJhdG9yVHVwbGVzKHZhbHVlKSB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHJlbGF0aW9uc2hpcCB3aGVyZSB0dXBsZSBjb250YWluZXIgdHlwZTogJHt0eXBlb2YgdmFsdWV9YClcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBOb3JtYWxpemVkLlxuICAgICAqIEB0eXBlIHtBcnJheTxbc3RyaW5nLCBcImVxXCIgfCBcIm5vdEVxXCIgfCBcImd0XCIgfCBcImd0ZXFcIiB8IFwibHRcIiB8IFwibHRlcVwiIHwgXCJsaWtlXCIsIHVua25vd25dPn0gKi9cbiAgICBjb25zdCBub3JtYWxpemVkID0gW11cbiAgICAvKipcbiAgICAgKiBBZGQgY29uZGl0aW9uLlxuICAgICAqIEBwYXJhbSB7P30gY29uZGl0aW9uVmFsdWUgLSBDYW5kaWRhdGUgbmVzdGVkIGNvbmRpdGlvbi5cbiAgICAgKi9cbiAgICBjb25zdCBhZGRDb25kaXRpb24gPSAoY29uZGl0aW9uVmFsdWUpID0+IHtcbiAgICAgIGlmICh0aGlzLl9pc1JlbGF0aW9uc2hpcFdoZXJlT3BlcmF0b3JUdXBsZShjb25kaXRpb25WYWx1ZSkpIHtcbiAgICAgICAgY29uc3QgdHVwbGUgPSAvKiogQHR5cGUge1tzdHJpbmcsIFwiZXFcIiB8IFwibm90RXFcIiB8IFwiZ3RcIiB8IFwiZ3RlcVwiIHwgXCJsdFwiIHwgXCJsdGVxXCIgfCBcImxpa2VcIiB8IFwiPlwiIHwgXCI+PVwiIHwgXCI8XCIgfCBcIjw9XCIsIHVua25vd24sIC4uLkFycmF5PHVua25vd24+XX0gKi8gKGNvbmRpdGlvblZhbHVlKVxuICAgICAgICBjb25zdCBub3JtYWxpemVkT3BlcmF0b3IgPSBub3JtYWxpemVSZWxhdGlvbnNoaXBXaGVyZU9wZXJhdG9yKHR1cGxlWzFdKVxuXG4gICAgICAgIG5vcm1hbGl6ZWQucHVzaChbXG4gICAgICAgICAgdHVwbGVbMF0sXG4gICAgICAgICAgbm9ybWFsaXplZE9wZXJhdG9yLFxuICAgICAgICAgIHR1cGxlWzJdXG4gICAgICAgIF0pXG5cbiAgICAgICAgaWYgKHR1cGxlLmxlbmd0aCA+IDMpIHtcbiAgICAgICAgICBmb3IgKGxldCBpbmRleCA9IDM7IGluZGV4IDwgdHVwbGUubGVuZ3RoOyBpbmRleCArPSAxKSB7XG4gICAgICAgICAgICBhZGRDb25kaXRpb24odHVwbGVbaW5kZXhdKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkoY29uZGl0aW9uVmFsdWUpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlJlbGF0aW9uc2hpcCB3aGVyZSBjb25kaXRpb25zIG11c3QgYmUgdHVwbGVzXCIpXG4gICAgICB9XG5cbiAgICAgIGNvbmRpdGlvblZhbHVlLmZvckVhY2goKG5lc3RlZENvbmRpdGlvblZhbHVlKSA9PiB7XG4gICAgICAgIGFkZENvbmRpdGlvbihuZXN0ZWRDb25kaXRpb25WYWx1ZSlcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgYWRkQ29uZGl0aW9uKHZhbHVlKVxuXG4gICAgaWYgKG5vcm1hbGl6ZWQubGVuZ3RoIDwgMSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUmVsYXRpb25zaGlwIHdoZXJlIHR1cGxlIGNvbnRhaW5lciBjYW5ub3QgYmUgZW1wdHlcIilcbiAgICB9XG5cbiAgICByZXR1cm4gbm9ybWFsaXplZFxuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgaXMgcmVsYXRpb25zaGlwIHdoZXJlIG9wZXJhdG9yIHR1cGxlIGNvbnRhaW5lci5cbiAgICogQHBhcmFtIHs/fSB2YWx1ZSAtIENhbmRpZGF0ZSByZWxhdGlvbnNoaXAgd2hlcmUgdmFsdWUuXG4gICAqIEByZXR1cm5zIHtib29sZWFufSAtIFdoZXRoZXIgdmFsdWUgY2FuIGJlIG5vcm1hbGl6ZWQgdG8gcmVsYXRpb25zaGlwIHR1cGxlcy5cbiAgICovXG4gIF9pc1JlbGF0aW9uc2hpcFdoZXJlT3BlcmF0b3JUdXBsZUNvbnRhaW5lcih2YWx1ZSkge1xuICAgIHRyeSB7XG4gICAgICB0aGlzLl9ub3JtYWxpemVSZWxhdGlvbnNoaXBXaGVyZU9wZXJhdG9yVHVwbGVzKHZhbHVlKVxuXG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgd2hlcmUgc3FsZnJvbSByZWxhdGlvbnNoaXAgd2hlcmUgb3BlcmF0b3IgdHVwbGVzLlxuICAgKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIFJlbGF0aW9uc2hpcCB3aGVyZSBvcHRpb25zLlxuICAgKiBAcGFyYW0ge3R5cGVvZiBpbXBvcnQoXCIuLi9yZWNvcmQvaW5kZXguanNcIikuZGVmYXVsdH0gYXJncy5tb2RlbENsYXNzIC0gUmVsYXRpb25zaGlwIG1vZGVsIGNsYXNzLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYXJncy50YWJsZU5hbWUgLSBSZWxhdGlvbnNoaXAgdGFibGUgcmVmZXJlbmNlIG5hbWUuXG4gICAqIEBwYXJhbSB7QXJyYXk8W3N0cmluZywgXCJlcVwiIHwgXCJub3RFcVwiIHwgXCJndFwiIHwgXCJndGVxXCIgfCBcImx0XCIgfCBcImx0ZXFcIiB8IFwibGlrZVwiLCB1bmtub3duXT59IGFyZ3MudHVwbGVzIC0gT3BlcmF0b3IgdHVwbGVzLlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSAtIFNRTCB3aGVyZSBmcmFnbWVudC5cbiAgICovXG4gIF93aGVyZVNRTEZyb21SZWxhdGlvbnNoaXBXaGVyZU9wZXJhdG9yVHVwbGVzKHttb2RlbENsYXNzLCB0YWJsZU5hbWUsIHR1cGxlc30pIHtcbiAgICBjb25zdCBvcHRpb25zID0gdGhpcy5nZXRPcHRpb25zKClcbiAgICBsZXQgc3FsID0gXCJcIlxuICAgIGxldCBpbmRleCA9IDBcblxuICAgIHR1cGxlcy5mb3JFYWNoKChbYXR0cmlidXRlTmFtZSwgb3BlcmF0b3IsIHdoZXJlVmFsdWVdKSA9PiB7XG4gICAgICBpZiAoaW5kZXggPiAwKSBzcWwgKz0gXCIgQU5EIFwiXG5cbiAgICAgIGNvbnN0IGNvbHVtbk5hbWUgPSB0aGlzLl9yZXNvbHZlQ29sdW1uTmFtZShtb2RlbENsYXNzLCBhdHRyaWJ1dGVOYW1lKVxuXG4gICAgICBpZiAoIWNvbHVtbk5hbWUpIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBhdHRyaWJ1dGUgXCIke2F0dHJpYnV0ZU5hbWV9XCIgZm9yICR7bW9kZWxDbGFzcy5uYW1lfWApXG5cbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWRWYWx1ZSA9IHRoaXMuX25vcm1hbGl6ZVNxbGl0ZUJvb2xlYW5WYWx1ZSh7XG4gICAgICAgIGNvbHVtbk5hbWUsXG4gICAgICAgIG1vZGVsQ2xhc3MsXG4gICAgICAgIHZhbHVlOiB3aGVyZVZhbHVlXG4gICAgICB9KVxuICAgICAgY29uc3QgdHlwZWRWYWx1ZSA9IHRoaXMuX25vcm1hbGl6ZVZhbHVlRm9yQ29sdW1uVHlwZSh7XG4gICAgICAgIGNvbHVtbk5hbWUsXG4gICAgICAgIG1vZGVsQ2xhc3MsXG4gICAgICAgIHZhbHVlOiBub3JtYWxpemVkVmFsdWVcbiAgICAgIH0pXG4gICAgICBjb25zdCBjb2x1bW5UeXBlID0gbW9kZWxDbGFzcy5nZXRDb2x1bW5UeXBlQnlOYW1lKGNvbHVtbk5hbWUpXG4gICAgICBjb25zdCBkcml2ZXJUeXBlID0gdGhpcy5nZXRRdWVyeSgpLmRyaXZlci5nZXRUeXBlKClcblxuICAgICAgaWYgKHR5cGVkVmFsdWUgPT09IE5PX01BVENIKSB7XG4gICAgICAgIGlmIChvcGVyYXRvciA9PT0gXCJub3RFcVwiKSB7XG4gICAgICAgICAgc3FsICs9IFwiMT0xXCJcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzcWwgKz0gXCIxPTBcIlxuICAgICAgICB9XG4gICAgICAgIGluZGV4ICs9IDFcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGxldCBjb2x1bW5TcWwgPSBgJHtvcHRpb25zLnF1b3RlVGFibGVOYW1lKHRhYmxlTmFtZSl9LiR7b3B0aW9ucy5xdW90ZUNvbHVtbk5hbWUoY29sdW1uTmFtZSl9YFxuXG4gICAgICBpZiAoZHJpdmVyVHlwZSA9PSBcIm1zc3FsXCIgJiYgdHlwZW9mIHdoZXJlVmFsdWUgPT09IFwic3RyaW5nXCIgJiYgY29sdW1uVHlwZT8udG9Mb3dlckNhc2UoKSA9PSBcInRleHRcIikge1xuICAgICAgICBjb2x1bW5TcWwgPSBgQ0FTVCgke2NvbHVtblNxbH0gQVMgTlZBUkNIQVIoTUFYKSlgXG4gICAgICB9XG5cbiAgICAgIGlmIChvcGVyYXRvciA9PT0gXCJlcVwiKSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHR5cGVkVmFsdWUpKSB7XG4gICAgICAgICAgaWYgKHR5cGVkVmFsdWUubGVuZ3RoIDwgMSkge1xuICAgICAgICAgICAgc3FsICs9IFwiMT0wXCJcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3FsICs9IGAke2NvbHVtblNxbH0gSU4gKCR7dHlwZWRWYWx1ZS5tYXAoKHZhbHVlKSA9PiBvcHRpb25zLnF1b3RlKHZhbHVlKSkuam9pbihcIiwgXCIpfSlgXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHR5cGVkVmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgICBzcWwgKz0gYCR7Y29sdW1uU3FsfSBJUyBOVUxMYFxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNxbCArPSBgJHtjb2x1bW5TcWx9ID0gJHtvcHRpb25zLnF1b3RlKHR5cGVkVmFsdWUpfWBcbiAgICAgICAgfVxuXG4gICAgICAgIGluZGV4ICs9IDFcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGlmIChvcGVyYXRvciA9PT0gXCJub3RFcVwiKSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHR5cGVkVmFsdWUpKSB7XG4gICAgICAgICAgaWYgKHR5cGVkVmFsdWUubGVuZ3RoIDwgMSkge1xuICAgICAgICAgICAgc3FsICs9IFwiMT0xXCJcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3FsICs9IGAke2NvbHVtblNxbH0gTk9UIElOICgke3R5cGVkVmFsdWUubWFwKCh2YWx1ZSkgPT4gb3B0aW9ucy5xdW90ZSh2YWx1ZSkpLmpvaW4oXCIsIFwiKX0pYFxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICh0eXBlZFZhbHVlID09PSBudWxsKSB7XG4gICAgICAgICAgc3FsICs9IGAke2NvbHVtblNxbH0gSVMgTk9UIE5VTExgXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3FsICs9IGAke2NvbHVtblNxbH0gIT0gJHtvcHRpb25zLnF1b3RlKHR5cGVkVmFsdWUpfWBcbiAgICAgICAgfVxuXG4gICAgICAgIGluZGV4ICs9IDFcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHR5cGVkVmFsdWUpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgT3BlcmF0b3IgXCIke29wZXJhdG9yfVwiIGRvZXMgbm90IHN1cHBvcnQgYXJyYXkgdmFsdWVzIGZvciAke21vZGVsQ2xhc3MubmFtZX0uJHthdHRyaWJ1dGVOYW1lfWApXG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlZFZhbHVlID09PSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgT3BlcmF0b3IgXCIke29wZXJhdG9yfVwiIGRvZXMgbm90IHN1cHBvcnQgbnVsbCB2YWx1ZXMgZm9yICR7bW9kZWxDbGFzcy5uYW1lfS4ke2F0dHJpYnV0ZU5hbWV9YClcbiAgICAgIH1cblxuICAgICAgY29uc3Qgb3BlcmF0b3JNYXAgPSB7XG4gICAgICAgIGd0OiBcIj5cIixcbiAgICAgICAgZ3RlcTogXCI+PVwiLFxuICAgICAgICBsaWtlOiBcIkxJS0VcIixcbiAgICAgICAgbHQ6IFwiPFwiLFxuICAgICAgICBsdGVxOiBcIjw9XCJcbiAgICAgIH1cblxuICAgICAgc3FsICs9IGAke2NvbHVtblNxbH0gJHtvcGVyYXRvck1hcFtvcGVyYXRvcl19ICR7b3B0aW9ucy5xdW90ZSh0eXBlZFZhbHVlKX1gXG4gICAgICBpbmRleCArPSAxXG4gICAgfSlcblxuICAgIHJldHVybiBzcWxcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIG5vcm1hbGl6ZSBzcWxpdGUgYm9vbGVhbiB2YWx1ZS5cbiAgICogQHBhcmFtIHtvYmplY3R9IGFyZ3MgLSBPcHRpb25zIG9iamVjdC5cbiAgICogQHBhcmFtIHt0eXBlb2YgaW1wb3J0KFwiLi4vcmVjb3JkL2luZGV4LmpzXCIpLmRlZmF1bHR9IGFyZ3MubW9kZWxDbGFzcyAtIE1vZGVsIGNsYXNzLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYXJncy5jb2x1bW5OYW1lIC0gQ29sdW1uIG5hbWUuXG4gICAqIEBwYXJhbSB7P30gYXJncy52YWx1ZSAtIFZhbHVlIHRvIG5vcm1hbGl6ZS5cbiAgICogQHJldHVybnMgez99IC0gTm9ybWFsaXplZCB2YWx1ZS5cbiAgICovXG4gIF9ub3JtYWxpemVTcWxpdGVCb29sZWFuVmFsdWUoe21vZGVsQ2xhc3MsIGNvbHVtbk5hbWUsIHZhbHVlfSkge1xuICAgIGlmIChtb2RlbENsYXNzLmdldERhdGFiYXNlVHlwZSgpICE9IFwic3FsaXRlXCIpIHJldHVybiB2YWx1ZVxuXG4gICAgY29uc3QgY29sdW1uVHlwZSA9IG1vZGVsQ2xhc3MuZ2V0Q29sdW1uVHlwZUJ5TmFtZShjb2x1bW5OYW1lKVxuXG4gICAgaWYgKCFjb2x1bW5UeXBlKSByZXR1cm4gdmFsdWVcbiAgICBpZiAoY29sdW1uVHlwZS50b0xvd2VyQ2FzZSgpICE9PSBcImJvb2xlYW5cIikgcmV0dXJuIHZhbHVlXG5cbiAgICAvKipcbiAgICAgKiBOb3JtYWxpemUuXG4gICAgICogQHBhcmFtIHs/fSBlbnRyeSAtIFZhbHVlIHRvIG5vcm1hbGl6ZS5cbiAgICAgKiBAcmV0dXJucyB7P30gLSBTUUxpdGUgcHJlZGljYXRlIHZhbHVlIHdpdGggYm9vbGVhbnMgZW5jb2RlZCBhcyAxIG9yIDAuXG4gICAgICovXG4gICAgY29uc3Qgbm9ybWFsaXplID0gKGVudHJ5KSA9PiB7XG4gICAgICBpZiAoZW50cnkgPT09IHRydWUpIHJldHVybiAxXG4gICAgICBpZiAoZW50cnkgPT09IGZhbHNlKSByZXR1cm4gMFxuICAgICAgcmV0dXJuIGVudHJ5XG4gICAgfVxuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICByZXR1cm4gdmFsdWUubWFwKChlbnRyeSkgPT4gbm9ybWFsaXplKGVudHJ5KSlcbiAgICB9XG5cbiAgICByZXR1cm4gbm9ybWFsaXplKHZhbHVlKVxuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgbm9ybWFsaXplIHZhbHVlIGZvciBjb2x1bW4gdHlwZS5cbiAgICogQHBhcmFtIHtvYmplY3R9IGFyZ3MgLSBPcHRpb25zIG9iamVjdC5cbiAgICogQHBhcmFtIHt0eXBlb2YgaW1wb3J0KFwiLi4vcmVjb3JkL2luZGV4LmpzXCIpLmRlZmF1bHR9IGFyZ3MubW9kZWxDbGFzcyAtIE1vZGVsIGNsYXNzLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYXJncy5jb2x1bW5OYW1lIC0gQ29sdW1uIG5hbWUuXG4gICAqIEBwYXJhbSB7P30gYXJncy52YWx1ZSAtIFZhbHVlIHRvIG5vcm1hbGl6ZS5cbiAgICogQHJldHVybnMgez99IC0gTm9ybWFsaXplZCB2YWx1ZS5cbiAgICovXG4gIF9ub3JtYWxpemVWYWx1ZUZvckNvbHVtblR5cGUoe21vZGVsQ2xhc3MsIGNvbHVtbk5hbWUsIHZhbHVlfSkge1xuICAgIGNvbnN0IGNvbHVtblR5cGUgPSBtb2RlbENsYXNzLmdldENvbHVtblR5cGVCeU5hbWUoY29sdW1uTmFtZSlcblxuICAgIGlmICghY29sdW1uVHlwZSkgcmV0dXJuIHZhbHVlXG5cbiAgICBjb25zdCBub3JtYWxpemVkVHlwZSA9IGNvbHVtblR5cGUudG9Mb3dlckNhc2UoKVxuICAgIGNvbnN0IHN0cmluZ1R5cGVzID0gbmV3IFNldChbXCJjaGFyXCIsIFwidmFyY2hhclwiLCBcIm52YXJjaGFyXCIsIFwic3RyaW5nXCIsIFwiZW51bVwiLCBcImpzb25cIiwgXCJqc29uYlwiLCBcImNpdGV4dFwiLCBcImJpbmFyeVwiLCBcInZhcmJpbmFyeVwiXSlcbiAgICBjb25zdCBpc1V1aWRUeXBlID0gbm9ybWFsaXplZFR5cGUuaW5jbHVkZXMoXCJ1dWlkXCIpXG4gICAgY29uc3Qgc2hvdWxkQ29lcmNlVG9TdHJpbmcgPSBub3JtYWxpemVkVHlwZS5pbmNsdWRlcyhcInV1aWRcIikgfHxcbiAgICAgIG5vcm1hbGl6ZWRUeXBlLmluY2x1ZGVzKFwidGV4dFwiKSB8fFxuICAgICAgc3RyaW5nVHlwZXMuaGFzKG5vcm1hbGl6ZWRUeXBlKVxuXG4gICAgLyoqXG4gICAgICogTm9ybWFsaXplLlxuICAgICAqIEBwYXJhbSB7P30gZW50cnkgLSBWYWx1ZSB0byBub3JtYWxpemUuXG4gICAgICogQHJldHVybnMgez99IC0gQ29sdW1uLWNvbXBhdGlibGUgcHJlZGljYXRlIHZhbHVlLCBvciB0aGUgbm8tbWF0Y2ggc2VudGluZWwgZm9yIG51bWVyaWMgVVVJRHMuXG4gICAgICovXG4gICAgY29uc3Qgbm9ybWFsaXplID0gKGVudHJ5KSA9PiB7XG4gICAgICBpZiAoaXNVdWlkVHlwZSAmJiB0eXBlb2YgZW50cnkgPT09IFwibnVtYmVyXCIpIHJldHVybiBOT19NQVRDSFxuICAgICAgaWYgKCFzaG91bGRDb2VyY2VUb1N0cmluZyB8fCB0eXBlb2YgZW50cnkgIT09IFwibnVtYmVyXCIpIHJldHVybiBlbnRyeVxuXG4gICAgICByZXR1cm4gU3RyaW5nKGVudHJ5KVxuICAgIH1cblxuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgY29uc3Qgbm9ybWFsaXplZCA9IHZhbHVlLm1hcCgoZW50cnkpID0+IG5vcm1hbGl6ZShlbnRyeSkpLmZpbHRlcigoZW50cnkpID0+IGVudHJ5ICE9PSBOT19NQVRDSClcblxuICAgICAgaWYgKGlzVXVpZFR5cGUgJiYgbm9ybWFsaXplZC5sZW5ndGggPT09IDApIHJldHVybiBOT19NQVRDSFxuXG4gICAgICByZXR1cm4gbm9ybWFsaXplZFxuICAgIH1cblxuICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSBub3JtYWxpemUodmFsdWUpXG5cbiAgICBpZiAobm9ybWFsaXplZCA9PT0gTk9fTUFUQ0gpIHJldHVybiBOT19NQVRDSFxuXG4gICAgcmV0dXJuIG5vcm1hbGl6ZWRcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIHdoZXJlIHNxbGZyb20gaGFzaC5cbiAgICogQHBhcmFtIHtXaGVyZUhhc2h9IGhhc2ggLSBIYXNoLlxuICAgKiBAcGFyYW0ge3R5cGVvZiBpbXBvcnQoXCIuLi9yZWNvcmQvaW5kZXguanNcIikuZGVmYXVsdH0gbW9kZWxDbGFzcyAtIE1vZGVsIGNsYXNzLlxuICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBwYXRoIC0gSm9pbiBwYXRoLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW3RhYmxlTmFtZV0gLSBUYWJsZSBuYW1lLlxuICAgKiBAcGFyYW0ge251bWJlcn0gaW5kZXggLSBJbmRleCB2YWx1ZS5cbiAgICogQHJldHVybnMge3N0cmluZ30gLSBTUUwgc3RyaW5nLlxuICAgKi9cbiAgX3doZXJlU1FMRnJvbUhhc2goaGFzaCwgbW9kZWxDbGFzcywgcGF0aCwgdGFibGVOYW1lLCBpbmRleCA9IDApIHtcbiAgICBjb25zdCBvcHRpb25zID0gdGhpcy5nZXRPcHRpb25zKClcbiAgICBjb25zdCBtb2RlbFF1ZXJ5ID0gLyoqIEB0eXBlIHtpbXBvcnQoXCIuL21vZGVsLWNsYXNzLXF1ZXJ5LmpzXCIpLmRlZmF1bHR9ICovICh0aGlzLnF1ZXJ5KVxuICAgIGxldCBzcWwgPSBcIlwiXG5cbiAgICBmb3IgKGNvbnN0IHdoZXJlS2V5IGluIGhhc2gpIHtcbiAgICAgIGNvbnN0IHdoZXJlVmFsdWUgPSBoYXNoW3doZXJlS2V5XVxuICAgICAgY29uc3QgcmVsYXRpb25zaGlwID0gdGhpcy5fZ2V0UmVsYXRpb25zaGlwKG1vZGVsQ2xhc3MsIHdoZXJlS2V5KVxuICAgICAgY29uc3QgdHVwbGVzID0gdGhpcy5faXNSZWxhdGlvbnNoaXBXaGVyZU9wZXJhdG9yVHVwbGVDb250YWluZXIod2hlcmVWYWx1ZSlcbiAgICAgICAgPyB0aGlzLl9ub3JtYWxpemVSZWxhdGlvbnNoaXBXaGVyZU9wZXJhdG9yVHVwbGVzKHdoZXJlVmFsdWUpXG4gICAgICAgIDogbnVsbFxuICAgICAgY29uc3QgcmVzb2x2ZWRDb2x1bW5OYW1lID0gdGhpcy5fcmVzb2x2ZUNvbHVtbk5hbWUobW9kZWxDbGFzcywgd2hlcmVLZXkpXG5cbiAgICAgIGlmIChyZWxhdGlvbnNoaXAgJiYgdHVwbGVzKSB7XG4gICAgICAgIGlmIChpbmRleCA+IDApIHNxbCArPSBcIiBBTkQgXCJcblxuICAgICAgICBjb25zdCB0YXJnZXRNb2RlbENsYXNzID0gcmVsYXRpb25zaGlwLmdldFRhcmdldE1vZGVsQ2xhc3MoKVxuXG4gICAgICAgIGlmICghdGFyZ2V0TW9kZWxDbGFzcykgdGhyb3cgbmV3IEVycm9yKGBSZWxhdGlvbnNoaXAgXCIke3doZXJlS2V5fVwiIGZvciAke21vZGVsQ2xhc3MubmFtZX0gaGFzIG5vIHRhcmdldCBtb2RlbCBjbGFzc2ApXG5cbiAgICAgICAgY29uc3QgbmVzdGVkUGF0aCA9IHBhdGguY29uY2F0KFt3aGVyZUtleV0pXG4gICAgICAgIGNvbnN0IG5lc3RlZFRhYmxlTmFtZSA9IG1vZGVsUXVlcnkuZ2V0VGFibGVSZWZlcmVuY2VGb3JKb2luKC4uLm5lc3RlZFBhdGgpXG5cbiAgICAgICAgc3FsICs9IHRoaXMuX3doZXJlU1FMRnJvbVJlbGF0aW9uc2hpcFdoZXJlT3BlcmF0b3JUdXBsZXMoe1xuICAgICAgICAgIG1vZGVsQ2xhc3M6IHRhcmdldE1vZGVsQ2xhc3MsXG4gICAgICAgICAgdGFibGVOYW1lOiBuZXN0ZWRUYWJsZU5hbWUsXG4gICAgICAgICAgdHVwbGVzXG4gICAgICAgIH0pXG4gICAgICB9IGVsc2UgaWYgKHJlc29sdmVkQ29sdW1uTmFtZSAmJiB0dXBsZXMpIHtcbiAgICAgICAgaWYgKGluZGV4ID4gMCkgc3FsICs9IFwiIEFORCBcIlxuXG4gICAgICAgIHNxbCArPSB0aGlzLl93aGVyZVNRTEZyb21SZWxhdGlvbnNoaXBXaGVyZU9wZXJhdG9yVHVwbGVzKHtcbiAgICAgICAgICBtb2RlbENsYXNzLFxuICAgICAgICAgIHRhYmxlTmFtZTogdGFibGVOYW1lIHx8IG1vZGVsUXVlcnkuZ2V0VGFibGVSZWZlcmVuY2VGb3JKb2luKC4uLnBhdGgpLFxuICAgICAgICAgIHR1cGxlc1xuICAgICAgICB9KVxuICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHdoZXJlVmFsdWUpICYmIHdoZXJlVmFsdWUubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGlmIChpbmRleCA+IDApIHNxbCArPSBcIiBBTkQgXCJcbiAgICAgICAgc3FsICs9IFwiMT0wXCJcbiAgICAgIH0gZWxzZSBpZiAoaXNQbGFpbk9iamVjdCh3aGVyZVZhbHVlKSkge1xuICAgICAgICBpZiAoIXJlbGF0aW9uc2hpcCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biByZWxhdGlvbnNoaXAgXCIke3doZXJlS2V5fVwiIGZvciAke21vZGVsQ2xhc3MubmFtZX1gKVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdGFyZ2V0TW9kZWxDbGFzcyA9IHJlbGF0aW9uc2hpcC5nZXRUYXJnZXRNb2RlbENsYXNzKClcblxuICAgICAgICBpZiAoIXRhcmdldE1vZGVsQ2xhc3MpIHRocm93IG5ldyBFcnJvcihgUmVsYXRpb25zaGlwIFwiJHt3aGVyZUtleX1cIiBmb3IgJHttb2RlbENsYXNzLm5hbWV9IGhhcyBubyB0YXJnZXQgbW9kZWwgY2xhc3NgKVxuXG4gICAgICAgIGNvbnN0IG5lc3RlZEhhc2ggPSAvKiogQHR5cGUge1doZXJlSGFzaH0gKi8gKHdoZXJlVmFsdWUpXG4gICAgICAgIGNvbnN0IG5lc3RlZFBhdGggPSBwYXRoLmNvbmNhdChbd2hlcmVLZXldKVxuICAgICAgICBjb25zdCBuZXN0ZWRUYWJsZU5hbWUgPSBtb2RlbFF1ZXJ5LmdldFRhYmxlUmVmZXJlbmNlRm9ySm9pbiguLi5uZXN0ZWRQYXRoKVxuXG4gICAgICAgIHNxbCArPSB0aGlzLl93aGVyZVNRTEZyb21IYXNoKG5lc3RlZEhhc2gsIHRhcmdldE1vZGVsQ2xhc3MsIG5lc3RlZFBhdGgsIG5lc3RlZFRhYmxlTmFtZSwgaW5kZXgpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoaW5kZXggPiAwKSBzcWwgKz0gXCIgQU5EIFwiXG5cbiAgICAgICAgY29uc3QgY29sdW1uTmFtZSA9IHRoaXMuX3Jlc29sdmVDb2x1bW5OYW1lKG1vZGVsQ2xhc3MsIHdoZXJlS2V5KVxuXG4gICAgICAgIGlmICghY29sdW1uTmFtZSkgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIGF0dHJpYnV0ZSBcIiR7d2hlcmVLZXl9XCIgZm9yICR7bW9kZWxDbGFzcy5uYW1lfWApXG5cbiAgICAgICAgY29uc3QgY29sdW1uVHlwZSA9IG1vZGVsQ2xhc3MuZ2V0Q29sdW1uVHlwZUJ5TmFtZShjb2x1bW5OYW1lKVxuXG4gICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRWYWx1ZSA9IHRoaXMuX25vcm1hbGl6ZVNxbGl0ZUJvb2xlYW5WYWx1ZSh7XG4gICAgICAgICAgY29sdW1uTmFtZSxcbiAgICAgICAgICBtb2RlbENsYXNzLFxuICAgICAgICAgIHZhbHVlOiB3aGVyZVZhbHVlXG4gICAgICAgIH0pXG4gICAgICAgIGNvbnN0IHR5cGVkVmFsdWUgPSB0aGlzLl9ub3JtYWxpemVWYWx1ZUZvckNvbHVtblR5cGUoe1xuICAgICAgICAgIGNvbHVtbk5hbWUsXG4gICAgICAgICAgbW9kZWxDbGFzcyxcbiAgICAgICAgICB2YWx1ZTogbm9ybWFsaXplZFZhbHVlXG4gICAgICAgIH0pXG5cbiAgICAgICAgaWYgKHR5cGVkVmFsdWUgPT09IE5PX01BVENIKSB7XG4gICAgICAgICAgc3FsICs9IFwiMT0wXCJcbiAgICAgICAgICBpbmRleCsrXG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBjb2x1bW5TcWwgPSBgJHtvcHRpb25zLnF1b3RlQ29sdW1uTmFtZShjb2x1bW5OYW1lKX1gXG5cbiAgICAgICAgaWYgKHRhYmxlTmFtZSkge1xuICAgICAgICAgIGNvbHVtblNxbCA9IGAke29wdGlvbnMucXVvdGVUYWJsZU5hbWUodGFibGVOYW1lKX0uJHtjb2x1bW5TcWx9YFxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZHJpdmVyVHlwZSA9IHRoaXMuZ2V0UXVlcnkoKS5kcml2ZXIuZ2V0VHlwZSgpXG5cbiAgICAgICAgaWYgKGRyaXZlclR5cGUgPT0gXCJtc3NxbFwiICYmIHR5cGVvZiB3aGVyZVZhbHVlID09PSBcInN0cmluZ1wiICYmIGNvbHVtblR5cGU/LnRvTG93ZXJDYXNlKCkgPT0gXCJ0ZXh0XCIpIHtcbiAgICAgICAgICBjb2x1bW5TcWwgPSBgQ0FTVCgke2NvbHVtblNxbH0gQVMgTlZBUkNIQVIoTUFYKSlgXG4gICAgICAgIH1cblxuICAgICAgICBzcWwgKz0gY29sdW1uU3FsXG5cbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodHlwZWRWYWx1ZSkpIHtcbiAgICAgICAgICBzcWwgKz0gYCBJTiAoJHt0eXBlZFZhbHVlLm1hcCgodmFsdWUpID0+IG9wdGlvbnMucXVvdGUodmFsdWUpKS5qb2luKFwiLCBcIil9KWBcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlZFZhbHVlID09PSBudWxsKSB7XG4gICAgICAgICAgc3FsICs9IFwiIElTIE5VTExcIlxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNxbCArPSBgID0gJHtvcHRpb25zLnF1b3RlKHR5cGVkVmFsdWUpfWBcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpbmRleCsrXG4gICAgfVxuXG4gICAgcmV0dXJuIHNxbFxuICB9XG59XG4iXX0=
442
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2hlcmUtbW9kZWwtY2xhc3MtaGFzaC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kYXRhYmFzZS9xdWVyeS93aGVyZS1tb2RlbC1jbGFzcy1oYXNoLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWixPQUFPLEtBQUssVUFBVSxNQUFNLFlBQVksQ0FBQTtBQUN4QyxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0saUJBQWlCLENBQUE7QUFDN0MsT0FBTyxTQUFTLE1BQU0saUJBQWlCLENBQUE7QUFFdkM7OztHQUdHO0FBRUgsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFBO0FBQ25DLE1BQU0sMEJBQTBCLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQTtBQUVySDs7OztHQUlHO0FBQ0gsU0FBUyxrQ0FBa0MsQ0FBQyxRQUFRO0lBQ2xELE1BQU0sZUFBZSxHQUFHO1FBQ3RCLEdBQUcsRUFBRSxJQUFJO1FBQ1QsSUFBSSxFQUFFLE1BQU07UUFDWixHQUFHLEVBQUUsSUFBSTtRQUNULElBQUksRUFBRSxNQUFNO0tBQ2IsQ0FBQTtJQUVELE9BQU8sc0VBQXNFLENBQUMsQ0FDNUUsZUFBZSxFQUFDLHNDQUF1QyxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksUUFBUSxDQUMvRSxDQUFBO0FBQ0gsQ0FBQztBQUVELE1BQU0sQ0FBQyxPQUFPLE9BQU8seUNBQTBDLFNBQVEsU0FBUztJQUM5RTs7Ozs7OztPQU9HO0lBQ0gsWUFBWSxFQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLGdCQUFnQixHQUFHLEtBQUssRUFBQztRQUM3RCxLQUFLLEVBQUUsQ0FBQTtRQUNQ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O2dCQUVoQixJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztvQkFDOUIsR0FBRyxJQUFJLFFBQVEsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFBO2dCQUM5RSxDQUFDO3FCQUFNLElBQUksVUFBVSxLQUFLLElBQUksRUFBRSxDQUFDO29CQUMvQixHQUFHLElBQUksVUFBVSxDQUFBO2dCQUNuQixDQUFDO3FCQUFNLENBQUM7b0JBQ04sR0FBRyxJQUFJLE1BQU0sT0FBTyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFBO2dCQUMxQyxDQUFDO1lBQ0gsQ0FBQztZQUVELEtBQUssRUFBRSxDQUFBO1FBQ1QsQ0FBQztRQUVELE9BQU8sR0FBRyxDQUFBO0lBQ1osQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbmltcG9ydCAqIGFzIGluZmxlY3Rpb24gZnJvbSBcImluZmxlY3Rpb25cIlxuaW1wb3J0IHtpc1BsYWluT2JqZWN0fSBmcm9tIFwiaXMtcGxhaW4tb2JqZWN0XCJcbmltcG9ydCBXaGVyZUJhc2UgZnJvbSBcIi4vd2hlcmUtYmFzZS5qc1wiXG5cbi8qKlxuICogTm8gbWF0Y2guXG4gKiBAdHlwZWRlZiB7e1trZXk6IHN0cmluZ106IHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCBudWxsIHwgQXJyYXk8c3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IG51bGw+IHwgUmVjb3JkPHN0cmluZywgUmV0dXJuVHlwZTx0eXBlb2YgSlNPTi5wYXJzZT4+fX0gV2hlcmVIYXNoXG4gKi9cblxuY29uc3QgTk9fTUFUQ0ggPSBTeW1ib2woXCJuby1tYXRjaFwiKVxuY29uc3QgcmVsYXRpb25zaGlwV2hlcmVPcGVyYXRvcnMgPSBuZXcgU2V0KFtcImVxXCIsIFwibm90RXFcIiwgXCJndFwiLCBcImd0ZXFcIiwgXCJsdFwiLCBcImx0ZXFcIiwgXCJsaWtlXCIsIFwiPlwiLCBcIj49XCIsIFwiPFwiLCBcIjw9XCJdKVxuXG4vKipcbiAqIFJ1bnMgbm9ybWFsaXplIHJlbGF0aW9uc2hpcCB3aGVyZSBvcGVyYXRvci5cbiAqIEBwYXJhbSB7c3RyaW5nfSBvcGVyYXRvciAtIFJhdyByZWxhdGlvbnNoaXAgd2hlcmUgb3BlcmF0b3IuXG4gKiBAcmV0dXJucyB7XCJlcVwiIHwgXCJub3RFcVwiIHwgXCJndFwiIHwgXCJndGVxXCIgfCBcImx0XCIgfCBcImx0ZXFcIiB8IFwibGlrZVwifSAtIE5vcm1hbGl6ZWQgb3BlcmF0b3IuXG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZVJlbGF0aW9uc2hpcFdoZXJlT3BlcmF0b3Iob3BlcmF0b3IpIHtcbiAgY29uc3Qgb3BlcmF0b3JBbGlhc2VzID0ge1xuICAgIFwiPFwiOiBcImx0XCIsXG4gICAgXCI8PVwiOiBcImx0ZXFcIixcbiAgICBcIj5cIjogXCJndFwiLFxuICAgIFwiPj1cIjogXCJndGVxXCJcbiAgfVxuXG4gIHJldHVybiAvKiogQHR5cGUge1wiZXFcIiB8IFwibm90RXFcIiB8IFwiZ3RcIiB8IFwiZ3RlcVwiIHwgXCJsdFwiIHwgXCJsdGVxXCIgfCBcImxpa2VcIn0gKi8gKFxuICAgIG9wZXJhdG9yQWxpYXNlc1svKiogQHR5cGUge1wiPFwiIHwgXCI8PVwiIHwgXCI+XCIgfCBcIj49XCJ9ICovIChvcGVyYXRvcildIHx8IG9wZXJhdG9yXG4gIClcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVmVsb2Npb3VzRGF0YWJhc2VRdWVyeVdoZXJlTW9kZWxDbGFzc0hhc2ggZXh0ZW5kcyBXaGVyZUJhc2Uge1xuICAvKipcbiAgICogUnVucyBjb25zdHJ1Y3Rvci5cbiAgICogQHBhcmFtIHtvYmplY3R9IGFyZ3MgLSBPcHRpb25zIG9iamVjdC5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuL2luZGV4LmpzXCIpLmRlZmF1bHR9IGFyZ3MucXVlcnkgLSBRdWVyeSBpbnN0YW5jZS5cbiAgICogQHBhcmFtIHtXaGVyZUhhc2h9IGFyZ3MuaGFzaCAtIEhhc2guXG4gICAqIEBwYXJhbSB7dHlwZW9mIGltcG9ydChcIi4uL3JlY29yZC9pbmRleC5qc1wiKS5kZWZhdWx0fSBhcmdzLm1vZGVsQ2xhc3MgLSBNb2RlbCBjbGFzcy5cbiAgICogQHBhcmFtIHtib29sZWFufSBbYXJncy5xdWFsaWZ5QmFzZVRhYmxlXSAtIFdoZXRoZXIgdG8gcXVhbGlmeSBiYXNlIHRhYmxlIGNvbHVtbnMuXG4gICAqL1xuICBjb25zdHJ1Y3Rvcih7cXVlcnksIGhhc2gsIG1vZGVsQ2xhc3MsIHF1YWxpZnlCYXNlVGFibGUgPSBmYWxzZX0pIHtcbiAgICBzdXBlcigpXG4gICAgdGhpcy5oYXNoID0gaGFzaFxuICAgIHRoaXMubW9kZWxDbGFzcyA9IG1vZGVsQ2xhc3NcbiAgICB0aGlzLnF1YWxpZnlCYXNlVGFibGUgPSBxdWFsaWZ5QmFzZVRhYmxlXG4gICAgdGhpcy5xdWVyeSA9IHF1ZXJ5XG4gIH1cblxuICAvKipcbiAgICogUnVucyBnZXQgbW9kZWwgY2xhc3MuXG4gICAqIEByZXR1cm5zIHt0eXBlb2YgaW1wb3J0KFwiLi4vcmVjb3JkL2luZGV4LmpzXCIpLmRlZmF1bHR9IC0gVGhlIG1vZGVsIGNsYXNzLlxuICAgKi9cbiAgZ2V0TW9kZWxDbGFzcygpIHtcbiAgICBpZiAoIXRoaXMubW9kZWxDbGFzcykgdGhyb3cgbmV3IEVycm9yKFwibW9kZWxDbGFzcyBub3Qgc2V0XCIpXG5cbiAgICByZXR1cm4gdGhpcy5tb2RlbENsYXNzXG4gIH1cblxuICAvKipcbiAgICogUnVucyB0byBzcWwuXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IC0gU1FMIHN0cmluZy5cbiAgICovXG4gIHRvU3FsKCkge1xuICAgIGxldCBzcWwgPSBcIihcIlxuXG4gICAgY29uc3QgbW9kZWxRdWVyeSA9IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi9tb2RlbC1jbGFzcy1xdWVyeS5qc1wiKS5kZWZhdWx0fSAqLyAodGhpcy5xdWVyeSlcbiAgICBjb25zdCBiYXNlVGFibGVOYW1lID0gdGhpcy5xdWFsaWZ5QmFzZVRhYmxlXG4gICAgICA/IG1vZGVsUXVlcnkuZ2V0VGFibGVSZWZlcmVuY2VGb3JKb2luKClcbiAgICAgIDogdW5kZWZpbmVkXG5cbiAgICBzcWwgKz0gdGhpcy5fd2hlcmVTUUxGcm9tSGFzaCh0aGlzLmhhc2gsIHRoaXMuZ2V0TW9kZWxDbGFzcygpLCBbXSwgYmFzZVRhYmxlTmFtZSlcbiAgICBzcWwgKz0gXCIpXCJcblxuICAgIHJldHVybiBzcWxcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIHJlc29sdmUgY29sdW1uIG5hbWUuXG4gICAqIEBwYXJhbSB7dHlwZW9mIGltcG9ydChcIi4uL3JlY29yZC9pbmRleC5qc1wiKS5kZWZhdWx0fSBtb2RlbENsYXNzIC0gTW9kZWwgY2xhc3MuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBBdHRyaWJ1dGUgb3IgY29sdW1uIG5hbWUuXG4gICAqIEByZXR1cm5zIHtzdHJpbmcgfCB1bmRlZmluZWR9IC0gVGhlIHJlc29sdmVkIGNvbHVtbiBuYW1lLlxuICAgKi9cbiAgX3Jlc29sdmVDb2x1bW5OYW1lKG1vZGVsQ2xhc3MsIGtleSkge1xuICAgIGNvbnN0IGF0dHJpYnV0ZU1hcCA9IG1vZGVsQ2xhc3MuZ2V0QXR0cmlidXRlTmFtZVRvQ29sdW1uTmFtZU1hcCgpXG5cbiAgICBpZiAoYXR0cmlidXRlTWFwW2tleV0pIHJldHVybiBhdHRyaWJ1dGVNYXBba2V5XVxuXG4gICAgY29uc3QgY29sdW1uTWFwID0gbW9kZWxDbGFzcy5nZXRDb2x1bW5OYW1lVG9BdHRyaWJ1dGVOYW1lTWFwKClcbiAgICBjb25zdCB1bmRlcnNjb3JlZCA9IGluZmxlY3Rpb24udW5kZXJzY29yZShrZXkpXG5cbiAgICBpZiAoY29sdW1uTWFwW2tleV0pIHJldHVybiBrZXlcbiAgICBpZiAoY29sdW1uTWFwW3VuZGVyc2NvcmVkXSkgcmV0dXJuIHVuZGVyc2NvcmVkXG5cbiAgICByZXR1cm4gdW5kZWZpbmVkXG4gIH1cblxuICAvKipcbiAgICogUnVucyBnZXQgcmVsYXRpb25zaGlwLlxuICAgKiBAcGFyYW0ge3R5cGVvZiBpbXBvcnQoXCIuLi9yZWNvcmQvaW5kZXguanNcIikuZGVmYXVsdH0gbW9kZWxDbGFzcyAtIE1vZGVsIGNsYXNzLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcmVsYXRpb25zaGlwTmFtZSAtIFJlbGF0aW9uc2hpcCBuYW1lLlxuICAgKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vcmVjb3JkL3JlbGF0aW9uc2hpcHMvYmFzZS5qc1wiKS5kZWZhdWx0IHwgdW5kZWZpbmVkfSAtIFRoZSByZWxhdGlvbnNoaXAuXG4gICAqL1xuICBfZ2V0UmVsYXRpb25zaGlwKG1vZGVsQ2xhc3MsIHJlbGF0aW9uc2hpcE5hbWUpIHtcbiAgICByZXR1cm4gbW9kZWxDbGFzcy5nZXRSZWxhdGlvbnNoaXBzTWFwKClbcmVsYXRpb25zaGlwTmFtZV1cbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIGlzIHJlbGF0aW9uc2hpcCB3aGVyZSBvcGVyYXRvciB0dXBsZS5cbiAgICogQHBhcmFtIHtSZXR1cm5UeXBlPHR5cGVvZiBKU09OLnBhcnNlPn0gdHVwbGVWYWx1ZSAtIENhbmRpZGF0ZSB0dXBsZS5cbiAgICogQHJldHVybnMge2Jvb2xlYW59IC0gV2hldGhlciB0aGlzIGlzIGEgcmVsYXRpb25zaGlwIHdoZXJlIHR1cGxlLlxuICAgKi9cbiAgX2lzUmVsYXRpb25zaGlwV2hlcmVPcGVyYXRvclR1cGxlKHR1cGxlVmFsdWUpIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkodHVwbGVWYWx1ZSkgfHwgdHVwbGVWYWx1ZS5sZW5ndGggPCAzKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG5cbiAgICByZXR1cm4gdHlwZW9mIHR1cGxlVmFsdWVbMF0gPT09IFwic3RyaW5nXCIgJiZcbiAgICAgIHR5cGVvZiB0dXBsZVZhbHVlWzFdID09PSBcInN0cmluZ1wiICYmXG4gICAgICByZWxhdGlvbnNoaXBXaGVyZU9wZXJhdG9ycy5oYXModHVwbGVWYWx1ZVsxXSlcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIG5vcm1hbGl6ZSByZWxhdGlvbnNoaXAgd2hlcmUgb3BlcmF0b3IgdHVwbGVzLlxuICAgKiBAcGFyYW0ge1JldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+fSB2YWx1ZSAtIENhbmRpZGF0ZSByZWxhdGlvbnNoaXAgd2hlcmUgdmFsdWUuXG4gICAqIEByZXR1cm5zIHtBcnJheTxbc3RyaW5nLCBcImVxXCIgfCBcIm5vdEVxXCIgfCBcImd0XCIgfCBcImd0ZXFcIiB8IFwibHRcIiB8IFwibHRlcVwiIHwgXCJsaWtlXCIsIHVua25vd25dPn0gLSBOb3JtYWxpemVkIHR1cGxlcy5cbiAgICovXG4gIF9ub3JtYWxpemVSZWxhdGlvbnNoaXBXaGVyZU9wZXJhdG9yVHVwbGVzKHZhbHVlKSB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHJlbGF0aW9uc2hpcCB3aGVyZSB0dXBsZSBjb250YWluZXIgdHlwZTogJHt0eXBlb2YgdmFsdWV9YClcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBOb3JtYWxpemVkLlxuICAgICAqIEB0eXBlIHtBcnJheTxbc3RyaW5nLCBcImVxXCIgfCBcIm5vdEVxXCIgfCBcImd0XCIgfCBcImd0ZXFcIiB8IFwibHRcIiB8IFwibHRlcVwiIHwgXCJsaWtlXCIsIHVua25vd25dPn0gKi9cbiAgICBjb25zdCBub3JtYWxpemVkID0gW11cbiAgICAvKipcbiAgICAgKiBBZGQgY29uZGl0aW9uLlxuICAgICAqIEBwYXJhbSB7UmV0dXJuVHlwZTx0eXBlb2YgSlNPTi5wYXJzZT59IGNvbmRpdGlvblZhbHVlIC0gQ2FuZGlkYXRlIG5lc3RlZCBjb25kaXRpb24uXG4gICAgICovXG4gICAgY29uc3QgYWRkQ29uZGl0aW9uID0gKGNvbmRpdGlvblZhbHVlKSA9PiB7XG4gICAgICBpZiAodGhpcy5faXNSZWxhdGlvbnNoaXBXaGVyZU9wZXJhdG9yVHVwbGUoY29uZGl0aW9uVmFsdWUpKSB7XG4gICAgICAgIGNvbnN0IHR1cGxlID0gLyoqIEB0eXBlIHtbc3RyaW5nLCBcImVxXCIgfCBcIm5vdEVxXCIgfCBcImd0XCIgfCBcImd0ZXFcIiB8IFwibHRcIiB8IFwibHRlcVwiIHwgXCJsaWtlXCIgfCBcIj5cIiB8IFwiPj1cIiB8IFwiPFwiIHwgXCI8PVwiLCB1bmtub3duLCAuLi5BcnJheTx1bmtub3duPl19ICovIChjb25kaXRpb25WYWx1ZSlcbiAgICAgICAgY29uc3Qgbm9ybWFsaXplZE9wZXJhdG9yID0gbm9ybWFsaXplUmVsYXRpb25zaGlwV2hlcmVPcGVyYXRvcih0dXBsZVsxXSlcblxuICAgICAgICBub3JtYWxpemVkLnB1c2goW1xuICAgICAgICAgIHR1cGxlWzBdLFxuICAgICAgICAgIG5vcm1hbGl6ZWRPcGVyYXRvcixcbiAgICAgICAgICB0dXBsZVsyXVxuICAgICAgICBdKVxuXG4gICAgICAgIGlmICh0dXBsZS5sZW5ndGggPiAzKSB7XG4gICAgICAgICAgZm9yIChsZXQgaW5kZXggPSAzOyBpbmRleCA8IHR1cGxlLmxlbmd0aDsgaW5kZXggKz0gMSkge1xuICAgICAgICAgICAgYWRkQ29uZGl0aW9uKHR1cGxlW2luZGV4XSlcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGNvbmRpdGlvblZhbHVlKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJSZWxhdGlvbnNoaXAgd2hlcmUgY29uZGl0aW9ucyBtdXN0IGJlIHR1cGxlc1wiKVxuICAgICAgfVxuXG4gICAgICBjb25kaXRpb25WYWx1ZS5mb3JFYWNoKChuZXN0ZWRDb25kaXRpb25WYWx1ZSkgPT4ge1xuICAgICAgICBhZGRDb25kaXRpb24obmVzdGVkQ29uZGl0aW9uVmFsdWUpXG4gICAgICB9KVxuICAgIH1cblxuICAgIGFkZENvbmRpdGlvbih2YWx1ZSlcblxuICAgIGlmIChub3JtYWxpemVkLmxlbmd0aCA8IDEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlJlbGF0aW9uc2hpcCB3aGVyZSB0dXBsZSBjb250YWluZXIgY2Fubm90IGJlIGVtcHR5XCIpXG4gICAgfVxuXG4gICAgcmV0dXJuIG5vcm1hbGl6ZWRcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIGlzIHJlbGF0aW9uc2hpcCB3aGVyZSBvcGVyYXRvciB0dXBsZSBjb250YWluZXIuXG4gICAqIEBwYXJhbSB7UmV0dXJuVHlwZTx0eXBlb2YgSlNPTi5wYXJzZT59IHZhbHVlIC0gQ2FuZGlkYXRlIHJlbGF0aW9uc2hpcCB3aGVyZSB2YWx1ZS5cbiAgICogQHJldHVybnMge2Jvb2xlYW59IC0gV2hldGhlciB2YWx1ZSBjYW4gYmUgbm9ybWFsaXplZCB0byByZWxhdGlvbnNoaXAgdHVwbGVzLlxuICAgKi9cbiAgX2lzUmVsYXRpb25zaGlwV2hlcmVPcGVyYXRvclR1cGxlQ29udGFpbmVyKHZhbHVlKSB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuX25vcm1hbGl6ZVJlbGF0aW9uc2hpcFdoZXJlT3BlcmF0b3JUdXBsZXModmFsdWUpXG5cbiAgICAgIHJldHVybiB0cnVlXG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUnVucyB3aGVyZSBzcWxmcm9tIHJlbGF0aW9uc2hpcCB3aGVyZSBvcGVyYXRvciB0dXBsZXMuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gUmVsYXRpb25zaGlwIHdoZXJlIG9wdGlvbnMuXG4gICAqIEBwYXJhbSB7dHlwZW9mIGltcG9ydChcIi4uL3JlY29yZC9pbmRleC5qc1wiKS5kZWZhdWx0fSBhcmdzLm1vZGVsQ2xhc3MgLSBSZWxhdGlvbnNoaXAgbW9kZWwgY2xhc3MuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhcmdzLnRhYmxlTmFtZSAtIFJlbGF0aW9uc2hpcCB0YWJsZSByZWZlcmVuY2UgbmFtZS5cbiAgICogQHBhcmFtIHtBcnJheTxbc3RyaW5nLCBcImVxXCIgfCBcIm5vdEVxXCIgfCBcImd0XCIgfCBcImd0ZXFcIiB8IFwibHRcIiB8IFwibHRlcVwiIHwgXCJsaWtlXCIsIHVua25vd25dPn0gYXJncy50dXBsZXMgLSBPcGVyYXRvciB0dXBsZXMuXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IC0gU1FMIHdoZXJlIGZyYWdtZW50LlxuICAgKi9cbiAgX3doZXJlU1FMRnJvbVJlbGF0aW9uc2hpcFdoZXJlT3BlcmF0b3JUdXBsZXMoe21vZGVsQ2xhc3MsIHRhYmxlTmFtZSwgdHVwbGVzfSkge1xuICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLmdldE9wdGlvbnMoKVxuICAgIGxldCBzcWwgPSBcIlwiXG4gICAgbGV0IGluZGV4ID0gMFxuXG4gICAgdHVwbGVzLmZvckVhY2goKFthdHRyaWJ1dGVOYW1lLCBvcGVyYXRvciwgd2hlcmVWYWx1ZV0pID0+IHtcbiAgICAgIGlmIChpbmRleCA+IDApIHNxbCArPSBcIiBBTkQgXCJcblxuICAgICAgY29uc3QgY29sdW1uTmFtZSA9IHRoaXMuX3Jlc29sdmVDb2x1bW5OYW1lKG1vZGVsQ2xhc3MsIGF0dHJpYnV0ZU5hbWUpXG5cbiAgICAgIGlmICghY29sdW1uTmFtZSkgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIGF0dHJpYnV0ZSBcIiR7YXR0cmlidXRlTmFtZX1cIiBmb3IgJHttb2RlbENsYXNzLm5hbWV9YClcblxuICAgICAgY29uc3Qgbm9ybWFsaXplZFZhbHVlID0gdGhpcy5fbm9ybWFsaXplU3FsaXRlQm9vbGVhblZhbHVlKHtcbiAgICAgICAgY29sdW1uTmFtZSxcbiAgICAgICAgbW9kZWxDbGFzcyxcbiAgICAgICAgdmFsdWU6IHdoZXJlVmFsdWVcbiAgICAgIH0pXG4gICAgICBjb25zdCB0eXBlZFZhbHVlID0gdGhpcy5fbm9ybWFsaXplVmFsdWVGb3JDb2x1bW5UeXBlKHtcbiAgICAgICAgY29sdW1uTmFtZSxcbiAgICAgICAgbW9kZWxDbGFzcyxcbiAgICAgICAgdmFsdWU6IG5vcm1hbGl6ZWRWYWx1ZVxuICAgICAgfSlcbiAgICAgIGNvbnN0IGNvbHVtblR5cGUgPSBtb2RlbENsYXNzLmdldENvbHVtblR5cGVCeU5hbWUoY29sdW1uTmFtZSlcbiAgICAgIGNvbnN0IGRyaXZlclR5cGUgPSB0aGlzLmdldFF1ZXJ5KCkuZHJpdmVyLmdldFR5cGUoKVxuXG4gICAgICBpZiAodHlwZWRWYWx1ZSA9PT0gTk9fTUFUQ0gpIHtcbiAgICAgICAgaWYgKG9wZXJhdG9yID09PSBcIm5vdEVxXCIpIHtcbiAgICAgICAgICBzcWwgKz0gXCIxPTFcIlxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNxbCArPSBcIjE9MFwiXG4gICAgICAgIH1cbiAgICAgICAgaW5kZXggKz0gMVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgbGV0IGNvbHVtblNxbCA9IGAke29wdGlvbnMucXVvdGVUYWJsZU5hbWUodGFibGVOYW1lKX0uJHtvcHRpb25zLnF1b3RlQ29sdW1uTmFtZShjb2x1bW5OYW1lKX1gXG5cbiAgICAgIGlmIChkcml2ZXJUeXBlID09IFwibXNzcWxcIiAmJiB0eXBlb2Ygd2hlcmVWYWx1ZSA9PT0gXCJzdHJpbmdcIiAmJiBjb2x1bW5UeXBlPy50b0xvd2VyQ2FzZSgpID09IFwidGV4dFwiKSB7XG4gICAgICAgIGNvbHVtblNxbCA9IGBDQVNUKCR7Y29sdW1uU3FsfSBBUyBOVkFSQ0hBUihNQVgpKWBcbiAgICAgIH1cblxuICAgICAgaWYgKG9wZXJhdG9yID09PSBcImVxXCIpIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodHlwZWRWYWx1ZSkpIHtcbiAgICAgICAgICBpZiAodHlwZWRWYWx1ZS5sZW5ndGggPCAxKSB7XG4gICAgICAgICAgICBzcWwgKz0gXCIxPTBcIlxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzcWwgKz0gYCR7Y29sdW1uU3FsfSBJTiAoJHt0eXBlZFZhbHVlLm1hcCgodmFsdWUpID0+IG9wdGlvbnMucXVvdGUodmFsdWUpKS5qb2luKFwiLCBcIil9KWBcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZWRWYWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICAgIHNxbCArPSBgJHtjb2x1bW5TcWx9IElTIE5VTExgXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3FsICs9IGAke2NvbHVtblNxbH0gPSAke29wdGlvbnMucXVvdGUodHlwZWRWYWx1ZSl9YFxuICAgICAgICB9XG5cbiAgICAgICAgaW5kZXggKz0gMVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgaWYgKG9wZXJhdG9yID09PSBcIm5vdEVxXCIpIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodHlwZWRWYWx1ZSkpIHtcbiAgICAgICAgICBpZiAodHlwZWRWYWx1ZS5sZW5ndGggPCAxKSB7XG4gICAgICAgICAgICBzcWwgKz0gXCIxPTFcIlxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzcWwgKz0gYCR7Y29sdW1uU3FsfSBOT1QgSU4gKCR7dHlwZWRWYWx1ZS5tYXAoKHZhbHVlKSA9PiBvcHRpb25zLnF1b3RlKHZhbHVlKSkuam9pbihcIiwgXCIpfSlgXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHR5cGVkVmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgICBzcWwgKz0gYCR7Y29sdW1uU3FsfSBJUyBOT1QgTlVMTGBcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzcWwgKz0gYCR7Y29sdW1uU3FsfSAhPSAke29wdGlvbnMucXVvdGUodHlwZWRWYWx1ZSl9YFxuICAgICAgICB9XG5cbiAgICAgICAgaW5kZXggKz0gMVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodHlwZWRWYWx1ZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBPcGVyYXRvciBcIiR7b3BlcmF0b3J9XCIgZG9lcyBub3Qgc3VwcG9ydCBhcnJheSB2YWx1ZXMgZm9yICR7bW9kZWxDbGFzcy5uYW1lfS4ke2F0dHJpYnV0ZU5hbWV9YClcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVkVmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBPcGVyYXRvciBcIiR7b3BlcmF0b3J9XCIgZG9lcyBub3Qgc3VwcG9ydCBudWxsIHZhbHVlcyBmb3IgJHttb2RlbENsYXNzLm5hbWV9LiR7YXR0cmlidXRlTmFtZX1gKVxuICAgICAgfVxuXG4gICAgICBjb25zdCBvcGVyYXRvck1hcCA9IHtcbiAgICAgICAgZ3Q6IFwiPlwiLFxuICAgICAgICBndGVxOiBcIj49XCIsXG4gICAgICAgIGxpa2U6IFwiTElLRVwiLFxuICAgICAgICBsdDogXCI8XCIsXG4gICAgICAgIGx0ZXE6IFwiPD1cIlxuICAgICAgfVxuXG4gICAgICBzcWwgKz0gYCR7Y29sdW1uU3FsfSAke29wZXJhdG9yTWFwW29wZXJhdG9yXX0gJHtvcHRpb25zLnF1b3RlKHR5cGVkVmFsdWUpfWBcbiAgICAgIGluZGV4ICs9IDFcbiAgICB9KVxuXG4gICAgcmV0dXJuIHNxbFxuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgbm9ybWFsaXplIHNxbGl0ZSBib29sZWFuIHZhbHVlLlxuICAgKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIE9wdGlvbnMgb2JqZWN0LlxuICAgKiBAcGFyYW0ge3R5cGVvZiBpbXBvcnQoXCIuLi9yZWNvcmQvaW5kZXguanNcIikuZGVmYXVsdH0gYXJncy5tb2RlbENsYXNzIC0gTW9kZWwgY2xhc3MuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhcmdzLmNvbHVtbk5hbWUgLSBDb2x1bW4gbmFtZS5cbiAgICogQHBhcmFtIHtSZXR1cm5UeXBlPHR5cGVvZiBKU09OLnBhcnNlPn0gYXJncy52YWx1ZSAtIFZhbHVlIHRvIG5vcm1hbGl6ZS5cbiAgICogQHJldHVybnMge1JldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+fSAtIE5vcm1hbGl6ZWQgdmFsdWUuXG4gICAqL1xuICBfbm9ybWFsaXplU3FsaXRlQm9vbGVhblZhbHVlKHttb2RlbENsYXNzLCBjb2x1bW5OYW1lLCB2YWx1ZX0pIHtcbiAgICBpZiAobW9kZWxDbGFzcy5nZXREYXRhYmFzZVR5cGUoKSAhPSBcInNxbGl0ZVwiKSByZXR1cm4gdmFsdWVcblxuICAgIGNvbnN0IGNvbHVtblR5cGUgPSBtb2RlbENsYXNzLmdldENvbHVtblR5cGVCeU5hbWUoY29sdW1uTmFtZSlcblxuICAgIGlmICghY29sdW1uVHlwZSkgcmV0dXJuIHZhbHVlXG4gICAgaWYgKGNvbHVtblR5cGUudG9Mb3dlckNhc2UoKSAhPT0gXCJib29sZWFuXCIpIHJldHVybiB2YWx1ZVxuXG4gICAgLyoqXG4gICAgICogTm9ybWFsaXplLlxuICAgICAqIEBwYXJhbSB7UmV0dXJuVHlwZTx0eXBlb2YgSlNPTi5wYXJzZT59IGVudHJ5IC0gVmFsdWUgdG8gbm9ybWFsaXplLlxuICAgICAqIEByZXR1cm5zIHtSZXR1cm5UeXBlPHR5cGVvZiBKU09OLnBhcnNlPn0gLSBTUUxpdGUgcHJlZGljYXRlIHZhbHVlIHdpdGggYm9vbGVhbnMgZW5jb2RlZCBhcyAxIG9yIDAuXG4gICAgICovXG4gICAgY29uc3Qgbm9ybWFsaXplID0gKGVudHJ5KSA9PiB7XG4gICAgICBpZiAoZW50cnkgPT09IHRydWUpIHJldHVybiAxXG4gICAgICBpZiAoZW50cnkgPT09IGZhbHNlKSByZXR1cm4gMFxuICAgICAgcmV0dXJuIGVudHJ5XG4gICAgfVxuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICByZXR1cm4gdmFsdWUubWFwKChlbnRyeSkgPT4gbm9ybWFsaXplKGVudHJ5KSlcbiAgICB9XG5cbiAgICByZXR1cm4gbm9ybWFsaXplKHZhbHVlKVxuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgbm9ybWFsaXplIHZhbHVlIGZvciBjb2x1bW4gdHlwZS5cbiAgICogQHBhcmFtIHtvYmplY3R9IGFyZ3MgLSBPcHRpb25zIG9iamVjdC5cbiAgICogQHBhcmFtIHt0eXBlb2YgaW1wb3J0KFwiLi4vcmVjb3JkL2luZGV4LmpzXCIpLmRlZmF1bHR9IGFyZ3MubW9kZWxDbGFzcyAtIE1vZGVsIGNsYXNzLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYXJncy5jb2x1bW5OYW1lIC0gQ29sdW1uIG5hbWUuXG4gICAqIEBwYXJhbSB7UmV0dXJuVHlwZTx0eXBlb2YgSlNPTi5wYXJzZT59IGFyZ3MudmFsdWUgLSBWYWx1ZSB0byBub3JtYWxpemUuXG4gICAqIEByZXR1cm5zIHtSZXR1cm5UeXBlPHR5cGVvZiBKU09OLnBhcnNlPn0gLSBOb3JtYWxpemVkIHZhbHVlLlxuICAgKi9cbiAgX25vcm1hbGl6ZVZhbHVlRm9yQ29sdW1uVHlwZSh7bW9kZWxDbGFzcywgY29sdW1uTmFtZSwgdmFsdWV9KSB7XG4gICAgY29uc3QgY29sdW1uVHlwZSA9IG1vZGVsQ2xhc3MuZ2V0Q29sdW1uVHlwZUJ5TmFtZShjb2x1bW5OYW1lKVxuXG4gICAgaWYgKCFjb2x1bW5UeXBlKSByZXR1cm4gdmFsdWVcblxuICAgIGNvbnN0IG5vcm1hbGl6ZWRUeXBlID0gY29sdW1uVHlwZS50b0xvd2VyQ2FzZSgpXG4gICAgY29uc3Qgc3RyaW5nVHlwZXMgPSBuZXcgU2V0KFtcImNoYXJcIiwgXCJ2YXJjaGFyXCIsIFwibnZhcmNoYXJcIiwgXCJzdHJpbmdcIiwgXCJlbnVtXCIsIFwianNvblwiLCBcImpzb25iXCIsIFwiY2l0ZXh0XCIsIFwiYmluYXJ5XCIsIFwidmFyYmluYXJ5XCJdKVxuICAgIGNvbnN0IGlzVXVpZFR5cGUgPSBub3JtYWxpemVkVHlwZS5pbmNsdWRlcyhcInV1aWRcIilcbiAgICBjb25zdCBzaG91bGRDb2VyY2VUb1N0cmluZyA9IG5vcm1hbGl6ZWRUeXBlLmluY2x1ZGVzKFwidXVpZFwiKSB8fFxuICAgICAgbm9ybWFsaXplZFR5cGUuaW5jbHVkZXMoXCJ0ZXh0XCIpIHx8XG4gICAgICBzdHJpbmdUeXBlcy5oYXMobm9ybWFsaXplZFR5cGUpXG5cbiAgICAvKipcbiAgICAgKiBOb3JtYWxpemUuXG4gICAgICogQHBhcmFtIHtSZXR1cm5UeXBlPHR5cGVvZiBKU09OLnBhcnNlPn0gZW50cnkgLSBWYWx1ZSB0byBub3JtYWxpemUuXG4gICAgICogQHJldHVybnMge1JldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+fSAtIENvbHVtbi1jb21wYXRpYmxlIHByZWRpY2F0ZSB2YWx1ZSwgb3IgdGhlIG5vLW1hdGNoIHNlbnRpbmVsIGZvciBudW1lcmljIFVVSURzLlxuICAgICAqL1xuICAgIGNvbnN0IG5vcm1hbGl6ZSA9IChlbnRyeSkgPT4ge1xuICAgICAgaWYgKGlzVXVpZFR5cGUgJiYgdHlwZW9mIGVudHJ5ID09PSBcIm51bWJlclwiKSByZXR1cm4gTk9fTUFUQ0hcbiAgICAgIGlmICghc2hvdWxkQ29lcmNlVG9TdHJpbmcgfHwgdHlwZW9mIGVudHJ5ICE9PSBcIm51bWJlclwiKSByZXR1cm4gZW50cnlcblxuICAgICAgcmV0dXJuIFN0cmluZyhlbnRyeSlcbiAgICB9XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSB2YWx1ZS5tYXAoKGVudHJ5KSA9PiBub3JtYWxpemUoZW50cnkpKS5maWx0ZXIoKGVudHJ5KSA9PiBlbnRyeSAhPT0gTk9fTUFUQ0gpXG5cbiAgICAgIGlmIChpc1V1aWRUeXBlICYmIG5vcm1hbGl6ZWQubGVuZ3RoID09PSAwKSByZXR1cm4gTk9fTUFUQ0hcblxuICAgICAgcmV0dXJuIG5vcm1hbGl6ZWRcbiAgICB9XG5cbiAgICBjb25zdCBub3JtYWxpemVkID0gbm9ybWFsaXplKHZhbHVlKVxuXG4gICAgaWYgKG5vcm1hbGl6ZWQgPT09IE5PX01BVENIKSByZXR1cm4gTk9fTUFUQ0hcblxuICAgIHJldHVybiBub3JtYWxpemVkXG4gIH1cblxuICAvKipcbiAgICogUnVucyB3aGVyZSBzcWxmcm9tIGhhc2guXG4gICAqIEBwYXJhbSB7V2hlcmVIYXNofSBoYXNoIC0gSGFzaC5cbiAgICogQHBhcmFtIHt0eXBlb2YgaW1wb3J0KFwiLi4vcmVjb3JkL2luZGV4LmpzXCIpLmRlZmF1bHR9IG1vZGVsQ2xhc3MgLSBNb2RlbCBjbGFzcy5cbiAgICogQHBhcmFtIHtzdHJpbmdbXX0gcGF0aCAtIEpvaW4gcGF0aC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFt0YWJsZU5hbWVdIC0gVGFibGUgbmFtZS5cbiAgICogQHBhcmFtIHtudW1iZXJ9IGluZGV4IC0gSW5kZXggdmFsdWUuXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IC0gU1FMIHN0cmluZy5cbiAgICovXG4gIF93aGVyZVNRTEZyb21IYXNoKGhhc2gsIG1vZGVsQ2xhc3MsIHBhdGgsIHRhYmxlTmFtZSwgaW5kZXggPSAwKSB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMuZ2V0T3B0aW9ucygpXG4gICAgY29uc3QgbW9kZWxRdWVyeSA9IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi9tb2RlbC1jbGFzcy1xdWVyeS5qc1wiKS5kZWZhdWx0fSAqLyAodGhpcy5xdWVyeSlcbiAgICBsZXQgc3FsID0gXCJcIlxuXG4gICAgZm9yIChjb25zdCB3aGVyZUtleSBpbiBoYXNoKSB7XG4gICAgICBjb25zdCB3aGVyZVZhbHVlID0gaGFzaFt3aGVyZUtleV1cbiAgICAgIGNvbnN0IHJlbGF0aW9uc2hpcCA9IHRoaXMuX2dldFJlbGF0aW9uc2hpcChtb2RlbENsYXNzLCB3aGVyZUtleSlcbiAgICAgIGNvbnN0IHR1cGxlcyA9IHRoaXMuX2lzUmVsYXRpb25zaGlwV2hlcmVPcGVyYXRvclR1cGxlQ29udGFpbmVyKHdoZXJlVmFsdWUpXG4gICAgICAgID8gdGhpcy5fbm9ybWFsaXplUmVsYXRpb25zaGlwV2hlcmVPcGVyYXRvclR1cGxlcyh3aGVyZVZhbHVlKVxuICAgICAgICA6IG51bGxcbiAgICAgIGNvbnN0IHJlc29sdmVkQ29sdW1uTmFtZSA9IHRoaXMuX3Jlc29sdmVDb2x1bW5OYW1lKG1vZGVsQ2xhc3MsIHdoZXJlS2V5KVxuXG4gICAgICBpZiAocmVsYXRpb25zaGlwICYmIHR1cGxlcykge1xuICAgICAgICBpZiAoaW5kZXggPiAwKSBzcWwgKz0gXCIgQU5EIFwiXG5cbiAgICAgICAgY29uc3QgdGFyZ2V0TW9kZWxDbGFzcyA9IHJlbGF0aW9uc2hpcC5nZXRUYXJnZXRNb2RlbENsYXNzKClcblxuICAgICAgICBpZiAoIXRhcmdldE1vZGVsQ2xhc3MpIHRocm93IG5ldyBFcnJvcihgUmVsYXRpb25zaGlwIFwiJHt3aGVyZUtleX1cIiBmb3IgJHttb2RlbENsYXNzLm5hbWV9IGhhcyBubyB0YXJnZXQgbW9kZWwgY2xhc3NgKVxuXG4gICAgICAgIGNvbnN0IG5lc3RlZFBhdGggPSBwYXRoLmNvbmNhdChbd2hlcmVLZXldKVxuICAgICAgICBjb25zdCBuZXN0ZWRUYWJsZU5hbWUgPSBtb2RlbFF1ZXJ5LmdldFRhYmxlUmVmZXJlbmNlRm9ySm9pbiguLi5uZXN0ZWRQYXRoKVxuXG4gICAgICAgIHNxbCArPSB0aGlzLl93aGVyZVNRTEZyb21SZWxhdGlvbnNoaXBXaGVyZU9wZXJhdG9yVHVwbGVzKHtcbiAgICAgICAgICBtb2RlbENsYXNzOiB0YXJnZXRNb2RlbENsYXNzLFxuICAgICAgICAgIHRhYmxlTmFtZTogbmVzdGVkVGFibGVOYW1lLFxuICAgICAgICAgIHR1cGxlc1xuICAgICAgICB9KVxuICAgICAgfSBlbHNlIGlmIChyZXNvbHZlZENvbHVtbk5hbWUgJiYgdHVwbGVzKSB7XG4gICAgICAgIGlmIChpbmRleCA+IDApIHNxbCArPSBcIiBBTkQgXCJcblxuICAgICAgICBzcWwgKz0gdGhpcy5fd2hlcmVTUUxGcm9tUmVsYXRpb25zaGlwV2hlcmVPcGVyYXRvclR1cGxlcyh7XG4gICAgICAgICAgbW9kZWxDbGFzcyxcbiAgICAgICAgICB0YWJsZU5hbWU6IHRhYmxlTmFtZSB8fCBtb2RlbFF1ZXJ5LmdldFRhYmxlUmVmZXJlbmNlRm9ySm9pbiguLi5wYXRoKSxcbiAgICAgICAgICB0dXBsZXNcbiAgICAgICAgfSlcbiAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh3aGVyZVZhbHVlKSAmJiB3aGVyZVZhbHVlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBpZiAoaW5kZXggPiAwKSBzcWwgKz0gXCIgQU5EIFwiXG4gICAgICAgIHNxbCArPSBcIjE9MFwiXG4gICAgICB9IGVsc2UgaWYgKGlzUGxhaW5PYmplY3Qod2hlcmVWYWx1ZSkpIHtcbiAgICAgICAgaWYgKCFyZWxhdGlvbnNoaXApIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gcmVsYXRpb25zaGlwIFwiJHt3aGVyZUtleX1cIiBmb3IgJHttb2RlbENsYXNzLm5hbWV9YClcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHRhcmdldE1vZGVsQ2xhc3MgPSByZWxhdGlvbnNoaXAuZ2V0VGFyZ2V0TW9kZWxDbGFzcygpXG5cbiAgICAgICAgaWYgKCF0YXJnZXRNb2RlbENsYXNzKSB0aHJvdyBuZXcgRXJyb3IoYFJlbGF0aW9uc2hpcCBcIiR7d2hlcmVLZXl9XCIgZm9yICR7bW9kZWxDbGFzcy5uYW1lfSBoYXMgbm8gdGFyZ2V0IG1vZGVsIGNsYXNzYClcblxuICAgICAgICBjb25zdCBuZXN0ZWRIYXNoID0gLyoqIEB0eXBlIHtXaGVyZUhhc2h9ICovICh3aGVyZVZhbHVlKVxuICAgICAgICBjb25zdCBuZXN0ZWRQYXRoID0gcGF0aC5jb25jYXQoW3doZXJlS2V5XSlcbiAgICAgICAgY29uc3QgbmVzdGVkVGFibGVOYW1lID0gbW9kZWxRdWVyeS5nZXRUYWJsZVJlZmVyZW5jZUZvckpvaW4oLi4ubmVzdGVkUGF0aClcblxuICAgICAgICBzcWwgKz0gdGhpcy5fd2hlcmVTUUxGcm9tSGFzaChuZXN0ZWRIYXNoLCB0YXJnZXRNb2RlbENsYXNzLCBuZXN0ZWRQYXRoLCBuZXN0ZWRUYWJsZU5hbWUsIGluZGV4KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGluZGV4ID4gMCkgc3FsICs9IFwiIEFORCBcIlxuXG4gICAgICAgIGNvbnN0IGNvbHVtbk5hbWUgPSB0aGlzLl9yZXNvbHZlQ29sdW1uTmFtZShtb2RlbENsYXNzLCB3aGVyZUtleSlcblxuICAgICAgICBpZiAoIWNvbHVtbk5hbWUpIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBhdHRyaWJ1dGUgXCIke3doZXJlS2V5fVwiIGZvciAke21vZGVsQ2xhc3MubmFtZX1gKVxuXG4gICAgICAgIGNvbnN0IGNvbHVtblR5cGUgPSBtb2RlbENsYXNzLmdldENvbHVtblR5cGVCeU5hbWUoY29sdW1uTmFtZSlcblxuICAgICAgICBjb25zdCBub3JtYWxpemVkVmFsdWUgPSB0aGlzLl9ub3JtYWxpemVTcWxpdGVCb29sZWFuVmFsdWUoe1xuICAgICAgICAgIGNvbHVtbk5hbWUsXG4gICAgICAgICAgbW9kZWxDbGFzcyxcbiAgICAgICAgICB2YWx1ZTogd2hlcmVWYWx1ZVxuICAgICAgICB9KVxuICAgICAgICBjb25zdCB0eXBlZFZhbHVlID0gdGhpcy5fbm9ybWFsaXplVmFsdWVGb3JDb2x1bW5UeXBlKHtcbiAgICAgICAgICBjb2x1bW5OYW1lLFxuICAgICAgICAgIG1vZGVsQ2xhc3MsXG4gICAgICAgICAgdmFsdWU6IG5vcm1hbGl6ZWRWYWx1ZVxuICAgICAgICB9KVxuXG4gICAgICAgIGlmICh0eXBlZFZhbHVlID09PSBOT19NQVRDSCkge1xuICAgICAgICAgIHNxbCArPSBcIjE9MFwiXG4gICAgICAgICAgaW5kZXgrK1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cblxuICAgICAgICBsZXQgY29sdW1uU3FsID0gYCR7b3B0aW9ucy5xdW90ZUNvbHVtbk5hbWUoY29sdW1uTmFtZSl9YFxuXG4gICAgICAgIGlmICh0YWJsZU5hbWUpIHtcbiAgICAgICAgICBjb2x1bW5TcWwgPSBgJHtvcHRpb25zLnF1b3RlVGFibGVOYW1lKHRhYmxlTmFtZSl9LiR7Y29sdW1uU3FsfWBcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGRyaXZlclR5cGUgPSB0aGlzLmdldFF1ZXJ5KCkuZHJpdmVyLmdldFR5cGUoKVxuXG4gICAgICAgIGlmIChkcml2ZXJUeXBlID09IFwibXNzcWxcIiAmJiB0eXBlb2Ygd2hlcmVWYWx1ZSA9PT0gXCJzdHJpbmdcIiAmJiBjb2x1bW5UeXBlPy50b0xvd2VyQ2FzZSgpID09IFwidGV4dFwiKSB7XG4gICAgICAgICAgY29sdW1uU3FsID0gYENBU1QoJHtjb2x1bW5TcWx9IEFTIE5WQVJDSEFSKE1BWCkpYFxuICAgICAgICB9XG5cbiAgICAgICAgc3FsICs9IGNvbHVtblNxbFxuXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHR5cGVkVmFsdWUpKSB7XG4gICAgICAgICAgc3FsICs9IGAgSU4gKCR7dHlwZWRWYWx1ZS5tYXAoKHZhbHVlKSA9PiBvcHRpb25zLnF1b3RlKHZhbHVlKSkuam9pbihcIiwgXCIpfSlgXG4gICAgICAgIH0gZWxzZSBpZiAodHlwZWRWYWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICAgIHNxbCArPSBcIiBJUyBOVUxMXCJcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzcWwgKz0gYCA9ICR7b3B0aW9ucy5xdW90ZSh0eXBlZFZhbHVlKX1gXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaW5kZXgrK1xuICAgIH1cblxuICAgIHJldHVybiBzcWxcbiAgfVxufVxuIl19
@@ -1,11 +1,16 @@
1
+ import WhereBase from "./where-base.js";
1
2
  export default class VelociousDatabaseQueryWhereNot extends WhereBase {
3
+ where: WhereBase;
4
+ query: import("./index.js").default;
2
5
  /**
3
6
  * Runs constructor.
4
7
  * @param {import("./where-base.js").default} where - Where clause.
5
8
  */
6
9
  constructor(where: import("./where-base.js").default);
7
- where: WhereBase;
8
- query: import("./index.js").default;
10
+ /**
11
+ * Runs to sql.
12
+ * @returns {string} - SQL string.
13
+ */
14
+ toSql(): string;
9
15
  }
10
- import WhereBase from "./where-base.js";
11
16
  //# sourceMappingURL=where-not.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"where-not.d.ts","sourceRoot":"","sources":["../../../../src/database/query/where-not.js"],"names":[],"mappings":"AAIA;IACE;;;OAGG;IACH,mBAFW,OAAO,iBAAiB,EAAE,OAAO,EAM3C;IAFC,iBAAkB;IAClB,oCAA6B;CAUhC;sBApBqB,iBAAiB"}
1
+ {"version":3,"file":"where-not.d.ts","sourceRoot":"","sources":["../../../../src/database/query/where-not.js"],"names":[],"mappings":"AAEA,OAAO,SAAS,MAAM,iBAAiB,CAAA;AAEvC,MAAM,CAAC,OAAO,OAAO,8BAA+B,SAAQ,SAAS;IAO5D,KAAK;IACL,KAAK;IAPZ;;;OAGG;IACH,YAAY,KAAK,EAFN,OAAO,iBAAiB,EAAE,OAEpB,EAIhB;IAED;;;OAGG;IACH,KAAK,IAFQ,MAAM,CAIlB;CACF"}
@@ -1,12 +1,13 @@
1
+ import WhereBase from "./where-base.js";
1
2
  export default class VelociousDatabaseQueryWhereHash extends WhereBase {
3
+ plain: string;
4
+ query: import("./index.js").default;
2
5
  /**
3
6
  * Runs constructor.
4
7
  * @param {import("./index.js").default} query - Query instance.
5
8
  * @param {string} plain - Plain.
6
9
  */
7
10
  constructor(query: import("./index.js").default, plain: string);
8
- plain: string;
9
- query: import("./index.js").default;
11
+ toSql(): string;
10
12
  }
11
- import WhereBase from "./where-base.js";
12
13
  //# sourceMappingURL=where-plain.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"where-plain.d.ts","sourceRoot":"","sources":["../../../../src/database/query/where-plain.js"],"names":[],"mappings":"AAIA;IACE;;;;OAIG;IACH,mBAHW,OAAO,YAAY,EAAE,OAAO,SAC5B,MAAM,EAMhB;IAFC,cAAkB;IAClB,oCAAkB;CAMrB;sBAjBqB,iBAAiB"}
1
+ {"version":3,"file":"where-plain.d.ts","sourceRoot":"","sources":["../../../../src/database/query/where-plain.js"],"names":[],"mappings":"AAEA,OAAO,SAAS,MAAM,iBAAiB,CAAA;AAEvC,MAAM,CAAC,OAAO,OAAO,+BAAgC,SAAQ,SAAS;IAQ7D,KAAK;IACL,KAAK;IARZ;;;;OAIG;IACH,YAAY,KAAK,EAHN,OAAO,YAAY,EAAE,OAGf,EAAE,KAAK,EAFb,MAEa,EAIvB;IAED,KAAK,WAEJ;CACF"}
@@ -1,13 +1,31 @@
1
+ export type WithCountEntry = {
2
+ /**
3
+ * - Attribute to set on each parent record holding the count.
4
+ */
5
+ attributeName: string;
6
+ /**
7
+ * - Has-many relationship whose rows are counted.
8
+ */
9
+ relationshipName: string;
10
+ /**
11
+ * - Optional extra where clause applied to the count query.
12
+ */
13
+ where: Record<string, ReturnType<typeof JSON.parse>> | undefined;
14
+ };
15
+ export type WithCountSpec = string | string[] | Record<string, boolean | {
16
+ relationship?: string;
17
+ where?: Record<string, ReturnType<typeof JSON.parse>>;
18
+ }>;
1
19
  /**
2
20
  * WithCountEntry type.
3
21
  * @typedef {object} WithCountEntry
4
22
  * @property {string} attributeName - Attribute to set on each parent record holding the count.
5
23
  * @property {string} relationshipName - Has-many relationship whose rows are counted.
6
- * @property {Record<string, ?> | undefined} where - Optional extra where clause applied to the count query.
24
+ * @property {Record<string, ReturnType<typeof JSON.parse>> | undefined} where - Optional extra where clause applied to the count query.
7
25
  */
8
26
  /**
9
27
  * Defines this typedef.
10
- * @typedef {string | string[] | Record<string, boolean | {relationship?: string, where?: Record<string, ?>}>} WithCountSpec
28
+ * @typedef {string | string[] | Record<string, boolean | {relationship?: string, where?: Record<string, ReturnType<typeof JSON.parse>>}>} WithCountSpec
11
29
  */
12
30
  /**
13
31
  * Normalize the flexible user-facing `.withCount(...)` argument into the
@@ -23,7 +41,7 @@
23
41
  * @param {WithCountSpec} spec - User-supplied spec.
24
42
  * @returns {WithCountEntry[]} - Normalized entries.
25
43
  */
26
- export function normalizeWithCount(spec: WithCountSpec): WithCountEntry[];
44
+ export declare function normalizeWithCount(spec: WithCountSpec): WithCountEntry[];
27
45
  /**
28
46
  * Run every withCount entry against the loaded parent records, attaching
29
47
  * the resulting counts as attributes on each record. Mirrors the
@@ -35,33 +53,9 @@ export function normalizeWithCount(spec: WithCountSpec): WithCountEntry[];
35
53
  * @param {WithCountEntry[]} args.entries - Normalized withCount entries.
36
54
  * @returns {Promise<void>}
37
55
  */
38
- export function runWithCount({ models, modelClass, entries }: {
56
+ export declare function runWithCount({ models, modelClass, entries }: {
39
57
  models: import("../record/index.js").default[];
40
58
  modelClass: typeof import("../record/index.js").default;
41
59
  entries: WithCountEntry[];
42
60
  }): Promise<void>;
43
- /**
44
- * WithCountEntry type.
45
- */
46
- export type WithCountEntry = {
47
- /**
48
- * - Attribute to set on each parent record holding the count.
49
- */
50
- attributeName: string;
51
- /**
52
- * - Has-many relationship whose rows are counted.
53
- */
54
- relationshipName: string;
55
- /**
56
- * - Optional extra where clause applied to the count query.
57
- */
58
- where: Record<string, unknown> | undefined;
59
- };
60
- /**
61
- * Defines this typedef.
62
- */
63
- export type WithCountSpec = string | string[] | Record<string, boolean | {
64
- relationship?: string;
65
- where?: Record<string, unknown>;
66
- }>;
67
61
  //# sourceMappingURL=with-count.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"with-count.d.ts","sourceRoot":"","sources":["../../../../src/database/query/with-count.js"],"names":[],"mappings":"AAEA;;;;;;GAMG;AAEH;;;GAGG;AAEH;;;;;;;;;;;;;GAaG;AACH,yCAHW,aAAa,GACX,cAAc,EAAE,CAuD5B;AAeD;;;;;;;;;;GAUG;AACH,8DALG;IAAqD,MAAM,EAAnD,OAAO,oBAAoB,EAAE,OAAO,EAAE;IACY,UAAU,EAA5D,cAAc,oBAAoB,EAAE,OAAO;IACpB,OAAO,EAA9B,cAAc,EAAE;CACxB,GAAU,OAAO,CAAC,IAAI,CAAC,CA2BzB;;;;;;;;mBAhIa,MAAM;;;;sBACN,MAAM;;;;WACN,MAAM,CAAC,MAAM,EAAE,OAAC,CAAC,GAAG,SAAS;;;;;4BAK9B,MAAM,GAAG,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,GAAG;IAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAC,CAAC,CAAA;CAAC,CAAC"}
1
+ {"version":3,"file":"with-count.d.ts","sourceRoot":"","sources":["../../../../src/database/query/with-count.js"],"names":[],"mappings":"AAIG,YAAkB,cAAc,GAChC;;;;IAAmB,aAAa,EAArB,MAAM,CACjB;;;;IAAmB,gBAAgB,EAAxB,MAAM,CACjB;;;;IAAsE,KAAK,EAAhE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,SAAS,CACtE;CAAA,CAAA;AAIE,YAAwI,aAAa,GAA3I,MAAM,GAAG,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,GAAG;IAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAA;CAAC,CAAC,CAAe;AAVxJ;;;;;;GAMG;AAEH;;;GAGG;AAEH;;;;;;;;;;;;;GAaG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAH5B,aAG4B,GAF1B,cAAc,EAAE,CAuD5B;AAeD;;;;;;;;;;GAUG;AACH,wBAAsB,YAAY,CAAC,EAAC,MAAM,EAAE,UAAU,EAAE,OAAO,EAAC,EAL7D;IAAqD,MAAM,EAAnD,OAAO,oBAAoB,EAAE,OAAO,EAAE,CAC9C;IAA0D,UAAU,EAA5D,cAAc,oBAAoB,EAAE,OAAO,CACnD;IAA+B,OAAO,EAA9B,cAAc,EAAE,CACxB;CAE6D,GAFnD,OAAO,CAAC,IAAI,CAAC,CA2BzB"}
@@ -4,11 +4,11 @@
4
4
  * @typedef {object} WithCountEntry
5
5
  * @property {string} attributeName - Attribute to set on each parent record holding the count.
6
6
  * @property {string} relationshipName - Has-many relationship whose rows are counted.
7
- * @property {Record<string, ?> | undefined} where - Optional extra where clause applied to the count query.
7
+ * @property {Record<string, ReturnType<typeof JSON.parse>> | undefined} where - Optional extra where clause applied to the count query.
8
8
  */
9
9
  /**
10
10
  * Defines this typedef.
11
- * @typedef {string | string[] | Record<string, boolean | {relationship?: string, where?: Record<string, ?>}>} WithCountSpec
11
+ * @typedef {string | string[] | Record<string, boolean | {relationship?: string, where?: Record<string, ReturnType<typeof JSON.parse>>}>} WithCountSpec
12
12
  */
13
13
  /**
14
14
  * Normalize the flexible user-facing `.withCount(...)` argument into the
@@ -54,7 +54,7 @@ export function normalizeWithCount(spec) {
54
54
  if (typeof value === "object" && value !== null) {
55
55
  /**
56
56
  * Options.
57
- * @type {{relationship?: string, where?: Record<string, ?>}} */
57
+ * @type {{relationship?: string, where?: Record<string, ReturnType<typeof JSON.parse>>}} */
58
58
  const options = value;
59
59
  entries.push({
60
60
  attributeName: key,
@@ -139,19 +139,19 @@ function queryForEntry({ entry, modelClass, parentIds, sourceModel }) {
139
139
  }
140
140
  const foreignKey = relationship.getForeignKey();
141
141
  /**
142
- * Where conditions.
143
- * @type {Record<string, ?>} */
144
- const whereConditions = { [foreignKey]: parentIds };
142
+ * Mandatory cohort conditions.
143
+ * @type {Record<string, ReturnType<typeof JSON.parse>>} */
144
+ const mandatoryWhereConditions = { [foreignKey]: parentIds };
145
145
  if (relationship.getPolymorphic && relationship.getPolymorphic()) {
146
146
  const typeColumn = relationship.getPolymorphicTypeColumn();
147
- whereConditions[typeColumn] = modelClass.getModelName();
148
- }
149
- if (entry.where) {
150
- Object.assign(whereConditions, entry.where);
147
+ mandatoryWhereConditions[typeColumn] = modelClass.getModelName();
151
148
  }
152
149
  const baseQuery = sourceModel.queryForModel(targetModelClass);
153
150
  baseQuery._forceQualifyBaseTable = true;
154
- baseQuery.where(whereConditions);
151
+ baseQuery.where(mandatoryWhereConditions);
152
+ if (entry.where) {
153
+ baseQuery.where(entry.where);
154
+ }
155
155
  const countQuery = relationship.applyScope(baseQuery);
156
156
  countQuery._preload = {};
157
157
  countQuery.reselect();
@@ -207,4 +207,4 @@ function attachCounts({ counts, entry, models, primaryKey }) {
207
207
  model._setAssociationCount(entry.attributeName, resolvedCount);
208
208
  }
209
209
  }
210
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC1jb3VudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kYXRhYmFzZS9xdWVyeS93aXRoLWNvdW50LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWjs7Ozs7O0dBTUc7QUFFSDs7O0dBR0c7QUFFSDs7Ozs7Ozs7Ozs7OztHQWFHO0FBQ0gsTUFBTSxVQUFVLGtCQUFrQixDQUFDLElBQUk7SUFDckMsSUFBSSxJQUFJLElBQUksSUFBSTtRQUFFLE9BQU8sRUFBRSxDQUFBO0lBRTNCLElBQUksT0FBTyxJQUFJLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDN0IsT0FBTyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO0lBQzlCLENBQUM7SUFFRCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUN4QixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUMzQixJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVEsRUFBRSxDQUFDO2dCQUM3QixNQUFNLElBQUksS0FBSyxDQUFDLGdEQUFnRCxPQUFPLElBQUksRUFBRSxDQUFDLENBQUE7WUFDaEYsQ0FBQztZQUVELE9BQU8sYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFBO1FBQzVCLENBQUMsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUVELElBQUksT0FBTyxJQUFJLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDN0I7O3NDQUU4QjtRQUM5QixNQUFNLE9BQU8sR0FBRyxFQUFFLENBQUE7UUFFbEIsS0FBSyxNQUFNLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUNoRCxJQUFJLEtBQUssS0FBSyxJQUFJLEVBQUUsQ0FBQztnQkFDbkIsT0FBTyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQTtnQkFDaEMsU0FBUTtZQUNWLENBQUM7WUFFRCxJQUFJLEtBQUssS0FBSyxLQUFLLEVBQUUsQ0FBQztnQkFDcEIsU0FBUTtZQUNWLENBQUM7WUFFRCxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxLQUFLLEtBQUssSUFBSSxFQUFFLENBQUM7Z0JBQ2hEOztnRkFFZ0U7Z0JBQ2hFLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQTtnQkFDckIsT0FBTyxDQUFDLElBQUksQ0FBQztvQkFDWCxhQUFhLEVBQUUsR0FBRztvQkFDbEIsZ0JBQWdCLEVBQUUsT0FBTyxDQUFDLFlBQVksSUFBSSxHQUFHO29CQUM3QyxLQUFLLEVBQUUsT0FBTyxDQUFDLEtBQUs7aUJBQ3JCLENBQUMsQ0FBQTtnQkFDRixTQUFRO1lBQ1YsQ0FBQztZQUVELE1BQU0sSUFBSSxLQUFLLENBQUMsK0JBQStCLEdBQUcsS0FBSyxPQUFPLEtBQUssRUFBRSxDQUFDLENBQUE7UUFDeEUsQ0FBQztRQUVELE9BQU8sT0FBTyxDQUFBO0lBQ2hCLENBQUM7SUFFRCxNQUFNLElBQUksS0FBSyxDQUFDLDJCQUEyQixPQUFPLElBQUksRUFBRSxDQUFDLENBQUE7QUFDM0QsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxTQUFTLGFBQWEsQ0FBQyxJQUFJO0lBQ3pCLE9BQU87UUFDTCxhQUFhLEVBQUUsR0FBRyxJQUFJLE9BQU87UUFDN0IsZ0JBQWdCLEVBQUUsSUFBSTtRQUN0QixLQUFLLEVBQUUsU0FBUztLQUNqQixDQUFBO0FBQ0gsQ0FBQztBQUVEOzs7Ozs7Ozs7O0dBVUc7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLFlBQVksQ0FBQyxFQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFDO0lBQzlELElBQUksTUFBTSxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksT0FBTyxDQUFDLE1BQU0sS0FBSyxDQUFDO1FBQUUsT0FBTTtJQUV2RCxNQUFNLFVBQVUsR0FBRyxVQUFVLENBQUMsVUFBVSxFQUFFLENBQUE7SUFDMUMsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsOEJBQThCLENBQUMsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUN0RyxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDN0IsTUFBTSxXQUFXLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQTtJQUU3QixLQUFLLE1BQU0sS0FBSyxJQUFJLE9BQU8sRUFBRSxDQUFDO1FBQzVCLE1BQU0sVUFBVSxHQUFHLGFBQWEsQ0FBQyxFQUFDLEtBQUssRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBQyxDQUFDLENBQUE7UUFDN0UsTUFBTSxHQUFHLEdBQUcsVUFBVSxDQUFDLEtBQUssRUFBRSxDQUFBO1FBQzlCLE1BQU0sYUFBYSxHQUFHLFdBQVcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUE7UUFFMUMsSUFBSSxhQUFhLEVBQUUsQ0FBQztZQUNsQixhQUFhLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUNuQyxDQUFDO2FBQU0sQ0FBQztZQUNOLFdBQVcsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEVBQUMsVUFBVSxFQUFFLE9BQU8sRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFDLENBQUMsQ0FBQTtRQUN0RCxDQUFDO0lBQ0gsQ0FBQztJQUVELEtBQUssTUFBTSxFQUFDLFVBQVUsRUFBRSxPQUFPLEVBQUUsY0FBYyxFQUFDLElBQUksV0FBVyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUM7UUFDekUsTUFBTSxNQUFNLEdBQUcsTUFBTSxpQkFBaUIsQ0FBQyxVQUFVLENBQUMsQ0FBQTtRQUVsRCxLQUFLLE1BQU0sS0FBSyxJQUFJLGNBQWM7WUFBRSxZQUFZLENBQUMsRUFBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUMsQ0FBQyxDQUFBO0lBQ3ZGLENBQUM7QUFDSCxDQUFDO0FBRUQ7Ozs7Ozs7O0dBUUc7QUFDSCxTQUFTLGFBQWEsQ0FBQyxFQUFDLEtBQUssRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBQztJQUNoRSxNQUFNLFlBQVksR0FBRyxVQUFVLENBQUMscUJBQXFCLENBQUMsS0FBSyxDQUFDLGdCQUFnQixDQUFDLENBQUE7SUFFN0UsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ2xCLE1BQU0sSUFBSSxLQUFLLENBQUMsR0FBRyxVQUFVLENBQUMsSUFBSSw4QkFBOEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLENBQUMseUJBQXlCLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUN4SyxDQUFDO0lBRUQsSUFBSSxZQUFZLENBQUMsSUFBSSxLQUFLLFNBQVMsRUFBRSxDQUFDO1FBQ3BDLE1BQU0sSUFBSSxLQUFLLENBQUMsNERBQTRELFVBQVUsQ0FBQyxJQUFJLElBQUksS0FBSyxDQUFDLGdCQUFnQixPQUFPLFlBQVksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFBO0lBQ2xKLENBQUM7SUFFRCxNQUFNLGdCQUFnQixHQUFHLFlBQVksQ0FBQyxtQkFBbUIsRUFBRSxDQUFBO0lBRTNELElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQ3RCLE1BQU0sSUFBSSxLQUFLLENBQUMsaURBQWlELFVBQVUsQ0FBQyxJQUFJLElBQUksS0FBSyxDQUFDLGdCQUFnQixFQUFFLENBQUMsQ0FBQTtJQUMvRyxDQUFDO0lBRUQsTUFBTSxVQUFVLEdBQUcsWUFBWSxDQUFDLGFBQWEsRUFBRSxDQUFBO0lBQy9DOzttQ0FFK0I7SUFDL0IsTUFBTSxlQUFlLEdBQUcsRUFBQyxDQUFDLFVBQVUsQ0FBQyxFQUFFLFNBQVMsRUFBQyxDQUFBO0lBRWpELElBQUksWUFBWSxDQUFDLGNBQWMsSUFBSSxZQUFZLENBQUMsY0FBYyxFQUFFLEVBQUUsQ0FBQztRQUNqRSxNQUFNLFVBQVUsR0FBRyxZQUFZLENBQUMsd0JBQXdCLEVBQUUsQ0FBQTtRQUMxRCxlQUFlLENBQUMsVUFBVSxDQUFDLEdBQUcsVUFBVSxDQUFDLFlBQVksRUFBRSxDQUFBO0lBQ3pELENBQUM7SUFFRCxJQUFJLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNoQixNQUFNLENBQUMsTUFBTSxDQUFDLGVBQWUsRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDN0MsQ0FBQztJQUVELE1BQU0sU0FBUyxHQUFHLFdBQVcsQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLENBQUMsQ0FBQTtJQUM3RCxTQUFTLENBQUMsc0JBQXNCLEdBQUcsSUFBSSxDQUFBO0lBQ3ZDLFNBQVMsQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLENBQUE7SUFFaEMsTUFBTSxVQUFVLEdBQUcsWUFBWSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQTtJQUVyRCxVQUFVLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQTtJQUN4QixVQUFVLENBQUMsUUFBUSxFQUFFLENBQUE7SUFFckIsTUFBTSxNQUFNLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQTtJQUNoQyxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLENBQUE7SUFDdEUsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsQ0FBQTtJQUMvQyxNQUFNLG1CQUFtQixHQUFHLEdBQUcsV0FBVyxJQUFJLFFBQVEsRUFBRSxDQUFBO0lBRXhELFVBQVUsQ0FBQyxLQUFLLENBQUMsbUJBQW1CLENBQUMsQ0FBQTtJQUNyQyxVQUFVLENBQUMsTUFBTSxDQUFDLEdBQUcsbUJBQW1CLGVBQWUsQ0FBQyxDQUFBO0lBQ3hELFVBQVUsQ0FBQyxNQUFNLENBQUMseUJBQXlCLENBQUMsQ0FBQTtJQUU1QyxPQUFPLFVBQVUsQ0FBQTtBQUNuQixDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILEtBQUssVUFBVSxpQkFBaUIsQ0FBQyxVQUFVO0lBQ3pDLE1BQU0sSUFBSSxHQUFHLGdGQUFnRixDQUFDLENBQzVGLE1BQU0sVUFBVSxDQUFDLGFBQWEsRUFBRSxDQUNqQyxDQUFBO0lBRUQ7OzhDQUUwQztJQUMxQyxNQUFNLE1BQU0sR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFBO0lBRXhCLEtBQUssTUFBTSxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7UUFDdkIsTUFBTSxRQUFRLEdBQUcsOEJBQThCLENBQUMsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUE7UUFDL0QsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUE7UUFDL0MsTUFBTSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsVUFBVSxDQUFDLENBQUE7SUFDbEMsQ0FBQztJQUVELE9BQU8sTUFBTSxDQUFBO0FBQ2YsQ0FBQztBQUVEOzs7Ozs7OztHQVFHO0FBQ0gsU0FBUyxZQUFZLENBQUMsRUFBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUM7SUFDdkQsS0FBSyxNQUFNLEtBQUssSUFBSSxNQUFNLEVBQUUsQ0FBQztRQUMzQixNQUFNLG9CQUFvQixHQUFHLDhCQUE4QixDQUFDLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFBO1FBQzFGLDhEQUE4RDtRQUM5RCw2REFBNkQ7UUFDN0Qsa0RBQWtEO1FBQ2xELE1BQU0sYUFBYSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsb0JBQW9CLENBQUM7WUFDcEQsQ0FBQyxDQUFDLHFCQUFxQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1lBQzFELENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO1FBRXpELDZEQUE2RDtRQUM3RCxpRUFBaUU7UUFDakUsaUVBQWlFO1FBQ2pFLG1EQUFtRDtRQUNuRCxLQUFLLENBQUMsb0JBQW9CLENBQUMsS0FBSyxDQUFDLGFBQWEsRUFBRSxhQUFhLENBQUMsQ0FBQTtJQUNoRSxDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG4vKipcbiAqIFdpdGhDb3VudEVudHJ5IHR5cGUuXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBXaXRoQ291bnRFbnRyeVxuICogQHByb3BlcnR5IHtzdHJpbmd9IGF0dHJpYnV0ZU5hbWUgLSBBdHRyaWJ1dGUgdG8gc2V0IG9uIGVhY2ggcGFyZW50IHJlY29yZCBob2xkaW5nIHRoZSBjb3VudC5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSByZWxhdGlvbnNoaXBOYW1lIC0gSGFzLW1hbnkgcmVsYXRpb25zaGlwIHdob3NlIHJvd3MgYXJlIGNvdW50ZWQuXG4gKiBAcHJvcGVydHkge1JlY29yZDxzdHJpbmcsID8+IHwgdW5kZWZpbmVkfSB3aGVyZSAtIE9wdGlvbmFsIGV4dHJhIHdoZXJlIGNsYXVzZSBhcHBsaWVkIHRvIHRoZSBjb3VudCBxdWVyeS5cbiAqL1xuXG4vKipcbiAqIERlZmluZXMgdGhpcyB0eXBlZGVmLlxuICogQHR5cGVkZWYge3N0cmluZyB8IHN0cmluZ1tdIHwgUmVjb3JkPHN0cmluZywgYm9vbGVhbiB8IHtyZWxhdGlvbnNoaXA/OiBzdHJpbmcsIHdoZXJlPzogUmVjb3JkPHN0cmluZywgPz59Pn0gV2l0aENvdW50U3BlY1xuICovXG5cbi8qKlxuICogTm9ybWFsaXplIHRoZSBmbGV4aWJsZSB1c2VyLWZhY2luZyBgLndpdGhDb3VudCguLi4pYCBhcmd1bWVudCBpbnRvIHRoZVxuICogc3RyaWN0IGludGVybmFsIGxpc3Qgb2Yge2F0dHJpYnV0ZU5hbWUsIHJlbGF0aW9uc2hpcE5hbWUsIHdoZXJlfSBlbnRyaWVzXG4gKiB0aGUgcnVubmVyIGNvbnN1bWVzLlxuICpcbiAqIEFjY2VwdGVkIHNoYXBlczpcbiAqICAgXCJwcm9qZWN0c1wiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDihpIgb25lIGVudHJ5XG4gKiAgIFtcInByb2plY3RzXCIsIFwidGltZWxvZ3NcIl0gICAgICAgICAgICAgICAgICAgICAgICAgICDihpIgb25lIGVudHJ5IHBlciBuYW1lXG4gKiAgIHtwcm9qZWN0czogdHJ1ZX0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIOKGkiBvbmUgZW50cnkgKGF0dHIgPSBcInByb2plY3RzQ291bnRcIilcbiAqICAge2FjdGl2ZU1lbWJlcnNDb3VudDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg4oaSIGN1c3RvbSBhdHRyaWJ1dGUgbmFtZVxuICogICAgIHtyZWxhdGlvbnNoaXA6IFwidXNlcnNcIiwgd2hlcmU6IHthY3RpdmU6IHRydWV9fX1cbiAqIEBwYXJhbSB7V2l0aENvdW50U3BlY30gc3BlYyAtIFVzZXItc3VwcGxpZWQgc3BlYy5cbiAqIEByZXR1cm5zIHtXaXRoQ291bnRFbnRyeVtdfSAtIE5vcm1hbGl6ZWQgZW50cmllcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZVdpdGhDb3VudChzcGVjKSB7XG4gIGlmIChzcGVjID09IG51bGwpIHJldHVybiBbXVxuXG4gIGlmICh0eXBlb2Ygc3BlYyA9PT0gXCJzdHJpbmdcIikge1xuICAgIHJldHVybiBbZW50cnlGcm9tTmFtZShzcGVjKV1cbiAgfVxuXG4gIGlmIChBcnJheS5pc0FycmF5KHNwZWMpKSB7XG4gICAgcmV0dXJuIHNwZWMuZmxhdE1hcCgoaXRlbSkgPT4ge1xuICAgICAgaWYgKHR5cGVvZiBpdGVtICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgd2l0aENvdW50IGFycmF5IGVudHJpZXMgbXVzdCBiZSBzdHJpbmdzOyBnb3QgJHt0eXBlb2YgaXRlbX1gKVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gZW50cnlGcm9tTmFtZShpdGVtKVxuICAgIH0pXG4gIH1cblxuICBpZiAodHlwZW9mIHNwZWMgPT09IFwib2JqZWN0XCIpIHtcbiAgICAvKipcbiAgICAgKiBFbnRyaWVzLlxuICAgICAqIEB0eXBlIHtXaXRoQ291bnRFbnRyeVtdfSAqL1xuICAgIGNvbnN0IGVudHJpZXMgPSBbXVxuXG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoc3BlYykpIHtcbiAgICAgIGlmICh2YWx1ZSA9PT0gdHJ1ZSkge1xuICAgICAgICBlbnRyaWVzLnB1c2goZW50cnlGcm9tTmFtZShrZXkpKVxuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICBpZiAodmFsdWUgPT09IGZhbHNlKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiYgdmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIE9wdGlvbnMuXG4gICAgICAgICAqIEB0eXBlIHt7cmVsYXRpb25zaGlwPzogc3RyaW5nLCB3aGVyZT86IFJlY29yZDxzdHJpbmcsID8+fX0gKi9cbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHZhbHVlXG4gICAgICAgIGVudHJpZXMucHVzaCh7XG4gICAgICAgICAgYXR0cmlidXRlTmFtZToga2V5LFxuICAgICAgICAgIHJlbGF0aW9uc2hpcE5hbWU6IG9wdGlvbnMucmVsYXRpb25zaGlwIHx8IGtleSxcbiAgICAgICAgICB3aGVyZTogb3B0aW9ucy53aGVyZVxuICAgICAgICB9KVxuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgd2l0aENvdW50IHZhbHVlIGZvciAke2tleX06ICR7dHlwZW9mIHZhbHVlfWApXG4gICAgfVxuXG4gICAgcmV0dXJuIGVudHJpZXNcbiAgfVxuXG4gIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCB3aXRoQ291bnQgc3BlYzogJHt0eXBlb2Ygc3BlY31gKVxufVxuXG4vKipcbiAqIFJ1bnMgZW50cnkgZnJvbSBuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBSZWxhdGlvbnNoaXAgbmFtZSAoYXR0cmlidXRlIG5hbWUgaXMgZGVyaXZlZCBieSBhcHBlbmRpbmcgXCJDb3VudFwiKS5cbiAqIEByZXR1cm5zIHtXaXRoQ291bnRFbnRyeX0gLSBOb3JtYWxpemVkIGFzc29jaWF0aW9uLWNvdW50IGVudHJ5LlxuICovXG5mdW5jdGlvbiBlbnRyeUZyb21OYW1lKG5hbWUpIHtcbiAgcmV0dXJuIHtcbiAgICBhdHRyaWJ1dGVOYW1lOiBgJHtuYW1lfUNvdW50YCxcbiAgICByZWxhdGlvbnNoaXBOYW1lOiBuYW1lLFxuICAgIHdoZXJlOiB1bmRlZmluZWRcbiAgfVxufVxuXG4vKipcbiAqIFJ1biBldmVyeSB3aXRoQ291bnQgZW50cnkgYWdhaW5zdCB0aGUgbG9hZGVkIHBhcmVudCByZWNvcmRzLCBhdHRhY2hpbmdcbiAqIHRoZSByZXN1bHRpbmcgY291bnRzIGFzIGF0dHJpYnV0ZXMgb24gZWFjaCByZWNvcmQuIE1pcnJvcnMgdGhlXG4gKiBQcmVsb2FkZXIncyBkYXRhLWZsb3cgc2hhcGUg4oCUIG9uZSBncm91cGVkIGNvdW50IHF1ZXJ5IHBlciBlbnRyeSwgdGhlblxuICogYHNldEF0dHJpYnV0ZWAgb24gZWFjaCBwYXJlbnQuXG4gKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIE9wdGlvbnMuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3JlY29yZC9pbmRleC5qc1wiKS5kZWZhdWx0W119IGFyZ3MubW9kZWxzIC0gTG9hZGVkIHBhcmVudCByZWNvcmRzLlxuICogQHBhcmFtIHt0eXBlb2YgaW1wb3J0KFwiLi4vcmVjb3JkL2luZGV4LmpzXCIpLmRlZmF1bHR9IGFyZ3MubW9kZWxDbGFzcyAtIFBhcmVudCBtb2RlbCBjbGFzcy5cbiAqIEBwYXJhbSB7V2l0aENvdW50RW50cnlbXX0gYXJncy5lbnRyaWVzIC0gTm9ybWFsaXplZCB3aXRoQ291bnQgZW50cmllcy5cbiAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcnVuV2l0aENvdW50KHttb2RlbHMsIG1vZGVsQ2xhc3MsIGVudHJpZXN9KSB7XG4gIGlmIChtb2RlbHMubGVuZ3RoID09PSAwIHx8IGVudHJpZXMubGVuZ3RoID09PSAwKSByZXR1cm5cblxuICBjb25zdCBwcmltYXJ5S2V5ID0gbW9kZWxDbGFzcy5wcmltYXJ5S2V5KClcbiAgY29uc3QgcGFyZW50SWRzID0gbW9kZWxzLm1hcCgobW9kZWwpID0+IC8qKiBAdHlwZSB7c3RyaW5nIHwgbnVtYmVyfSAqLyAobW9kZWwucmVhZENvbHVtbihwcmltYXJ5S2V5KSkpXG4gIGNvbnN0IHNvdXJjZU1vZGVsID0gbW9kZWxzWzBdXG4gIGNvbnN0IHF1ZXJ5R3JvdXBzID0gbmV3IE1hcCgpXG5cbiAgZm9yIChjb25zdCBlbnRyeSBvZiBlbnRyaWVzKSB7XG4gICAgY29uc3QgY291bnRRdWVyeSA9IHF1ZXJ5Rm9yRW50cnkoe2VudHJ5LCBtb2RlbENsYXNzLCBwYXJlbnRJZHMsIHNvdXJjZU1vZGVsfSlcbiAgICBjb25zdCBzcWwgPSBjb3VudFF1ZXJ5LnRvU3FsKClcbiAgICBjb25zdCBleGlzdGluZ0dyb3VwID0gcXVlcnlHcm91cHMuZ2V0KHNxbClcblxuICAgIGlmIChleGlzdGluZ0dyb3VwKSB7XG4gICAgICBleGlzdGluZ0dyb3VwLmVudHJpZXMucHVzaChlbnRyeSlcbiAgICB9IGVsc2Uge1xuICAgICAgcXVlcnlHcm91cHMuc2V0KHNxbCwge2NvdW50UXVlcnksIGVudHJpZXM6IFtlbnRyeV19KVxuICAgIH1cbiAgfVxuXG4gIGZvciAoY29uc3Qge2NvdW50UXVlcnksIGVudHJpZXM6IGdyb3VwZWRFbnRyaWVzfSBvZiBxdWVyeUdyb3Vwcy52YWx1ZXMoKSkge1xuICAgIGNvbnN0IGNvdW50cyA9IGF3YWl0IGV4ZWN1dGVDb3VudFF1ZXJ5KGNvdW50UXVlcnkpXG5cbiAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIGdyb3VwZWRFbnRyaWVzKSBhdHRhY2hDb3VudHMoe2NvdW50cywgZW50cnksIG1vZGVscywgcHJpbWFyeUtleX0pXG4gIH1cbn1cblxuLyoqXG4gKiBCdWlsZHMgdGhlIGdyb3VwZWQgY291bnQgcXVlcnkgZm9yIGFuIGVudHJ5LlxuICogQHBhcmFtIHtvYmplY3R9IGFyZ3MgLSBPcHRpb25zLlxuICogQHBhcmFtIHtXaXRoQ291bnRFbnRyeX0gYXJncy5lbnRyeSAtIEVudHJ5IGJlaW5nIGV2YWx1YXRlZC5cbiAqIEBwYXJhbSB7dHlwZW9mIGltcG9ydChcIi4uL3JlY29yZC9pbmRleC5qc1wiKS5kZWZhdWx0fSBhcmdzLm1vZGVsQ2xhc3MgLSBQYXJlbnQgbW9kZWwgY2xhc3MuXG4gKiBAcGFyYW0ge0FycmF5PHN0cmluZyB8IG51bWJlcj59IGFyZ3MucGFyZW50SWRzIC0gUHJpbWFyeSBrZXlzIG9mIHRoZSBsb2FkZWQgcGFyZW50cy5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vcmVjb3JkL2luZGV4LmpzXCIpLmRlZmF1bHR9IGFyZ3Muc291cmNlTW9kZWwgLSBMb2FkZWQgb3BlcmF0aW9uIG93bmVyLlxuICogQHJldHVybnMge2ltcG9ydChcIi4vbW9kZWwtY2xhc3MtcXVlcnkuanNcIikuZGVmYXVsdH0gLSBQcmVwYXJlZCBjb3VudCBxdWVyeS5cbiAqL1xuZnVuY3Rpb24gcXVlcnlGb3JFbnRyeSh7ZW50cnksIG1vZGVsQ2xhc3MsIHBhcmVudElkcywgc291cmNlTW9kZWx9KSB7XG4gIGNvbnN0IHJlbGF0aW9uc2hpcCA9IG1vZGVsQ2xhc3MuZ2V0UmVsYXRpb25zaGlwQnlOYW1lKGVudHJ5LnJlbGF0aW9uc2hpcE5hbWUpXG5cbiAgaWYgKCFyZWxhdGlvbnNoaXApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYCR7bW9kZWxDbGFzcy5uYW1lfSBoYXMgbm8gcmVsYXRpb25zaGlwIG5hbWVkICR7SlNPTi5zdHJpbmdpZnkoZW50cnkucmVsYXRpb25zaGlwTmFtZSl9ICh3aXRoQ291bnQgYXR0cmlidXRlICR7SlNPTi5zdHJpbmdpZnkoZW50cnkuYXR0cmlidXRlTmFtZSl9KWApXG4gIH1cblxuICBpZiAocmVsYXRpb25zaGlwLnR5cGUgIT09IFwiaGFzTWFueVwiKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGB3aXRoQ291bnQgY3VycmVudGx5IHN1cHBvcnRzIG9ubHkgaGFzTWFueSByZWxhdGlvbnNoaXBzOyAke21vZGVsQ2xhc3MubmFtZX0jJHtlbnRyeS5yZWxhdGlvbnNoaXBOYW1lfSBpcyAke3JlbGF0aW9uc2hpcC50eXBlfWApXG4gIH1cblxuICBjb25zdCB0YXJnZXRNb2RlbENsYXNzID0gcmVsYXRpb25zaGlwLmdldFRhcmdldE1vZGVsQ2xhc3MoKVxuXG4gIGlmICghdGFyZ2V0TW9kZWxDbGFzcykge1xuICAgIHRocm93IG5ldyBFcnJvcihgd2l0aENvdW50OiBjb3VsZCBub3QgcmVzb2x2ZSB0YXJnZXQgbW9kZWwgZm9yICR7bW9kZWxDbGFzcy5uYW1lfSMke2VudHJ5LnJlbGF0aW9uc2hpcE5hbWV9YClcbiAgfVxuXG4gIGNvbnN0IGZvcmVpZ25LZXkgPSByZWxhdGlvbnNoaXAuZ2V0Rm9yZWlnbktleSgpXG4gIC8qKlxuICAgKiBXaGVyZSBjb25kaXRpb25zLlxuICAgKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgPz59ICovXG4gIGNvbnN0IHdoZXJlQ29uZGl0aW9ucyA9IHtbZm9yZWlnbktleV06IHBhcmVudElkc31cblxuICBpZiAocmVsYXRpb25zaGlwLmdldFBvbHltb3JwaGljICYmIHJlbGF0aW9uc2hpcC5nZXRQb2x5bW9ycGhpYygpKSB7XG4gICAgY29uc3QgdHlwZUNvbHVtbiA9IHJlbGF0aW9uc2hpcC5nZXRQb2x5bW9ycGhpY1R5cGVDb2x1bW4oKVxuICAgIHdoZXJlQ29uZGl0aW9uc1t0eXBlQ29sdW1uXSA9IG1vZGVsQ2xhc3MuZ2V0TW9kZWxOYW1lKClcbiAgfVxuXG4gIGlmIChlbnRyeS53aGVyZSkge1xuICAgIE9iamVjdC5hc3NpZ24od2hlcmVDb25kaXRpb25zLCBlbnRyeS53aGVyZSlcbiAgfVxuXG4gIGNvbnN0IGJhc2VRdWVyeSA9IHNvdXJjZU1vZGVsLnF1ZXJ5Rm9yTW9kZWwodGFyZ2V0TW9kZWxDbGFzcylcbiAgYmFzZVF1ZXJ5Ll9mb3JjZVF1YWxpZnlCYXNlVGFibGUgPSB0cnVlXG4gIGJhc2VRdWVyeS53aGVyZSh3aGVyZUNvbmRpdGlvbnMpXG5cbiAgY29uc3QgY291bnRRdWVyeSA9IHJlbGF0aW9uc2hpcC5hcHBseVNjb3BlKGJhc2VRdWVyeSlcblxuICBjb3VudFF1ZXJ5Ll9wcmVsb2FkID0ge31cbiAgY291bnRRdWVyeS5yZXNlbGVjdCgpXG5cbiAgY29uc3QgZHJpdmVyID0gY291bnRRdWVyeS5kcml2ZXJcbiAgY29uc3QgcXVvdGVkVGFibGUgPSBkcml2ZXIucXVvdGVUYWJsZShjb3VudFF1ZXJ5LnJvb3RUYWJsZVJlZmVyZW5jZSgpKVxuICBjb25zdCBxdW90ZWRGayA9IGRyaXZlci5xdW90ZUNvbHVtbihmb3JlaWduS2V5KVxuICBjb25zdCBxdWFsaWZpZWRGb3JlaWduS2V5ID0gYCR7cXVvdGVkVGFibGV9LiR7cXVvdGVkRmt9YFxuXG4gIGNvdW50UXVlcnkuZ3JvdXAocXVhbGlmaWVkRm9yZWlnbktleSlcbiAgY291bnRRdWVyeS5zZWxlY3QoYCR7cXVhbGlmaWVkRm9yZWlnbktleX0gQVMgcGFyZW50X2lkYClcbiAgY291bnRRdWVyeS5zZWxlY3QoXCJDT1VOVCgqKSBBUyBjb3VudF92YWx1ZVwiKVxuXG4gIHJldHVybiBjb3VudFF1ZXJ5XG59XG5cbi8qKlxuICogRXhlY3V0ZXMgYSBwcmVwYXJlZCBncm91cGVkIGNvdW50IHF1ZXJ5LlxuICogQHBhcmFtIHtpbXBvcnQoXCIuL21vZGVsLWNsYXNzLXF1ZXJ5LmpzXCIpLmRlZmF1bHR9IGNvdW50UXVlcnkgLSBQcmVwYXJlZCBjb3VudCBxdWVyeS5cbiAqIEByZXR1cm5zIHtQcm9taXNlPE1hcDxzdHJpbmcgfCBudW1iZXIsIG51bWJlcj4+fSAtIE1hcCBvZiBwYXJlbnQgcGsg4oaSIGNvdW50LlxuICovXG5hc3luYyBmdW5jdGlvbiBleGVjdXRlQ291bnRRdWVyeShjb3VudFF1ZXJ5KSB7XG4gIGNvbnN0IHJvd3MgPSAvKiogQHR5cGUge0FycmF5PHtwYXJlbnRfaWQ6IHN0cmluZyB8IG51bWJlciwgY291bnRfdmFsdWU6IHN0cmluZyB8IG51bWJlcn0+fSAqLyAoXG4gICAgYXdhaXQgY291bnRRdWVyeS5fZXhlY3V0ZVF1ZXJ5KClcbiAgKVxuXG4gIC8qKlxuICAgKiBDb3VudHMuXG4gICAqIEB0eXBlIHtNYXA8c3RyaW5nIHwgbnVtYmVyLCBudW1iZXI+fSAqL1xuICBjb25zdCBjb3VudHMgPSBuZXcgTWFwKClcblxuICBmb3IgKGNvbnN0IHJvdyBvZiByb3dzKSB7XG4gICAgY29uc3QgcGFyZW50SWQgPSAvKiogQHR5cGUge3N0cmluZyB8IG51bWJlcn0gKi8gKHJvdy5wYXJlbnRfaWQpXG4gICAgY29uc3QgY291bnRWYWx1ZSA9IE51bWJlcihyb3cuY291bnRfdmFsdWUpIHx8IDBcbiAgICBjb3VudHMuc2V0KHBhcmVudElkLCBjb3VudFZhbHVlKVxuICB9XG5cbiAgcmV0dXJuIGNvdW50c1xufVxuXG4vKipcbiAqIEF0dGFjaGVzIG9uZSBlbnRyeSdzIHJlc29sdmVkIGNvdW50cyB0byB0aGUgbG9hZGVkIG1vZGVscy5cbiAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gT3B0aW9ucy5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZyB8IG51bWJlciwgbnVtYmVyPn0gYXJncy5jb3VudHMgLSBDb3VudHMga2V5ZWQgYnkgcGFyZW50IHByaW1hcnkga2V5LlxuICogQHBhcmFtIHtXaXRoQ291bnRFbnRyeX0gYXJncy5lbnRyeSAtIEVudHJ5IHdob3NlIGFsaWFzIHJlY2VpdmVzIHRoZSBjb3VudHMuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3JlY29yZC9pbmRleC5qc1wiKS5kZWZhdWx0W119IGFyZ3MubW9kZWxzIC0gTG9hZGVkIHBhcmVudCByZWNvcmRzLlxuICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MucHJpbWFyeUtleSAtIFBhcmVudCBwcmltYXJ5IGtleSBjb2x1bW4uXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gYXR0YWNoQ291bnRzKHtjb3VudHMsIGVudHJ5LCBtb2RlbHMsIHByaW1hcnlLZXl9KSB7XG4gIGZvciAoY29uc3QgbW9kZWwgb2YgbW9kZWxzKSB7XG4gICAgY29uc3QgbW9kZWxQcmltYXJ5S2V5VmFsdWUgPSAvKiogQHR5cGUge3N0cmluZyB8IG51bWJlcn0gKi8gKG1vZGVsLnJlYWRDb2x1bW4ocHJpbWFyeUtleSkpXG4gICAgLy8gVG9sZXJhdGUgZHJpdmVyIGRpZmZlcmVuY2VzIGluIG51bWVyaWMgcmV0dXJuIHR5cGVzOiBTUUxpdGVcbiAgICAvLyByZXR1cm5zIGludGVnZXJzIGFzIEpTIG51bWJlcnMsIGJ1dCBNeVNRTCdzIHJhdyBkcml2ZXIgY2FuXG4gICAgLy8gcmV0dXJuIGNvdW50IHByaW1hcnkga2V5cyBhcyBzdHJpbmdzLiBUcnkgYm90aC5cbiAgICBjb25zdCByZXNvbHZlZENvdW50ID0gY291bnRzLmhhcyhtb2RlbFByaW1hcnlLZXlWYWx1ZSlcbiAgICAgID8gLyoqIEB0eXBlIHtudW1iZXJ9ICovIChjb3VudHMuZ2V0KG1vZGVsUHJpbWFyeUtleVZhbHVlKSlcbiAgICAgIDogTnVtYmVyKGNvdW50cy5nZXQoU3RyaW5nKG1vZGVsUHJpbWFyeUtleVZhbHVlKSkgPz8gMClcblxuICAgIC8vIENvdW50cyBnbyBvbiB0aGUgcmVjb3JkJ3MgZGVkaWNhdGVkIGFzc29jaWF0aW9uLWNvdW50IG1hcCxcbiAgICAvLyBOT1Qgb24gYF9hdHRyaWJ1dGVzYCwgc28gYSB2aXJ0dWFsIGB0YXNrc0NvdW50YCBjYW4ndCBzaGFkb3cgYVxuICAgIC8vIHJlYWwgYHRhc2tzX2NvdW50YCBjb2x1bW4gKGUuZy4gYSBjb3VudGVyX2NhY2hlKSBub3IgbGVhayBpbnRvXG4gICAgLy8gYXR0cmlidXRlLWxldmVsIHNlcmlhbGl6YXRpb24gLyBjaGFuZ2UgdHJhY2tpbmcuXG4gICAgbW9kZWwuX3NldEFzc29jaWF0aW9uQ291bnQoZW50cnkuYXR0cmlidXRlTmFtZSwgcmVzb2x2ZWRDb3VudClcbiAgfVxufVxuIl19
210
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC1jb3VudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kYXRhYmFzZS9xdWVyeS93aXRoLWNvdW50LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWjs7Ozs7O0dBTUc7QUFFSDs7O0dBR0c7QUFFSDs7Ozs7Ozs7Ozs7OztHQWFHO0FBQ0gsTUFBTSxVQUFVLGtCQUFrQixDQUFDLElBQUk7SUFDckMsSUFBSSxJQUFJLElBQUksSUFBSTtRQUFFLE9BQU8sRUFBRSxDQUFBO0lBRTNCLElBQUksT0FBTyxJQUFJLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDN0IsT0FBTyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO0lBQzlCLENBQUM7SUFFRCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUN4QixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUMzQixJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVEsRUFBRSxDQUFDO2dCQUM3QixNQUFNLElBQUksS0FBSyxDQUFDLGdEQUFnRCxPQUFPLElBQUksRUFBRSxDQUFDLENBQUE7WUFDaEYsQ0FBQztZQUVELE9BQU8sYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFBO1FBQzVCLENBQUMsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUVELElBQUksT0FBTyxJQUFJLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDN0I7O3NDQUU4QjtRQUM5QixNQUFNLE9BQU8sR0FBRyxFQUFFLENBQUE7UUFFbEIsS0FBSyxNQUFNLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUNoRCxJQUFJLEtBQUssS0FBSyxJQUFJLEVBQUUsQ0FBQztnQkFDbkIsT0FBTyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFD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QUssQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUFFLGFBQWEsQ0FBQyxDQUFBO0lBQ2hFLENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbi8qKlxuICogV2l0aENvdW50RW50cnkgdHlwZS5cbiAqIEB0eXBlZGVmIHtvYmplY3R9IFdpdGhDb3VudEVudHJ5XG4gKiBAcHJvcGVydHkge3N0cmluZ30gYXR0cmlidXRlTmFtZSAtIEF0dHJpYnV0ZSB0byBzZXQgb24gZWFjaCBwYXJlbnQgcmVjb3JkIGhvbGRpbmcgdGhlIGNvdW50LlxuICogQHByb3BlcnR5IHtzdHJpbmd9IHJlbGF0aW9uc2hpcE5hbWUgLSBIYXMtbWFueSByZWxhdGlvbnNoaXAgd2hvc2Ugcm93cyBhcmUgY291bnRlZC5cbiAqIEBwcm9wZXJ0eSB7UmVjb3JkPHN0cmluZywgUmV0dXJuVHlwZTx0eXBlb2YgSlNPTi5wYXJzZT4+IHwgdW5kZWZpbmVkfSB3aGVyZSAtIE9wdGlvbmFsIGV4dHJhIHdoZXJlIGNsYXVzZSBhcHBsaWVkIHRvIHRoZSBjb3VudCBxdWVyeS5cbiAqL1xuXG4vKipcbiAqIERlZmluZXMgdGhpcyB0eXBlZGVmLlxuICogQHR5cGVkZWYge3N0cmluZyB8IHN0cmluZ1tdIHwgUmVjb3JkPHN0cmluZywgYm9vbGVhbiB8IHtyZWxhdGlvbnNoaXA/OiBzdHJpbmcsIHdoZXJlPzogUmVjb3JkPHN0cmluZywgUmV0dXJuVHlwZTx0eXBlb2YgSlNPTi5wYXJzZT4+fT59IFdpdGhDb3VudFNwZWNcbiAqL1xuXG4vKipcbiAqIE5vcm1hbGl6ZSB0aGUgZmxleGlibGUgdXNlci1mYWNpbmcgYC53aXRoQ291bnQoLi4uKWAgYXJndW1lbnQgaW50byB0aGVcbiAqIHN0cmljdCBpbnRlcm5hbCBsaXN0IG9mIHthdHRyaWJ1dGVOYW1lLCByZWxhdGlvbnNoaXBOYW1lLCB3aGVyZX0gZW50cmllc1xuICogdGhlIHJ1bm5lciBjb25zdW1lcy5cbiAqXG4gKiBBY2NlcHRlZCBzaGFwZXM6XG4gKiAgIFwicHJvamVjdHNcIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg4oaSIG9uZSBlbnRyeVxuICogICBbXCJwcm9qZWN0c1wiLCBcInRpbWVsb2dzXCJdICAgICAgICAgICAgICAgICAgICAgICAgICAg4oaSIG9uZSBlbnRyeSBwZXIgbmFtZVxuICogICB7cHJvamVjdHM6IHRydWV9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDihpIgb25lIGVudHJ5IChhdHRyID0gXCJwcm9qZWN0c0NvdW50XCIpXG4gKiAgIHthY3RpdmVNZW1iZXJzQ291bnQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIOKGkiBjdXN0b20gYXR0cmlidXRlIG5hbWVcbiAqICAgICB7cmVsYXRpb25zaGlwOiBcInVzZXJzXCIsIHdoZXJlOiB7YWN0aXZlOiB0cnVlfX19XG4gKiBAcGFyYW0ge1dpdGhDb3VudFNwZWN9IHNwZWMgLSBVc2VyLXN1cHBsaWVkIHNwZWMuXG4gKiBAcmV0dXJucyB7V2l0aENvdW50RW50cnlbXX0gLSBOb3JtYWxpemVkIGVudHJpZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVXaXRoQ291bnQoc3BlYykge1xuICBpZiAoc3BlYyA9PSBudWxsKSByZXR1cm4gW11cblxuICBpZiAodHlwZW9mIHNwZWMgPT09IFwic3RyaW5nXCIpIHtcbiAgICByZXR1cm4gW2VudHJ5RnJvbU5hbWUoc3BlYyldXG4gIH1cblxuICBpZiAoQXJyYXkuaXNBcnJheShzcGVjKSkge1xuICAgIHJldHVybiBzcGVjLmZsYXRNYXAoKGl0ZW0pID0+IHtcbiAgICAgIGlmICh0eXBlb2YgaXRlbSAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHdpdGhDb3VudCBhcnJheSBlbnRyaWVzIG11c3QgYmUgc3RyaW5nczsgZ290ICR7dHlwZW9mIGl0ZW19YClcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGVudHJ5RnJvbU5hbWUoaXRlbSlcbiAgICB9KVxuICB9XG5cbiAgaWYgKHR5cGVvZiBzcGVjID09PSBcIm9iamVjdFwiKSB7XG4gICAgLyoqXG4gICAgICogRW50cmllcy5cbiAgICAgKiBAdHlwZSB7V2l0aENvdW50RW50cnlbXX0gKi9cbiAgICBjb25zdCBlbnRyaWVzID0gW11cblxuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHNwZWMpKSB7XG4gICAgICBpZiAodmFsdWUgPT09IHRydWUpIHtcbiAgICAgICAgZW50cmllcy5wdXNoKGVudHJ5RnJvbU5hbWUoa2V5KSlcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgaWYgKHZhbHVlID09PSBmYWxzZSkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiICYmIHZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBPcHRpb25zLlxuICAgICAgICAgKiBAdHlwZSB7e3JlbGF0aW9uc2hpcD86IHN0cmluZywgd2hlcmU/OiBSZWNvcmQ8c3RyaW5nLCBSZXR1cm5UeXBlPHR5cGVvZiBKU09OLnBhcnNlPj59fSAqL1xuICAgICAgICBjb25zdCBvcHRpb25zID0gdmFsdWVcbiAgICAgICAgZW50cmllcy5wdXNoKHtcbiAgICAgICAgICBhdHRyaWJ1dGVOYW1lOiBrZXksXG4gICAgICAgICAgcmVsYXRpb25zaGlwTmFtZTogb3B0aW9ucy5yZWxhdGlvbnNoaXAgfHwga2V5LFxuICAgICAgICAgIHdoZXJlOiBvcHRpb25zLndoZXJlXG4gICAgICAgIH0pXG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCB3aXRoQ291bnQgdmFsdWUgZm9yICR7a2V5fTogJHt0eXBlb2YgdmFsdWV9YClcbiAgICB9XG5cbiAgICByZXR1cm4gZW50cmllc1xuICB9XG5cbiAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHdpdGhDb3VudCBzcGVjOiAke3R5cGVvZiBzcGVjfWApXG59XG5cbi8qKlxuICogUnVucyBlbnRyeSBmcm9tIG5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIFJlbGF0aW9uc2hpcCBuYW1lIChhdHRyaWJ1dGUgbmFtZSBpcyBkZXJpdmVkIGJ5IGFwcGVuZGluZyBcIkNvdW50XCIpLlxuICogQHJldHVybnMge1dpdGhDb3VudEVudHJ5fSAtIE5vcm1hbGl6ZWQgYXNzb2NpYXRpb24tY291bnQgZW50cnkuXG4gKi9cbmZ1bmN0aW9uIGVudHJ5RnJvbU5hbWUobmFtZSkge1xuICByZXR1cm4ge1xuICAgIGF0dHJpYnV0ZU5hbWU6IGAke25hbWV9Q291bnRgLFxuICAgIHJlbGF0aW9uc2hpcE5hbWU6IG5hbWUsXG4gICAgd2hlcmU6IHVuZGVmaW5lZFxuICB9XG59XG5cbi8qKlxuICogUnVuIGV2ZXJ5IHdpdGhDb3VudCBlbnRyeSBhZ2FpbnN0IHRoZSBsb2FkZWQgcGFyZW50IHJlY29yZHMsIGF0dGFjaGluZ1xuICogdGhlIHJlc3VsdGluZyBjb3VudHMgYXMgYXR0cmlidXRlcyBvbiBlYWNoIHJlY29yZC4gTWlycm9ycyB0aGVcbiAqIFByZWxvYWRlcidzIGRhdGEtZmxvdyBzaGFwZSDigJQgb25lIGdyb3VwZWQgY291bnQgcXVlcnkgcGVyIGVudHJ5LCB0aGVuXG4gKiBgc2V0QXR0cmlidXRlYCBvbiBlYWNoIHBhcmVudC5cbiAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gT3B0aW9ucy5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vcmVjb3JkL2luZGV4LmpzXCIpLmRlZmF1bHRbXX0gYXJncy5tb2RlbHMgLSBMb2FkZWQgcGFyZW50IHJlY29yZHMuXG4gKiBAcGFyYW0ge3R5cGVvZiBpbXBvcnQoXCIuLi9yZWNvcmQvaW5kZXguanNcIikuZGVmYXVsdH0gYXJncy5tb2RlbENsYXNzIC0gUGFyZW50IG1vZGVsIGNsYXNzLlxuICogQHBhcmFtIHtXaXRoQ291bnRFbnRyeVtdfSBhcmdzLmVudHJpZXMgLSBOb3JtYWxpemVkIHdpdGhDb3VudCBlbnRyaWVzLlxuICogQHJldHVybnMge1Byb21pc2U8dm9pZD59XG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBydW5XaXRoQ291bnQoe21vZGVscywgbW9kZWxDbGFzcywgZW50cmllc30pIHtcbiAgaWYgKG1vZGVscy5sZW5ndGggPT09IDAgfHwgZW50cmllcy5sZW5ndGggPT09IDApIHJldHVyblxuXG4gIGNvbnN0IHByaW1hcnlLZXkgPSBtb2RlbENsYXNzLnByaW1hcnlLZXkoKVxuICBjb25zdCBwYXJlbnRJZHMgPSBtb2RlbHMubWFwKChtb2RlbCkgPT4gLyoqIEB0eXBlIHtzdHJpbmcgfCBudW1iZXJ9ICovIChtb2RlbC5yZWFkQ29sdW1uKHByaW1hcnlLZXkpKSlcbiAgY29uc3Qgc291cmNlTW9kZWwgPSBtb2RlbHNbMF1cbiAgY29uc3QgcXVlcnlHcm91cHMgPSBuZXcgTWFwKClcblxuICBmb3IgKGNvbnN0IGVudHJ5IG9mIGVudHJpZXMpIHtcbiAgICBjb25zdCBjb3VudFF1ZXJ5ID0gcXVlcnlGb3JFbnRyeSh7ZW50cnksIG1vZGVsQ2xhc3MsIHBhcmVudElkcywgc291cmNlTW9kZWx9KVxuICAgIGNvbnN0IHNxbCA9IGNvdW50UXVlcnkudG9TcWwoKVxuICAgIGNvbnN0IGV4aXN0aW5nR3JvdXAgPSBxdWVyeUdyb3Vwcy5nZXQoc3FsKVxuXG4gICAgaWYgKGV4aXN0aW5nR3JvdXApIHtcbiAgICAgIGV4aXN0aW5nR3JvdXAuZW50cmllcy5wdXNoKGVudHJ5KVxuICAgIH0gZWxzZSB7XG4gICAgICBxdWVyeUdyb3Vwcy5zZXQoc3FsLCB7Y291bnRRdWVyeSwgZW50cmllczogW2VudHJ5XX0pXG4gICAgfVxuICB9XG5cbiAgZm9yIChjb25zdCB7Y291bnRRdWVyeSwgZW50cmllczogZ3JvdXBlZEVudHJpZXN9IG9mIHF1ZXJ5R3JvdXBzLnZhbHVlcygpKSB7XG4gICAgY29uc3QgY291bnRzID0gYXdhaXQgZXhlY3V0ZUNvdW50UXVlcnkoY291bnRRdWVyeSlcblxuICAgIGZvciAoY29uc3QgZW50cnkgb2YgZ3JvdXBlZEVudHJpZXMpIGF0dGFjaENvdW50cyh7Y291bnRzLCBlbnRyeSwgbW9kZWxzLCBwcmltYXJ5S2V5fSlcbiAgfVxufVxuXG4vKipcbiAqIEJ1aWxkcyB0aGUgZ3JvdXBlZCBjb3VudCBxdWVyeSBmb3IgYW4gZW50cnkuXG4gKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIE9wdGlvbnMuXG4gKiBAcGFyYW0ge1dpdGhDb3VudEVudHJ5fSBhcmdzLmVudHJ5IC0gRW50cnkgYmVpbmcgZXZhbHVhdGVkLlxuICogQHBhcmFtIHt0eXBlb2YgaW1wb3J0KFwiLi4vcmVjb3JkL2luZGV4LmpzXCIpLmRlZmF1bHR9IGFyZ3MubW9kZWxDbGFzcyAtIFBhcmVudCBtb2RlbCBjbGFzcy5cbiAqIEBwYXJhbSB7QXJyYXk8c3RyaW5nIHwgbnVtYmVyPn0gYXJncy5wYXJlbnRJZHMgLSBQcmltYXJ5IGtleXMgb2YgdGhlIGxvYWRlZCBwYXJlbnRzLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9yZWNvcmQvaW5kZXguanNcIikuZGVmYXVsdH0gYXJncy5zb3VyY2VNb2RlbCAtIExvYWRlZCBvcGVyYXRpb24gb3duZXIuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi9tb2RlbC1jbGFzcy1xdWVyeS5qc1wiKS5kZWZhdWx0fSAtIFByZXBhcmVkIGNvdW50IHF1ZXJ5LlxuICovXG5mdW5jdGlvbiBxdWVyeUZvckVudHJ5KHtlbnRyeSwgbW9kZWxDbGFzcywgcGFyZW50SWRzLCBzb3VyY2VNb2RlbH0pIHtcbiAgY29uc3QgcmVsYXRpb25zaGlwID0gbW9kZWxDbGFzcy5nZXRSZWxhdGlvbnNoaXBCeU5hbWUoZW50cnkucmVsYXRpb25zaGlwTmFtZSlcblxuICBpZiAoIXJlbGF0aW9uc2hpcCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgJHttb2RlbENsYXNzLm5hbWV9IGhhcyBubyByZWxhdGlvbnNoaXAgbmFtZWQgJHtKU09OLnN0cmluZ2lmeShlbnRyeS5yZWxhdGlvbnNoaXBOYW1lKX0gKHdpdGhDb3VudCBhdHRyaWJ1dGUgJHtKU09OLnN0cmluZ2lmeShlbnRyeS5hdHRyaWJ1dGVOYW1lKX0pYClcbiAgfVxuXG4gIGlmIChyZWxhdGlvbnNoaXAudHlwZSAhPT0gXCJoYXNNYW55XCIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYHdpdGhDb3VudCBjdXJyZW50bHkgc3VwcG9ydHMgb25seSBoYXNNYW55IHJlbGF0aW9uc2hpcHM7ICR7bW9kZWxDbGFzcy5uYW1lfSMke2VudHJ5LnJlbGF0aW9uc2hpcE5hbWV9IGlzICR7cmVsYXRpb25zaGlwLnR5cGV9YClcbiAgfVxuXG4gIGNvbnN0IHRhcmdldE1vZGVsQ2xhc3MgPSByZWxhdGlvbnNoaXAuZ2V0VGFyZ2V0TW9kZWxDbGFzcygpXG5cbiAgaWYgKCF0YXJnZXRNb2RlbENsYXNzKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGB3aXRoQ291bnQ6IGNvdWxkIG5vdCByZXNvbHZlIHRhcmdldCBtb2RlbCBmb3IgJHttb2RlbENsYXNzLm5hbWV9IyR7ZW50cnkucmVsYXRpb25zaGlwTmFtZX1gKVxuICB9XG5cbiAgY29uc3QgZm9yZWlnbktleSA9IHJlbGF0aW9uc2hpcC5nZXRGb3JlaWduS2V5KClcbiAgLyoqXG4gICAqIE1hbmRhdG9yeSBjb2hvcnQgY29uZGl0aW9ucy5cbiAgICogQHR5cGUge1JlY29yZDxzdHJpbmcsIFJldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+Pn0gKi9cbiAgY29uc3QgbWFuZGF0b3J5V2hlcmVDb25kaXRpb25zID0ge1tmb3JlaWduS2V5XTogcGFyZW50SWRzfVxuXG4gIGlmIChyZWxhdGlvbnNoaXAuZ2V0UG9seW1vcnBoaWMgJiYgcmVsYXRpb25zaGlwLmdldFBvbHltb3JwaGljKCkpIHtcbiAgICBjb25zdCB0eXBlQ29sdW1uID0gcmVsYXRpb25zaGlwLmdldFBvbHltb3JwaGljVHlwZUNvbHVtbigpXG4gICAgbWFuZGF0b3J5V2hlcmVDb25kaXRpb25zW3R5cGVDb2x1bW5dID0gbW9kZWxDbGFzcy5nZXRNb2RlbE5hbWUoKVxuICB9XG5cbiAgY29uc3QgYmFzZVF1ZXJ5ID0gc291cmNlTW9kZWwucXVlcnlGb3JNb2RlbCh0YXJnZXRNb2RlbENsYXNzKVxuICBiYXNlUXVlcnkuX2ZvcmNlUXVhbGlmeUJhc2VUYWJsZSA9IHRydWVcbiAgYmFzZVF1ZXJ5LndoZXJlKG1hbmRhdG9yeVdoZXJlQ29uZGl0aW9ucylcblxuICBpZiAoZW50cnkud2hlcmUpIHtcbiAgICBiYXNlUXVlcnkud2hlcmUoZW50cnkud2hlcmUpXG4gIH1cblxuICBjb25zdCBjb3VudFF1ZXJ5ID0gcmVsYXRpb25zaGlwLmFwcGx5U2NvcGUoYmFzZVF1ZXJ5KVxuXG4gIGNvdW50UXVlcnkuX3ByZWxvYWQgPSB7fVxuICBjb3VudFF1ZXJ5LnJlc2VsZWN0KClcblxuICBjb25zdCBkcml2ZXIgPSBjb3VudFF1ZXJ5LmRyaXZlclxuICBjb25zdCBxdW90ZWRUYWJsZSA9IGRyaXZlci5xdW90ZVRhYmxlKGNvdW50UXVlcnkucm9vdFRhYmxlUmVmZXJlbmNlKCkpXG4gIGNvbnN0IHF1b3RlZEZrID0gZHJpdmVyLnF1b3RlQ29sdW1uKGZvcmVpZ25LZXkpXG4gIGNvbnN0IHF1YWxpZmllZEZvcmVpZ25LZXkgPSBgJHtxdW90ZWRUYWJsZX0uJHtxdW90ZWRGa31gXG5cbiAgY291bnRRdWVyeS5ncm91cChxdWFsaWZpZWRGb3JlaWduS2V5KVxuICBjb3VudFF1ZXJ5LnNlbGVjdChgJHtxdWFsaWZpZWRGb3JlaWduS2V5fSBBUyBwYXJlbnRfaWRgKVxuICBjb3VudFF1ZXJ5LnNlbGVjdChcIkNPVU5UKCopIEFTIGNvdW50X3ZhbHVlXCIpXG5cbiAgcmV0dXJuIGNvdW50UXVlcnlcbn1cblxuLyoqXG4gKiBFeGVjdXRlcyBhIHByZXBhcmVkIGdyb3VwZWQgY291bnQgcXVlcnkuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vbW9kZWwtY2xhc3MtcXVlcnkuanNcIikuZGVmYXVsdH0gY291bnRRdWVyeSAtIFByZXBhcmVkIGNvdW50IHF1ZXJ5LlxuICogQHJldHVybnMge1Byb21pc2U8TWFwPHN0cmluZyB8IG51bWJlciwgbnVtYmVyPj59IC0gTWFwIG9mIHBhcmVudCBwayDihpIgY291bnQuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGV4ZWN1dGVDb3VudFF1ZXJ5KGNvdW50UXVlcnkpIHtcbiAgY29uc3Qgcm93cyA9IC8qKiBAdHlwZSB7QXJyYXk8e3BhcmVudF9pZDogc3RyaW5nIHwgbnVtYmVyLCBjb3VudF92YWx1ZTogc3RyaW5nIHwgbnVtYmVyfT59ICovIChcbiAgICBhd2FpdCBjb3VudFF1ZXJ5Ll9leGVjdXRlUXVlcnkoKVxuICApXG5cbiAgLyoqXG4gICAqIENvdW50cy5cbiAgICogQHR5cGUge01hcDxzdHJpbmcgfCBudW1iZXIsIG51bWJlcj59ICovXG4gIGNvbnN0IGNvdW50cyA9IG5ldyBNYXAoKVxuXG4gIGZvciAoY29uc3Qgcm93IG9mIHJvd3MpIHtcbiAgICBjb25zdCBwYXJlbnRJZCA9IC8qKiBAdHlwZSB7c3RyaW5nIHwgbnVtYmVyfSAqLyAocm93LnBhcmVudF9pZClcbiAgICBjb25zdCBjb3VudFZhbHVlID0gTnVtYmVyKHJvdy5jb3VudF92YWx1ZSkgfHwgMFxuICAgIGNvdW50cy5zZXQocGFyZW50SWQsIGNvdW50VmFsdWUpXG4gIH1cblxuICByZXR1cm4gY291bnRzXG59XG5cbi8qKlxuICogQXR0YWNoZXMgb25lIGVudHJ5J3MgcmVzb2x2ZWQgY291bnRzIHRvIHRoZSBsb2FkZWQgbW9kZWxzLlxuICogQHBhcmFtIHtvYmplY3R9IGFyZ3MgLSBPcHRpb25zLlxuICogQHBhcmFtIHtNYXA8c3RyaW5nIHwgbnVtYmVyLCBudW1iZXI+fSBhcmdzLmNvdW50cyAtIENvdW50cyBrZXllZCBieSBwYXJlbnQgcHJpbWFyeSBrZXkuXG4gKiBAcGFyYW0ge1dpdGhDb3VudEVudHJ5fSBhcmdzLmVudHJ5IC0gRW50cnkgd2hvc2UgYWxpYXMgcmVjZWl2ZXMgdGhlIGNvdW50cy5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vcmVjb3JkL2luZGV4LmpzXCIpLmRlZmF1bHRbXX0gYXJncy5tb2RlbHMgLSBMb2FkZWQgcGFyZW50IHJlY29yZHMuXG4gKiBAcGFyYW0ge3N0cmluZ30gYXJncy5wcmltYXJ5S2V5IC0gUGFyZW50IHByaW1hcnkga2V5IGNvbHVtbi5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiBhdHRhY2hDb3VudHMoe2NvdW50cywgZW50cnksIG1vZGVscywgcHJpbWFyeUtleX0pIHtcbiAgZm9yIChjb25zdCBtb2RlbCBvZiBtb2RlbHMpIHtcbiAgICBjb25zdCBtb2RlbFByaW1hcnlLZXlWYWx1ZSA9IC8qKiBAdHlwZSB7c3RyaW5nIHwgbnVtYmVyfSAqLyAobW9kZWwucmVhZENvbHVtbihwcmltYXJ5S2V5KSlcbiAgICAvLyBUb2xlcmF0ZSBkcml2ZXIgZGlmZmVyZW5jZXMgaW4gbnVtZXJpYyByZXR1cm4gdHlwZXM6IFNRTGl0ZVxuICAgIC8vIHJldHVybnMgaW50ZWdlcnMgYXMgSlMgbnVtYmVycywgYnV0IE15U1FMJ3MgcmF3IGRyaXZlciBjYW5cbiAgICAvLyByZXR1cm4gY291bnQgcHJpbWFyeSBrZXlzIGFzIHN0cmluZ3MuIFRyeSBib3RoLlxuICAgIGNvbnN0IHJlc29sdmVkQ291bnQgPSBjb3VudHMuaGFzKG1vZGVsUHJpbWFyeUtleVZhbHVlKVxuICAgICAgPyAvKiogQHR5cGUge251bWJlcn0gKi8gKGNvdW50cy5nZXQobW9kZWxQcmltYXJ5S2V5VmFsdWUpKVxuICAgICAgOiBOdW1iZXIoY291bnRzLmdldChTdHJpbmcobW9kZWxQcmltYXJ5S2V5VmFsdWUpKSA/PyAwKVxuXG4gICAgLy8gQ291bnRzIGdvIG9uIHRoZSByZWNvcmQncyBkZWRpY2F0ZWQgYXNzb2NpYXRpb24tY291bnQgbWFwLFxuICAgIC8vIE5PVCBvbiBgX2F0dHJpYnV0ZXNgLCBzbyBhIHZpcnR1YWwgYHRhc2tzQ291bnRgIGNhbid0IHNoYWRvdyBhXG4gICAgLy8gcmVhbCBgdGFza3NfY291bnRgIGNvbHVtbiAoZS5nLiBhIGNvdW50ZXJfY2FjaGUpIG5vciBsZWFrIGludG9cbiAgICAvLyBhdHRyaWJ1dGUtbGV2ZWwgc2VyaWFsaXphdGlvbiAvIGNoYW5nZSB0cmFja2luZy5cbiAgICBtb2RlbC5fc2V0QXNzb2NpYXRpb25Db3VudChlbnRyeS5hdHRyaWJ1dGVOYW1lLCByZXNvbHZlZENvdW50KVxuICB9XG59XG4iXX0=
@@ -4,6 +4,9 @@
4
4
  * or after an in-flight connection had to be destroyed.
5
5
  */
6
6
  export default class QueryAbortedError extends Error {
7
+ code: string;
8
+ connectionDestroyed: boolean;
9
+ sql: string | undefined;
7
10
  /**
8
11
  * Runs constructor.
9
12
  * @param {object} [args] - Options.
@@ -13,11 +16,8 @@ export default class QueryAbortedError extends Error {
13
16
  */
14
17
  constructor({ cause, connectionDestroyed, sql }?: {
15
18
  cause?: unknown;
16
- connectionDestroyed?: boolean | undefined;
17
- sql?: string | undefined;
19
+ connectionDestroyed?: boolean;
20
+ sql?: string;
18
21
  });
19
- code: string;
20
- connectionDestroyed: boolean;
21
- sql: string | undefined;
22
22
  }
23
23
  //# sourceMappingURL=query-aborted-error.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"query-aborted-error.d.ts","sourceRoot":"","sources":["../../../src/database/query-aborted-error.js"],"names":[],"mappings":"AAEA;;;;GAIG;AACH;IACE;;;;;;OAMG;IACH,kDAJG;QAAuB,KAAK,GAApB,OAAO;QACQ,mBAAmB;QACpB,GAAG;KAC3B,EAQA;IAHC,aAAqC;IACrC,6BAA8C;IAC9C,wBAAc;CAEjB"}
1
+ {"version":3,"file":"query-aborted-error.d.ts","sourceRoot":"","sources":["../../../src/database/query-aborted-error.js"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,MAAM,CAAC,OAAO,OAAO,iBAAkB,SAAQ,KAAK;IAY3C,IAAI;IACJ,mBAAmB;IACnB,GAAG;IAbV;;;;;;OAMG;IACH,YAAY,EAAC,KAAK,EAAE,mBAA2B,EAAE,GAAG,EAAC,AALlD,CAIF,EAHE;QAAuB,KAAK,AAA5B,CACA,EADQ,OAAO,CACf;QAAuB,mBAAmB,AAA1C,CACA,EADQ,OAAO,CACf;QAAsB,GAAG,AAAzB,CACF,EADU,MAAM,CAChB;KACyD,EAOzD;CACF"}
@@ -1,4 +1,6 @@
1
1
  export default class VelociousDatabaseBaseQueryParser {
2
+ pretty: boolean;
3
+ query: import("../query/index.js").default;
2
4
  /**
3
5
  * Runs constructor.
4
6
  * @param {object} args - Options object.
@@ -6,11 +8,9 @@ export default class VelociousDatabaseBaseQueryParser {
6
8
  * @param {import("../query/index.js").default} args.query - Query instance.
7
9
  */
8
10
  constructor({ pretty, query }: {
9
- pretty?: boolean | undefined;
11
+ pretty?: boolean;
10
12
  query: import("../query/index.js").default;
11
13
  });
12
- pretty: boolean;
13
- query: import("../query/index.js").default;
14
14
  toSql(): string;
15
15
  }
16
16
  //# sourceMappingURL=base-query-parser.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"base-query-parser.d.ts","sourceRoot":"","sources":["../../../../src/database/query-parser/base-query-parser.js"],"names":[],"mappings":"AAUA;IACE;;;;;OAKG;IACH,+BAHG;QAAuB,MAAM;QACqB,KAAK,EAA/C,OAAO,mBAAmB,EAAE,OAAO;KAC7C,EAMA;IAFC,gBAAoB;IACpB,2CAAkB;IAGpB,gBAcC;CACF"}
1
+ {"version":3,"file":"base-query-parser.d.ts","sourceRoot":"","sources":["../../../../src/database/query-parser/base-query-parser.js"],"names":[],"mappings":"AAUA,MAAM,CAAC,OAAO,OAAO,gCAAgC;IAU5C,MAAM;IACN,KAAK;IAVZ;;;;;OAKG;IACH,YAAY,EAAC,MAAc,EAAE,KAAK,EAAC,EAHhC;QAAuB,MAAM,AAA7B,CACA,EADQ,OAAO,CACf;QAAkD,KAAK,EAA/C,OAAO,mBAAmB,EAAE,OAAO,CAC7C;KACkC,EAKlC;IAED,KAAK,WAcJ;CACF"}