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
@@ -1,3 +1,67 @@
1
+ export type AggregateOperation = "SUM" | "COUNT" | "MAX" | "MIN";
2
+ export type AggregateSpec = AggregateOperation | {
3
+ op: AggregateOperation;
4
+ column: string;
5
+ };
6
+ export type SubqueryContext = {
7
+ /**
8
+ * - Quotes a table for this tenant. In a cross-database `UNION ALL` it returns a `database`.`table` qualified identifier; when each tenant runs on its own connection it returns the plain quoted table name. Use it for every table the subquery reads so the same subquery works on both execution paths.
9
+ */
10
+ table: (tableName: string) => string;
11
+ /**
12
+ * - Quotes a value for the active connection. `quote.list(values)` quotes and comma-joins an array for `IN (...)` clauses.
13
+ */
14
+ quote: ((value: ReturnType<typeof JSON.parse>) => string) & {
15
+ list: (values: Array<ReturnType<typeof JSON.parse>>) => string;
16
+ };
17
+ /**
18
+ * - The tenant descriptor this subquery is being built for.
19
+ */
20
+ tenant: object;
21
+ /**
22
+ * - The driver the query will run on.
23
+ */
24
+ connection: import("../database/drivers/base.js").default;
25
+ };
26
+ export type TenantAggregateOptions = {
27
+ /**
28
+ * - Database identifier whose tenants are aggregated (for example `"projectTenant"`).
29
+ */
30
+ identifier: string;
31
+ /**
32
+ * - Explicit tenant descriptors to aggregate. Defaults to every tenant the identifier's provider `listTenants` returns.
33
+ */
34
+ tenants?: object[];
35
+ /**
36
+ * - Optional filter applied to the resolved tenant list.
37
+ */
38
+ filter?: (tenant: ReturnType<typeof JSON.parse>) => boolean;
39
+ /**
40
+ * - Columns the aggregate is grouped by (for example `["docker_server_id"]`). Empty means a single grand-total row.
41
+ */
42
+ keyColumns?: string[];
43
+ /**
44
+ * - Output column name to aggregate. `"SUM"` is shorthand for `{op: "SUM", column: <output name>}`; use `{op: "COUNT", column: "*"}` for `COUNT(*)`.
45
+ */
46
+ aggregates: Record<string, AggregateSpec>;
47
+ /**
48
+ * - Signal passed to each aggregate database query.
49
+ */
50
+ signal?: AbortSignal;
51
+ /**
52
+ * - Builds one tenant's inner `SELECT`, which must select every `keyColumns` entry plus every aggregate source column.
53
+ */
54
+ subquery: (context: SubqueryContext) => string;
55
+ /**
56
+ * - Configuration to run against. Defaults to the current configuration.
57
+ */
58
+ configuration?: import("../configuration.js").default;
59
+ };
60
+ export type ResolvedTenant = {
61
+ tenant: object;
62
+ database: string | undefined;
63
+ serverKey: string;
64
+ };
1
65
  /**
2
66
  * Runs one aggregate query across many tenant databases and merges the result. Tenant databases may
3
67
  * be co-located on the default server or spread across other servers, and they can appear or
@@ -9,11 +73,6 @@
9
73
  * `Tenant.aggregateAcross`.
10
74
  */
11
75
  export default class TenantAggregator {
12
- /**
13
- * Prepares an aggregate run, normalizing the aggregate specs up front.
14
- * @param {TenantAggregateOptions} options - Aggregate configuration.
15
- */
16
- constructor(options: TenantAggregateOptions);
17
76
  options: TenantAggregateOptions;
18
77
  configuration: import("../configuration.js").default;
19
78
  keyColumns: string[];
@@ -21,11 +80,16 @@ export default class TenantAggregator {
21
80
  op: AggregateOperation;
22
81
  column: string;
23
82
  }>;
83
+ /**
84
+ * Prepares an aggregate run, normalizing the aggregate specs up front.
85
+ * @param {TenantAggregateOptions} options - Aggregate configuration.
86
+ */
87
+ constructor(options: TenantAggregateOptions);
24
88
  /**
25
89
  * Resolves the tenant list, runs the aggregate per server, and merges everything.
26
- * @returns {Promise<Array<Record<string, ?>>>} - One merged row per distinct key-column combination.
90
+ * @returns {Promise<Array<Record<string, ReturnType<typeof JSON.parse>>>>} - One merged row per distinct key-column combination.
27
91
  */
28
- run(): Promise<Array<Record<string, unknown>>>;
92
+ run(): Promise<Array<Record<string, ReturnType<typeof JSON.parse>>>>;
29
93
  /**
30
94
  * Resolves the tenant list (explicit or from the provider), then maps each to its server and
31
95
  * database via the tenant database resolver.
@@ -49,9 +113,9 @@ export default class TenantAggregator {
49
113
  * connection scope that is released before the fan-out runs, so a `max: 1` tenant pool is never
50
114
  * asked for a second connection while the first is still held (which would deadlock).
51
115
  * @param {ResolvedTenant[]} group - Tenants sharing one server.
52
- * @returns {Promise<Array<Record<string, ?>>>} - Rows produced for this server.
116
+ * @returns {Promise<Array<Record<string, ReturnType<typeof JSON.parse>>>>} - Rows produced for this server.
53
117
  */
54
- _runForServer(group: ResolvedTenant[]): Promise<Array<Record<string, unknown>>>;
118
+ _runForServer(group: ResolvedTenant[]): Promise<Array<Record<string, ReturnType<typeof JSON.parse>>>>;
55
119
  /**
56
120
  * Runs `callback` inside a tenant's context with its connections established, mirroring
57
121
  * `Tenant.with` without importing it (which would create an import cycle).
@@ -77,10 +141,10 @@ export default class TenantAggregator {
77
141
  * treated as "no contribution" and skipped, not coerced to `0` — otherwise an empty tenant would
78
142
  * drag a `MAX` of negatives or a `MIN` of positives to `0`. A key whose every tenant contributed
79
143
  * `NULL` stays `NULL`, matching SQL aggregate semantics over no rows.
80
- * @param {Array<Record<string, ?>>} rows - Rows collected from all servers/tenants.
81
- * @returns {Array<Record<string, ?>>} - One merged row per distinct key-column combination.
144
+ * @param {Array<Record<string, ReturnType<typeof JSON.parse>>>} rows - Rows collected from all servers/tenants.
145
+ * @returns {Array<Record<string, ReturnType<typeof JSON.parse>>>} - One merged row per distinct key-column combination.
82
146
  */
83
- _mergeRows(rows: Array<Record<string, unknown>>): Array<Record<string, unknown>>;
147
+ _mergeRows(rows: Array<Record<string, ReturnType<typeof JSON.parse>>>): Array<Record<string, ReturnType<typeof JSON.parse>>>;
84
148
  /**
85
149
  * Combines two non-null per-server aggregate values with the aggregate's own operation.
86
150
  * @param {AggregateOperation} op - Aggregate operation.
@@ -95,17 +159,17 @@ export default class TenantAggregator {
95
159
  * `bigint`) as strings; an integer beyond `Number.MAX_SAFE_INTEGER` cannot be represented exactly
96
160
  * as a JS number, so cross-server merging would corrupt the result — throw instead. (Fractional
97
161
  * `DECIMAL`/`NUMERIC` values are still subject to normal floating-point representation.)
98
- * @param {?} rawValue - Value returned by the driver for an aggregate column.
162
+ * @param {ReturnType<typeof JSON.parse>} rawValue - Value returned by the driver for an aggregate column.
99
163
  * @returns {number} - The value as a number.
100
164
  */
101
- _toExactNumber(rawValue: unknown): number;
165
+ _toExactNumber(rawValue: ReturnType<typeof JSON.parse>): number;
102
166
  /**
103
167
  * Builds the value quoter passed to subqueries, with a `.list` helper for `IN (...)` clauses.
104
168
  * @param {import("../database/drivers/base.js").default} connection - Driver whose quoting is used.
105
- * @returns {((value: ?) => string) & {list: (values: Array<?>) => string}} - Value quoter with a `.list` helper.
169
+ * @returns {((value: ReturnType<typeof JSON.parse>) => string) & {list: (values: Array<ReturnType<typeof JSON.parse>>) => string}} - Value quoter with a `.list` helper.
106
170
  */
107
- _buildQuote(connection: import("../database/drivers/base.js").default): ((value: unknown) => string) & {
108
- list: (values: Array<unknown>) => string;
171
+ _buildQuote(connection: import("../database/drivers/base.js").default): ((value: ReturnType<typeof JSON.parse>) => string) & {
172
+ list: (values: Array<ReturnType<typeof JSON.parse>>) => string;
109
173
  };
110
174
  /**
111
175
  * Normalizes the aggregate specs (string shorthand or object) and validates each operation.
@@ -117,68 +181,4 @@ export default class TenantAggregator {
117
181
  column: string;
118
182
  }>;
119
183
  }
120
- export type AggregateOperation = "SUM" | "COUNT" | "MAX" | "MIN";
121
- export type AggregateSpec = AggregateOperation | {
122
- op: AggregateOperation;
123
- column: string;
124
- };
125
- export type SubqueryContext = {
126
- /**
127
- * - Quotes a table for this tenant. In a cross-database `UNION ALL` it returns a `database`.`table` qualified identifier; when each tenant runs on its own connection it returns the plain quoted table name. Use it for every table the subquery reads so the same subquery works on both execution paths.
128
- */
129
- table: (tableName: string) => string;
130
- /**
131
- * - Quotes a value for the active connection. `quote.list(values)` quotes and comma-joins an array for `IN (...)` clauses.
132
- */
133
- quote: ((value: unknown) => string) & {
134
- list: (values: Array<unknown>) => string;
135
- };
136
- /**
137
- * - The tenant descriptor this subquery is being built for.
138
- */
139
- tenant: object;
140
- /**
141
- * - The driver the query will run on.
142
- */
143
- connection: import("../database/drivers/base.js").default;
144
- };
145
- export type TenantAggregateOptions = {
146
- /**
147
- * - Database identifier whose tenants are aggregated (for example `"projectTenant"`).
148
- */
149
- identifier: string;
150
- /**
151
- * - Explicit tenant descriptors to aggregate. Defaults to every tenant the identifier's provider `listTenants` returns.
152
- */
153
- tenants?: object[] | undefined;
154
- /**
155
- * - Optional filter applied to the resolved tenant list.
156
- */
157
- filter?: ((tenant: unknown) => boolean) | undefined;
158
- /**
159
- * - Columns the aggregate is grouped by (for example `["docker_server_id"]`). Empty means a single grand-total row.
160
- */
161
- keyColumns?: string[] | undefined;
162
- /**
163
- * - Output column name to aggregate. `"SUM"` is shorthand for `{op: "SUM", column: <output name>}`; use `{op: "COUNT", column: "*"}` for `COUNT(*)`.
164
- */
165
- aggregates: Record<string, AggregateSpec>;
166
- /**
167
- * - Signal passed to each aggregate database query.
168
- */
169
- signal?: AbortSignal | undefined;
170
- /**
171
- * - Builds one tenant's inner `SELECT`, which must select every `keyColumns` entry plus every aggregate source column.
172
- */
173
- subquery: (context: SubqueryContext) => string;
174
- /**
175
- * - Configuration to run against. Defaults to the current configuration.
176
- */
177
- configuration?: import("../configuration.js").default | undefined;
178
- };
179
- export type ResolvedTenant = {
180
- tenant: object;
181
- database: string | undefined;
182
- serverKey: string;
183
- };
184
184
  //# sourceMappingURL=tenant-aggregator.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"tenant-aggregator.d.ts","sourceRoot":"","sources":["../../../src/tenants/tenant-aggregator.js"],"names":[],"mappings":"AAuCA;;;;;;;;;GASG;AACH;IACE;;;OAGG;IACH,qBAFW,sBAAsB,EAOhC;IAJC,gCAAsB;IACtB,qDAAqE;IACrE,qBAA0C;IAC1C;YAmR+B,kBAAkB;gBAAU,MAAM;OAnRF;IAGjE;;;OAGG;IACH,OAFa,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAC,CAAC,CAAC,CAAC,CAiB7C;IAED;;;;OAIG;IACH,mBAFa,OAAO,CAAC,cAAc,EAAE,CAAC,CA0BrC;IAED;;;OAGG;IACH,wBAFa,OAAO,CAAC,MAAM,EAAE,CAAC,CAc7B;IAED;;;;OAIG;IACH,gCAHW,cAAc,EAAE,GACd,cAAc,EAAE,EAAE,CAiB9B;IAED;;;;;;;OAOG;IACH,qBAHW,cAAc,EAAE,GACd,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAC,CAAC,CAAC,CAAC,CA+B7C;IAED;;;;;;;OAOG;IACH,YALa,CAAC,UACH,MAAM,YACN,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,6BAA6B,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,GACxF,OAAO,CAAC,CAAC,CAAC,CAItB;IAED;;;;OAIG;IACH,sDAHW;QAAC,UAAU,EAAE,OAAO,6BAA6B,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,cAAc,EAAE,CAAC;QAAC,SAAS,EAAE,OAAO,CAAA;KAAC,GACxG,MAAM,CA+BlB;IAED;;;;;;;;OAQG;IACH,iBAHW,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAC,CAAC,CAAC,GACtB,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAC,CAAC,CAAC,CAoCpC;IAED;;;;;;OAMG;IACH,aALW,kBAAkB,WAClB,MAAM,SACN,MAAM,GACJ,MAAM,CAOlB;IAED;;;;;;;;OAQG;IACH,yBAHW,OAAC,GACC,MAAM,CAUlB;IAED;;;;OAIG;IACH,wBAHW,OAAO,6BAA6B,EAAE,OAAO,GAC3C,CAAC,CAAC,KAAK,EAAE,OAAC,KAAK,MAAM,CAAC,GAAG;QAAC,IAAI,EAAE,CAAC,MAAM,EAAE,KAAK,CAAC,OAAC,CAAC,KAAK,MAAM,CAAA;KAAC,CAOzE;IAED;;;;OAIG;IACH,iCAHW,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,GAC3B,MAAM,CAAC,MAAM,EAAE;QAAC,EAAE,EAAE,kBAAkB,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAC,CAAC,CAiBpE;CACF;iCA1VY,KAAK,GAAG,OAAO,GAAG,KAAK,GAAG,KAAK;4BAI/B,kBAAkB,GAAG;IAAC,EAAE,EAAE,kBAAkB,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAC;;;;;WAK5D,CAAC,SAAS,EAAE,MAAM,KAAK,MAAM;;;;WAC7B,CAAC,CAAC,KAAK,EAAE,OAAC,KAAK,MAAM,CAAC,GAAG;QAAC,IAAI,EAAE,CAAC,MAAM,EAAE,KAAK,CAAC,OAAC,CAAC,KAAK,MAAM,CAAA;KAAC;;;;YAC7D,MAAM;;;;gBACN,OAAO,6BAA6B,EAAE,OAAO;;;;;;gBAK7C,MAAM;;;;;;;;uBAEG,OAAC,KAAK,OAAO;;;;;;;;gBAEtB,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC;;;;;;;;cAE7B,CAAC,OAAO,EAAE,eAAe,KAAK,MAAM;;;;;;6BAKrC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAC"}
1
+ {"version":3,"file":"tenant-aggregator.d.ts","sourceRoot":"","sources":["../../../src/tenants/tenant-aggregator.js"],"names":[],"mappings":"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"}
@@ -9,7 +9,7 @@ import Current from "../current.js";
9
9
  /**
10
10
  * @typedef {object} SubqueryContext
11
11
  * @property {(tableName: string) => string} table - Quotes a table for this tenant. In a cross-database `UNION ALL` it returns a `database`.`table` qualified identifier; when each tenant runs on its own connection it returns the plain quoted table name. Use it for every table the subquery reads so the same subquery works on both execution paths.
12
- * @property {((value: ?) => string) & {list: (values: Array<?>) => string}} quote - Quotes a value for the active connection. `quote.list(values)` quotes and comma-joins an array for `IN (...)` clauses.
12
+ * @property {((value: ReturnType<typeof JSON.parse>) => string) & {list: (values: Array<ReturnType<typeof JSON.parse>>) => string}} quote - Quotes a value for the active connection. `quote.list(values)` quotes and comma-joins an array for `IN (...)` clauses.
13
13
  * @property {object} tenant - The tenant descriptor this subquery is being built for.
14
14
  * @property {import("../database/drivers/base.js").default} connection - The driver the query will run on.
15
15
  */
@@ -17,7 +17,7 @@ import Current from "../current.js";
17
17
  * @typedef {object} TenantAggregateOptions
18
18
  * @property {string} identifier - Database identifier whose tenants are aggregated (for example `"projectTenant"`).
19
19
  * @property {object[]} [tenants] - Explicit tenant descriptors to aggregate. Defaults to every tenant the identifier's provider `listTenants` returns.
20
- * @property {(tenant: ?) => boolean} [filter] - Optional filter applied to the resolved tenant list.
20
+ * @property {(tenant: ReturnType<typeof JSON.parse>) => boolean} [filter] - Optional filter applied to the resolved tenant list.
21
21
  * @property {string[]} [keyColumns] - Columns the aggregate is grouped by (for example `["docker_server_id"]`). Empty means a single grand-total row.
22
22
  * @property {Record<string, AggregateSpec>} aggregates - Output column name to aggregate. `"SUM"` is shorthand for `{op: "SUM", column: <output name>}`; use `{op: "COUNT", column: "*"}` for `COUNT(*)`.
23
23
  * @property {AbortSignal} [signal] - Signal passed to each aggregate database query.
@@ -52,13 +52,13 @@ export default class TenantAggregator {
52
52
  }
53
53
  /**
54
54
  * Resolves the tenant list, runs the aggregate per server, and merges everything.
55
- * @returns {Promise<Array<Record<string, ?>>>} - One merged row per distinct key-column combination.
55
+ * @returns {Promise<Array<Record<string, ReturnType<typeof JSON.parse>>>>} - One merged row per distinct key-column combination.
56
56
  */
57
57
  async run() {
58
58
  const resolvedTenants = await this._resolveTenants();
59
59
  if (resolvedTenants.length === 0)
60
60
  return [];
61
- /** @type {Array<Record<string, ?>>} */
61
+ /** @type {Array<Record<string, ReturnType<typeof JSON.parse>>>} */
62
62
  const rows = [];
63
63
  for (const group of this._groupByServer(resolvedTenants)) {
64
64
  const groupRows = await this._runForServer(group);
@@ -131,7 +131,7 @@ export default class TenantAggregator {
131
131
  * connection scope that is released before the fan-out runs, so a `max: 1` tenant pool is never
132
132
  * asked for a second connection while the first is still held (which would deadlock).
133
133
  * @param {ResolvedTenant[]} group - Tenants sharing one server.
134
- * @returns {Promise<Array<Record<string, ?>>>} - Rows produced for this server.
134
+ * @returns {Promise<Array<Record<string, ReturnType<typeof JSON.parse>>>>} - Rows produced for this server.
135
135
  */
136
136
  async _runForServer(group) {
137
137
  const [firstTenant] = group;
@@ -142,7 +142,7 @@ export default class TenantAggregator {
142
142
  return await connection.query(this.buildAggregateSql({ connection, entries: group, qualified: true }), { signal: this.options.signal });
143
143
  });
144
144
  }
145
- /** @type {Array<Record<string, ?>>} */
145
+ /** @type {Array<Record<string, ReturnType<typeof JSON.parse>>>} */
146
146
  const rows = [];
147
147
  for (const resolvedTenant of group) {
148
148
  const tenantRows = await this._withTenant(resolvedTenant.tenant, async (connections) => {
@@ -198,11 +198,11 @@ export default class TenantAggregator {
198
198
  * treated as "no contribution" and skipped, not coerced to `0` — otherwise an empty tenant would
199
199
  * drag a `MAX` of negatives or a `MIN` of positives to `0`. A key whose every tenant contributed
200
200
  * `NULL` stays `NULL`, matching SQL aggregate semantics over no rows.
201
- * @param {Array<Record<string, ?>>} rows - Rows collected from all servers/tenants.
202
- * @returns {Array<Record<string, ?>>} - One merged row per distinct key-column combination.
201
+ * @param {Array<Record<string, ReturnType<typeof JSON.parse>>>} rows - Rows collected from all servers/tenants.
202
+ * @returns {Array<Record<string, ReturnType<typeof JSON.parse>>>} - One merged row per distinct key-column combination.
203
203
  */
204
204
  _mergeRows(rows) {
205
- /** @type {Map<string, Record<string, ?>>} */
205
+ /** @type {Map<string, Record<string, ReturnType<typeof JSON.parse>>>} */
206
206
  const merged = new Map();
207
207
  for (const row of rows) {
208
208
  const mapKey = JSON.stringify(this.keyColumns.map((keyColumn) => row[keyColumn]));
@@ -247,7 +247,7 @@ export default class TenantAggregator {
247
247
  * `bigint`) as strings; an integer beyond `Number.MAX_SAFE_INTEGER` cannot be represented exactly
248
248
  * as a JS number, so cross-server merging would corrupt the result — throw instead. (Fractional
249
249
  * `DECIMAL`/`NUMERIC` values are still subject to normal floating-point representation.)
250
- * @param {?} rawValue - Value returned by the driver for an aggregate column.
250
+ * @param {ReturnType<typeof JSON.parse>} rawValue - Value returned by the driver for an aggregate column.
251
251
  * @returns {number} - The value as a number.
252
252
  */
253
253
  _toExactNumber(rawValue) {
@@ -260,10 +260,10 @@ export default class TenantAggregator {
260
260
  /**
261
261
  * Builds the value quoter passed to subqueries, with a `.list` helper for `IN (...)` clauses.
262
262
  * @param {import("../database/drivers/base.js").default} connection - Driver whose quoting is used.
263
- * @returns {((value: ?) => string) & {list: (values: Array<?>) => string}} - Value quoter with a `.list` helper.
263
+ * @returns {((value: ReturnType<typeof JSON.parse>) => string) & {list: (values: Array<ReturnType<typeof JSON.parse>>) => string}} - Value quoter with a `.list` helper.
264
264
  */
265
265
  _buildQuote(connection) {
266
- return Object.assign((/** @type {?} */ value) => String(connection.quote(value)), { list: (/** @type {Array<?>} */ values) => values.map((value) => String(connection.quote(value))).join(", ") });
266
+ return Object.assign((/** @type {ReturnType<typeof JSON.parse>} */ value) => String(connection.quote(value)), { list: (/** @type {Array<ReturnType<typeof JSON.parse>>} */ values) => values.map((value) => String(connection.quote(value))).join(", ") });
267
267
  }
268
268
  /**
269
269
  * Normalizes the aggregate specs (string shorthand or object) and validates each operation.
@@ -283,4 +283,4 @@ export default class TenantAggregator {
283
283
  return normalized;
284
284
  }
285
285
  }
286
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVuYW50LWFnZ3JlZ2F0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdGVuYW50cy90ZW5hbnQtYWdncmVnYXRvci5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVosT0FBTyxPQUFPLE1BQU0sZUFBZSxDQUFBO0FBRW5DOztHQUVHO0FBRUg7O0dBRUc7QUFFSDs7Ozs7O0dBTUc7QUFFSDs7Ozs7Ozs7OztHQVVHO0FBRUg7O0dBRUc7QUFFSCxNQUFNLG9CQUFvQixHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQTtBQUNwRSxNQUFNLG1CQUFtQixHQUFHLDRCQUE0QixDQUFBO0FBRXhEOzs7Ozs7Ozs7R0FTRztBQUNILE1BQU0sQ0FBQyxPQUFPLE9BQU8sZ0JBQWdCO0lBQ25DOzs7T0FHRztJQUNILFlBQVksT0FBTztRQUNqQixJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQTtRQUN0QixJQUFJLENBQUMsYUFBYSxHQUFHLE9BQU8sQ0FBQyxhQUFhLElBQUksT0FBTyxDQUFDLGFBQWEsRUFBRSxDQUFBO1FBQ3JFLElBQUksQ0FBQyxVQUFVLEdBQUcsT0FBTyxDQUFDLFVBQVUsSUFBSSxFQUFFLENBQUE7UUFDMUMsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFBO0lBQ2pFLENBQUM7SUFFRDs7O09BR0c7SUFDSCxLQUFLLENBQUMsR0FBRztRQUNQLE1BQU0sZUFBZSxHQUFHLE1BQU0sSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFBO1FBRXBELElBQUksZUFBZSxDQUFDLE1BQU0sS0FBSyxDQUFDO1lBQUUsT0FBTyxFQUFFLENBQUE7UUFFM0MsdUNBQXVDO1FBQ3ZDLE1BQU0sSUFBSSxHQUFHLEVBQUUsQ0FBQTtRQUVmLEtBQUssTUFBTSxLQUFL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SUFFRDs7OztPQUlHO0lBQ0gsb0JBQW9CLENBQUMsVUFBVTtRQUM3Qix1RUFBdUU7UUFDdkUsTUFBTSxVQUFVLEdBQUcsRUFBRSxDQUFBO1FBRXJCLEtBQUssTUFBTSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7WUFDdEQsTUFBTSxFQUFFLEdBQUcsaUNBQWlDLENBQUMsQ0FBQyxDQUFDLE9BQU8sSUFBSSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQTtZQUV4RyxJQUFJLENBQUMsb0JBQW9CLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7Z0JBQ2xDLE1BQU0sSUFBSSxLQUFLLENBQUMsdUNBQXVDLElBQUksS0FBSyxFQUFFLGdCQUFnQixLQUFLLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQTtZQUNuSSxDQUFDO1lBRUQsVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUMsTUFBTSxFQUFFLE9BQU8sSUFBSSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsRUFBQyxDQUFBO1FBQ2hGLENBQUM7UUFFRCxPQUFPLFVBQVUsQ0FBQTtJQUNuQixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuaW1wb3J0IEN1cnJlbnQgZnJvbSBcIi4uL2N1cnJlbnQuanNcIlxuXG4vKipcbiAqIEB0eXBlZGVmIHtcIlNVTVwiIHwgXCJDT1VOVFwiIHwgXCJNQVhcIiB8IFwiTUlOXCJ9IEFnZ3JlZ2F0ZU9wZXJhdGlvblxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge0FnZ3JlZ2F0ZU9wZXJhdGlvbiB8IHtvcDogQWdncmVnYXRlT3BlcmF0aW9uLCBjb2x1bW46IHN0cmluZ319IEFnZ3JlZ2F0ZVNwZWNcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IFN1YnF1ZXJ5Q29udGV4dFxuICogQHByb3BlcnR5IHsodGFibGVOYW1lOiBzdHJpbmcpID0+IHN0cmluZ30gdGFibGUgLSBRdW90ZXMgYSB0YWJsZSBmb3IgdGhpcyB0ZW5hbnQuIEluIGEgY3Jvc3MtZGF0YWJhc2UgYFVOSU9OIEFMTGAgaXQgcmV0dXJucyBhIGBkYXRhYmFzZWAuYHRhYmxlYCBxdWFsaWZpZWQgaWRlbnRpZmllcjsgd2hlbiBlYWNoIHRlbmFudCBydW5zIG9uIGl0cyBvd24gY29ubmVjdGlvbiBpdCByZXR1cm5zIHRoZSBwbGFpbiBxdW90ZWQgdGFibGUgbmFtZS4gVXNlIGl0IGZvciBldmVyeSB0YWJsZSB0aGUgc3VicXVlcnkgcmVhZHMgc28gdGhlIHNhbWUgc3VicXVlcnkgd29ya3Mgb24gYm90aCBleGVjdXRpb24gcGF0aHMuXG4gKiBAcHJvcGVydHkgeygodmFsdWU6ID8pID0+IHN0cmluZykgJiB7bGlzdDogKHZhbHVlczogQXJyYXk8Pz4pID0+IHN0cmluZ319IHF1b3RlIC0gUXVvdGVzIGEgdmFsdWUgZm9yIHRoZSBhY3RpdmUgY29ubmVjdGlvbi4gYHF1b3RlLmxpc3QodmFsdWVzKWAgcXVvdGVzIGFuZCBjb21tYS1qb2lucyBhbiBhcnJheSBmb3IgYElOICguLi4pYCBjbGF1c2VzLlxuICogQHByb3BlcnR5IHtvYmplY3R9IHRlbmFudCAtIFRoZSB0ZW5hbnQgZGVzY3JpcHRvciB0aGlzIHN1YnF1ZXJ5IGlzIGJlaW5nIGJ1aWx0IGZvci5cbiAqIEBwcm9wZXJ0eSB7aW1wb3J0KFwiLi4vZGF0YWJhc2UvZHJpdmVycy9iYXNlLmpzXCIpLmRlZmF1bHR9IGNvbm5lY3Rpb24gLSBUaGUgZHJpdmVyIHRoZSBxdWVyeSB3aWxsIHJ1biBvbi5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IFRlbmFudEFnZ3JlZ2F0ZU9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBpZGVudGlmaWVyIC0gRGF0YWJhc2UgaWRlbnRpZmllciB3aG9zZSB0ZW5hbnRzIGFyZSBhZ2dyZWdhdGVkIChmb3IgZXhhbXBsZSBgXCJwcm9qZWN0VGVuYW50XCJgKS5cbiAqIEBwcm9wZXJ0eSB7b2JqZWN0W119IFt0ZW5hbnRzXSAtIEV4cGxpY2l0IHRlbmFudCBkZXNjcmlwdG9ycyB0byBhZ2dyZWdhdGUuIERlZmF1bHRzIHRvIGV2ZXJ5IHRlbmFudCB0aGUgaWRlbnRpZmllcidzIHByb3ZpZGVyIGBsaXN0VGVuYW50c2AgcmV0dXJucy5cbiAqIEBwcm9wZXJ0eSB7KHRlbmFudDogPykgPT4gYm9vbGVhbn0gW2ZpbHRlcl0gLSBPcHRpb25hbCBmaWx0ZXIgYXBwbGllZCB0byB0aGUgcmVzb2x2ZWQgdGVuYW50IGxpc3QuXG4gKiBAcHJvcGVydHkge3N0cmluZ1tdfSBba2V5Q29sdW1uc10gLSBDb2x1bW5zIHRoZSBhZ2dyZWdhdGUgaXMgZ3JvdXBlZCBieSAoZm9yIGV4YW1wbGUgYFtcImRvY2tlcl9zZXJ2ZXJfaWRcIl1gKS4gRW1wdHkgbWVhbnMgYSBzaW5nbGUgZ3JhbmQtdG90YWwgcm93LlxuICogQHByb3BlcnR5IHtSZWNvcmQ8c3RyaW5nLCBBZ2dyZWdhdGVTcGVjPn0gYWdncmVnYXRlcyAtIE91dHB1dCBjb2x1bW4gbmFtZSB0byBhZ2dyZWdhdGUuIGBcIlNVTVwiYCBpcyBzaG9ydGhhbmQgZm9yIGB7b3A6IFwiU1VNXCIsIGNvbHVtbjogPG91dHB1dCBuYW1lPn1gOyB1c2UgYHtvcDogXCJDT1VOVFwiLCBjb2x1bW46IFwiKlwifWAgZm9yIGBDT1VOVCgqKWAuXG4gKiBAcHJvcGVydHkge0Fib3J0U2lnbmFsfSBbc2lnbmFsXSAtIFNpZ25hbCBwYXNzZWQgdG8gZWFjaCBhZ2dyZWdhdGUgZGF0YWJhc2UgcXVlcnkuXG4gKiBAcHJvcGVydHkgeyhjb250ZXh0OiBTdWJxdWVyeUNvbnRleHQpID0+IHN0cmluZ30gc3VicXVlcnkgLSBCdWlsZHMgb25lIHRlbmFudCdzIGlubmVyIGBTRUxFQ1RgLCB3aGljaCBtdXN0IHNlbGVjdCBldmVyeSBga2V5Q29sdW1uc2AgZW50cnkgcGx1cyBldmVyeSBhZ2dyZWdhdGUgc291cmNlIGNvbHVtbi5cbiAqIEBwcm9wZXJ0eSB7aW1wb3J0KFwiLi4vY29uZmlndXJhdGlvbi5qc1wiKS5kZWZhdWx0fSBbY29uZmlndXJhdGlvbl0gLSBDb25maWd1cmF0aW9uIHRvIHJ1biBhZ2FpbnN0LiBEZWZhdWx0cyB0byB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge3t0ZW5hbnQ6IG9iamVjdCwgZGF0YWJhc2U6IHN0cmluZyB8IHVuZGVmaW5lZCwgc2VydmVyS2V5OiBzdHJpbmd9fSBSZXNvbHZlZFRlbmFudFxuICovXG5cbmNvbnN0IEFHR1JFR0FURV9PUEVSQVRJT05TID0gbmV3IFNldChbXCJTVU1cIiwgXCJDT1VOVFwiLCBcIk1BWFwiLCBcIk1JTlwiXSlcbmNvbnN0IERFUklWRURfVEFCTEVfQUxJQVMgPSBcInZlbG9jaW91c190ZW5hbnRfYWdncmVnYXRlXCJcblxuLyoqXG4gKiBSdW5zIG9uZSBhZ2dyZWdhdGUgcXVlcnkgYWNyb3NzIG1hbnkgdGVuYW50IGRhdGFiYXNlcyBhbmQgbWVyZ2VzIHRoZSByZXN1bHQuIFRlbmFudCBkYXRhYmFzZXMgbWF5XG4gKiBiZSBjby1sb2NhdGVkIG9uIHRoZSBkZWZhdWx0IHNlcnZlciBvciBzcHJlYWQgYWNyb3NzIG90aGVyIHNlcnZlcnMsIGFuZCB0aGV5IGNhbiBhcHBlYXIgb3JcbiAqIGRpc2FwcGVhciBhdCBydW50aW1lOyB0aGlzIHJlc29sdmVzIHRoZSBsaXZlIHRlbmFudCBsaXN0LCBncm91cHMgdGVuYW50cyBieSB0aGUgc2VydmVyIHRoZXkgbGl2ZVxuICogb24sIGFuZCDigJQgcGVyIHNlcnZlciDigJQgZW1pdHMgYSBzaW5nbGUgY3Jvc3MtZGF0YWJhc2UgYFVOSU9OIEFMTGAgd2hlbiB0aGUgZHJpdmVyIHN1cHBvcnRzIHF1YWxpZmllZFxuICogY3Jvc3MtZGF0YWJhc2UgcmVmZXJlbmNlcyAoTXlTUUwvTVNTUUwpIG9yIGZhbGxzIGJhY2sgdG8gb25lIHF1ZXJ5IHBlciB0ZW5hbnQgb3RoZXJ3aXNlXG4gKiAoUG9zdGdyZVNRTC9TUUxpdGUpLiBSZXN1bHRzIGZyb20gZXZlcnkgc2VydmVyIGFyZSBtZXJnZWQgd2l0aCB0aGUgYWdncmVnYXRlJ3Mgb3duIG9wZXJhdGlvbiwgc29cbiAqIGNhbGxlcnMgZ2V0IG9uZSBjb21iaW5lZCByZXN1bHQgc2V0IHJlZ2FyZGxlc3Mgb2YgaG93IHRoZSB0ZW5hbnRzIGFyZSBkaXN0cmlidXRlZC4gUmVhY2hlZCB0aHJvdWdoXG4gKiBgVGVuYW50LmFnZ3JlZ2F0ZUFjcm9zc2AuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRlbmFudEFnZ3JlZ2F0b3Ige1xuICAvKipcbiAgICogUHJlcGFyZXMgYW4gYWdncmVnYXRlIHJ1biwgbm9ybWFsaXppbmcgdGhlIGFnZ3JlZ2F0ZSBzcGVjcyB1cCBmcm9udC5cbiAgICogQHBhcmFtIHtUZW5hbnRBZ2dyZWdhdGVPcHRpb25zfSBvcHRpb25zIC0gQWdncmVnYXRlIGNvbmZpZ3VyYXRpb24uXG4gICAqL1xuICBjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9uc1xuICAgIHRoaXMuY29uZmlndXJhdGlvbiA9IG9wdGlvbnMuY29uZmlndXJhdGlvbiA/PyBDdXJyZW50LmNvbmZpZ3VyYXRpb24oKVxuICAgIHRoaXMua2V5Q29sdW1ucyA9IG9wdGlvbnMua2V5Q29sdW1ucyA/PyBbXVxuICAgIHRoaXMuYWdncmVnYXRlcyA9IHRoaXMuX25vcm1hbGl6ZUFnZ3JlZ2F0ZXMob3B0aW9ucy5hZ2dyZWdhdGVzKVxuICB9XG5cbiAgLyoqXG4gICAqIFJlc29sdmVzIHRoZSB0ZW5hbnQgbGlzdCwgcnVucyB0aGUgYWdncmVnYXRlIHBlciBzZXJ2ZXIsIGFuZCBtZXJnZXMgZXZlcnl0aGluZy5cbiAgICogQHJldHVybnMge1Byb21pc2U8QXJyYXk8UmVjb3JkPHN0cmluZywgPz4+Pn0gLSBPbmUgbWVyZ2VkIHJvdyBwZXIgZGlzdGluY3Qga2V5LWNvbHVtbiBjb21iaW5hdGlvbi5cbiAgICovXG4gIGFzeW5jIHJ1bigpIHtcbiAgICBjb25zdCByZXNvbHZlZFRlbmFudHMgPSBhd2FpdCB0aGlzLl9yZXNvbHZlVGVuYW50cygpXG5cbiAgICBpZiAocmVzb2x2ZWRUZW5hbnRzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIFtdXG5cbiAgICAvKiogQHR5cGUge0FycmF5PFJlY29yZDxzdHJpbmcsID8+Pn0gKi9cbiAgICBjb25zdCByb3dzID0gW11cblxuICAgIGZvciAoY29uc3QgZ3JvdXAgb2YgdGhpcy5fZ3JvdXBCeVNlcnZlcihyZXNvbHZlZFRlbmFudHMpKSB7XG4gICAgICBjb25zdCBncm91cFJvd3MgPSBhd2FpdCB0aGlzLl9ydW5Gb3JTZXJ2ZXIoZ3JvdXApXG5cbiAgICAgIHJvd3MucHVzaCguLi5ncm91cFJvd3MpXG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX21lcmdlUm93cyhyb3dzKVxuICB9XG5cbiAgLyoqXG4gICAqIFJlc29sdmVzIHRoZSB0ZW5hbnQgbGlzdCAoZXhwbGljaXQgb3IgZnJvbSB0aGUgcHJvdmlkZXIpLCB0aGVuIG1hcHMgZWFjaCB0byBpdHMgc2VydmVyIGFuZFxuICAgKiBkYXRhYmFzZSB2aWEgdGhlIHRlbmFudCBkYXRhYmFzZSByZXNvbHZlci5cbiAgICogQHJldHVybnMge1Byb21pc2U8UmVzb2x2ZWRUZW5hbnRbXT59IC0gVGVuYW50cyB0byBhZ2dyZWdhdGUsIGVhY2ggcmVzb2x2ZWQgdG8gaXRzIHNlcnZlciArIGRhdGFiYXNlLlxuICAgKi9cbiAgYXN5bmMgX3Jlc29sdmVUZW5hbnRzKCkge1xuICAgIGNvbnN0IHRlbmFudHMgPSB0aGlzLm9wdGlvbnMudGVuYW50cyA/PyBhd2FpdCB0aGlzLl9saXN0UHJvdmlkZXJUZW5hbnRzKClcbiAgICBjb25zdCBmaWx0ZXJlZCA9IHRoaXMub3B0aW9ucy5maWx0ZXIgPyB0ZW5hbnRzLmZpbHRlcih0aGlzLm9wdGlvbnMuZmlsdGVyKSA6IHRlbmFudHNcblxuICAgIHJldHVybiBmaWx0ZXJlZC5tYXAoKHRlbmFudCkgPT4ge1xuICAgICAgY29uc3QgZGF0YWJhc2VDb25maWd1cmF0aW9uID0gdGhpcy5jb25maWd1cmF0aW9uLnJlc29sdmVEYXRhYmFzZUNvbmZpZ3VyYXRpb24odGhpcy5vcHRpb25zLmlkZW50aWZpZXIsIHRlbmFudClcblxuICAgICAgLy8gVGhlIHNlcnZlciBrZXkgZ3JvdXBzIHRlbmFudHMgdGhhdCBzaGFyZSBhIGNvbm5lY3Rpb24gZW5kcG9pbnQgc28gY28tbG9jYXRlZCB0ZW5hbnRzIGNhbiBiZVxuICAgICAgLy8gVU5JT04tZWQgb24gb25lIGNvbm5lY3Rpb24uIEl0IG9ubHkgbmVlZHMgdG8gYmUgZXhhY3QgZm9yIHRoZSBjcm9zcy1kYXRhYmFzZSBgVU5JT04gQUxMYFxuICAgICAgLy8gcGF0aCwgd2hpY2ggaXMgTXlTUUwtb25seSwgd2hlcmUgaG9zdC9wb3J0L3VzZXJuYW1lL3R5cGUgZnVsbHkgaWRlbnRpZnkgdGhlIHNlcnZlci4gRXZlcnlcbiAgICAgIC8vIG90aGVyIGRyaXZlciB0YWtlcyB0aGUgZmFuLW91dCBwYXRoIChvbmUgY29ubmVjdGlvbiBwZXIgdGVuYW50KSwgc28gYSBjb2Fyc2Uga2V5IHRoZXJlIGp1c3RcbiAgICAgIC8vIGdyb3VwcyB0ZW5hbnRzIHRoYXQgYXJlIHRoZW4gcXVlcmllZCBpbmRpdmlkdWFsbHkgYW55d2F5IOKAlCBpdCBjYW4gbmV2ZXIgcm91dGUgYSBxdWVyeSB0byB0aGVcbiAgICAgIC8vIHdyb25nIHNlcnZlci5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRhdGFiYXNlOiBkYXRhYmFzZUNvbmZpZ3VyYXRpb24uZGF0YWJhc2UsXG4gICAgICAgIHNlcnZlcktleTogSlNPTi5zdHJpbmdpZnkoW1xuICAgICAgICAgIGRhdGFiYXNlQ29uZmlndXJhdGlvbi50eXBlID8/IG51bGwsXG4gICAgICAgICAgZGF0YWJhc2VDb25maWd1cmF0aW9uLmhvc3QgPz8gbnVsbCxcbiAgICAgICAgICBkYXRhYmFzZUNvbmZpZ3VyYXRpb24ucG9ydCA/PyBudWxsLFxuICAgICAgICAgIGRhdGFiYXNlQ29uZmlndXJhdGlvbi51c2VybmFtZSA/PyBudWxsXG4gICAgICAgIF0pLFxuICAgICAgICB0ZW5hbnRcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIExpc3RzIGV2ZXJ5IHRlbmFudCBmb3IgdGhlIGlkZW50aWZpZXIgdGhyb3VnaCBpdHMgcHJvdmlkZXIncyBgbGlzdFRlbmFudHNgIGhvb2suXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPG9iamVjdFtdPn0gLSBFdmVyeSB0ZW5hbnQgdGhlIHByb3ZpZGVyIGxpc3RzIGZvciB0aGUgaWRlbnRpZmllci5cbiAgICovXG4gIGFzeW5jIF9saXN0UHJvdmlkZXJUZW5hbnRzKCkge1xuICAgIGNvbnN0IHByb3ZpZGVyID0gdGhpcy5jb25maWd1cmF0aW9uLmdldFRlbmFudERhdGFiYXNlUHJvdmlkZXIodGhpcy5vcHRpb25zLmlkZW50aWZpZXIpXG4gICAgY29uc3QgbGlzdGVkVGVuYW50cyA9IGF3YWl0IHRoaXMuY29uZmlndXJhdGlvbi5lbnN1cmVDb25uZWN0aW9ucyhcbiAgICAgIHtuYW1lOiBgVGVuYW50LmFnZ3JlZ2F0ZUFjcm9zczogJHt0aGlzLm9wdGlvbnMuaWRlbnRpZmllcn1gfSxcbiAgICAgIGFzeW5jICgpID0+IGF3YWl0IHByb3ZpZGVyLmxpc3RUZW5hbnRzKHtjb25maWd1cmF0aW9uOiB0aGlzLmNvbmZpZ3VyYXRpb24sIGlkZW50aWZpZXI6IHRoaXMub3B0aW9ucy5pZGVudGlmaWVyfSlcbiAgICApXG5cbiAgICBpZiAoIUFycmF5LmlzQXJyYXkobGlzdGVkVGVuYW50cykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVGVuYW50IGRhdGFiYXNlIHByb3ZpZGVyIGZvciAke3RoaXMub3B0aW9ucy5pZGVudGlmaWVyfSBtdXN0IHJldHVybiBhbiBhcnJheSBmcm9tIGxpc3RUZW5hbnRzYClcbiAgICB9XG5cbiAgICByZXR1cm4gbGlzdGVkVGVuYW50c1xuICB9XG5cbiAgLyoqXG4gICAqIEdyb3VwcyB0ZW5hbnRzIGJ5IHRoZSBzZXJ2ZXIgdGhleSBsaXZlIG9uIHNvIGNvLWxvY2F0ZWQgdGVuYW50cyBjYW4gc2hhcmUgb25lIHF1ZXJ5LlxuICAgKiBAcGFyYW0ge1Jlc29sdmVkVGVuYW50W119IHJlc29sdmVkVGVuYW50cyAtIFRlbmFudHMgcmVzb2x2ZWQgdG8gdGhlaXIgc2VydmVyLlxuICAgKiBAcmV0dXJucyB7UmVzb2x2ZWRUZW5hbnRbXVtdfSAtIFRlbmFudHMgZ3JvdXBlZCBieSB0aGUgc2VydmVyIHRoZXkgbGl2ZSBvbi5cbiAgICovXG4gIF9ncm91cEJ5U2VydmVyKHJlc29sdmVkVGVuYW50cykge1xuICAgIC8qKiBAdHlwZSB7TWFwPHN0cmluZywgUmVzb2x2ZWRUZW5hbnRbXT59ICovXG4gICAgY29uc3QgZ3JvdXBzID0gbmV3IE1hcCgpXG5cbiAgICBmb3IgKGNvbnN0IHJlc29sdmVkVGVuYW50IG9mIHJlc29sdmVkVGVuYW50cykge1xuICAgICAgY29uc3QgZ3JvdXAgPSBncm91cHMuZ2V0KHJlc29sdmVkVGVuYW50LnNlcnZlcktleSlcblxuICAgICAgaWYgKGdyb3VwKSB7XG4gICAgICAgIGdyb3VwLnB1c2gocmVzb2x2ZWRUZW5hbnQpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBncm91cHMuc2V0KHJlc29sdmVkVGVuYW50LnNlcnZlcktleSwgW3Jlc29sdmVkVGVuYW50XSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gQXJyYXkuZnJvbShncm91cHMudmFsdWVzKCkpXG4gIH1cblxuICAvKipcbiAgICogUnVucyB0aGUgYWdncmVnYXRlIGZvciBvbmUgc2VydmVyJ3MgdGVuYW50cywgdXNpbmcgYSBzaW5nbGUgY3Jvc3MtZGF0YWJhc2UgYFVOSU9OIEFMTGAgd2hlbiB0aGVcbiAgICogZHJpdmVyIHN1cHBvcnRzIGl0IG9yIG9uZSBxdWVyeSBwZXIgdGVuYW50IG90aGVyd2lzZS4gVGhlIGRyaXZlciBjYXBhYmlsaXR5IGlzIHByb2JlZCBpbiBpdHMgb3duXG4gICAqIGNvbm5lY3Rpb24gc2NvcGUgdGhhdCBpcyByZWxlYXNlZCBiZWZvcmUgdGhlIGZhbi1vdXQgcnVucywgc28gYSBgbWF4OiAxYCB0ZW5hbnQgcG9vbCBpcyBuZXZlclxuICAgKiBhc2tlZCBmb3IgYSBzZWNvbmQgY29ubmVjdGlvbiB3aGlsZSB0aGUgZmlyc3QgaXMgc3RpbGwgaGVsZCAod2hpY2ggd291bGQgZGVhZGxvY2spLlxuICAgKiBAcGFyYW0ge1Jlc29sdmVkVGVuYW50W119IGdyb3VwIC0gVGVuYW50cyBzaGFyaW5nIG9uZSBzZXJ2ZXIuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPEFycmF5PFJlY29yZDxzdHJpbmcsID8+Pj59IC0gUm93cyBwcm9kdWNlZCBmb3IgdGhpcyBzZXJ2ZXIuXG4gICAqL1xuICBhc3luYyBfcnVuRm9yU2VydmVyKGdyb3VwKSB7XG4gICAgY29uc3QgW2ZpcnN0VGVuYW50XSA9IGdyb3VwXG4gICAgY29uc3Qgc3VwcG9ydHNDcm9zc0RhdGFiYXNlUmVmZXJlbmNlcyA9IGF3YWl0IHRoaXMuX3dpdGhUZW5hbnQoXG4gICAgICBmaXJzdFRlbmFudC50ZW5hbnQsXG4gICAgICBhc3luYyAoY29ubmVjdGlvbnMpID0+IGNvbm5lY3Rpb25zW3RoaXMub3B0aW9ucy5pZGVudGlmaWVyXS5zdXBwb3J0c0Nyb3NzRGF0YWJhc2VSZWZlcmVuY2VzKClcbiAgICApXG5cbiAgICBpZiAoc3VwcG9ydHNDcm9zc0RhdGFiYXNlUmVmZXJlbmNlcykge1xuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuX3dpdGhUZW5hbnQoZmlyc3RUZW5hbnQudGVuYW50LCBhc3luYyAoY29ubmVjdGlvbnMpID0+IHtcbiAgICAgICAgY29uc3QgY29ubmVjdGlvbiA9IGNvbm5lY3Rpb25zW3RoaXMub3B0aW9ucy5pZGVudGlmaWVyXVxuXG4gICAgICAgIHJldHVybiBhd2FpdCBjb25uZWN0aW9uLnF1ZXJ5KHRoaXMuYnVpbGRBZ2dyZWdhdGVTcWwoe2Nvbm5lY3Rpb24sIGVudHJpZXM6IGdyb3VwLCBxdWFsaWZpZWQ6IHRydWV9KSwge3NpZ25hbDogdGhpcy5vcHRpb25zLnNpZ25hbH0pXG4gICAgICB9KVxuICAgIH1cblxuICAgIC8qKiBAdHlwZSB7QXJyYXk8UmVjb3JkPHN0cmluZywgPz4+fSAqL1xuICAgIGNvbnN0IHJvd3MgPSBbXVxuXG4gICAgZm9yIChjb25zdCByZXNvbHZlZFRlbmFudCBvZiBncm91cCkge1xuICAgICAgY29uc3QgdGVuYW50Um93cyA9IGF3YWl0IHRoaXMuX3dpdGhUZW5hbnQocmVzb2x2ZWRUZW5hbnQudGVuYW50LCBhc3luYyAoY29ubmVjdGlvbnMpID0+IHtcbiAgICAgICAgY29uc3QgY29ubmVjdGlvbiA9IGNvbm5lY3Rpb25zW3RoaXMub3B0aW9ucy5pZGVudGlmaWVyXVxuXG4gICAgICAgIHJldHVybiBhd2FpdCBjb25uZWN0aW9uLnF1ZXJ5KHRoaXMuYnVpbGRBZ2dyZWdhdGVTcWwoe2Nvbm5lY3Rpb24sIGVudHJpZXM6IFtyZXNvbHZlZFRlbmFudF0sIHF1YWxpZmllZDogZmFsc2V9KSwge3NpZ25hbDogdGhpcy5vcHRpb25zLnNpZ25hbH0pXG4gICAgICB9KVxuXG4gICAgICByb3dzLnB1c2goLi4udGVuYW50Um93cylcbiAgICB9XG5cbiAgICByZXR1cm4gcm93c1xuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgYGNhbGxiYWNrYCBpbnNpZGUgYSB0ZW5hbnQncyBjb250ZXh0IHdpdGggaXRzIGNvbm5lY3Rpb25zIGVzdGFibGlzaGVkLCBtaXJyb3JpbmdcbiAgICogYFRlbmFudC53aXRoYCB3aXRob3V0IGltcG9ydGluZyBpdCAod2hpY2ggd291bGQgY3JlYXRlIGFuIGltcG9ydCBjeWNsZSkuXG4gICAqIEB0ZW1wbGF0ZSBUXG4gICAqIEBwYXJhbSB7b2JqZWN0fSB0ZW5hbnQgLSBUZW5hbnQgZGVzY3JpcHRvciB0byBzd2l0Y2ggaW50by5cbiAgICogQHBhcmFtIHsoY29ubmVjdGlvbnM6IFJlY29yZDxzdHJpbmcsIGltcG9ydChcIi4uL2RhdGFiYXNlL2RyaXZlcnMvYmFzZS5qc1wiKS5kZWZhdWx0PikgPT4gUHJvbWlzZTxUPn0gY2FsbGJhY2sgLSBPcGVyYXRpb24gdG8gcnVuIHdpdGggdGhlIHRlbmFudCdzIGFjdGl2ZSBjb25uZWN0aW9ucy5cbiAgICogQHJldHVybnMge1Byb21pc2U8VD59IC0gQ2FsbGJhY2sgcmVzdWx0IGZyb20gd2l0aGluIHRoZSB0ZW5hbnQgY29udGV4dC5cbiAgICovXG4gIGFzeW5jIF93aXRoVGVuYW50KHRlbmFudCwgY2FsbGJhY2spIHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5jb25maWd1cmF0aW9uLnJ1bldpdGhUZW5hbnQodGVuYW50LCBhc3luYyAoKSA9PiBhd2FpdCB0aGlzLmNvbmZpZ3VyYXRpb24uZW5zdXJlQ29ubmVjdGlvbnMoY2FsbGJhY2spKVxuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkcyB0aGUgYWdncmVnYXRlIFNRTDogYW4gb3V0ZXIgYEdST1VQIEJZYCBvdmVyIGEgYFVOSU9OIEFMTGAgb2YgZWFjaCBlbnRyeSdzIHN1YnF1ZXJ5LlxuICAgKiBAcGFyYW0ge3tjb25uZWN0aW9uOiBpbXBvcnQoXCIuLi9kYXRhYmFzZS9kcml2ZXJzL2Jhc2UuanNcIikuZGVmYXVsdCwgZW50cmllczogUmVzb2x2ZWRUZW5hbnRbXSwgcXVhbGlmaWVkOiBib29sZWFufX0gYXJncyAtIENvbm5lY3Rpb24sIHRlbmFudHMsIGFuZCB3aGV0aGVyIHRvIHF1YWxpZnkgdGFibGVzIHdpdGggdGhlaXIgZGF0YWJhc2UgbmFtZS5cbiAgICogQHJldHVybnMge3N0cmluZ30gLSBFeGVjdXRhYmxlIGFnZ3JlZ2F0ZSBTUUwuXG4gICAqL1xuICBidWlsZEFnZ3JlZ2F0ZVNxbCh7Y29ubmVjdGlvbiwgZW50cmllcywgcXVhbGlmaWVkfSkge1xuICAgIGNvbnN0IG9wdGlvbnMgPSBjb25uZWN0aW9uLm9wdGlvbnMoKVxuICAgIGNvbnN0IHF1b3RlID0gdGhpcy5fYnVpbGRRdW90ZShjb25uZWN0aW9uKVxuICAgIGNvbnN0IHN1YnF1ZXJpZXMgPSBlbnRyaWVzLm1hcCgoZW50cnkpID0+IHtcbiAgICAgIGlmIChxdWFsaWZpZWQgJiYgIWVudHJ5LmRhdGFiYXNlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGJ1aWxkIGEgY3Jvc3MtZGF0YWJhc2UgcXVlcnkgZm9yIGEgdGVuYW50IHdpdGhvdXQgYSByZXNvbHZlZCBkYXRhYmFzZSBuYW1lIChpZGVudGlmaWVyOiAke3RoaXMub3B0aW9ucy5pZGVudGlmaWVyfSkuYClcbiAgICAgIH1cblxuICAgICAgY29uc3QgdGFibGUgPSAoLyoqIEB0eXBlIHtzdHJpbmd9ICovIHRhYmxlTmFtZSkgPT4gcXVhbGlmaWVkXG4gICAgICAgID8gYCR7b3B0aW9ucy5xdW90ZURhdGFiYXNlTmFtZSgvKiogQHR5cGUge3N0cmluZ30gKi8gKGVudHJ5LmRhdGFiYXNlKSl9LiR7b3B0aW9ucy5xdW90ZVRhYmxlTmFtZSh0YWJsZU5hbWUpfWBcbiAgICAgICAgOiBvcHRpb25zLnF1b3RlVGFibGVOYW1lKHRhYmxlTmFtZSlcblxuICAgICAgcmV0dXJuIHRoaXMub3B0aW9ucy5zdWJxdWVyeSh7Y29ubmVjdGlvbiwgcXVvdGUsIHRhYmxlLCB0ZW5hbnQ6IGVudHJ5LnRlbmFudH0pXG4gICAgfSlcblxuICAgIGNvbnN0IHNlbGVjdFBhcnRzID0gdGhpcy5rZXlDb2x1bW5zLm1hcCgoa2V5Q29sdW1uKSA9PiBvcHRpb25zLnF1b3RlQ29sdW1uTmFtZShrZXlDb2x1bW4pKVxuXG4gICAgZm9yIChjb25zdCBbbmFtZSwgc3BlY10gb2YgT2JqZWN0LmVudHJpZXModGhpcy5hZ2dyZWdhdGVzKSkge1xuICAgICAgY29uc3QgYWdncmVnYXRlQXJndW1lbnQgPSBzcGVjLmNvbHVtbiA9PT0gXCIqXCIgPyBcIipcIiA6IG9wdGlvbnMucXVvdGVDb2x1bW5OYW1lKHNwZWMuY29sdW1uKVxuXG4gICAgICBzZWxlY3RQYXJ0cy5wdXNoKGAke3NwZWMub3B9KCR7YWdncmVnYXRlQXJndW1lbnR9KSBBUyAke29wdGlvbnMucXVvdGVDb2x1bW5OYW1lKG5hbWUpfWApXG4gICAgfVxuXG4gICAgY29uc3QgdW5pb25TcWwgPSBzdWJxdWVyaWVzLm1hcCgoc3VicXVlcnkpID0+IGBTRUxFQ1QgKiBGUk9NICgke3N1YnF1ZXJ5fSkgJHtvcHRpb25zLnF1b3RlVGFibGVOYW1lKGAke0RFUklWRURfVEFCTEVfQUxJQVN9X3NvdXJjZWApfWApLmpvaW4oXCJcXG5VTklPTiBBTExcXG5cIilcbiAgICBjb25zdCBncm91cEJ5U3FsID0gdGhpcy5rZXlDb2x1bW5zLmxlbmd0aCA+IDBcbiAgICAgID8gYFxcbkdST1VQIEJZICR7dGhpcy5rZXlDb2x1bW5zLm1hcCgoa2V5Q29sdW1uKSA9PiBvcHRpb25zLnF1b3RlQ29sdW1uTmFtZShrZXlDb2x1bW4pKS5qb2luKFwiLCBcIil9YFxuICAgICAgOiBcIlwiXG5cbiAgICByZXR1cm4gYFNFTEVDVCAke3NlbGVjdFBhcnRzLmpvaW4oXCIsIFwiKX1cXG5GUk9NIChcXG4ke3VuaW9uU3FsfVxcbikgJHtvcHRpb25zLnF1b3RlVGFibGVOYW1lKERFUklWRURfVEFCTEVfQUxJQVMpfSR7Z3JvdXBCeVNxbH1gXG4gIH1cblxuICAvKipcbiAgICogTWVyZ2VzIHJvd3MgZnJvbSBldmVyeSBzZXJ2ZXIgYnkgY29tYmluaW5nIGVhY2ggYWdncmVnYXRlIHdpdGggaXRzIG93biBvcGVyYXRpb24uIEEgYE5VTExgXG4gICAqIGFnZ3JlZ2F0ZSB2YWx1ZSAoYW4gZW1wdHkgdGVuYW50J3MgYFNVTWAvYE1BWGAvYE1JTmAgcmV0dXJucyBgTlVMTGAgb24gdGhlIGZhbi1vdXQgcGF0aCkgaXNcbiAgICogdHJlYXRlZCBhcyBcIm5vIGNvbnRyaWJ1dGlvblwiIGFuZCBza2lwcGVkLCBub3QgY29lcmNlZCB0byBgMGAg4oCUIG90aGVyd2lzZSBhbiBlbXB0eSB0ZW5hbnQgd291bGRcbiAgICogZHJhZyBhIGBNQVhgIG9mIG5lZ2F0aXZlcyBvciBhIGBNSU5gIG9mIHBvc2l0aXZlcyB0byBgMGAuIEEga2V5IHdob3NlIGV2ZXJ5IHRlbmFudCBjb250cmlidXRlZFxuICAgKiBgTlVMTGAgc3RheXMgYE5VTExgLCBtYXRjaGluZyBTUUwgYWdncmVnYXRlIHNlbWFudGljcyBvdmVyIG5vIHJvd3MuXG4gICAqIEBwYXJhbSB7QXJyYXk8UmVjb3JkPHN0cmluZywgPz4+fSByb3dzIC0gUm93cyBjb2xsZWN0ZWQgZnJvbSBhbGwgc2VydmVycy90ZW5hbnRzLlxuICAgKiBAcmV0dXJucyB7QXJyYXk8UmVjb3JkPHN0cmluZywgPz4+fSAtIE9uZSBtZXJnZWQgcm93IHBlciBkaXN0aW5jdCBrZXktY29sdW1uIGNvbWJpbmF0aW9uLlxuICAgKi9cbiAgX21lcmdlUm93cyhyb3dzKSB7XG4gICAgLyoqIEB0eXBlIHtNYXA8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCA/Pj59ICovXG4gICAgY29uc3QgbWVyZ2VkID0gbmV3IE1hcCgpXG5cbiAgICBmb3IgKGNvbnN0IHJvdyBvZiByb3dzKSB7XG4gICAgICBjb25zdCBtYXBLZXkgPSBKU09OLnN0cmluZ2lmeSh0aGlzLmtleUNvbHVtbnMubWFwKChrZXlDb2x1bW4pID0+IHJvd1trZXlDb2x1bW5dKSlcbiAgICAgIGxldCBhY2N1bXVsYXRvciA9IG1lcmdlZC5nZXQobWFwS2V5KVxuXG4gICAgICBpZiAoIWFjY3VtdWxhdG9yKSB7XG4gICAgICAgIGFjY3VtdWxhdG9yID0ge31cblxuICAgICAgICBmb3IgKGNvbnN0IGtleUNvbHVtbiBvZiB0aGlzLmtleUNvbHVtbnMpIHtcbiAgICAgICAgICBhY2N1bXVsYXRvcltrZXlDb2x1bW5dID0gcm93W2tleUNvbHVtbl1cbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3QgbmFtZSBvZiBPYmplY3Qua2V5cyh0aGlzLmFnZ3JlZ2F0ZXMpKSB7XG4gICAgICAgICAgYWNjdW11bGF0b3JbbmFtZV0gPSBudWxsXG4gICAgICAgIH1cblxuICAgICAgICBtZXJnZWQuc2V0KG1hcEtleSwgYWNjdW11bGF0b3IpXG4gICAgICB9XG5cbiAgICAgIGZvciAoY29uc3QgW25hbWUsIHNwZWNdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMuYWdncmVnYXRlcykpIHtcbiAgICAgICAgY29uc3QgcmF3VmFsdWUgPSByb3dbbmFtZV1cblxuICAgICAgICBpZiAocmF3VmFsdWUgPT09IG51bGwgfHwgcmF3VmFsdWUgPT09IHVuZGVmaW5lZCkgY29udGludWVcblxuICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuX3RvRXhhY3ROdW1iZXIocmF3VmFsdWUpXG5cbiAgICAgICAgYWNjdW11bGF0b3JbbmFtZV0gPSBhY2N1bXVsYXRvcltuYW1lXSA9PT0gbnVsbCA/IHZhbHVlIDogdGhpcy5fY29tYmluZShzcGVjLm9wLCBhY2N1bXVsYXRvcltuYW1lXSwgdmFsdWUpXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIEFycmF5LmZyb20obWVyZ2VkLnZhbHVlcygpKVxuICB9XG5cbiAgLyoqXG4gICAqIENvbWJpbmVzIHR3byBub24tbnVsbCBwZXItc2VydmVyIGFnZ3JlZ2F0ZSB2YWx1ZXMgd2l0aCB0aGUgYWdncmVnYXRlJ3Mgb3duIG9wZXJhdGlvbi5cbiAgICogQHBhcmFtIHtBZ2dyZWdhdGVPcGVyYXRpb259IG9wIC0gQWdncmVnYXRlIG9wZXJhdGlvbi5cbiAgICogQHBhcmFtIHtudW1iZXJ9IGN1cnJlbnQgLSBBY2N1bXVsYXRlZCB2YWx1ZS5cbiAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlIC0gSW5jb21pbmcgcGVyLXNlcnZlciB2YWx1ZS5cbiAgICogQHJldHVybnMge251bWJlcn0gLSBDb21iaW5lZCB2YWx1ZS5cbiAgICovXG4gIF9jb21iaW5lKG9wLCBjdXJyZW50LCB2YWx1ZSkge1xuICAgIGlmIChvcCA9PT0gXCJNQVhcIikgcmV0dXJuIE1hdGgubWF4KGN1cnJlbnQsIHZhbHVlKVxuICAgIGlmIChvcCA9PT0gXCJNSU5cIikgcmV0dXJuIE1hdGgubWluKGN1cnJlbnQsIHZhbHVlKVxuXG4gICAgcmV0dXJuIGN1cnJlbnQgKyB2YWx1ZVxuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnRzIGEgZHJpdmVyLXJldHVybmVkIGFnZ3JlZ2F0ZSB2YWx1ZSB0byBhIG51bWJlciwgZmFpbGluZyBsb3VkbHkgcmF0aGVyIHRoYW4gc2lsZW50bHlcbiAgICogbG9zaW5nIHByZWNpc2lvbi4gRHJpdmVycyByZXR1cm4gZXhhY3QgaW50ZWdlciBhZ2dyZWdhdGVzIChNeVNRTCBgU1VNYC9gQ09VTlRgLCBQb3N0Z3JlU1FMXG4gICAqIGBiaWdpbnRgKSBhcyBzdHJpbmdzOyBhbiBpbnRlZ2VyIGJleW9uZCBgTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVJgIGNhbm5vdCBiZSByZXByZXNlbnRlZCBleGFjdGx5XG4gICAqIGFzIGEgSlMgbnVtYmVyLCBzbyBjcm9zcy1zZXJ2ZXIgbWVyZ2luZyB3b3VsZCBjb3JydXB0IHRoZSByZXN1bHQg4oCUIHRocm93IGluc3RlYWQuIChGcmFjdGlvbmFsXG4gICAqIGBERUNJTUFMYC9gTlVNRVJJQ2AgdmFsdWVzIGFyZSBzdGlsbCBzdWJqZWN0IHRvIG5vcm1hbCBmbG9hdGluZy1wb2ludCByZXByZXNlbnRhdGlvbi4pXG4gICAqIEBwYXJhbSB7P30gcmF3VmFsdWUgLSBWYWx1ZSByZXR1cm5lZCBieSB0aGUgZHJpdmVyIGZvciBhbiBhZ2dyZWdhdGUgY29sdW1uLlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfSAtIFRoZSB2YWx1ZSBhcyBhIG51bWJlci5cbiAgICovXG4gIF90b0V4YWN0TnVtYmVyKHJhd1ZhbHVlKSB7XG4gICAgY29uc3QgdmFsdWUgPSBOdW1iZXIocmF3VmFsdWUpXG5cbiAgICBpZiAodHlwZW9mIHJhd1ZhbHVlID09PSBcInN0cmluZ1wiICYmIC9eLT9cXGQrJC8udGVzdChyYXdWYWx1ZS50cmltKCkpICYmICFOdW1iZXIuaXNTYWZlSW50ZWdlcih2YWx1ZSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQWdncmVnYXRlIHZhbHVlICR7cmF3VmFsdWV9IGV4Y2VlZHMgdGhlIHNhZmUtaW50ZWdlciByYW5nZSBhbmQgY2Fubm90IGJlIG1lcmdlZCB3aXRob3V0IGxvc2luZyBwcmVjaXNpb24uYClcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWVcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZHMgdGhlIHZhbHVlIHF1b3RlciBwYXNzZWQgdG8gc3VicXVlcmllcywgd2l0aCBhIGAubGlzdGAgaGVscGVyIGZvciBgSU4gKC4uLilgIGNsYXVzZXMuXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vZGF0YWJhc2UvZHJpdmVycy9iYXNlLmpzXCIpLmRlZmF1bHR9IGNvbm5lY3Rpb24gLSBEcml2ZXIgd2hvc2UgcXVvdGluZyBpcyB1c2VkLlxuICAgKiBAcmV0dXJucyB7KCh2YWx1ZTogPykgPT4gc3RyaW5nKSAmIHtsaXN0OiAodmFsdWVzOiBBcnJheTw/PikgPT4gc3RyaW5nfX0gLSBWYWx1ZSBxdW90ZXIgd2l0aCBhIGAubGlzdGAgaGVscGVyLlxuICAgKi9cbiAgX2J1aWxkUXVvdGUoY29ubmVjdGlvbikge1xuICAgIHJldHVybiBPYmplY3QuYXNzaWduKFxuICAgICAgKC8qKiBAdHlwZSB7P30gKi8gdmFsdWUpID0+IFN0cmluZyhjb25uZWN0aW9uLnF1b3RlKHZhbHVlKSksXG4gICAgICB7bGlzdDogKC8qKiBAdHlwZSB7QXJyYXk8Pz59ICovIHZhbHVlcykgPT4gdmFsdWVzLm1hcCgodmFsdWUpID0+IFN0cmluZyhjb25uZWN0aW9uLnF1b3RlKHZhbHVlKSkpLmpvaW4oXCIsIFwiKX1cbiAgICApXG4gIH1cblxuICAvKipcbiAgICogTm9ybWFsaXplcyB0aGUgYWdncmVnYXRlIHNwZWNzIChzdHJpbmcgc2hvcnRoYW5kIG9yIG9iamVjdCkgYW5kIHZhbGlkYXRlcyBlYWNoIG9wZXJhdGlvbi5cbiAgICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBBZ2dyZWdhdGVTcGVjPn0gYWdncmVnYXRlcyAtIFJhdyBhZ2dyZWdhdGUgc3BlY3MuXG4gICAqIEByZXR1cm5zIHtSZWNvcmQ8c3RyaW5nLCB7b3A6IEFnZ3JlZ2F0ZU9wZXJhdGlvbiwgY29sdW1uOiBzdHJpbmd9Pn0gLSBOb3JtYWxpemVkIGFnZ3JlZ2F0ZSBzcGVjcy5cbiAgICovXG4gIF9ub3JtYWxpemVBZ2dyZWdhdGVzKGFnZ3JlZ2F0ZXMpIHtcbiAgICAvKiogQHR5cGUge1JlY29yZDxzdHJpbmcsIHtvcDogQWdncmVnYXRlT3BlcmF0aW9uLCBjb2x1bW46IHN0cmluZ30+fSAqL1xuICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSB7fVxuXG4gICAgZm9yIChjb25zdCBbbmFtZSwgc3BlY10gb2YgT2JqZWN0LmVudHJpZXMoYWdncmVnYXRlcykpIHtcbiAgICAgIGNvbnN0IG9wID0gLyoqIEB0eXBlIHtBZ2dyZWdhdGVPcGVyYXRpb259ICovICgodHlwZW9mIHNwZWMgPT09IFwic3RyaW5nXCIgPyBzcGVjIDogc3BlYy5vcCkudG9VcHBlckNhc2UoKSlcblxuICAgICAgaWYgKCFBR0dSRUdBVEVfT1BFUkFUSU9OUy5oYXMob3ApKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgYWdncmVnYXRlIG9wZXJhdGlvbiBmb3IgJHtuYW1lfTogJHtvcH0uIFN1cHBvcnRlZDogJHtBcnJheS5mcm9tKEFHR1JFR0FURV9PUEVSQVRJT05TKS5qb2luKFwiLCBcIil9LmApXG4gICAgICB9XG5cbiAgICAgIG5vcm1hbGl6ZWRbbmFtZV0gPSB7Y29sdW1uOiB0eXBlb2Ygc3BlYyA9PT0gXCJzdHJpbmdcIiA/IG5hbWUgOiBzcGVjLmNvbHVtbiwgb3B9XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vcm1hbGl6ZWRcbiAgfVxufVxuIl19
286
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVuYW50LWFnZ3JlZ2F0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdGVuYW50cy90ZW5hbnQtYWdncmVnYXRvci5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVosT0FBTyxPQUFPLE1BQU0sZUFBZSxDQUFBO0FBRW5DOztHQUVHO0FBRUg7O0dBRUc7QUFFSDs7Ozs7O0dBTUc7QUFFSDs7Ozs7Ozs7OztHQVVHO0FBRUg7O0dBRUc7QUFFSCxNQUFNLG9CQUFvQixHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQTtBQUNwRSxNQUFNLG1CQUFtQixHQUFHLDRCQUE0QixDQUFBO0FBRXhEOzs7Ozs7Ozs7R0FTRztBQUNILE1BQU0sQ0FBQyxPQUFPLE9BQU8sZ0JBQWdCO0lBQ25DOzs7T0FHRztJQUNILFlBQVksT0FBTztRQUNqQixJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQTtRQUN0QixJQUFJLENBQUMsYUFBYSxHQUFHLE9BQU8sQ0FBQyxhQUFhLElBQUksT0FBTyxDQUFDLGFBQWEsRUFBRSxDQUFBO1FBQ3JFLElBQUksQ0FBQyxVQUFVLEdBQUcsT0FBTyxDQUFDLFVBQVUsSUFBSSxFQUFFLENBQUE7UUFDMUMsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFBO0lBQ2pFLENBQUM7SUFFRDs7O09BR0c7SUFDSCxLQUFLLENBQUMsR0FBRztRQUNQLE1BQU0sZUFBZSxHQUFHLE1BQU0sSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFBO1FBRXBELElBQUksZUFBZSxDQUFDLE1BQU0sS0FBSyxDQUFDO1lBQUUsT0FBTyxFQUFFLENBQUE7UUFFM0MsbUVBQW1FO1FBQ25FLE1BQU0sSUFBSSxHQUFHLEVBQUUsQ0FBQTtRQUVmLEtBQUssTUFBTSxLQUFL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SUFFRDs7OztPQUlHO0lBQ0gsb0JBQW9CLENBQUMsVUFBVTtRQUM3Qix1RUFBdUU7UUFDdkUsTUFBTSxVQUFVLEdBQUcsRUFBRSxDQUFBO1FBRXJCLEtBQUssTUFBTSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7WUFDdEQsTUFBTSxFQUFFLEdBQUcsaUNBQWlDLENBQUMsQ0FBQyxDQUFDLE9BQU8sSUFBSSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQTtZQUV4RyxJQUFJLENBQUMsb0JBQW9CLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7Z0JBQ2xDLE1BQU0sSUFBSSxLQUFLLENBQUMsdUNBQXVDLElBQUksS0FBSyxFQUFFLGdCQUFnQixLQUFLLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQTtZQUNuSSxDQUFDO1lBRUQsVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUMsTUFBTSxFQUFFLE9BQU8sSUFBSSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsRUFBQyxDQUFBO1FBQ2hGLENBQUM7UUFFRCxPQUFPLFVBQVUsQ0FBQTtJQUNuQixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuaW1wb3J0IEN1cnJlbnQgZnJvbSBcIi4uL2N1cnJlbnQuanNcIlxuXG4vKipcbiAqIEB0eXBlZGVmIHtcIlNVTVwiIHwgXCJDT1VOVFwiIHwgXCJNQVhcIiB8IFwiTUlOXCJ9IEFnZ3JlZ2F0ZU9wZXJhdGlvblxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge0FnZ3JlZ2F0ZU9wZXJhdGlvbiB8IHtvcDogQWdncmVnYXRlT3BlcmF0aW9uLCBjb2x1bW46IHN0cmluZ319IEFnZ3JlZ2F0ZVNwZWNcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IFN1YnF1ZXJ5Q29udGV4dFxuICogQHByb3BlcnR5IHsodGFibGVOYW1lOiBzdHJpbmcpID0+IHN0cmluZ30gdGFibGUgLSBRdW90ZXMgYSB0YWJsZSBmb3IgdGhpcyB0ZW5hbnQuIEluIGEgY3Jvc3MtZGF0YWJhc2UgYFVOSU9OIEFMTGAgaXQgcmV0dXJucyBhIGBkYXRhYmFzZWAuYHRhYmxlYCBxdWFsaWZpZWQgaWRlbnRpZmllcjsgd2hlbiBlYWNoIHRlbmFudCBydW5zIG9uIGl0cyBvd24gY29ubmVjdGlvbiBpdCByZXR1cm5zIHRoZSBwbGFpbiBxdW90ZWQgdGFibGUgbmFtZS4gVXNlIGl0IGZvciBldmVyeSB0YWJsZSB0aGUgc3VicXVlcnkgcmVhZHMgc28gdGhlIHNhbWUgc3VicXVlcnkgd29ya3Mgb24gYm90aCBleGVjdXRpb24gcGF0aHMuXG4gKiBAcHJvcGVydHkgeygodmFsdWU6IFJldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+KSA9PiBzdHJpbmcpICYge2xpc3Q6ICh2YWx1ZXM6IEFycmF5PFJldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+PikgPT4gc3RyaW5nfX0gcXVvdGUgLSBRdW90ZXMgYSB2YWx1ZSBmb3IgdGhlIGFjdGl2ZSBjb25uZWN0aW9uLiBgcXVvdGUubGlzdCh2YWx1ZXMpYCBxdW90ZXMgYW5kIGNvbW1hLWpvaW5zIGFuIGFycmF5IGZvciBgSU4gKC4uLilgIGNsYXVzZXMuXG4gKiBAcHJvcGVydHkge29iamVjdH0gdGVuYW50IC0gVGhlIHRlbmFudCBkZXNjcmlwdG9yIHRoaXMgc3VicXVlcnkgaXMgYmVpbmcgYnVpbHQgZm9yLlxuICogQHByb3BlcnR5IHtpbXBvcnQoXCIuLi9kYXRhYmFzZS9kcml2ZXJzL2Jhc2UuanNcIikuZGVmYXVsdH0gY29ubmVjdGlvbiAtIFRoZSBkcml2ZXIgdGhlIHF1ZXJ5IHdpbGwgcnVuIG9uLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gVGVuYW50QWdncmVnYXRlT3B0aW9uc1xuICogQHByb3BlcnR5IHtzdHJpbmd9IGlkZW50aWZpZXIgLSBEYXRhYmFzZSBpZGVudGlmaWVyIHdob3NlIHRlbmFudHMgYXJlIGFnZ3JlZ2F0ZWQgKGZvciBleGFtcGxlIGBcInByb2plY3RUZW5hbnRcImApLlxuICogQHByb3BlcnR5IHtvYmplY3RbXX0gW3RlbmFudHNdIC0gRXhwbGljaXQgdGVuYW50IGRlc2NyaXB0b3JzIHRvIGFnZ3JlZ2F0ZS4gRGVmYXVsdHMgdG8gZXZlcnkgdGVuYW50IHRoZSBpZGVudGlmaWVyJ3MgcHJvdmlkZXIgYGxpc3RUZW5hbnRzYCByZXR1cm5zLlxuICogQHByb3BlcnR5IHsodGVuYW50OiBSZXR1cm5UeXBlPHR5cGVvZiBKU09OLnBhcnNlPikgPT4gYm9vbGVhbn0gW2ZpbHRlcl0gLSBPcHRpb25hbCBmaWx0ZXIgYXBwbGllZCB0byB0aGUgcmVzb2x2ZWQgdGVuYW50IGxpc3QuXG4gKiBAcHJvcGVydHkge3N0cmluZ1tdfSBba2V5Q29sdW1uc10gLSBDb2x1bW5zIHRoZSBhZ2dyZWdhdGUgaXMgZ3JvdXBlZCBieSAoZm9yIGV4YW1wbGUgYFtcImRvY2tlcl9zZXJ2ZXJfaWRcIl1gKS4gRW1wdHkgbWVhbnMgYSBzaW5nbGUgZ3JhbmQtdG90YWwgcm93LlxuICogQHByb3BlcnR5IHtSZWNvcmQ8c3RyaW5nLCBBZ2dyZWdhdGVTcGVjPn0gYWdncmVnYXRlcyAtIE91dHB1dCBjb2x1bW4gbmFtZSB0byBhZ2dyZWdhdGUuIGBcIlNVTVwiYCBpcyBzaG9ydGhhbmQgZm9yIGB7b3A6IFwiU1VNXCIsIGNvbHVtbjogPG91dHB1dCBuYW1lPn1gOyB1c2UgYHtvcDogXCJDT1VOVFwiLCBjb2x1bW46IFwiKlwifWAgZm9yIGBDT1VOVCgqKWAuXG4gKiBAcHJvcGVydHkge0Fib3J0U2lnbmFsfSBbc2lnbmFsXSAtIFNpZ25hbCBwYXNzZWQgdG8gZWFjaCBhZ2dyZWdhdGUgZGF0YWJhc2UgcXVlcnkuXG4gKiBAcHJvcGVydHkgeyhjb250ZXh0OiBTdWJxdWVyeUNvbnRleHQpID0+IHN0cmluZ30gc3VicXVlcnkgLSBCdWlsZHMgb25lIHRlbmFudCdzIGlubmVyIGBTRUxFQ1RgLCB3aGljaCBtdXN0IHNlbGVjdCBldmVyeSBga2V5Q29sdW1uc2AgZW50cnkgcGx1cyBldmVyeSBhZ2dyZWdhdGUgc291cmNlIGNvbHVtbi5cbiAqIEBwcm9wZXJ0eSB7aW1wb3J0KFwiLi4vY29uZmlndXJhdGlvbi5qc1wiKS5kZWZhdWx0fSBbY29uZmlndXJhdGlvbl0gLSBDb25maWd1cmF0aW9uIHRvIHJ1biBhZ2FpbnN0LiBEZWZhdWx0cyB0byB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge3t0ZW5hbnQ6IG9iamVjdCwgZGF0YWJhc2U6IHN0cmluZyB8IHVuZGVmaW5lZCwgc2VydmVyS2V5OiBzdHJpbmd9fSBSZXNvbHZlZFRlbmFudFxuICovXG5cbmNvbnN0IEFHR1JFR0FURV9PUEVSQVRJT05TID0gbmV3IFNldChbXCJTVU1cIiwgXCJDT1VOVFwiLCBcIk1BWFwiLCBcIk1JTlwiXSlcbmNvbnN0IERFUklWRURfVEFCTEVfQUxJQVMgPSBcInZlbG9jaW91c190ZW5hbnRfYWdncmVnYXRlXCJcblxuLyoqXG4gKiBSdW5zIG9uZSBhZ2dyZWdhdGUgcXVlcnkgYWNyb3NzIG1hbnkgdGVuYW50IGRhdGFiYXNlcyBhbmQgbWVyZ2VzIHRoZSByZXN1bHQuIFRlbmFudCBkYXRhYmFzZXMgbWF5XG4gKiBiZSBjby1sb2NhdGVkIG9uIHRoZSBkZWZhdWx0IHNlcnZlciBvciBzcHJlYWQgYWNyb3NzIG90aGVyIHNlcnZlcnMsIGFuZCB0aGV5IGNhbiBhcHBlYXIgb3JcbiAqIGRpc2FwcGVhciBhdCBydW50aW1lOyB0aGlzIHJlc29sdmVzIHRoZSBsaXZlIHRlbmFudCBsaXN0LCBncm91cHMgdGVuYW50cyBieSB0aGUgc2VydmVyIHRoZXkgbGl2ZVxuICogb24sIGFuZCDigJQgcGVyIHNlcnZlciDigJQgZW1pdHMgYSBzaW5nbGUgY3Jvc3MtZGF0YWJhc2UgYFVOSU9OIEFMTGAgd2hlbiB0aGUgZHJpdmVyIHN1cHBvcnRzIHF1YWxpZmllZFxuICogY3Jvc3MtZGF0YWJhc2UgcmVmZXJlbmNlcyAoTXlTUUwvTVNTUUwpIG9yIGZhbGxzIGJhY2sgdG8gb25lIHF1ZXJ5IHBlciB0ZW5hbnQgb3RoZXJ3aXNlXG4gKiAoUG9zdGdyZVNRTC9TUUxpdGUpLiBSZXN1bHRzIGZyb20gZXZlcnkgc2VydmVyIGFyZSBtZXJnZWQgd2l0aCB0aGUgYWdncmVnYXRlJ3Mgb3duIG9wZXJhdGlvbiwgc29cbiAqIGNhbGxlcnMgZ2V0IG9uZSBjb21iaW5lZCByZXN1bHQgc2V0IHJlZ2FyZGxlc3Mgb2YgaG93IHRoZSB0ZW5hbnRzIGFyZSBkaXN0cmlidXRlZC4gUmVhY2hlZCB0aHJvdWdoXG4gKiBgVGVuYW50LmFnZ3JlZ2F0ZUFjcm9zc2AuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRlbmFudEFnZ3JlZ2F0b3Ige1xuICAvKipcbiAgICogUHJlcGFyZXMgYW4gYWdncmVnYXRlIHJ1biwgbm9ybWFsaXppbmcgdGhlIGFnZ3JlZ2F0ZSBzcGVjcyB1cCBmcm9udC5cbiAgICogQHBhcmFtIHtUZW5hbnRBZ2dyZWdhdGVPcHRpb25zfSBvcHRpb25zIC0gQWdncmVnYXRlIGNvbmZpZ3VyYXRpb24uXG4gICAqL1xuICBjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9uc1xuICAgIHRoaXMuY29uZmlndXJhdGlvbiA9IG9wdGlvbnMuY29uZmlndXJhdGlvbiA/PyBDdXJyZW50LmNvbmZpZ3VyYXRpb24oKVxuICAgIHRoaXMua2V5Q29sdW1ucyA9IG9wdGlvbnMua2V5Q29sdW1ucyA/PyBbXVxuICAgIHRoaXMuYWdncmVnYXRlcyA9IHRoaXMuX25vcm1hbGl6ZUFnZ3JlZ2F0ZXMob3B0aW9ucy5hZ2dyZWdhdGVzKVxuICB9XG5cbiAgLyoqXG4gICAqIFJlc29sdmVzIHRoZSB0ZW5hbnQgbGlzdCwgcnVucyB0aGUgYWdncmVnYXRlIHBlciBzZXJ2ZXIsIGFuZCBtZXJnZXMgZXZlcnl0aGluZy5cbiAgICogQHJldHVybnMge1Byb21pc2U8QXJyYXk8UmVjb3JkPHN0cmluZywgUmV0dXJuVHlwZTx0eXBlb2YgSlNPTi5wYXJzZT4+Pj59IC0gT25lIG1lcmdlZCByb3cgcGVyIGRpc3RpbmN0IGtleS1jb2x1bW4gY29tYmluYXRpb24uXG4gICAqL1xuICBhc3luYyBydW4oKSB7XG4gICAgY29uc3QgcmVzb2x2ZWRUZW5hbnRzID0gYXdhaXQgdGhpcy5fcmVzb2x2ZVRlbmFudHMoKVxuXG4gICAgaWYgKHJlc29sdmVkVGVuYW50cy5sZW5ndGggPT09IDApIHJldHVybiBbXVxuXG4gICAgLyoqIEB0eXBlIHtBcnJheTxSZWNvcmQ8c3RyaW5nLCBSZXR1cm5UeXBlPHR5cGVvZiBKU09OLnBhcnNlPj4+fSAqL1xuICAgIGNvbnN0IHJvd3MgPSBbXVxuXG4gICAgZm9yIChjb25zdCBncm91cCBvZiB0aGlzLl9ncm91cEJ5U2VydmVyKHJlc29sdmVkVGVuYW50cykpIHtcbiAgICAgIGNvbnN0IGdyb3VwUm93cyA9IGF3YWl0IHRoaXMuX3J1bkZvclNlcnZlcihncm91cClcblxuICAgICAgcm93cy5wdXNoKC4uLmdyb3VwUm93cylcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fbWVyZ2VSb3dzKHJvd3MpXG4gIH1cblxuICAvKipcbiAgICogUmVzb2x2ZXMgdGhlIHRlbmFudCBsaXN0IChleHBsaWNpdCBvciBmcm9tIHRoZSBwcm92aWRlciksIHRoZW4gbWFwcyBlYWNoIHRvIGl0cyBzZXJ2ZXIgYW5kXG4gICAqIGRhdGFiYXNlIHZpYSB0aGUgdGVuYW50IGRhdGFiYXNlIHJlc29sdmVyLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxSZXNvbHZlZFRlbmFudFtdPn0gLSBUZW5hbnRzIHRvIGFnZ3JlZ2F0ZSwgZWFjaCByZXNvbHZlZCB0byBpdHMgc2VydmVyICsgZGF0YWJhc2UuXG4gICAqL1xuICBhc3luYyBfcmVzb2x2ZVRlbmFudHMoKSB7XG4gICAgY29uc3QgdGVuYW50cyA9IHRoaXMub3B0aW9ucy50ZW5hbnRzID8/IGF3YWl0IHRoaXMuX2xpc3RQcm92aWRlclRlbmFudHMoKVxuICAgIGNvbnN0IGZpbHRlcmVkID0gdGhpcy5vcHRpb25zLmZpbHRlciA/IHRlbmFudHMuZmlsdGVyKHRoaXMub3B0aW9ucy5maWx0ZXIpIDogdGVuYW50c1xuXG4gICAgcmV0dXJuIGZpbHRlcmVkLm1hcCgodGVuYW50KSA9PiB7XG4gICAgICBjb25zdCBkYXRhYmFzZUNvbmZpZ3VyYXRpb24gPSB0aGlzLmNvbmZpZ3VyYXRpb24ucmVzb2x2ZURhdGFiYXNlQ29uZmlndXJhdGlvbih0aGlzLm9wdGlvbnMuaWRlbnRpZmllciwgdGVuYW50KVxuXG4gICAgICAvLyBUaGUgc2VydmVyIGtleSBncm91cHMgdGVuYW50cyB0aGF0IHNoYXJlIGEgY29ubmVjdGlvbiBlbmRwb2ludCBzbyBjby1sb2NhdGVkIHRlbmFudHMgY2FuIGJlXG4gICAgICAvLyBVTklPTi1lZCBvbiBvbmUgY29ubmVjdGlvbi4gSXQgb25seSBuZWVkcyB0byBiZSBleGFjdCBmb3IgdGhlIGNyb3NzLWRhdGFiYXNlIGBVTklPTiBBTExgXG4gICAgICAvLyBwYXRoLCB3aGljaCBpcyBNeVNRTC1vbmx5LCB3aGVyZSBob3N0L3BvcnQvdXNlcm5hbWUvdHlwZSBmdWxseSBpZGVudGlmeSB0aGUgc2VydmVyLiBFdmVyeVxuICAgICAgLy8gb3RoZXIgZHJpdmVyIHRha2VzIHRoZSBmYW4tb3V0IHBhdGggKG9uZSBjb25uZWN0aW9uIHBlciB0ZW5hbnQpLCBzbyBhIGNvYXJzZSBrZXkgdGhlcmUganVzdFxuICAgICAgLy8gZ3JvdXBzIHRlbmFudHMgdGhhdCBhcmUgdGhlbiBxdWVyaWVkIGluZGl2aWR1YWxseSBhbnl3YXkg4oCUIGl0IGNhbiBuZXZlciByb3V0ZSBhIHF1ZXJ5IHRvIHRoZVxuICAgICAgLy8gd3Jvbmcgc2VydmVyLlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZGF0YWJhc2U6IGRhdGFiYXNlQ29uZmlndXJhdGlvbi5kYXRhYmFzZSxcbiAgICAgICAgc2VydmVyS2V5OiBKU09OLnN0cmluZ2lmeShbXG4gICAgICAgICAgZGF0YWJhc2VDb25maWd1cmF0aW9uLnR5cGUgPz8gbnVsbCxcbiAgICAgICAgICBkYXRhYmFzZUNvbmZpZ3VyYXRpb24uaG9zdCA/PyBudWxsLFxuICAgICAgICAgIGRhdGFiYXNlQ29uZmlndXJhdGlvbi5wb3J0ID8/IG51bGwsXG4gICAgICAgICAgZGF0YWJhc2VDb25maWd1cmF0aW9uLnVzZXJuYW1lID8/IG51bGxcbiAgICAgICAgXSksXG4gICAgICAgIHRlbmFudFxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogTGlzdHMgZXZlcnkgdGVuYW50IGZvciB0aGUgaWRlbnRpZmllciB0aHJvdWdoIGl0cyBwcm92aWRlcidzIGBsaXN0VGVuYW50c2AgaG9vay5cbiAgICogQHJldHVybnMge1Byb21pc2U8b2JqZWN0W10+fSAtIEV2ZXJ5IHRlbmFudCB0aGUgcHJvdmlkZXIgbGlzdHMgZm9yIHRoZSBpZGVudGlmaWVyLlxuICAgKi9cbiAgYXN5bmMgX2xpc3RQcm92aWRlclRlbmFudHMoKSB7XG4gICAgY29uc3QgcHJvdmlkZXIgPSB0aGlzLmNvbmZpZ3VyYXRpb24uZ2V0VGVuYW50RGF0YWJhc2VQcm92aWRlcih0aGlzLm9wdGlvbnMuaWRlbnRpZmllcilcbiAgICBjb25zdCBsaXN0ZWRUZW5hbnRzID0gYXdhaXQgdGhpcy5jb25maWd1cmF0aW9uLmVuc3VyZUNvbm5lY3Rpb25zKFxuICAgICAge25hbWU6IGBUZW5hbnQuYWdncmVnYXRlQWNyb3NzOiAke3RoaXMub3B0aW9ucy5pZGVudGlmaWVyfWB9LFxuICAgICAgYXN5bmMgKCkgPT4gYXdhaXQgcHJvdmlkZXIubGlzdFRlbmFudHMoe2NvbmZpZ3VyYXRpb246IHRoaXMuY29uZmlndXJhdGlvbiwgaWRlbnRpZmllcjogdGhpcy5vcHRpb25zLmlkZW50aWZpZXJ9KVxuICAgIClcblxuICAgIGlmICghQXJyYXkuaXNBcnJheShsaXN0ZWRUZW5hbnRzKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBUZW5hbnQgZGF0YWJhc2UgcHJvdmlkZXIgZm9yICR7dGhpcy5vcHRpb25zLmlkZW50aWZpZXJ9IG11c3QgcmV0dXJuIGFuIGFycmF5IGZyb20gbGlzdFRlbmFudHNgKVxuICAgIH1cblxuICAgIHJldHVybiBsaXN0ZWRUZW5hbnRzXG4gIH1cblxuICAvKipcbiAgICogR3JvdXBzIHRlbmFudHMgYnkgdGhlIHNlcnZlciB0aGV5IGxpdmUgb24gc28gY28tbG9jYXRlZCB0ZW5hbnRzIGNhbiBzaGFyZSBvbmUgcXVlcnkuXG4gICAqIEBwYXJhbSB7UmVzb2x2ZWRUZW5hbnRbXX0gcmVzb2x2ZWRUZW5hbnRzIC0gVGVuYW50cyByZXNvbHZlZCB0byB0aGVpciBzZXJ2ZXIuXG4gICAqIEByZXR1cm5zIHtSZXNvbHZlZFRlbmFudFtdW119IC0gVGVuYW50cyBncm91cGVkIGJ5IHRoZSBzZXJ2ZXIgdGhleSBsaXZlIG9uLlxuICAgKi9cbiAgX2dyb3VwQnlTZXJ2ZXIocmVzb2x2ZWRUZW5hbnRzKSB7XG4gICAgLyoqIEB0eXBlIHtNYXA8c3RyaW5nLCBSZXNvbHZlZFRlbmFudFtdPn0gKi9cbiAgICBjb25zdCBncm91cHMgPSBuZXcgTWFwKClcblxuICAgIGZvciAoY29uc3QgcmVzb2x2ZWRUZW5hbnQgb2YgcmVzb2x2ZWRUZW5hbnRzKSB7XG4gICAgICBjb25zdCBncm91cCA9IGdyb3Vwcy5nZXQocmVzb2x2ZWRUZW5hbnQuc2VydmVyS2V5KVxuXG4gICAgICBpZiAoZ3JvdXApIHtcbiAgICAgICAgZ3JvdXAucHVzaChyZXNvbHZlZFRlbmFudClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGdyb3Vwcy5zZXQocmVzb2x2ZWRUZW5hbnQuc2VydmVyS2V5LCBbcmVzb2x2ZWRUZW5hbnRdKVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBBcnJheS5mcm9tKGdyb3Vwcy52YWx1ZXMoKSlcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIHRoZSBhZ2dyZWdhdGUgZm9yIG9uZSBzZXJ2ZXIncyB0ZW5hbnRzLCB1c2luZyBhIHNpbmdsZSBjcm9zcy1kYXRhYmFzZSBgVU5JT04gQUxMYCB3aGVuIHRoZVxuICAgKiBkcml2ZXIgc3VwcG9ydHMgaXQgb3Igb25lIHF1ZXJ5IHBlciB0ZW5hbnQgb3RoZXJ3aXNlLiBUaGUgZHJpdmVyIGNhcGFiaWxpdHkgaXMgcHJvYmVkIGluIGl0cyBvd25cbiAgICogY29ubmVjdGlvbiBzY29wZSB0aGF0IGlzIHJlbGVhc2VkIGJlZm9yZSB0aGUgZmFuLW91dCBydW5zLCBzbyBhIGBtYXg6IDFgIHRlbmFudCBwb29sIGlzIG5ldmVyXG4gICAqIGFza2VkIGZvciBhIHNlY29uZCBjb25uZWN0aW9uIHdoaWxlIHRoZSBmaXJzdCBpcyBzdGlsbCBoZWxkICh3aGljaCB3b3VsZCBkZWFkbG9jaykuXG4gICAqIEBwYXJhbSB7UmVzb2x2ZWRUZW5hbnRbXX0gZ3JvdXAgLSBUZW5hbnRzIHNoYXJpbmcgb25lIHNlcnZlci5cbiAgICogQHJldHVybnMge1Byb21pc2U8QXJyYXk8UmVjb3JkPHN0cmluZywgUmV0dXJuVHlwZTx0eXBlb2YgSlNPTi5wYXJzZT4+Pj59IC0gUm93cyBwcm9kdWNlZCBmb3IgdGhpcyBzZXJ2ZXIuXG4gICAqL1xuICBhc3luYyBfcnVuRm9yU2VydmVyKGdyb3VwKSB7XG4gICAgY29uc3QgW2ZpcnN0VGVuYW50XSA9IGdyb3VwXG4gICAgY29uc3Qgc3VwcG9ydHNDcm9zc0RhdGFiYXNlUmVmZXJlbmNlcyA9IGF3YWl0IHRoaXMuX3dpdGhUZW5hbnQoXG4gICAgICBmaXJzdFRlbmFudC50ZW5hbnQsXG4gICAgICBhc3luYyAoY29ubmVjdGlvbnMpID0+IGNvbm5lY3Rpb25zW3RoaXMub3B0aW9ucy5pZGVudGlmaWVyXS5zdXBwb3J0c0Nyb3NzRGF0YWJhc2VSZWZlcmVuY2VzKClcbiAgICApXG5cbiAgICBpZiAoc3VwcG9ydHNDcm9zc0RhdGFiYXNlUmVmZXJlbmNlcykge1xuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuX3dpdGhUZW5hbnQoZmlyc3RUZW5hbnQudGVuYW50LCBhc3luYyAoY29ubmVjdGlvbnMpID0+IHtcbiAgICAgICAgY29uc3QgY29ubmVjdGlvbiA9IGNvbm5lY3Rpb25zW3RoaXMub3B0aW9ucy5pZGVudGlmaWVyXVxuXG4gICAgICAgIHJldHVybiBhd2FpdCBjb25uZWN0aW9uLnF1ZXJ5KHRoaXMuYnVpbGRBZ2dyZWdhdGVTcWwoe2Nvbm5lY3Rpb24sIGVudHJpZXM6IGdyb3VwLCBxdWFsaWZpZWQ6IHRydWV9KSwge3NpZ25hbDogdGhpcy5vcHRpb25zLnNpZ25hbH0pXG4gICAgICB9KVxuICAgIH1cblxuICAgIC8qKiBAdHlwZSB7QXJyYXk8UmVjb3JkPHN0cmluZywgUmV0dXJuVHlwZTx0eXBlb2YgSlNPTi5wYXJzZT4+Pn0gKi9cbiAgICBjb25zdCByb3dzID0gW11cblxuICAgIGZvciAoY29uc3QgcmVzb2x2ZWRUZW5hbnQgb2YgZ3JvdXApIHtcbiAgICAgIGNvbnN0IHRlbmFudFJvd3MgPSBhd2FpdCB0aGlzLl93aXRoVGVuYW50KHJlc29sdmVkVGVuYW50LnRlbmFudCwgYXN5bmMgKGNvbm5lY3Rpb25zKSA9PiB7XG4gICAgICAgIGNvbnN0IGNvbm5lY3Rpb24gPSBjb25uZWN0aW9uc1t0aGlzLm9wdGlvbnMuaWRlbnRpZmllcl1cblxuICAgICAgICByZXR1cm4gYXdhaXQgY29ubmVjdGlvbi5xdWVyeSh0aGlzLmJ1aWxkQWdncmVnYXRlU3FsKHtjb25uZWN0aW9uLCBlbnRyaWVzOiBbcmVzb2x2ZWRUZW5hbnRdLCBxdWFsaWZpZWQ6IGZhbHNlfSksIHtzaWduYWw6IHRoaXMub3B0aW9ucy5zaWduYWx9KVxuICAgICAgfSlcblxuICAgICAgcm93cy5wdXNoKC4uLnRlbmFudFJvd3MpXG4gICAgfVxuXG4gICAgcmV0dXJuIHJvd3NcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIGBjYWxsYmFja2AgaW5zaWRlIGEgdGVuYW50J3MgY29udGV4dCB3aXRoIGl0cyBjb25uZWN0aW9ucyBlc3RhYmxpc2hlZCwgbWlycm9yaW5nXG4gICAqIGBUZW5hbnQud2l0aGAgd2l0aG91dCBpbXBvcnRpbmcgaXQgKHdoaWNoIHdvdWxkIGNyZWF0ZSBhbiBpbXBvcnQgY3ljbGUpLlxuICAgKiBAdGVtcGxhdGUgVFxuICAgKiBAcGFyYW0ge29iamVjdH0gdGVuYW50IC0gVGVuYW50IGRlc2NyaXB0b3IgdG8gc3dpdGNoIGludG8uXG4gICAqIEBwYXJhbSB7KGNvbm5lY3Rpb25zOiBSZWNvcmQ8c3RyaW5nLCBpbXBvcnQoXCIuLi9kYXRhYmFzZS9kcml2ZXJzL2Jhc2UuanNcIikuZGVmYXVsdD4pID0+IFByb21pc2U8VD59IGNhbGxiYWNrIC0gT3BlcmF0aW9uIHRvIHJ1biB3aXRoIHRoZSB0ZW5hbnQncyBhY3RpdmUgY29ubmVjdGlvbnMuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPFQ+fSAtIENhbGxiYWNrIHJlc3VsdCBmcm9tIHdpdGhpbiB0aGUgdGVuYW50IGNvbnRleHQuXG4gICAqL1xuICBhc3luYyBfd2l0aFRlbmFudCh0ZW5hbnQsIGNhbGxiYWNrKSB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuY29uZmlndXJhdGlvbi5ydW5XaXRoVGVuYW50KHRlbmFudCwgYXN5bmMgKCkgPT4gYXdhaXQgdGhpcy5jb25maWd1cmF0aW9uLmVuc3VyZUNvbm5lY3Rpb25zKGNhbGxiYWNrKSlcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZHMgdGhlIGFnZ3JlZ2F0ZSBTUUw6IGFuIG91dGVyIGBHUk9VUCBCWWAgb3ZlciBhIGBVTklPTiBBTExgIG9mIGVhY2ggZW50cnkncyBzdWJxdWVyeS5cbiAgICogQHBhcmFtIHt7Y29ubmVjdGlvbjogaW1wb3J0KFwiLi4vZGF0YWJhc2UvZHJpdmVycy9iYXNlLmpzXCIpLmRlZmF1bHQsIGVudHJpZXM6IFJlc29sdmVkVGVuYW50W10sIHF1YWxpZmllZDogYm9vbGVhbn19IGFyZ3MgLSBDb25uZWN0aW9uLCB0ZW5hbnRzLCBhbmQgd2hldGhlciB0byBxdWFsaWZ5IHRhYmxlcyB3aXRoIHRoZWlyIGRhdGFiYXNlIG5hbWUuXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IC0gRXhlY3V0YWJsZSBhZ2dyZWdhdGUgU1FMLlxuICAgKi9cbiAgYnVpbGRBZ2dyZWdhdGVTcWwoe2Nvbm5lY3Rpb24sIGVudHJpZXMsIHF1YWxpZmllZH0pIHtcbiAgICBjb25zdCBvcHRpb25zID0gY29ubmVjdGlvbi5vcHRpb25zKClcbiAgICBjb25zdCBxdW90ZSA9IHRoaXMuX2J1aWxkUXVvdGUoY29ubmVjdGlvbilcbiAgICBjb25zdCBzdWJxdWVyaWVzID0gZW50cmllcy5tYXAoKGVudHJ5KSA9PiB7XG4gICAgICBpZiAocXVhbGlmaWVkICYmICFlbnRyeS5kYXRhYmFzZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBidWlsZCBhIGNyb3NzLWRhdGFiYXNlIHF1ZXJ5IGZvciBhIHRlbmFudCB3aXRob3V0IGEgcmVzb2x2ZWQgZGF0YWJhc2UgbmFtZSAoaWRlbnRpZmllcjogJHt0aGlzLm9wdGlvbnMuaWRlbnRpZmllcn0pLmApXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHRhYmxlID0gKC8qKiBAdHlwZSB7c3RyaW5nfSAqLyB0YWJsZU5hbWUpID0+IHF1YWxpZmllZFxuICAgICAgICA/IGAke29wdGlvbnMucXVvdGVEYXRhYmFzZU5hbWUoLyoqIEB0eXBlIHtzdHJpbmd9ICovIChlbnRyeS5kYXRhYmFzZSkpfS4ke29wdGlvbnMucXVvdGVUYWJsZU5hbWUodGFibGVOYW1lKX1gXG4gICAgICAgIDogb3B0aW9ucy5xdW90ZVRhYmxlTmFtZSh0YWJsZU5hbWUpXG5cbiAgICAgIHJldHVybiB0aGlzLm9wdGlvbnMuc3VicXVlcnkoe2Nvbm5lY3Rpb24sIHF1b3RlLCB0YWJsZSwgdGVuYW50OiBlbnRyeS50ZW5hbnR9KVxuICAgIH0pXG5cbiAgICBjb25zdCBzZWxlY3RQYXJ0cyA9IHRoaXMua2V5Q29sdW1ucy5tYXAoKGtleUNvbHVtbikgPT4gb3B0aW9ucy5xdW90ZUNvbHVtbk5hbWUoa2V5Q29sdW1uKSlcblxuICAgIGZvciAoY29uc3QgW25hbWUsIHNwZWNdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMuYWdncmVnYXRlcykpIHtcbiAgICAgIGNvbnN0IGFnZ3JlZ2F0ZUFyZ3VtZW50ID0gc3BlYy5jb2x1bW4gPT09IFwiKlwiID8gXCIqXCIgOiBvcHRpb25zLnF1b3RlQ29sdW1uTmFtZShzcGVjLmNvbHVtbilcblxuICAgICAgc2VsZWN0UGFydHMucHVzaChgJHtzcGVjLm9wfSgke2FnZ3JlZ2F0ZUFyZ3VtZW50fSkgQVMgJHtvcHRpb25zLnF1b3RlQ29sdW1uTmFtZShuYW1lKX1gKVxuICAgIH1cblxuICAgIGNvbnN0IHVuaW9uU3FsID0gc3VicXVlcmllcy5tYXAoKHN1YnF1ZXJ5KSA9PiBgU0VMRUNUICogRlJPTSAoJHtzdWJxdWVyeX0pICR7b3B0aW9ucy5xdW90ZVRhYmxlTmFtZShgJHtERVJJVkVEX1RBQkxFX0FMSUFTfV9zb3VyY2VgKX1gKS5qb2luKFwiXFxuVU5JT04gQUxMXFxuXCIpXG4gICAgY29uc3QgZ3JvdXBCeVNxbCA9IHRoaXMua2V5Q29sdW1ucy5sZW5ndGggPiAwXG4gICAgICA/IGBcXG5HUk9VUCBCWSAke3RoaXMua2V5Q29sdW1ucy5tYXAoKGtleUNvbHVtbikgPT4gb3B0aW9ucy5xdW90ZUNvbHVtbk5hbWUoa2V5Q29sdW1uKSkuam9pbihcIiwgXCIpfWBcbiAgICAgIDogXCJcIlxuXG4gICAgcmV0dXJuIGBTRUxFQ1QgJHtzZWxlY3RQYXJ0cy5qb2luKFwiLCBcIil9XFxuRlJPTSAoXFxuJHt1bmlvblNxbH1cXG4pICR7b3B0aW9ucy5xdW90ZVRhYmxlTmFtZShERVJJVkVEX1RBQkxFX0FMSUFTKX0ke2dyb3VwQnlTcWx9YFxuICB9XG5cbiAgLyoqXG4gICAqIE1lcmdlcyByb3dzIGZyb20gZXZlcnkgc2VydmVyIGJ5IGNvbWJpbmluZyBlYWNoIGFnZ3JlZ2F0ZSB3aXRoIGl0cyBvd24gb3BlcmF0aW9uLiBBIGBOVUxMYFxuICAgKiBhZ2dyZWdhdGUgdmFsdWUgKGFuIGVtcHR5IHRlbmFudCdzIGBTVU1gL2BNQVhgL2BNSU5gIHJldHVybnMgYE5VTExgIG9uIHRoZSBmYW4tb3V0IHBhdGgpIGlzXG4gICAqIHRyZWF0ZWQgYXMgXCJubyBjb250cmlidXRpb25cIiBhbmQgc2tpcHBlZCwgbm90IGNvZXJjZWQgdG8gYDBgIOKAlCBvdGhlcndpc2UgYW4gZW1wdHkgdGVuYW50IHdvdWxkXG4gICAqIGRyYWcgYSBgTUFYYCBvZiBuZWdhdGl2ZXMgb3IgYSBgTUlOYCBvZiBwb3NpdGl2ZXMgdG8gYDBgLiBBIGtleSB3aG9zZSBldmVyeSB0ZW5hbnQgY29udHJpYnV0ZWRcbiAgICogYE5VTExgIHN0YXlzIGBOVUxMYCwgbWF0Y2hpbmcgU1FMIGFnZ3JlZ2F0ZSBzZW1hbnRpY3Mgb3ZlciBubyByb3dzLlxuICAgKiBAcGFyYW0ge0FycmF5PFJlY29yZDxzdHJpbmcsIFJldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+Pj59IHJvd3MgLSBSb3dzIGNvbGxlY3RlZCBmcm9tIGFsbCBzZXJ2ZXJzL3RlbmFudHMuXG4gICAqIEByZXR1cm5zIHtBcnJheTxSZWNvcmQ8c3RyaW5nLCBSZXR1cm5UeXBlPHR5cGVvZiBKU09OLnBhcnNlPj4+fSAtIE9uZSBtZXJnZWQgcm93IHBlciBkaXN0aW5jdCBrZXktY29sdW1uIGNvbWJpbmF0aW9uLlxuICAgKi9cbiAgX21lcmdlUm93cyhyb3dzKSB7XG4gICAgLyoqIEB0eXBlIHtNYXA8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCBSZXR1cm5UeXBlPHR5cGVvZiBKU09OLnBhcnNlPj4+fSAqL1xuICAgIGNvbnN0IG1lcmdlZCA9IG5ldyBNYXAoKVxuXG4gICAgZm9yIChjb25zdCByb3cgb2Ygcm93cykge1xuICAgICAgY29uc3QgbWFwS2V5ID0gSlNPTi5zdHJpbmdpZnkodGhpcy5rZXlDb2x1bW5zLm1hcCgoa2V5Q29sdW1uKSA9PiByb3dba2V5Q29sdW1uXSkpXG4gICAgICBsZXQgYWNjdW11bGF0b3IgPSBtZXJnZWQuZ2V0KG1hcEtleSlcblxuICAgICAgaWYgKCFhY2N1bXVsYXRvcikge1xuICAgICAgICBhY2N1bXVsYXRvciA9IHt9XG5cbiAgICAgICAgZm9yIChjb25zdCBrZXlDb2x1bW4gb2YgdGhpcy5rZXlDb2x1bW5zKSB7XG4gICAgICAgICAgYWNjdW11bGF0b3Jba2V5Q29sdW1uXSA9IHJvd1trZXlDb2x1bW5dXG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGNvbnN0IG5hbWUgb2YgT2JqZWN0LmtleXModGhpcy5hZ2dyZWdhdGVzKSkge1xuICAgICAgICAgIGFjY3VtdWxhdG9yW25hbWVdID0gbnVsbFxuICAgICAgICB9XG5cbiAgICAgICAgbWVyZ2VkLnNldChtYXBLZXksIGFjY3VtdWxhdG9yKVxuICAgICAgfVxuXG4gICAgICBmb3IgKGNvbnN0IFtuYW1lLCBzcGVjXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLmFnZ3JlZ2F0ZXMpKSB7XG4gICAgICAgIGNvbnN0IHJhd1ZhbHVlID0gcm93W25hbWVdXG5cbiAgICAgICAgaWYgKHJhd1ZhbHVlID09PSBudWxsIHx8IHJhd1ZhbHVlID09PSB1bmRlZmluZWQpIGNvbnRpbnVlXG5cbiAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLl90b0V4YWN0TnVtYmVyKHJhd1ZhbHVlKVxuXG4gICAgICAgIGFjY3VtdWxhdG9yW25hbWVdID0gYWNjdW11bGF0b3JbbmFtZV0gPT09IG51bGwgPyB2YWx1ZSA6IHRoaXMuX2NvbWJpbmUoc3BlYy5vcCwgYWNjdW11bGF0b3JbbmFtZV0sIHZhbHVlKVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBBcnJheS5mcm9tKG1lcmdlZC52YWx1ZXMoKSlcbiAgfVxuXG4gIC8qKlxuICAgKiBDb21iaW5lcyB0d28gbm9uLW51bGwgcGVyLXNlcnZlciBhZ2dyZWdhdGUgdmFsdWVzIHdpdGggdGhlIGFnZ3JlZ2F0ZSdzIG93biBvcGVyYXRpb24uXG4gICAqIEBwYXJhbSB7QWdncmVnYXRlT3BlcmF0aW9ufSBvcCAtIEFnZ3JlZ2F0ZSBvcGVyYXRpb24uXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBjdXJyZW50IC0gQWNjdW11bGF0ZWQgdmFsdWUuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZSAtIEluY29taW5nIHBlci1zZXJ2ZXIgdmFsdWUuXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9IC0gQ29tYmluZWQgdmFsdWUuXG4gICAqL1xuICBfY29tYmluZShvcCwgY3VycmVudCwgdmFsdWUpIHtcbiAgICBpZiAob3AgPT09IFwiTUFYXCIpIHJldHVybiBNYXRoLm1heChjdXJyZW50LCB2YWx1ZSlcbiAgICBpZiAob3AgPT09IFwiTUlOXCIpIHJldHVybiBNYXRoLm1pbihjdXJyZW50LCB2YWx1ZSlcblxuICAgIHJldHVybiBjdXJyZW50ICsgdmFsdWVcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0cyBhIGRyaXZlci1yZXR1cm5lZCBhZ2dyZWdhdGUgdmFsdWUgdG8gYSBudW1iZXIsIGZhaWxpbmcgbG91ZGx5IHJhdGhlciB0aGFuIHNpbGVudGx5XG4gICAqIGxvc2luZyBwcmVjaXNpb24uIERyaXZlcnMgcmV0dXJuIGV4YWN0IGludGVnZXIgYWdncmVnYXRlcyAoTXlTUUwgYFNVTWAvYENPVU5UYCwgUG9zdGdyZVNRTFxuICAgKiBgYmlnaW50YCkgYXMgc3RyaW5nczsgYW4gaW50ZWdlciBiZXlvbmQgYE51bWJlci5NQVhfU0FGRV9JTlRFR0VSYCBjYW5ub3QgYmUgcmVwcmVzZW50ZWQgZXhhY3RseVxuICAgKiBhcyBhIEpTIG51bWJlciwgc28gY3Jvc3Mtc2VydmVyIG1lcmdpbmcgd291bGQgY29ycnVwdCB0aGUgcmVzdWx0IOKAlCB0aHJvdyBpbnN0ZWFkLiAoRnJhY3Rpb25hbFxuICAgKiBgREVDSU1BTGAvYE5VTUVSSUNgIHZhbHVlcyBhcmUgc3RpbGwgc3ViamVjdCB0byBub3JtYWwgZmxvYXRpbmctcG9pbnQgcmVwcmVzZW50YXRpb24uKVxuICAgKiBAcGFyYW0ge1JldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+fSByYXdWYWx1ZSAtIFZhbHVlIHJldHVybmVkIGJ5IHRoZSBkcml2ZXIgZm9yIGFuIGFnZ3JlZ2F0ZSBjb2x1bW4uXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9IC0gVGhlIHZhbHVlIGFzIGEgbnVtYmVyLlxuICAgKi9cbiAgX3RvRXhhY3ROdW1iZXIocmF3VmFsdWUpIHtcbiAgICBjb25zdCB2YWx1ZSA9IE51bWJlcihyYXdWYWx1ZSlcblxuICAgIGlmICh0eXBlb2YgcmF3VmFsdWUgPT09IFwic3RyaW5nXCIgJiYgL14tP1xcZCskLy50ZXN0KHJhd1ZhbHVlLnRyaW0oKSkgJiYgIU51bWJlci5pc1NhZmVJbnRlZ2VyKHZhbHVlKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBBZ2dyZWdhdGUgdmFsdWUgJHtyYXdWYWx1ZX0gZXhjZWVkcyB0aGUgc2FmZS1pbnRlZ2VyIHJhbmdlIGFuZCBjYW5ub3QgYmUgbWVyZ2VkIHdpdGhvdXQgbG9zaW5nIHByZWNpc2lvbi5gKVxuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZVxuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkcyB0aGUgdmFsdWUgcXVvdGVyIHBhc3NlZCB0byBzdWJxdWVyaWVzLCB3aXRoIGEgYC5saXN0YCBoZWxwZXIgZm9yIGBJTiAoLi4uKWAgY2xhdXNlcy5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuLi9kYXRhYmFzZS9kcml2ZXJzL2Jhc2UuanNcIikuZGVmYXVsdH0gY29ubmVjdGlvbiAtIERyaXZlciB3aG9zZSBxdW90aW5nIGlzIHVzZWQuXG4gICAqIEByZXR1cm5zIHsoKHZhbHVlOiBSZXR1cm5UeXBlPHR5cGVvZiBKU09OLnBhcnNlPikgPT4gc3RyaW5nKSAmIHtsaXN0OiAodmFsdWVzOiBBcnJheTxSZXR1cm5UeXBlPHR5cGVvZiBKU09OLnBhcnNlPj4pID0+IHN0cmluZ319IC0gVmFsdWUgcXVvdGVyIHdpdGggYSBgLmxpc3RgIGhlbHBlci5cbiAgICovXG4gIF9idWlsZFF1b3RlKGNvbm5lY3Rpb24pIHtcbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihcbiAgICAgICgvKiogQHR5cGUge1JldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+fSAqLyB2YWx1ZSkgPT4gU3RyaW5nKGNvbm5lY3Rpb24ucXVvdGUodmFsdWUpKSxcbiAgICAgIHtsaXN0OiAoLyoqIEB0eXBlIHtBcnJheTxSZXR1cm5UeXBlPHR5cGVvZiBKU09OLnBhcnNlPj59ICovIHZhbHVlcykgPT4gdmFsdWVzLm1hcCgodmFsdWUpID0+IFN0cmluZyhjb25uZWN0aW9uLnF1b3RlKHZhbHVlKSkpLmpvaW4oXCIsIFwiKX1cbiAgICApXG4gIH1cblxuICAvKipcbiAgICogTm9ybWFsaXplcyB0aGUgYWdncmVnYXRlIHNwZWNzIChzdHJpbmcgc2hvcnRoYW5kIG9yIG9iamVjdCkgYW5kIHZhbGlkYXRlcyBlYWNoIG9wZXJhdGlvbi5cbiAgICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBBZ2dyZWdhdGVTcGVjPn0gYWdncmVnYXRlcyAtIFJhdyBhZ2dyZWdhdGUgc3BlY3MuXG4gICAqIEByZXR1cm5zIHtSZWNvcmQ8c3RyaW5nLCB7b3A6IEFnZ3JlZ2F0ZU9wZXJhdGlvbiwgY29sdW1uOiBzdHJpbmd9Pn0gLSBOb3JtYWxpemVkIGFnZ3JlZ2F0ZSBzcGVjcy5cbiAgICovXG4gIF9ub3JtYWxpemVBZ2dyZWdhdGVzKGFnZ3JlZ2F0ZXMpIHtcbiAgICAvKiogQHR5cGUge1JlY29yZDxzdHJpbmcsIHtvcDogQWdncmVnYXRlT3BlcmF0aW9uLCBjb2x1bW46IHN0cmluZ30+fSAqL1xuICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSB7fVxuXG4gICAgZm9yIChjb25zdCBbbmFtZSwgc3BlY10gb2YgT2JqZWN0LmVudHJpZXMoYWdncmVnYXRlcykpIHtcbiAgICAgIGNvbnN0IG9wID0gLyoqIEB0eXBlIHtBZ2dyZWdhdGVPcGVyYXRpb259ICovICgodHlwZW9mIHNwZWMgPT09IFwic3RyaW5nXCIgPyBzcGVjIDogc3BlYy5vcCkudG9VcHBlckNhc2UoKSlcblxuICAgICAgaWYgKCFBR0dSRUdBVEVfT1BFUkFUSU9OUy5oYXMob3ApKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgYWdncmVnYXRlIG9wZXJhdGlvbiBmb3IgJHtuYW1lfTogJHtvcH0uIFN1cHBvcnRlZDogJHtBcnJheS5mcm9tKEFHR1JFR0FURV9PUEVSQVRJT05TKS5qb2luKFwiLCBcIil9LmApXG4gICAgICB9XG5cbiAgICAgIG5vcm1hbGl6ZWRbbmFtZV0gPSB7Y29sdW1uOiB0eXBlb2Ygc3BlYyA9PT0gXCJzdHJpbmdcIiA/IG5hbWUgOiBzcGVjLmNvbHVtbiwgb3B9XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vcm1hbGl6ZWRcbiAgfVxufVxuIl19
@@ -0,0 +1,64 @@
1
+ export type TenantDescriptorValue = null | boolean | number | string | TenantDescriptorValue[] | {
2
+ [key: string]: TenantDescriptorValue;
3
+ };
4
+ export type TenantDescriptor = {
5
+ [key: string]: TenantDescriptorValue;
6
+ };
7
+ /**
8
+ * Immutable tenant/database handle. Physical database configurations are
9
+ * resolved and captured at construction, so later ambient tenant changes
10
+ * cannot redirect work performed through this handle.
11
+ */
12
+ export default class TenantHandle {
13
+ _configuration: import("../configuration.js").default;
14
+ _databaseConfigurations: Readonly<Record<string, import("../configuration-types.js").DatabaseConfigurationType>>;
15
+ _tenant: TenantDescriptor;
16
+ /**
17
+ * Runs constructor.
18
+ * @param {object} args - Handle arguments.
19
+ * @param {import("../configuration.js").default} args.configuration - Owning configuration.
20
+ * @param {object} args.tenant - Ordinary or null-prototype JSON-compatible application tenant descriptor.
21
+ */
22
+ constructor({ configuration, tenant }: {
23
+ configuration: import("../configuration.js").default;
24
+ tenant: object;
25
+ });
26
+ /**
27
+ * Returns the captured tenant descriptor. Routing never re-resolves physical
28
+ * identity from this value after handle construction.
29
+ * @returns {TenantDescriptor} - Tenant descriptor.
30
+ */
31
+ tenant(): TenantDescriptor;
32
+ /**
33
+ * Returns the captured physical configuration for an active identifier.
34
+ * @param {string} databaseIdentifier - Logical database identifier.
35
+ * @returns {import("../configuration-types.js").DatabaseConfigurationType} - Captured resolved configuration.
36
+ */
37
+ databaseConfiguration(databaseIdentifier: string): import("../configuration-types.js").DatabaseConfigurationType;
38
+ /**
39
+ * Runs explicit ORM work on one pinned connection for this handle's captured
40
+ * physical database. Use `operation.forModel(ModelClass)` for queries and
41
+ * writes; loaded records and association/preload work retain that operation.
42
+ * @template T
43
+ * @param {{databaseIdentifier: string, name?: string}} options - Logical database and checkout name.
44
+ * @param {(operation: import("../database/operation.js").default) => Promise<T>} callback - Owned work callback.
45
+ * @returns {Promise<T>} - Callback result.
46
+ */
47
+ databaseOperation<T>({ databaseIdentifier, name }: {
48
+ databaseIdentifier: string;
49
+ name?: string;
50
+ }, callback: (operation: import("../database/operation.js").default) => Promise<T>): Promise<T>;
51
+ /**
52
+ * Runs explicit ORM work in a transaction pinned to this handle's captured
53
+ * physical database.
54
+ * @template T
55
+ * @param {{databaseIdentifier: string, name?: string}} options - Logical database and checkout name.
56
+ * @param {(operation: import("../database/operation.js").default) => Promise<T>} callback - Transaction callback.
57
+ * @returns {Promise<T>} - Callback result.
58
+ */
59
+ transaction<T>({ databaseIdentifier, name }: {
60
+ databaseIdentifier: string;
61
+ name?: string;
62
+ }, callback: (operation: import("../database/operation.js").default) => Promise<T>): Promise<T>;
63
+ }
64
+ //# sourceMappingURL=tenant-handle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tenant-handle.d.ts","sourceRoot":"","sources":["../../../src/tenants/tenant-handle.js"],"names":[],"mappings":"AAIG,YAA+G,qBAAqB,GAA1H,IAAI,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,qBAAqB,EAAE,GAAG;IAAC,CAAC,GAAG,EAAE,MAAM,GAAG,qBAAqB,CAAA;CAAC,CAAuB;AAEnI,YAAkD,gBAAgB,GAAxD;IAAC,CAAC,GAAG,EAAE,MAAM,GAAG,qBAAqB,CAAA;CAAC,CAAkB;AAuJtE;;;;GAIG;AACH,MAAM,CAAC,OAAO,OAAO,YAAY;IA2BxB,cAAc;IACd,uBAAuB;IACvB,OAAO;IA5Bd;;;;;OAKG;IACH,YAAY,EAAC,aAAa,EAAE,MAAM,EAAC,EAHhC;QAAoD,aAAa,EAAzD,OAAO,qBAAqB,EAAE,OAAO,CAC7C;QAAqB,MAAM,EAAnB,MAAM,CAChB;KACkC,EAyBlC;IAED;;;;OAIG;IACH,MAAM,IAFO,gBAAgB,CAI5B;IAED;;;;OAIG;IACH,qBAAqB,CAAC,kBAAkB,EAH7B,MAG6B,GAF3B,OAAO,2BAA2B,EAAE,yBAAyB,CAUzE;IAED;;;;;;;;OAQG;IACG,iBAAiB,CALV,CAAC,EAKU,EAAC,kBAAkB,EAAE,IAAuC,EAAC,EAJ1E;QAAC,kBAAkB,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAIgC,EAAE,QAAQ,EAHpF,CAAC,SAAS,EAAE,OAAO,0BAA0B,EAAE,OAAO,KAAK,OAAO,CAAC,CAAC,CAGgB,GAFlF,OAAO,CAAC,CAAC,CAAC,CAStB;IAED;;;;;;;OAOG;IACG,WAAW,CALJ,CAAC,EAKI,EAAC,kBAAkB,EAAE,IAAiC,EAAC,EAJ9D;QAAC,kBAAkB,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAIoB,EAAE,QAAQ,EAHxE,CAAC,SAAS,EAAE,OAAO,0BAA0B,EAAE,OAAO,KAAK,OAAO,CAAC,CAAC,CAGI,GAFtE,OAAO,CAAC,CAAC,CAAC,CAMtB;CACF"}