velocious 1.0.428 → 1.0.430

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 (933) hide show
  1. package/README.md +2 -0
  2. package/build/src/application.d.ts +96 -9
  3. package/build/src/application.d.ts.map +1 -1
  4. package/build/src/application.js +127 -28
  5. package/build/src/authorization/ability.d.ts +72 -31
  6. package/build/src/authorization/ability.d.ts.map +1 -1
  7. package/build/src/authorization/ability.js +59 -22
  8. package/build/src/authorization/base-resource.d.ts +47 -20
  9. package/build/src/authorization/base-resource.d.ts.map +1 -1
  10. package/build/src/authorization/base-resource.js +43 -14
  11. package/build/src/background-jobs/client.d.ts +4 -2
  12. package/build/src/background-jobs/client.d.ts.map +1 -1
  13. package/build/src/background-jobs/client.js +4 -2
  14. package/build/src/background-jobs/cron-expression.d.ts +9 -5
  15. package/build/src/background-jobs/cron-expression.d.ts.map +1 -1
  16. package/build/src/background-jobs/cron-expression.js +16 -6
  17. package/build/src/background-jobs/forked-runner-child.js +12 -5
  18. package/build/src/background-jobs/job-registry.d.ts +7 -1
  19. package/build/src/background-jobs/job-registry.d.ts.map +1 -1
  20. package/build/src/background-jobs/job-registry.js +8 -2
  21. package/build/src/background-jobs/job-runner.d.ts +1 -0
  22. package/build/src/background-jobs/job-runner.d.ts.map +1 -1
  23. package/build/src/background-jobs/job-runner.js +8 -3
  24. package/build/src/background-jobs/job.d.ts +12 -8
  25. package/build/src/background-jobs/job.d.ts.map +1 -1
  26. package/build/src/background-jobs/job.js +12 -6
  27. package/build/src/background-jobs/json-socket.d.ts +17 -5
  28. package/build/src/background-jobs/json-socket.d.ts.map +1 -1
  29. package/build/src/background-jobs/json-socket.js +18 -6
  30. package/build/src/background-jobs/main.d.ts +118 -32
  31. package/build/src/background-jobs/main.d.ts.map +1 -1
  32. package/build/src/background-jobs/main.js +123 -35
  33. package/build/src/background-jobs/normalize-error.d.ts +2 -1
  34. package/build/src/background-jobs/normalize-error.d.ts.map +1 -1
  35. package/build/src/background-jobs/normalize-error.js +5 -3
  36. package/build/src/background-jobs/scheduler.d.ts +31 -10
  37. package/build/src/background-jobs/scheduler.d.ts.map +1 -1
  38. package/build/src/background-jobs/scheduler.js +33 -11
  39. package/build/src/background-jobs/socket-request.d.ts +2 -0
  40. package/build/src/background-jobs/socket-request.d.ts.map +1 -1
  41. package/build/src/background-jobs/socket-request.js +11 -3
  42. package/build/src/background-jobs/status-reporter.d.ts +5 -2
  43. package/build/src/background-jobs/status-reporter.d.ts.map +1 -1
  44. package/build/src/background-jobs/status-reporter.js +6 -3
  45. package/build/src/background-jobs/store.d.ts +57 -19
  46. package/build/src/background-jobs/store.d.ts.map +1 -1
  47. package/build/src/background-jobs/store.js +70 -20
  48. package/build/src/background-jobs/types.d.ts +7 -7
  49. package/build/src/background-jobs/types.d.ts.map +1 -1
  50. package/build/src/background-jobs/types.js +6 -6
  51. package/build/src/background-jobs/web/authorization.d.ts.map +1 -1
  52. package/build/src/background-jobs/web/authorization.js +3 -1
  53. package/build/src/background-jobs/web/controller.d.ts +40 -14
  54. package/build/src/background-jobs/web/controller.d.ts.map +1 -1
  55. package/build/src/background-jobs/web/controller.js +46 -15
  56. package/build/src/background-jobs/web/registry.d.ts +5 -0
  57. package/build/src/background-jobs/web/registry.d.ts.map +1 -1
  58. package/build/src/background-jobs/web/registry.js +4 -1
  59. package/build/src/background-jobs/worker.d.ts +41 -8
  60. package/build/src/background-jobs/worker.d.ts.map +1 -1
  61. package/build/src/background-jobs/worker.js +64 -16
  62. package/build/src/beacon/client.d.ts +39 -12
  63. package/build/src/beacon/client.d.ts.map +1 -1
  64. package/build/src/beacon/client.js +45 -15
  65. package/build/src/beacon/in-process-broker.d.ts +4 -0
  66. package/build/src/beacon/in-process-broker.d.ts.map +1 -1
  67. package/build/src/beacon/in-process-broker.js +8 -3
  68. package/build/src/beacon/in-process-client.d.ts +28 -9
  69. package/build/src/beacon/in-process-client.d.ts.map +1 -1
  70. package/build/src/beacon/in-process-client.js +27 -9
  71. package/build/src/beacon/server.d.ts +13 -2
  72. package/build/src/beacon/server.d.ts.map +1 -1
  73. package/build/src/beacon/server.js +21 -5
  74. package/build/src/beacon/types.d.ts +3 -3
  75. package/build/src/beacon/types.d.ts.map +1 -1
  76. package/build/src/beacon/types.js +2 -2
  77. package/build/src/cli/base-command.d.ts +18 -4
  78. package/build/src/cli/base-command.d.ts.map +1 -1
  79. package/build/src/cli/base-command.js +15 -4
  80. package/build/src/cli/browser-cli.d.ts +3 -0
  81. package/build/src/cli/browser-cli.d.ts.map +1 -1
  82. package/build/src/cli/browser-cli.js +7 -2
  83. package/build/src/cli/commands/background-jobs-main.d.ts +0 -1
  84. package/build/src/cli/commands/background-jobs-main.d.ts.map +1 -1
  85. package/build/src/cli/commands/background-jobs-runner.d.ts +0 -1
  86. package/build/src/cli/commands/background-jobs-runner.d.ts.map +1 -1
  87. package/build/src/cli/commands/background-jobs-worker.d.ts +0 -1
  88. package/build/src/cli/commands/background-jobs-worker.d.ts.map +1 -1
  89. package/build/src/cli/commands/beacon.d.ts +0 -1
  90. package/build/src/cli/commands/beacon.d.ts.map +1 -1
  91. package/build/src/cli/commands/console.d.ts +0 -2
  92. package/build/src/cli/commands/console.d.ts.map +1 -1
  93. package/build/src/cli/commands/console.js +5 -2
  94. package/build/src/cli/commands/db/base-command.d.ts +11 -2
  95. package/build/src/cli/commands/db/base-command.d.ts.map +1 -1
  96. package/build/src/cli/commands/db/base-command.js +12 -3
  97. package/build/src/cli/commands/db/create.d.ts +3 -0
  98. package/build/src/cli/commands/db/create.d.ts.map +1 -1
  99. package/build/src/cli/commands/db/create.js +4 -1
  100. package/build/src/cli/commands/db/drop.d.ts +3 -0
  101. package/build/src/cli/commands/db/drop.d.ts.map +1 -1
  102. package/build/src/cli/commands/db/drop.js +4 -1
  103. package/build/src/cli/commands/db/schema/dump.d.ts +0 -2
  104. package/build/src/cli/commands/db/schema/dump.d.ts.map +1 -1
  105. package/build/src/cli/commands/db/schema/dump.js +5 -2
  106. package/build/src/cli/commands/db/schema/load.d.ts +0 -2
  107. package/build/src/cli/commands/db/schema/load.d.ts.map +1 -1
  108. package/build/src/cli/commands/db/schema/load.js +5 -2
  109. package/build/src/cli/commands/db/seed.d.ts +0 -2
  110. package/build/src/cli/commands/db/seed.d.ts.map +1 -1
  111. package/build/src/cli/commands/db/seed.js +5 -2
  112. package/build/src/cli/commands/db/tenants/check.d.ts +4 -1
  113. package/build/src/cli/commands/db/tenants/check.d.ts.map +1 -1
  114. package/build/src/cli/commands/db/tenants/check.js +5 -2
  115. package/build/src/cli/commands/db/tenants/create.d.ts +4 -1
  116. package/build/src/cli/commands/db/tenants/create.d.ts.map +1 -1
  117. package/build/src/cli/commands/db/tenants/create.js +5 -2
  118. package/build/src/cli/commands/db/tenants/migrate.d.ts +4 -1
  119. package/build/src/cli/commands/db/tenants/migrate.d.ts.map +1 -1
  120. package/build/src/cli/commands/db/tenants/migrate.js +5 -2
  121. package/build/src/cli/commands/destroy/migration.d.ts +0 -1
  122. package/build/src/cli/commands/destroy/migration.d.ts.map +1 -1
  123. package/build/src/cli/commands/generate/base-models.d.ts +0 -1
  124. package/build/src/cli/commands/generate/base-models.d.ts.map +1 -1
  125. package/build/src/cli/commands/generate/frontend-models.d.ts +0 -2
  126. package/build/src/cli/commands/generate/frontend-models.d.ts.map +1 -1
  127. package/build/src/cli/commands/generate/frontend-models.js +5 -2
  128. package/build/src/cli/commands/generate/migration.d.ts +0 -1
  129. package/build/src/cli/commands/generate/migration.d.ts.map +1 -1
  130. package/build/src/cli/commands/generate/model.d.ts +0 -1
  131. package/build/src/cli/commands/generate/model.d.ts.map +1 -1
  132. package/build/src/cli/commands/init.d.ts +0 -1
  133. package/build/src/cli/commands/init.d.ts.map +1 -1
  134. package/build/src/cli/commands/routes.d.ts +0 -1
  135. package/build/src/cli/commands/routes.d.ts.map +1 -1
  136. package/build/src/cli/commands/run-script.d.ts +0 -2
  137. package/build/src/cli/commands/run-script.d.ts.map +1 -1
  138. package/build/src/cli/commands/run-script.js +5 -2
  139. package/build/src/cli/commands/runner.d.ts +0 -2
  140. package/build/src/cli/commands/runner.d.ts.map +1 -1
  141. package/build/src/cli/commands/runner.js +5 -2
  142. package/build/src/cli/commands/server.d.ts +0 -1
  143. package/build/src/cli/commands/server.d.ts.map +1 -1
  144. package/build/src/cli/commands/test.d.ts +0 -1
  145. package/build/src/cli/commands/test.d.ts.map +1 -1
  146. package/build/src/cli/index.d.ts +18 -5
  147. package/build/src/cli/index.d.ts.map +1 -1
  148. package/build/src/cli/index.js +25 -8
  149. package/build/src/cli/tenant-database-command-helper.d.ts +24 -9
  150. package/build/src/cli/tenant-database-command-helper.d.ts.map +1 -1
  151. package/build/src/cli/tenant-database-command-helper.js +30 -11
  152. package/build/src/cli/use-browser-cli.d.ts +1 -0
  153. package/build/src/cli/use-browser-cli.d.ts.map +1 -1
  154. package/build/src/cli/use-browser-cli.js +5 -2
  155. package/build/src/configuration-resolver.d.ts +1 -0
  156. package/build/src/configuration-resolver.d.ts.map +1 -1
  157. package/build/src/configuration-resolver.js +2 -1
  158. package/build/src/configuration-types.d.ts +44 -44
  159. package/build/src/configuration-types.d.ts.map +1 -1
  160. package/build/src/configuration-types.js +27 -27
  161. package/build/src/configuration.d.ts +350 -114
  162. package/build/src/configuration.d.ts.map +1 -1
  163. package/build/src/configuration.js +416 -128
  164. package/build/src/controller.d.ts +67 -18
  165. package/build/src/controller.d.ts.map +1 -1
  166. package/build/src/controller.js +88 -23
  167. package/build/src/current-configuration.d.ts +2 -0
  168. package/build/src/current-configuration.d.ts.map +1 -1
  169. package/build/src/current-configuration.js +6 -2
  170. package/build/src/current.d.ts +16 -9
  171. package/build/src/current.d.ts.map +1 -1
  172. package/build/src/current.js +15 -8
  173. package/build/src/database/annotations-async-hooks.js +13 -6
  174. package/build/src/database/annotations.d.ts +7 -1
  175. package/build/src/database/annotations.d.ts.map +1 -1
  176. package/build/src/database/annotations.js +12 -5
  177. package/build/src/database/drivers/base-column.d.ts +21 -3
  178. package/build/src/database/drivers/base-column.d.ts.map +1 -1
  179. package/build/src/database/drivers/base-column.js +21 -3
  180. package/build/src/database/drivers/base-columns-index.d.ts +9 -0
  181. package/build/src/database/drivers/base-columns-index.d.ts.map +1 -1
  182. package/build/src/database/drivers/base-columns-index.js +10 -1
  183. package/build/src/database/drivers/base-foreign-key.d.ts +15 -3
  184. package/build/src/database/drivers/base-foreign-key.d.ts.map +1 -1
  185. package/build/src/database/drivers/base-foreign-key.js +15 -3
  186. package/build/src/database/drivers/base-table.d.ts +16 -3
  187. package/build/src/database/drivers/base-table.d.ts.map +1 -1
  188. package/build/src/database/drivers/base-table.js +16 -3
  189. package/build/src/database/drivers/base.d.ts +174 -37
  190. package/build/src/database/drivers/base.d.ts.map +1 -1
  191. package/build/src/database/drivers/base.js +156 -40
  192. package/build/src/database/drivers/mssql/column.d.ts +3 -2
  193. package/build/src/database/drivers/mssql/column.d.ts.map +1 -1
  194. package/build/src/database/drivers/mssql/column.js +3 -2
  195. package/build/src/database/drivers/mssql/index.d.ts +5 -6
  196. package/build/src/database/drivers/mssql/index.d.ts.map +1 -1
  197. package/build/src/database/drivers/mssql/index.js +38 -7
  198. package/build/src/database/drivers/mssql/options.d.ts +1 -0
  199. package/build/src/database/drivers/mssql/options.d.ts.map +1 -1
  200. package/build/src/database/drivers/mssql/options.js +8 -2
  201. package/build/src/database/drivers/mssql/sql/create-database.d.ts +1 -0
  202. package/build/src/database/drivers/mssql/sql/create-database.d.ts.map +1 -1
  203. package/build/src/database/drivers/mssql/sql/create-database.js +2 -1
  204. package/build/src/database/drivers/mssql/sql/drop-database.d.ts.map +1 -1
  205. package/build/src/database/drivers/mssql/sql/drop-database.js +2 -1
  206. package/build/src/database/drivers/mssql/structure-sql.d.ts +5 -2
  207. package/build/src/database/drivers/mssql/structure-sql.d.ts.map +1 -1
  208. package/build/src/database/drivers/mssql/structure-sql.js +5 -2
  209. package/build/src/database/drivers/mssql/table.d.ts +1 -0
  210. package/build/src/database/drivers/mssql/table.d.ts.map +1 -1
  211. package/build/src/database/drivers/mssql/table.js +9 -4
  212. package/build/src/database/drivers/mysql/column.d.ts +3 -2
  213. package/build/src/database/drivers/mysql/column.d.ts.map +1 -1
  214. package/build/src/database/drivers/mysql/column.js +4 -3
  215. package/build/src/database/drivers/mysql/index.d.ts +11 -3
  216. package/build/src/database/drivers/mysql/index.d.ts.map +1 -1
  217. package/build/src/database/drivers/mysql/index.js +54 -10
  218. package/build/src/database/drivers/mysql/options.d.ts +1 -0
  219. package/build/src/database/drivers/mysql/options.d.ts.map +1 -1
  220. package/build/src/database/drivers/mysql/options.js +4 -2
  221. package/build/src/database/drivers/mysql/query.d.ts +3 -2
  222. package/build/src/database/drivers/mysql/query.d.ts.map +1 -1
  223. package/build/src/database/drivers/mysql/query.js +6 -3
  224. package/build/src/database/drivers/mysql/sql/create-database.d.ts.map +1 -1
  225. package/build/src/database/drivers/mysql/sql/create-database.js +3 -1
  226. package/build/src/database/drivers/mysql/structure-sql.d.ts +7 -2
  227. package/build/src/database/drivers/mysql/structure-sql.d.ts.map +1 -1
  228. package/build/src/database/drivers/mysql/structure-sql.js +7 -2
  229. package/build/src/database/drivers/mysql/table.d.ts +1 -0
  230. package/build/src/database/drivers/mysql/table.d.ts.map +1 -1
  231. package/build/src/database/drivers/mysql/table.js +7 -3
  232. package/build/src/database/drivers/pgsql/column.d.ts +3 -2
  233. package/build/src/database/drivers/pgsql/column.d.ts.map +1 -1
  234. package/build/src/database/drivers/pgsql/column.js +3 -2
  235. package/build/src/database/drivers/pgsql/index.d.ts +1 -1
  236. package/build/src/database/drivers/pgsql/index.d.ts.map +1 -1
  237. package/build/src/database/drivers/pgsql/index.js +36 -11
  238. package/build/src/database/drivers/pgsql/options.d.ts +2 -0
  239. package/build/src/database/drivers/pgsql/options.d.ts.map +1 -1
  240. package/build/src/database/drivers/pgsql/options.js +3 -1
  241. package/build/src/database/drivers/pgsql/structure-sql.d.ts +5 -2
  242. package/build/src/database/drivers/pgsql/structure-sql.d.ts.map +1 -1
  243. package/build/src/database/drivers/pgsql/structure-sql.js +5 -2
  244. package/build/src/database/drivers/pgsql/table.d.ts +1 -0
  245. package/build/src/database/drivers/pgsql/table.d.ts.map +1 -1
  246. package/build/src/database/drivers/pgsql/table.js +6 -2
  247. package/build/src/database/drivers/sqlite/base.d.ts +15 -5
  248. package/build/src/database/drivers/sqlite/base.d.ts.map +1 -1
  249. package/build/src/database/drivers/sqlite/base.js +79 -27
  250. package/build/src/database/drivers/sqlite/column.d.ts +3 -2
  251. package/build/src/database/drivers/sqlite/column.d.ts.map +1 -1
  252. package/build/src/database/drivers/sqlite/column.js +3 -2
  253. package/build/src/database/drivers/sqlite/connection-sql-js.d.ts +4 -2
  254. package/build/src/database/drivers/sqlite/connection-sql-js.d.ts.map +1 -1
  255. package/build/src/database/drivers/sqlite/connection-sql-js.js +4 -2
  256. package/build/src/database/drivers/sqlite/foreign-key.d.ts +3 -2
  257. package/build/src/database/drivers/sqlite/foreign-key.d.ts.map +1 -1
  258. package/build/src/database/drivers/sqlite/foreign-key.js +3 -2
  259. package/build/src/database/drivers/sqlite/index.d.ts +18 -5
  260. package/build/src/database/drivers/sqlite/index.d.ts.map +1 -1
  261. package/build/src/database/drivers/sqlite/index.js +40 -16
  262. package/build/src/database/drivers/sqlite/index.native.d.ts +1 -1
  263. package/build/src/database/drivers/sqlite/index.native.d.ts.map +1 -1
  264. package/build/src/database/drivers/sqlite/index.native.js +6 -3
  265. package/build/src/database/drivers/sqlite/index.web.d.ts +16 -4
  266. package/build/src/database/drivers/sqlite/index.web.d.ts.map +1 -1
  267. package/build/src/database/drivers/sqlite/index.web.js +17 -7
  268. package/build/src/database/drivers/sqlite/options.d.ts +2 -0
  269. package/build/src/database/drivers/sqlite/options.d.ts.map +1 -1
  270. package/build/src/database/drivers/sqlite/options.js +3 -1
  271. package/build/src/database/drivers/sqlite/query.d.ts +3 -2
  272. package/build/src/database/drivers/sqlite/query.d.ts.map +1 -1
  273. package/build/src/database/drivers/sqlite/query.js +6 -3
  274. package/build/src/database/drivers/sqlite/query.native.d.ts +2 -2
  275. package/build/src/database/drivers/sqlite/query.native.d.ts.map +1 -1
  276. package/build/src/database/drivers/sqlite/query.native.js +3 -3
  277. package/build/src/database/drivers/sqlite/query.web.d.ts +3 -2
  278. package/build/src/database/drivers/sqlite/query.web.d.ts.map +1 -1
  279. package/build/src/database/drivers/sqlite/query.web.js +6 -3
  280. package/build/src/database/drivers/sqlite/sql/alter-table.d.ts.map +1 -1
  281. package/build/src/database/drivers/sqlite/sql/alter-table.js +9 -3
  282. package/build/src/database/drivers/sqlite/structure-sql.d.ts +2 -0
  283. package/build/src/database/drivers/sqlite/structure-sql.d.ts.map +1 -1
  284. package/build/src/database/drivers/sqlite/structure-sql.js +3 -1
  285. package/build/src/database/drivers/sqlite/table-rebuilder.d.ts +2 -0
  286. package/build/src/database/drivers/sqlite/table-rebuilder.d.ts.map +1 -1
  287. package/build/src/database/drivers/sqlite/table-rebuilder.js +3 -1
  288. package/build/src/database/drivers/sqlite/table.d.ts +2 -0
  289. package/build/src/database/drivers/sqlite/table.d.ts.map +1 -1
  290. package/build/src/database/drivers/sqlite/table.js +14 -4
  291. package/build/src/database/drivers/structure-sql/utils.d.ts +2 -0
  292. package/build/src/database/drivers/structure-sql/utils.d.ts.map +1 -1
  293. package/build/src/database/drivers/structure-sql/utils.js +3 -1
  294. package/build/src/database/handler.d.ts +1 -0
  295. package/build/src/database/handler.d.ts.map +1 -1
  296. package/build/src/database/handler.js +2 -1
  297. package/build/src/database/initializer-from-require-context.d.ts +8 -0
  298. package/build/src/database/initializer-from-require-context.d.ts.map +1 -1
  299. package/build/src/database/initializer-from-require-context.js +4 -1
  300. package/build/src/database/migration/index.d.ts +40 -5
  301. package/build/src/database/migration/index.d.ts.map +1 -1
  302. package/build/src/database/migration/index.js +34 -6
  303. package/build/src/database/migrator/files-finder.d.ts +2 -0
  304. package/build/src/database/migrator/files-finder.d.ts.map +1 -1
  305. package/build/src/database/migrator/files-finder.js +6 -2
  306. package/build/src/database/migrator.d.ts +29 -4
  307. package/build/src/database/migrator.d.ts.map +1 -1
  308. package/build/src/database/migrator.js +45 -10
  309. package/build/src/database/pool/async-tracked-multi-connection.d.ts +125 -31
  310. package/build/src/database/pool/async-tracked-multi-connection.d.ts.map +1 -1
  311. package/build/src/database/pool/async-tracked-multi-connection.js +189 -52
  312. package/build/src/database/pool/base-methods-forward.d.ts +1 -0
  313. package/build/src/database/pool/base-methods-forward.d.ts.map +1 -1
  314. package/build/src/database/pool/base-methods-forward.js +12 -3
  315. package/build/src/database/pool/base.d.ts +39 -7
  316. package/build/src/database/pool/base.d.ts.map +1 -1
  317. package/build/src/database/pool/base.js +59 -18
  318. package/build/src/database/pool/single-multi-use.d.ts +1 -0
  319. package/build/src/database/pool/single-multi-use.d.ts.map +1 -1
  320. package/build/src/database/pool/single-multi-use.js +16 -4
  321. package/build/src/database/query/alter-table-base.d.ts +1 -0
  322. package/build/src/database/query/alter-table-base.d.ts.map +1 -1
  323. package/build/src/database/query/alter-table-base.js +3 -1
  324. package/build/src/database/query/base.d.ts +3 -0
  325. package/build/src/database/query/base.d.ts.map +1 -1
  326. package/build/src/database/query/base.js +4 -1
  327. package/build/src/database/query/create-database-base.d.ts +5 -0
  328. package/build/src/database/query/create-database-base.d.ts.map +1 -1
  329. package/build/src/database/query/create-database-base.js +4 -1
  330. package/build/src/database/query/create-index-base.d.ts +5 -0
  331. package/build/src/database/query/create-index-base.d.ts.map +1 -1
  332. package/build/src/database/query/create-index-base.js +4 -1
  333. package/build/src/database/query/create-table-base.d.ts +2 -0
  334. package/build/src/database/query/create-table-base.d.ts.map +1 -1
  335. package/build/src/database/query/create-table-base.js +3 -1
  336. package/build/src/database/query/delete-base.d.ts +3 -2
  337. package/build/src/database/query/delete-base.d.ts.map +1 -1
  338. package/build/src/database/query/delete-base.js +3 -2
  339. package/build/src/database/query/drop-database-base.d.ts +5 -0
  340. package/build/src/database/query/drop-database-base.d.ts.map +1 -1
  341. package/build/src/database/query/drop-database-base.js +4 -1
  342. package/build/src/database/query/drop-table-base.d.ts +1 -0
  343. package/build/src/database/query/drop-table-base.d.ts.map +1 -1
  344. package/build/src/database/query/drop-table-base.js +3 -1
  345. package/build/src/database/query/from-base.d.ts +6 -1
  346. package/build/src/database/query/from-base.d.ts.map +1 -1
  347. package/build/src/database/query/from-base.js +7 -2
  348. package/build/src/database/query/from-plain.d.ts +1 -0
  349. package/build/src/database/query/from-plain.d.ts.map +1 -1
  350. package/build/src/database/query/from-plain.js +2 -1
  351. package/build/src/database/query/from-table.d.ts +1 -0
  352. package/build/src/database/query/from-table.d.ts.map +1 -1
  353. package/build/src/database/query/from-table.js +2 -1
  354. package/build/src/database/query/index.d.ts +72 -12
  355. package/build/src/database/query/index.d.ts.map +1 -1
  356. package/build/src/database/query/index.js +79 -19
  357. package/build/src/database/query/insert-base.d.ts +13 -8
  358. package/build/src/database/query/insert-base.d.ts.map +1 -1
  359. package/build/src/database/query/insert-base.js +10 -5
  360. package/build/src/database/query/join-base.d.ts +4 -0
  361. package/build/src/database/query/join-base.d.ts.map +1 -1
  362. package/build/src/database/query/join-base.js +5 -1
  363. package/build/src/database/query/join-object.d.ts +11 -0
  364. package/build/src/database/query/join-object.d.ts.map +1 -1
  365. package/build/src/database/query/join-object.js +15 -4
  366. package/build/src/database/query/join-plain.d.ts +1 -0
  367. package/build/src/database/query/join-plain.d.ts.map +1 -1
  368. package/build/src/database/query/join-plain.js +2 -1
  369. package/build/src/database/query/join-tracker.d.ts +7 -0
  370. package/build/src/database/query/join-tracker.d.ts.map +1 -1
  371. package/build/src/database/query/join-tracker.js +8 -1
  372. package/build/src/database/query/model-class-query.d.ts +92 -26
  373. package/build/src/database/query/model-class-query.d.ts.map +1 -1
  374. package/build/src/database/query/model-class-query.js +230 -76
  375. package/build/src/database/query/order-base.d.ts +3 -0
  376. package/build/src/database/query/order-base.d.ts.map +1 -1
  377. package/build/src/database/query/order-base.js +4 -1
  378. package/build/src/database/query/order-column.d.ts +9 -1
  379. package/build/src/database/query/order-column.d.ts.map +1 -1
  380. package/build/src/database/query/order-column.js +10 -2
  381. package/build/src/database/query/order-plain.d.ts +1 -0
  382. package/build/src/database/query/order-plain.d.ts.map +1 -1
  383. package/build/src/database/query/order-plain.js +2 -1
  384. package/build/src/database/query/preloader/belongs-to.d.ts +1 -0
  385. package/build/src/database/query/preloader/belongs-to.d.ts.map +1 -1
  386. package/build/src/database/query/preloader/belongs-to.js +68 -23
  387. package/build/src/database/query/preloader/ensure-model-class-initialized.d.ts +1 -0
  388. package/build/src/database/query/preloader/ensure-model-class-initialized.d.ts.map +1 -1
  389. package/build/src/database/query/preloader/ensure-model-class-initialized.js +2 -1
  390. package/build/src/database/query/preloader/has-many.d.ts +5 -3
  391. package/build/src/database/query/preloader/has-many.d.ts.map +1 -1
  392. package/build/src/database/query/preloader/has-many.js +66 -24
  393. package/build/src/database/query/preloader/has-one.d.ts +1 -0
  394. package/build/src/database/query/preloader/has-one.d.ts.map +1 -1
  395. package/build/src/database/query/preloader/has-one.js +26 -9
  396. package/build/src/database/query/preloader/selection.d.ts +7 -1
  397. package/build/src/database/query/preloader/selection.d.ts.map +1 -1
  398. package/build/src/database/query/preloader/selection.js +13 -5
  399. package/build/src/database/query/preloader.d.ts +1 -0
  400. package/build/src/database/query/preloader.d.ts.map +1 -1
  401. package/build/src/database/query/preloader.js +28 -9
  402. package/build/src/database/query/query-data.d.ts +21 -7
  403. package/build/src/database/query/query-data.d.ts.map +1 -1
  404. package/build/src/database/query/query-data.js +37 -18
  405. package/build/src/database/query/select-base.d.ts +3 -0
  406. package/build/src/database/query/select-base.d.ts.map +1 -1
  407. package/build/src/database/query/select-base.js +4 -1
  408. package/build/src/database/query/select-plain.d.ts +1 -0
  409. package/build/src/database/query/select-plain.d.ts.map +1 -1
  410. package/build/src/database/query/select-plain.js +2 -1
  411. package/build/src/database/query/select-table-and-column.d.ts +1 -0
  412. package/build/src/database/query/select-table-and-column.d.ts.map +1 -1
  413. package/build/src/database/query/select-table-and-column.js +2 -1
  414. package/build/src/database/query/update-base.d.ts +9 -6
  415. package/build/src/database/query/update-base.d.ts.map +1 -1
  416. package/build/src/database/query/update-base.js +7 -4
  417. package/build/src/database/query/upsert-base.d.ts +13 -4
  418. package/build/src/database/query/upsert-base.d.ts.map +1 -1
  419. package/build/src/database/query/upsert-base.js +12 -3
  420. package/build/src/database/query/where-base.d.ts +4 -0
  421. package/build/src/database/query/where-base.d.ts.map +1 -1
  422. package/build/src/database/query/where-base.js +5 -1
  423. package/build/src/database/query/where-combinator.d.ts +1 -0
  424. package/build/src/database/query/where-combinator.d.ts.map +1 -1
  425. package/build/src/database/query/where-combinator.js +6 -2
  426. package/build/src/database/query/where-hash.d.ts +6 -0
  427. package/build/src/database/query/where-hash.d.ts.map +1 -1
  428. package/build/src/database/query/where-hash.js +5 -1
  429. package/build/src/database/query/where-model-class-hash.d.ts +30 -16
  430. package/build/src/database/query/where-model-class-hash.d.ts.map +1 -1
  431. package/build/src/database/query/where-model-class-hash.js +55 -20
  432. package/build/src/database/query/where-not.d.ts +1 -0
  433. package/build/src/database/query/where-not.d.ts.map +1 -1
  434. package/build/src/database/query/where-not.js +3 -1
  435. package/build/src/database/query/where-plain.d.ts +1 -0
  436. package/build/src/database/query/where-plain.d.ts.map +1 -1
  437. package/build/src/database/query/where-plain.js +2 -1
  438. package/build/src/database/query/with-count.d.ts +11 -5
  439. package/build/src/database/query/with-count.d.ts.map +1 -1
  440. package/build/src/database/query/with-count.js +36 -15
  441. package/build/src/database/query-parser/base-query-parser.d.ts +1 -0
  442. package/build/src/database/query-parser/base-query-parser.d.ts.map +1 -1
  443. package/build/src/database/query-parser/base-query-parser.js +2 -1
  444. package/build/src/database/query-parser/from-parser.d.ts +5 -1
  445. package/build/src/database/query-parser/from-parser.d.ts.map +1 -1
  446. package/build/src/database/query-parser/from-parser.js +6 -2
  447. package/build/src/database/query-parser/group-parser.d.ts +2 -0
  448. package/build/src/database/query-parser/group-parser.d.ts.map +1 -1
  449. package/build/src/database/query-parser/group-parser.js +3 -1
  450. package/build/src/database/query-parser/joins-parser.d.ts +1 -0
  451. package/build/src/database/query-parser/joins-parser.d.ts.map +1 -1
  452. package/build/src/database/query-parser/joins-parser.js +2 -1
  453. package/build/src/database/query-parser/limit-parser.d.ts +1 -0
  454. package/build/src/database/query-parser/limit-parser.d.ts.map +1 -1
  455. package/build/src/database/query-parser/limit-parser.js +2 -1
  456. package/build/src/database/query-parser/options.d.ts +15 -4
  457. package/build/src/database/query-parser/options.d.ts.map +1 -1
  458. package/build/src/database/query-parser/options.js +11 -3
  459. package/build/src/database/query-parser/order-parser.d.ts +1 -0
  460. package/build/src/database/query-parser/order-parser.d.ts.map +1 -1
  461. package/build/src/database/query-parser/order-parser.js +2 -1
  462. package/build/src/database/query-parser/select-parser.d.ts +1 -0
  463. package/build/src/database/query-parser/select-parser.d.ts.map +1 -1
  464. package/build/src/database/query-parser/select-parser.js +2 -1
  465. package/build/src/database/query-parser/where-parser.d.ts +1 -0
  466. package/build/src/database/query-parser/where-parser.d.ts.map +1 -1
  467. package/build/src/database/query-parser/where-parser.js +2 -1
  468. package/build/src/database/record/acts-as-list.d.ts +0 -1
  469. package/build/src/database/record/acts-as-list.d.ts.map +1 -1
  470. package/build/src/database/record/acts-as-list.js +89 -45
  471. package/build/src/database/record/attachments/download.d.ts +34 -15
  472. package/build/src/database/record/attachments/download.d.ts.map +1 -1
  473. package/build/src/database/record/attachments/download.js +34 -22
  474. package/build/src/database/record/attachments/handle.d.ts +17 -5
  475. package/build/src/database/record/attachments/handle.d.ts.map +1 -1
  476. package/build/src/database/record/attachments/handle.js +25 -9
  477. package/build/src/database/record/attachments/normalize-input.d.ts +6 -1
  478. package/build/src/database/record/attachments/normalize-input.d.ts.map +1 -1
  479. package/build/src/database/record/attachments/normalize-input.js +54 -17
  480. package/build/src/database/record/attachments/storage-drivers/filesystem.d.ts +7 -1
  481. package/build/src/database/record/attachments/storage-drivers/filesystem.d.ts.map +1 -1
  482. package/build/src/database/record/attachments/storage-drivers/filesystem.js +10 -2
  483. package/build/src/database/record/attachments/storage-drivers/native.d.ts +12 -7
  484. package/build/src/database/record/attachments/storage-drivers/native.d.ts.map +1 -1
  485. package/build/src/database/record/attachments/storage-drivers/native.js +13 -6
  486. package/build/src/database/record/attachments/storage-drivers/s3.d.ts +18 -9
  487. package/build/src/database/record/attachments/storage-drivers/s3.d.ts.map +1 -1
  488. package/build/src/database/record/attachments/storage-drivers/s3.js +38 -13
  489. package/build/src/database/record/attachments/store.d.ts +48 -25
  490. package/build/src/database/record/attachments/store.d.ts.map +1 -1
  491. package/build/src/database/record/attachments/store.js +63 -25
  492. package/build/src/database/record/index.d.ts +394 -146
  493. package/build/src/database/record/index.d.ts.map +1 -1
  494. package/build/src/database/record/index.js +697 -248
  495. package/build/src/database/record/instance-relationships/base.d.ts +78 -19
  496. package/build/src/database/record/instance-relationships/base.d.ts.map +1 -1
  497. package/build/src/database/record/instance-relationships/base.js +98 -26
  498. package/build/src/database/record/instance-relationships/belongs-to.d.ts +1 -0
  499. package/build/src/database/record/instance-relationships/belongs-to.d.ts.map +1 -1
  500. package/build/src/database/record/instance-relationships/belongs-to.js +13 -5
  501. package/build/src/database/record/instance-relationships/has-many.d.ts +27 -7
  502. package/build/src/database/record/instance-relationships/has-many.d.ts.map +1 -1
  503. package/build/src/database/record/instance-relationships/has-many.js +50 -16
  504. package/build/src/database/record/instance-relationships/has-one.d.ts +4 -1
  505. package/build/src/database/record/instance-relationships/has-one.d.ts.map +1 -1
  506. package/build/src/database/record/instance-relationships/has-one.js +28 -10
  507. package/build/src/database/record/relationships/base.d.ts +61 -14
  508. package/build/src/database/record/relationships/base.d.ts.map +1 -1
  509. package/build/src/database/record/relationships/base.js +60 -15
  510. package/build/src/database/record/relationships/belongs-to.d.ts.map +1 -1
  511. package/build/src/database/record/relationships/belongs-to.js +9 -3
  512. package/build/src/database/record/relationships/has-many.d.ts.map +1 -1
  513. package/build/src/database/record/relationships/has-many.js +9 -3
  514. package/build/src/database/record/relationships/has-one.d.ts.map +1 -1
  515. package/build/src/database/record/relationships/has-one.js +9 -3
  516. package/build/src/database/record/state-machine.d.ts +9 -1
  517. package/build/src/database/record/state-machine.d.ts.map +1 -1
  518. package/build/src/database/record/state-machine.js +35 -14
  519. package/build/src/database/record/user-module.d.ts +2 -0
  520. package/build/src/database/record/user-module.d.ts.map +1 -1
  521. package/build/src/database/record/user-module.js +3 -1
  522. package/build/src/database/record/validators/base.d.ts +4 -2
  523. package/build/src/database/record/validators/base.d.ts.map +1 -1
  524. package/build/src/database/record/validators/base.js +4 -2
  525. package/build/src/database/record/validators/format.d.ts.map +1 -1
  526. package/build/src/database/record/validators/format.js +2 -1
  527. package/build/src/database/record/validators/presence.d.ts.map +1 -1
  528. package/build/src/database/record/validators/presence.js +5 -2
  529. package/build/src/database/record/validators/uniqueness.d.ts +0 -2
  530. package/build/src/database/record/validators/uniqueness.d.ts.map +1 -1
  531. package/build/src/database/record/validators/uniqueness.js +18 -8
  532. package/build/src/database/table-data/index.d.ts +40 -4
  533. package/build/src/database/table-data/index.d.ts.map +1 -1
  534. package/build/src/database/table-data/index.js +38 -5
  535. package/build/src/database/table-data/table-column.d.ts +43 -5
  536. package/build/src/database/table-data/table-column.d.ts.map +1 -1
  537. package/build/src/database/table-data/table-column.js +37 -4
  538. package/build/src/database/table-data/table-foreign-key.d.ts +8 -0
  539. package/build/src/database/table-data/table-foreign-key.d.ts.map +1 -1
  540. package/build/src/database/table-data/table-foreign-key.js +9 -1
  541. package/build/src/database/table-data/table-index.d.ts +8 -0
  542. package/build/src/database/table-data/table-index.d.ts.map +1 -1
  543. package/build/src/database/table-data/table-index.js +6 -1
  544. package/build/src/database/table-data/table-reference.d.ts +1 -0
  545. package/build/src/database/table-data/table-reference.d.ts.map +1 -1
  546. package/build/src/database/table-data/table-reference.js +2 -1
  547. package/build/src/database/use-database.d.ts +1 -0
  548. package/build/src/database/use-database.d.ts.map +1 -1
  549. package/build/src/database/use-database.js +2 -1
  550. package/build/src/environment-handlers/base.d.ts +94 -36
  551. package/build/src/environment-handlers/base.d.ts.map +1 -1
  552. package/build/src/environment-handlers/base.js +90 -36
  553. package/build/src/environment-handlers/browser.d.ts +33 -3
  554. package/build/src/environment-handlers/browser.d.ts.map +1 -1
  555. package/build/src/environment-handlers/browser.js +36 -9
  556. package/build/src/environment-handlers/node/cli/commands/cli-command-context.d.ts +5 -0
  557. package/build/src/environment-handlers/node/cli/commands/cli-command-context.d.ts.map +1 -1
  558. package/build/src/environment-handlers/node/cli/commands/cli-command-context.js +6 -2
  559. package/build/src/environment-handlers/node/cli/commands/console.d.ts +3 -2
  560. package/build/src/environment-handlers/node/cli/commands/console.d.ts.map +1 -1
  561. package/build/src/environment-handlers/node/cli/commands/console.js +23 -9
  562. package/build/src/environment-handlers/node/cli/commands/db/schema/dump.d.ts +4 -1
  563. package/build/src/environment-handlers/node/cli/commands/db/schema/dump.d.ts.map +1 -1
  564. package/build/src/environment-handlers/node/cli/commands/db/schema/dump.js +5 -2
  565. package/build/src/environment-handlers/node/cli/commands/db/schema/load.d.ts +6 -2
  566. package/build/src/environment-handlers/node/cli/commands/db/schema/load.d.ts.map +1 -1
  567. package/build/src/environment-handlers/node/cli/commands/db/schema/load.js +11 -5
  568. package/build/src/environment-handlers/node/cli/commands/db/seed.d.ts +15 -5
  569. package/build/src/environment-handlers/node/cli/commands/db/seed.d.ts.map +1 -1
  570. package/build/src/environment-handlers/node/cli/commands/db/seed.js +20 -6
  571. package/build/src/environment-handlers/node/cli/commands/destroy/migration.d.ts +5 -0
  572. package/build/src/environment-handlers/node/cli/commands/destroy/migration.d.ts.map +1 -1
  573. package/build/src/environment-handlers/node/cli/commands/destroy/migration.js +3 -1
  574. package/build/src/environment-handlers/node/cli/commands/generate/base-models.d.ts +2 -0
  575. package/build/src/environment-handlers/node/cli/commands/generate/base-models.d.ts.map +1 -1
  576. package/build/src/environment-handlers/node/cli/commands/generate/base-models.js +6 -4
  577. package/build/src/environment-handlers/node/cli/commands/generate/frontend-models.d.ts +43 -29
  578. package/build/src/environment-handlers/node/cli/commands/generate/frontend-models.d.ts.map +1 -1
  579. package/build/src/environment-handlers/node/cli/commands/generate/frontend-models.js +99 -40
  580. package/build/src/environment-handlers/node/cli/commands/generate/migration.d.ts +5 -0
  581. package/build/src/environment-handlers/node/cli/commands/generate/migration.d.ts.map +1 -1
  582. package/build/src/environment-handlers/node/cli/commands/generate/migration.js +3 -1
  583. package/build/src/environment-handlers/node/cli/commands/generate/model.d.ts +5 -0
  584. package/build/src/environment-handlers/node/cli/commands/generate/model.d.ts.map +1 -1
  585. package/build/src/environment-handlers/node/cli/commands/generate/model.js +3 -1
  586. package/build/src/environment-handlers/node/cli/commands/init.d.ts +5 -0
  587. package/build/src/environment-handlers/node/cli/commands/init.d.ts.map +1 -1
  588. package/build/src/environment-handlers/node/cli/commands/init.js +3 -1
  589. package/build/src/environment-handlers/node/cli/commands/routes.d.ts +3 -0
  590. package/build/src/environment-handlers/node/cli/commands/routes.d.ts.map +1 -1
  591. package/build/src/environment-handlers/node/cli/commands/routes.js +4 -1
  592. package/build/src/environment-handlers/node/cli/commands/run-script.d.ts +15 -5
  593. package/build/src/environment-handlers/node/cli/commands/run-script.d.ts.map +1 -1
  594. package/build/src/environment-handlers/node/cli/commands/run-script.js +20 -6
  595. package/build/src/environment-handlers/node/cli/commands/runner.d.ts +18 -6
  596. package/build/src/environment-handlers/node/cli/commands/runner.d.ts.map +1 -1
  597. package/build/src/environment-handlers/node/cli/commands/runner.js +20 -6
  598. package/build/src/environment-handlers/node/cli/commands/server.d.ts +13 -1
  599. package/build/src/environment-handlers/node/cli/commands/server.d.ts.map +1 -1
  600. package/build/src/environment-handlers/node/cli/commands/server.js +23 -6
  601. package/build/src/environment-handlers/node.d.ts +14 -2
  602. package/build/src/environment-handlers/node.d.ts.map +1 -1
  603. package/build/src/environment-handlers/node.js +107 -39
  604. package/build/src/error-logger.d.ts +4 -3
  605. package/build/src/error-logger.d.ts.map +1 -1
  606. package/build/src/error-logger.js +4 -3
  607. package/build/src/frontend-model-controller.d.ts +239 -90
  608. package/build/src/frontend-model-controller.d.ts.map +1 -1
  609. package/build/src/frontend-model-controller.js +577 -787
  610. package/build/src/frontend-model-resource/base-resource.d.ts +118 -66
  611. package/build/src/frontend-model-resource/base-resource.d.ts.map +1 -1
  612. package/build/src/frontend-model-resource/base-resource.js +205 -82
  613. package/build/src/frontend-models/base.d.ts +319 -163
  614. package/build/src/frontend-models/base.d.ts.map +1 -1
  615. package/build/src/frontend-models/base.js +717 -366
  616. package/build/src/frontend-models/clear-pending-debounced-callback.d.ts +2 -1
  617. package/build/src/frontend-models/clear-pending-debounced-callback.d.ts.map +1 -1
  618. package/build/src/frontend-models/clear-pending-debounced-callback.js +6 -3
  619. package/build/src/frontend-models/event-hook-models.d.ts +5 -0
  620. package/build/src/frontend-models/event-hook-models.d.ts.map +1 -1
  621. package/build/src/frontend-models/event-hook-models.js +10 -3
  622. package/build/src/frontend-models/model-registry.d.ts +5 -5
  623. package/build/src/frontend-models/model-registry.d.ts.map +1 -1
  624. package/build/src/frontend-models/model-registry.js +5 -5
  625. package/build/src/frontend-models/outgoing-event-buffer.d.ts +11 -3
  626. package/build/src/frontend-models/outgoing-event-buffer.d.ts.map +1 -1
  627. package/build/src/frontend-models/outgoing-event-buffer.js +13 -5
  628. package/build/src/frontend-models/preloader.d.ts +9 -6
  629. package/build/src/frontend-models/preloader.d.ts.map +1 -1
  630. package/build/src/frontend-models/preloader.js +21 -9
  631. package/build/src/frontend-models/query.d.ts +283 -73
  632. package/build/src/frontend-models/query.d.ts.map +1 -1
  633. package/build/src/frontend-models/query.js +331 -203
  634. package/build/src/frontend-models/resource-config-validation.d.ts +2 -0
  635. package/build/src/frontend-models/resource-config-validation.d.ts.map +1 -1
  636. package/build/src/frontend-models/resource-config-validation.js +3 -1
  637. package/build/src/frontend-models/resource-definition.d.ts +12 -5
  638. package/build/src/frontend-models/resource-definition.d.ts.map +1 -1
  639. package/build/src/frontend-models/resource-definition.js +39 -13
  640. package/build/src/frontend-models/transport-serialization.d.ts +14 -11
  641. package/build/src/frontend-models/transport-serialization.d.ts.map +1 -1
  642. package/build/src/frontend-models/transport-serialization.js +80 -53
  643. package/build/src/frontend-models/use-destroyed-event.d.ts +21 -0
  644. package/build/src/frontend-models/use-destroyed-event.d.ts.map +1 -1
  645. package/build/src/frontend-models/use-destroyed-event.js +34 -11
  646. package/build/src/frontend-models/use-model-class-event.d.ts +24 -0
  647. package/build/src/frontend-models/use-model-class-event.d.ts.map +1 -1
  648. package/build/src/frontend-models/use-model-class-event.js +39 -12
  649. package/build/src/frontend-models/use-updated-event.d.ts +21 -0
  650. package/build/src/frontend-models/use-updated-event.d.ts.map +1 -1
  651. package/build/src/frontend-models/use-updated-event.js +37 -12
  652. package/build/src/frontend-models/websocket-channel.d.ts +51 -9
  653. package/build/src/frontend-models/websocket-channel.d.ts.map +1 -1
  654. package/build/src/frontend-models/websocket-channel.js +96 -26
  655. package/build/src/frontend-models/websocket-publishers.d.ts +2 -0
  656. package/build/src/frontend-models/websocket-publishers.d.ts.map +1 -1
  657. package/build/src/frontend-models/websocket-publishers.js +33 -11
  658. package/build/src/http-client/header.d.ts +1 -0
  659. package/build/src/http-client/header.d.ts.map +1 -1
  660. package/build/src/http-client/header.js +2 -1
  661. package/build/src/http-client/index.d.ts +4 -0
  662. package/build/src/http-client/index.d.ts.map +1 -1
  663. package/build/src/http-client/index.js +5 -1
  664. package/build/src/http-client/request.d.ts +5 -0
  665. package/build/src/http-client/request.d.ts.map +1 -1
  666. package/build/src/http-client/request.js +6 -1
  667. package/build/src/http-client/response.d.ts +14 -4
  668. package/build/src/http-client/response.d.ts.map +1 -1
  669. package/build/src/http-client/response.js +14 -4
  670. package/build/src/http-client/websocket-client.d.ts +1 -0
  671. package/build/src/http-client/websocket-client.d.ts.map +1 -1
  672. package/build/src/http-client/websocket-client.js +2 -1
  673. package/build/src/http-server/client/index.d.ts +16 -2
  674. package/build/src/http-server/client/index.d.ts.map +1 -1
  675. package/build/src/http-server/client/index.js +44 -13
  676. package/build/src/http-server/client/params-to-object.d.ts +16 -10
  677. package/build/src/http-server/client/params-to-object.d.ts.map +1 -1
  678. package/build/src/http-server/client/params-to-object.js +46 -17
  679. package/build/src/http-server/client/request-buffer/form-data-part.d.ts +10 -6
  680. package/build/src/http-server/client/request-buffer/form-data-part.d.ts.map +1 -1
  681. package/build/src/http-server/client/request-buffer/form-data-part.js +11 -7
  682. package/build/src/http-server/client/request-buffer/header.d.ts +1 -0
  683. package/build/src/http-server/client/request-buffer/header.d.ts.map +1 -1
  684. package/build/src/http-server/client/request-buffer/header.js +2 -1
  685. package/build/src/http-server/client/request-buffer/index.d.ts +29 -4
  686. package/build/src/http-server/client/request-buffer/index.d.ts.map +1 -1
  687. package/build/src/http-server/client/request-buffer/index.js +43 -9
  688. package/build/src/http-server/client/request-parser.d.ts +52 -13
  689. package/build/src/http-server/client/request-parser.d.ts.map +1 -1
  690. package/build/src/http-server/client/request-parser.js +58 -15
  691. package/build/src/http-server/client/request-runner.d.ts +5 -1
  692. package/build/src/http-server/client/request-runner.d.ts.map +1 -1
  693. package/build/src/http-server/client/request-runner.js +32 -8
  694. package/build/src/http-server/client/request-timing.d.ts +37 -7
  695. package/build/src/http-server/client/request-timing.d.ts.map +1 -1
  696. package/build/src/http-server/client/request-timing.js +32 -8
  697. package/build/src/http-server/client/request.d.ts +15 -5
  698. package/build/src/http-server/client/request.d.ts.map +1 -1
  699. package/build/src/http-server/client/request.js +17 -5
  700. package/build/src/http-server/client/response.d.ts +22 -4
  701. package/build/src/http-server/client/response.d.ts.map +1 -1
  702. package/build/src/http-server/client/response.js +29 -7
  703. package/build/src/http-server/client/uploaded-file/memory-uploaded-file.d.ts +1 -0
  704. package/build/src/http-server/client/uploaded-file/memory-uploaded-file.d.ts.map +1 -1
  705. package/build/src/http-server/client/uploaded-file/memory-uploaded-file.js +3 -1
  706. package/build/src/http-server/client/uploaded-file/temporary-uploaded-file.d.ts +1 -0
  707. package/build/src/http-server/client/uploaded-file/temporary-uploaded-file.d.ts.map +1 -1
  708. package/build/src/http-server/client/uploaded-file/temporary-uploaded-file.js +3 -1
  709. package/build/src/http-server/client/uploaded-file/uploaded-file.d.ts +2 -0
  710. package/build/src/http-server/client/uploaded-file/uploaded-file.d.ts.map +1 -1
  711. package/build/src/http-server/client/uploaded-file/uploaded-file.js +3 -1
  712. package/build/src/http-server/client/websocket-request.d.ts +24 -12
  713. package/build/src/http-server/client/websocket-request.d.ts.map +1 -1
  714. package/build/src/http-server/client/websocket-request.js +24 -10
  715. package/build/src/http-server/client/websocket-session.d.ts +101 -62
  716. package/build/src/http-server/client/websocket-session.d.ts.map +1 -1
  717. package/build/src/http-server/client/websocket-session.js +118 -61
  718. package/build/src/http-server/cookie.d.ts +36 -8
  719. package/build/src/http-server/cookie.d.ts.map +1 -1
  720. package/build/src/http-server/cookie.js +37 -9
  721. package/build/src/http-server/development-reloader.d.ts +32 -7
  722. package/build/src/http-server/development-reloader.d.ts.map +1 -1
  723. package/build/src/http-server/development-reloader.js +39 -10
  724. package/build/src/http-server/index.d.ts +102 -25
  725. package/build/src/http-server/index.d.ts.map +1 -1
  726. package/build/src/http-server/index.js +117 -32
  727. package/build/src/http-server/remote-address.d.ts +1 -0
  728. package/build/src/http-server/remote-address.d.ts.map +1 -1
  729. package/build/src/http-server/remote-address.js +15 -4
  730. package/build/src/http-server/server-client.d.ts +37 -8
  731. package/build/src/http-server/server-client.d.ts.map +1 -1
  732. package/build/src/http-server/server-client.js +48 -12
  733. package/build/src/http-server/server-lock.d.ts +76 -0
  734. package/build/src/http-server/server-lock.d.ts.map +1 -0
  735. package/build/src/http-server/server-lock.js +164 -0
  736. package/build/src/http-server/websocket-channel-subscribers.d.ts +13 -8
  737. package/build/src/http-server/websocket-channel-subscribers.d.ts.map +1 -1
  738. package/build/src/http-server/websocket-channel-subscribers.js +16 -7
  739. package/build/src/http-server/websocket-channel.d.ts +13 -11
  740. package/build/src/http-server/websocket-channel.d.ts.map +1 -1
  741. package/build/src/http-server/websocket-channel.js +8 -12
  742. package/build/src/http-server/websocket-connection.d.ts +10 -14
  743. package/build/src/http-server/websocket-connection.d.ts.map +1 -1
  744. package/build/src/http-server/websocket-connection.js +8 -12
  745. package/build/src/http-server/websocket-event-log-store.d.ts +48 -10
  746. package/build/src/http-server/websocket-event-log-store.d.ts.map +1 -1
  747. package/build/src/http-server/websocket-event-log-store.js +76 -34
  748. package/build/src/http-server/websocket-events-host.d.ts +21 -15
  749. package/build/src/http-server/websocket-events-host.d.ts.map +1 -1
  750. package/build/src/http-server/websocket-events-host.js +20 -11
  751. package/build/src/http-server/websocket-events.d.ts +8 -7
  752. package/build/src/http-server/websocket-events.d.ts.map +1 -1
  753. package/build/src/http-server/websocket-events.js +6 -5
  754. package/build/src/http-server/worker-handler/channel-subscriber-dispatch.d.ts +3 -2
  755. package/build/src/http-server/worker-handler/channel-subscriber-dispatch.d.ts.map +1 -1
  756. package/build/src/http-server/worker-handler/channel-subscriber-dispatch.js +3 -2
  757. package/build/src/http-server/worker-handler/in-process.d.ts +18 -18
  758. package/build/src/http-server/worker-handler/in-process.d.ts.map +1 -1
  759. package/build/src/http-server/worker-handler/in-process.js +28 -20
  760. package/build/src/http-server/worker-handler/index.d.ts +39 -20
  761. package/build/src/http-server/worker-handler/index.d.ts.map +1 -1
  762. package/build/src/http-server/worker-handler/index.js +34 -14
  763. package/build/src/http-server/worker-handler/worker-thread.d.ts +31 -15
  764. package/build/src/http-server/worker-handler/worker-thread.d.ts.map +1 -1
  765. package/build/src/http-server/worker-handler/worker-thread.js +31 -12
  766. package/build/src/initializer.d.ts +4 -0
  767. package/build/src/initializer.d.ts.map +1 -1
  768. package/build/src/initializer.js +5 -1
  769. package/build/src/jobs/mail-delivery.d.ts +1 -0
  770. package/build/src/jobs/mail-delivery.d.ts.map +1 -1
  771. package/build/src/jobs/mail-delivery.js +2 -1
  772. package/build/src/logger/base-logger.js +2 -2
  773. package/build/src/logger/console-logger.d.ts +2 -0
  774. package/build/src/logger/console-logger.d.ts.map +1 -1
  775. package/build/src/logger/console-logger.js +3 -1
  776. package/build/src/logger/file-logger.d.ts +2 -0
  777. package/build/src/logger/file-logger.d.ts.map +1 -1
  778. package/build/src/logger/file-logger.js +3 -1
  779. package/build/src/logger/outputs/array-output.d.ts +21 -5
  780. package/build/src/logger/outputs/array-output.d.ts.map +1 -1
  781. package/build/src/logger/outputs/array-output.js +19 -6
  782. package/build/src/logger/outputs/console-output.d.ts +10 -2
  783. package/build/src/logger/outputs/console-output.d.ts.map +1 -1
  784. package/build/src/logger/outputs/console-output.js +8 -3
  785. package/build/src/logger/outputs/file-output.d.ts +20 -5
  786. package/build/src/logger/outputs/file-output.d.ts.map +1 -1
  787. package/build/src/logger/outputs/file-output.js +18 -6
  788. package/build/src/logger/outputs/stdout-output.d.ts +7 -1
  789. package/build/src/logger/outputs/stdout-output.d.ts.map +1 -1
  790. package/build/src/logger/outputs/stdout-output.js +9 -3
  791. package/build/src/logger.d.ts +28 -13
  792. package/build/src/logger.d.ts.map +1 -1
  793. package/build/src/logger.js +60 -23
  794. package/build/src/mailer/backends/smtp.d.ts +5 -0
  795. package/build/src/mailer/backends/smtp.d.ts.map +1 -1
  796. package/build/src/mailer/backends/smtp.js +17 -4
  797. package/build/src/mailer/base.d.ts +33 -17
  798. package/build/src/mailer/base.d.ts.map +1 -1
  799. package/build/src/mailer/base.js +54 -18
  800. package/build/src/mailer/delivery.d.ts +16 -5
  801. package/build/src/mailer/delivery.d.ts.map +1 -1
  802. package/build/src/mailer/delivery.js +18 -7
  803. package/build/src/mailer/index.d.ts +5 -5
  804. package/build/src/mailer/index.d.ts.map +1 -1
  805. package/build/src/mailer/index.js +2 -2
  806. package/build/src/mailer.d.ts +5 -5
  807. package/build/src/mailer.d.ts.map +1 -1
  808. package/build/src/mailer.js +2 -2
  809. package/build/src/plugins/sqljs-wasm-route-controller.d.ts +4 -1
  810. package/build/src/plugins/sqljs-wasm-route-controller.d.ts.map +1 -1
  811. package/build/src/plugins/sqljs-wasm-route-controller.js +11 -4
  812. package/build/src/plugins/sqljs-wasm-route.d.ts +6 -0
  813. package/build/src/plugins/sqljs-wasm-route.d.ts.map +1 -1
  814. package/build/src/plugins/sqljs-wasm-route.js +4 -1
  815. package/build/src/record-payload-values.d.ts +54 -0
  816. package/build/src/record-payload-values.d.ts.map +1 -0
  817. package/build/src/record-payload-values.js +80 -0
  818. package/build/src/routes/app-routes.d.ts +1 -0
  819. package/build/src/routes/app-routes.d.ts.map +1 -1
  820. package/build/src/routes/app-routes.js +2 -1
  821. package/build/src/routes/base-route.d.ts +52 -16
  822. package/build/src/routes/base-route.d.ts.map +1 -1
  823. package/build/src/routes/base-route.js +50 -14
  824. package/build/src/routes/basic-route.d.ts +1 -0
  825. package/build/src/routes/basic-route.d.ts.map +1 -1
  826. package/build/src/routes/basic-route.js +13 -4
  827. package/build/src/routes/built-in/debug/controller.d.ts +4 -1
  828. package/build/src/routes/built-in/debug/controller.d.ts.map +1 -1
  829. package/build/src/routes/built-in/debug/controller.js +5 -2
  830. package/build/src/routes/get-route.d.ts +1 -0
  831. package/build/src/routes/get-route.d.ts.map +1 -1
  832. package/build/src/routes/get-route.js +7 -4
  833. package/build/src/routes/hooks/frontend-model-command-route-hook.d.ts +1 -0
  834. package/build/src/routes/hooks/frontend-model-command-route-hook.d.ts.map +1 -1
  835. package/build/src/routes/hooks/frontend-model-command-route-hook.js +6 -2
  836. package/build/src/routes/index.d.ts +3 -2
  837. package/build/src/routes/index.d.ts.map +1 -1
  838. package/build/src/routes/index.js +10 -4
  839. package/build/src/routes/namespace-route.d.ts +1 -0
  840. package/build/src/routes/namespace-route.d.ts.map +1 -1
  841. package/build/src/routes/namespace-route.js +5 -3
  842. package/build/src/routes/plugin-routes.d.ts +10 -1
  843. package/build/src/routes/plugin-routes.d.ts.map +1 -1
  844. package/build/src/routes/plugin-routes.js +11 -3
  845. package/build/src/routes/post-route.d.ts +1 -0
  846. package/build/src/routes/post-route.d.ts.map +1 -1
  847. package/build/src/routes/post-route.js +7 -4
  848. package/build/src/routes/resolver.d.ts +20 -5
  849. package/build/src/routes/resolver.d.ts.map +1 -1
  850. package/build/src/routes/resolver.js +47 -14
  851. package/build/src/routes/resource-route.d.ts +6 -1
  852. package/build/src/routes/resource-route.d.ts.map +1 -1
  853. package/build/src/routes/resource-route.js +10 -4
  854. package/build/src/testing/base-expect.d.ts +2 -0
  855. package/build/src/testing/base-expect.d.ts.map +1 -1
  856. package/build/src/testing/base-expect.js +3 -1
  857. package/build/src/testing/browser-frontend-model-event-hook-scenarios.d.ts +33 -5
  858. package/build/src/testing/browser-frontend-model-event-hook-scenarios.d.ts.map +1 -1
  859. package/build/src/testing/browser-frontend-model-event-hook-scenarios.js +95 -23
  860. package/build/src/testing/expect-to-change.d.ts +3 -0
  861. package/build/src/testing/expect-to-change.d.ts.map +1 -1
  862. package/build/src/testing/expect-to-change.js +4 -1
  863. package/build/src/testing/expect-utils.d.ts +22 -16
  864. package/build/src/testing/expect-utils.d.ts.map +1 -1
  865. package/build/src/testing/expect-utils.js +62 -30
  866. package/build/src/testing/expect.d.ts +50 -21
  867. package/build/src/testing/expect.d.ts.map +1 -1
  868. package/build/src/testing/expect.js +58 -17
  869. package/build/src/testing/request-client.d.ts +16 -3
  870. package/build/src/testing/request-client.d.ts.map +1 -1
  871. package/build/src/testing/request-client.js +17 -4
  872. package/build/src/testing/test-files-finder.d.ts +41 -9
  873. package/build/src/testing/test-files-finder.d.ts.map +1 -1
  874. package/build/src/testing/test-files-finder.js +42 -10
  875. package/build/src/testing/test-filter-parser.d.ts +6 -0
  876. package/build/src/testing/test-filter-parser.d.ts.map +1 -1
  877. package/build/src/testing/test-filter-parser.js +12 -3
  878. package/build/src/testing/test-runner.d.ts +102 -6
  879. package/build/src/testing/test-runner.d.ts.map +1 -1
  880. package/build/src/testing/test-runner.js +115 -23
  881. package/build/src/testing/test-suite-splitter.d.ts +7 -0
  882. package/build/src/testing/test-suite-splitter.d.ts.map +1 -1
  883. package/build/src/testing/test-suite-splitter.js +7 -2
  884. package/build/src/testing/test.d.ts +20 -4
  885. package/build/src/testing/test.d.ts.map +1 -1
  886. package/build/src/testing/test.js +67 -20
  887. package/build/src/utils/backtrace-cleaner-node.d.ts.map +1 -1
  888. package/build/src/utils/backtrace-cleaner-node.js +6 -1
  889. package/build/src/utils/backtrace-cleaner.d.ts +16 -1
  890. package/build/src/utils/backtrace-cleaner.d.ts.map +1 -1
  891. package/build/src/utils/backtrace-cleaner.js +20 -2
  892. package/build/src/utils/ensure-error.d.ts +3 -2
  893. package/build/src/utils/ensure-error.d.ts.map +1 -1
  894. package/build/src/utils/ensure-error.js +3 -2
  895. package/build/src/utils/event-emitter.d.ts.map +1 -1
  896. package/build/src/utils/event-emitter.js +2 -2
  897. package/build/src/utils/file-exists.d.ts +1 -0
  898. package/build/src/utils/file-exists.d.ts.map +1 -1
  899. package/build/src/utils/file-exists.js +2 -1
  900. package/build/src/utils/format-value.d.ts +5 -4
  901. package/build/src/utils/format-value.d.ts.map +1 -1
  902. package/build/src/utils/format-value.js +12 -7
  903. package/build/src/utils/model-scope.d.ts +18 -12
  904. package/build/src/utils/model-scope.d.ts.map +1 -1
  905. package/build/src/utils/model-scope.js +19 -11
  906. package/build/src/utils/nest-callbacks.d.ts +1 -0
  907. package/build/src/utils/nest-callbacks.d.ts.map +1 -1
  908. package/build/src/utils/nest-callbacks.js +2 -1
  909. package/build/src/utils/plain-object.d.ts +7 -0
  910. package/build/src/utils/plain-object.d.ts.map +1 -0
  911. package/build/src/utils/plain-object.js +13 -0
  912. package/build/src/utils/ransack.d.ts +29 -5
  913. package/build/src/utils/ransack.d.ts.map +1 -1
  914. package/build/src/utils/ransack.js +136 -49
  915. package/build/src/utils/rest-args-error.d.ts +1 -0
  916. package/build/src/utils/rest-args-error.d.ts.map +1 -1
  917. package/build/src/utils/rest-args-error.js +2 -1
  918. package/build/src/utils/singularize-model-name.d.ts +1 -0
  919. package/build/src/utils/singularize-model-name.d.ts.map +1 -1
  920. package/build/src/utils/singularize-model-name.js +2 -1
  921. package/build/src/utils/to-import-specifier.d.ts.map +1 -1
  922. package/build/src/utils/to-import-specifier.js +3 -1
  923. package/build/src/utils/with-tracked-stack-async-hooks.d.ts +8 -5
  924. package/build/src/utils/with-tracked-stack-async-hooks.d.ts.map +1 -1
  925. package/build/src/utils/with-tracked-stack-async-hooks.js +32 -13
  926. package/build/src/utils/with-tracked-stack.d.ts +9 -5
  927. package/build/src/utils/with-tracked-stack.d.ts.map +1 -1
  928. package/build/src/utils/with-tracked-stack.js +19 -8
  929. package/build/src/velocious-error.d.ts +4 -2
  930. package/build/src/velocious-error.d.ts.map +1 -1
  931. package/build/src/velocious-error.js +5 -3
  932. package/build/tsconfig.tsbuildinfo +1 -1
  933. package/package.json +1 -1
@@ -1,16 +1,29 @@
1
1
  /**
2
+ * Runs run frontend model event hook scenario.
2
3
  * @param {keyof typeof scenarios} scenarioName - Scenario name.
3
4
  * @returns {Promise<Record<string, number>>} - Scenario result.
4
5
  */
5
6
  export default function runFrontendModelEventHookScenario(scenarioName: keyof typeof scenarios): Promise<Record<string, number>>;
7
+ /**
8
+ * FrontendModelResourceConfig type.
9
+ */
6
10
  export type FrontendModelResourceConfig = import("../frontend-models/base.js").FrontendModelResourceConfig;
11
+ /**
12
+ * Defines this typedef.
13
+ */
7
14
  export type FrontendModelHookTestCreateUpdatePayload = {
8
15
  id: string;
9
16
  model: FrontendModelBase;
10
17
  };
18
+ /**
19
+ * Defines this typedef.
20
+ */
11
21
  export type FrontendModelHookTestDestroyPayload = {
12
22
  id: string;
13
23
  };
24
+ /**
25
+ * FakeSubscriptions type.
26
+ */
14
27
  export type FakeSubscriptions = {
15
28
  /**
16
29
  * - Create callbacks.
@@ -41,15 +54,30 @@ declare namespace scenarios {
41
54
  export { resubscribeInstanceScenario as resubscribeInstance };
42
55
  }
43
56
  import FrontendModelBase from "../frontend-models/base.js";
44
- /** @returns {Promise<Record<string, number>>} - Scenario result. */
57
+ /**
58
+ * Runs class lifecycle scenario.
59
+ * @returns {Promise<Record<string, number>>} - Scenario result.
60
+ */
45
61
  declare function classLifecycleScenario(): Promise<Record<string, number>>;
46
- /** @returns {Promise<Record<string, number>>} - Scenario result. */
62
+ /**
63
+ * Runs debounce unmount scenario.
64
+ * @returns {Promise<Record<string, number>>} - Scenario result.
65
+ */
47
66
  declare function debounceUnmountScenario(): Promise<Record<string, number>>;
48
- /** @returns {Promise<Record<string, number>>} - Scenario result. */
67
+ /**
68
+ * Runs instance lifecycle scenario.
69
+ * @returns {Promise<Record<string, number>>} - Scenario result.
70
+ */
49
71
  declare function instanceLifecycleScenario(): Promise<Record<string, number>>;
50
- /** @returns {Promise<Record<string, number>>} - Scenario result. */
72
+ /**
73
+ * Runs projection options scenario.
74
+ * @returns {Promise<Record<string, number>>} - Scenario result.
75
+ */
51
76
  declare function projectionOptionsScenario(): Promise<Record<string, number>>;
52
- /** @returns {Promise<Record<string, number>>} - Scenario result. */
77
+ /**
78
+ * Runs resubscribe instance scenario.
79
+ * @returns {Promise<Record<string, number>>} - Scenario result.
80
+ */
53
81
  declare function resubscribeInstanceScenario(): Promise<Record<string, number>>;
54
82
  export {};
55
83
  //# sourceMappingURL=browser-frontend-model-event-hook-scenarios.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"browser-frontend-model-event-hook-scenarios.d.ts","sourceRoot":"","sources":["../../../src/testing/browser-frontend-model-event-hook-scenarios.js"],"names":[],"mappings":"AAqbA;;;GAGG;AACH,wEAHW,MAAM,OAAO,SAAS,GACpB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAQ3C;0CAnba,OAAO,4BAA4B,EAAE,2BAA2B;uDAChE;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,iBAAiB,CAAA;CAAC;kDACtC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAC;;;;;YAGZ,GAAG,CAAC,CAAC,OAAO,EAAE,wCAAwC,KAAK,IAAI,CAAC;;;;aAChE,GAAG,CAAC,CAAC,OAAO,EAAE,mCAAmC,KAAK,IAAI,CAAC;;;;aAC3D;QAAC,MAAM,EAAE,OAAO,6BAA6B,EAAE,+BAA+B,EAAE,CAAC;QAAC,OAAO,EAAE,OAAO,6BAA6B,EAAE,+BAA+B,EAAE,CAAC;QAAC,MAAM,EAAE,OAAO,6BAA6B,EAAE,+BAA+B,EAAE,CAAA;KAAC;;;;YACpP,GAAG,CAAC,CAAC,OAAO,EAAE,wCAAwC,KAAK,IAAI,CAAC;;;;;;;;;8BAbhD,4BAA4B;AA0M1D,oEAAoE;AACpE,2CADc,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CA2C5C;AA8FD,oEAAoE;AACpE,4CADc,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CA4B5C;AAxHD,oEAAoE;AACpE,8CADc,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CA0C5C;AAED,oEAAoE;AACpE,8CADc,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CA8C5C;AAgCD,oEAAoE;AACpE,gDADc,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAmD5C"}
1
+ {"version":3,"file":"browser-frontend-model-event-hook-scenarios.d.ts","sourceRoot":"","sources":["../../../src/testing/browser-frontend-model-event-hook-scenarios.js"],"names":[],"mappings":"AA4fA;;;;GAIG;AACH,wEAHW,MAAM,OAAO,SAAS,GACpB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAQ3C;;;;0CAzfW,OAAO,4BAA4B,EAAE,2BAA2B;;;;uDAGhE;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,iBAAiB,CAAA;CAAC;;;;kDAGtC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAC;;;;;;;;YAIV,GAAG,CAAC,CAAC,OAAO,EAAE,wCAAwC,KAAK,IAAI,CAAC;;;;aAChE,GAAG,CAAC,CAAC,OAAO,EAAE,mCAAmC,KAAK,IAAI,CAAC;;;;aAC3D;QAAC,MAAM,EAAE,OAAO,6BAA6B,EAAE,+BAA+B,EAAE,CAAC;QAAC,OAAO,EAAE,OAAO,6BAA6B,EAAE,+BAA+B,EAAE,CAAC;QAAC,MAAM,EAAE,OAAO,6BAA6B,EAAE,+BAA+B,EAAE,CAAA;KAAC;;;;YACpP,GAAG,CAAC,CAAC,OAAO,EAAE,wCAAwC,KAAK,IAAI,CAAC;;;;;;;;;8BApBhD,4BAA4B;AA6O1D;;;GAGG;AACH,2CAFa,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAiD3C;AA4GD;;;GAGG;AACH,4CAFa,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAkC3C;AA9ID;;;GAGG;AACH,8CAFa,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAgD3C;AAED;;;GAGG;AACH,8CAFa,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAkD3C;AAwCD;;;GAGG;AACH,gDAFa,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAuD3C"}
@@ -7,22 +7,33 @@ import FrontendModelBase from "../frontend-models/base.js";
7
7
  import useModelClassEvent from "../frontend-models/use-model-class-event.js";
8
8
  import useUpdatedEvent from "../frontend-models/use-updated-event.js";
9
9
  import wait from "awaitery/build/wait.js";
10
- /** @typedef {import("../frontend-models/base.js").FrontendModelResourceConfig} FrontendModelResourceConfig */
11
- /** @typedef {{id: string, model: FrontendModelBase}} FrontendModelHookTestCreateUpdatePayload */
12
- /** @typedef {{id: string}} FrontendModelHookTestDestroyPayload */
13
10
  /**
11
+ * FrontendModelResourceConfig type.
12
+ @typedef {import("../frontend-models/base.js").FrontendModelResourceConfig} FrontendModelResourceConfig */
13
+ /**
14
+ * Defines this typedef.
15
+ @typedef {{id: string, model: FrontendModelBase}} FrontendModelHookTestCreateUpdatePayload */
16
+ /**
17
+ * Defines this typedef.
18
+ @typedef {{id: string}} FrontendModelHookTestDestroyPayload */
19
+ /**
20
+ * FakeSubscriptions type.
14
21
  * @typedef {object} FakeSubscriptions
15
22
  * @property {Set<(payload: FrontendModelHookTestCreateUpdatePayload) => void>} create - Create callbacks.
16
23
  * @property {Set<(payload: FrontendModelHookTestDestroyPayload) => void>} destroy - Destroy callbacks.
17
24
  * @property {{create: import("../frontend-models/query.js").FrontendModelEventOptionsObject[], destroy: import("../frontend-models/query.js").FrontendModelEventOptionsObject[], update: import("../frontend-models/query.js").FrontendModelEventOptionsObject[]}} options - Subscription options.
18
25
  * @property {Set<(payload: FrontendModelHookTestCreateUpdatePayload) => void>} update - Update callbacks.
19
26
  */
20
- /** @returns {Promise<void>} - Resolves after React effects have run. */
27
+ /**
28
+ * Runs flush effects.
29
+ * @returns {Promise<void>} - Resolves after React effects have run.
30
+ */
21
31
  async function flushEffects() {
22
32
  await Promise.resolve();
23
33
  await new Promise((resolve) => setTimeout(resolve, 0));
24
34
  }
25
35
  /**
36
+ * Runs wait for.
26
37
  * @param {() => boolean} callback - Predicate to wait for.
27
38
  * @returns {Promise<void>} - Resolves when the predicate returns true.
28
39
  */
@@ -34,7 +45,10 @@ async function waitFor(callback) {
34
45
  await wait(10);
35
46
  }
36
47
  }
37
- /** @returns {FakeSubscriptions} - Empty fake subscription store. */
48
+ /**
49
+ * Runs build fake subscriptions.
50
+ * @returns {FakeSubscriptions} - Empty fake subscription store.
51
+ */
38
52
  function buildFakeSubscriptions() {
39
53
  return {
40
54
  create: new Set(),
@@ -44,6 +58,7 @@ function buildFakeSubscriptions() {
44
58
  };
45
59
  }
46
60
  /**
61
+ * Runs fake resource config.
47
62
  * @param {string} modelName - Fake frontend model name.
48
63
  * @returns {FrontendModelResourceConfig} - Minimal resource config for fake subclasses.
49
64
  */
@@ -55,6 +70,7 @@ function fakeResourceConfig(modelName) {
55
70
  };
56
71
  }
57
72
  /**
73
+ * Runs render element.
58
74
  * @param {React.ReactElement} element - Element to render.
59
75
  * @returns {Promise<{rerender: (nextElement: React.ReactElement) => Promise<void>, unmount: () => Promise<void>}>} - Render controls.
60
76
  */
@@ -76,15 +92,22 @@ async function renderElement(element) {
76
92
  }
77
93
  };
78
94
  }
79
- /** @returns {{ModelClass: typeof FrontendModelBase, subscriptions: FakeSubscriptions}} - Fake model class setup. */
95
+ /**
96
+ * Runs build fake model class.
97
+ * @returns {{ModelClass: typeof FrontendModelBase, subscriptions: FakeSubscriptions}} - Fake model class setup.
98
+ */
80
99
  function buildFakeModelClass() {
81
100
  const subscriptions = buildFakeSubscriptions();
82
101
  class FakeModelClass extends FrontendModelBase {
83
- /** @returns {FrontendModelResourceConfig} - Fake resource config. */
102
+ /**
103
+ * Runs resource config.
104
+ * @returns {FrontendModelResourceConfig} - Fake resource config.
105
+ */
84
106
  static resourceConfig() {
85
107
  return fakeResourceConfig("HookFakeClassModel");
86
108
  }
87
109
  /**
110
+ * Runs on create.
88
111
  * @param {(payload: FrontendModelHookTestCreateUpdatePayload) => void} callback - Event callback.
89
112
  * @param {import("../frontend-models/query.js").FrontendModelEventOptionsObject} [options] - Event query or projection options.
90
113
  * @returns {Promise<() => void>} - Unsubscribe callback.
@@ -95,6 +118,7 @@ function buildFakeModelClass() {
95
118
  return () => subscriptions.create.delete(callback);
96
119
  }
97
120
  /**
121
+ * Runs on destroy.
98
122
  * @param {(payload: FrontendModelHookTestDestroyPayload) => void} callback - Event callback.
99
123
  * @param {import("../frontend-models/query.js").FrontendModelEventOptionsObject} [options] - Event query or projection options.
100
124
  * @returns {Promise<() => void>} - Unsubscribe callback.
@@ -105,6 +129,7 @@ function buildFakeModelClass() {
105
129
  return () => subscriptions.destroy.delete(callback);
106
130
  }
107
131
  /**
132
+ * Runs on update.
108
133
  * @param {(payload: FrontendModelHookTestCreateUpdatePayload) => void} callback - Event callback.
109
134
  * @param {import("../frontend-models/query.js").FrontendModelEventOptionsObject} [options] - Event query or projection options.
110
135
  * @returns {Promise<() => void>} - Unsubscribe callback.
@@ -118,6 +143,7 @@ function buildFakeModelClass() {
118
143
  return { ModelClass: FakeModelClass, subscriptions };
119
144
  }
120
145
  /**
146
+ * Runs emit event.
121
147
  * @param {FakeSubscriptions} subscriptions - Callback sets.
122
148
  * @param {"create" | "destroy" | "update"} eventName - Event name.
123
149
  * @param {FrontendModelHookTestCreateUpdatePayload | FrontendModelHookTestDestroyPayload} payload - Event payload.
@@ -138,17 +164,22 @@ function emitEvent(subscriptions, eventName, payload) {
138
164
  }
139
165
  }
140
166
  /**
167
+ * Runs build fake model.
141
168
  * @param {string} id - Model id.
142
169
  * @param {FakeSubscriptions} subscriptions - Callback sets.
143
170
  * @returns {FrontendModelBase} - Fake model instance.
144
171
  */
145
172
  function buildFakeModel(id, subscriptions) {
146
173
  class FakeModel extends FrontendModelBase {
147
- /** @returns {FrontendModelResourceConfig} - Fake resource config. */
174
+ /**
175
+ * Runs resource config.
176
+ * @returns {FrontendModelResourceConfig} - Fake resource config.
177
+ */
148
178
  static resourceConfig() {
149
179
  return fakeResourceConfig("HookFakeInstanceModel");
150
180
  }
151
181
  /**
182
+ * Runs on destroy.
152
183
  * @param {(payload: FrontendModelHookTestDestroyPayload) => void} callback - Event callback.
153
184
  * @param {import("../frontend-models/query.js").FrontendModelEventOptionsObject} [options] - Event query or projection options.
154
185
  * @returns {Promise<() => void>} - Unsubscribe callback.
@@ -159,6 +190,7 @@ function buildFakeModel(id, subscriptions) {
159
190
  return () => subscriptions.destroy.delete(callback);
160
191
  }
161
192
  /**
193
+ * Runs on update.
162
194
  * @param {(payload: FrontendModelHookTestCreateUpdatePayload) => void} callback - Event callback.
163
195
  * @param {import("../frontend-models/query.js").FrontendModelEventOptionsObject} [options] - Event query or projection options.
164
196
  * @returns {Promise<() => void>} - Unsubscribe callback.
@@ -168,21 +200,32 @@ function buildFakeModel(id, subscriptions) {
168
200
  subscriptions.options.update.push(options);
169
201
  return () => subscriptions.update.delete(callback);
170
202
  }
171
- /** @returns {string} - Primary key value. */
203
+ /**
204
+ * Runs primary key value.
205
+ * @returns {string} - Primary key value.
206
+ */
172
207
  primaryKeyValue() {
173
208
  return id;
174
209
  }
175
210
  }
176
211
  return new FakeModel({ id });
177
212
  }
178
- /** @returns {Promise<Record<string, number>>} - Scenario result. */
213
+ /**
214
+ * Runs class lifecycle scenario.
215
+ * @returns {Promise<Record<string, number>>} - Scenario result.
216
+ */
179
217
  async function classLifecycleScenario() {
180
218
  const { ModelClass, subscriptions } = buildFakeModelClass();
181
219
  const eventModel = buildFakeModel("1", buildFakeSubscriptions());
182
- /** @type {Array<FrontendModelHookTestCreateUpdatePayload | FrontendModelHookTestDestroyPayload>} */
220
+ /**
221
+ * Received events.
222
+ @type {Array<FrontendModelHookTestCreateUpdatePayload | FrontendModelHookTestDestroyPayload>} */
183
223
  const receivedEvents = [];
184
224
  let connectedCount = 0;
185
- /** @returns {React.ReactElement} - Test element. */
225
+ /**
226
+ * Runs test component.
227
+ * @returns {React.ReactElement} - Test element.
228
+ */
186
229
  function TestComponent() {
187
230
  useModelClassEvent(ModelClass, ["create", "update"], (payload) => receivedEvents.push(payload), {
188
231
  onConnected: () => { connectedCount += 1; }
@@ -211,14 +254,22 @@ async function classLifecycleScenario() {
211
254
  unmountedUpdateSubscriptions: subscriptions.update.size
212
255
  };
213
256
  }
214
- /** @returns {Promise<Record<string, number>>} - Scenario result. */
257
+ /**
258
+ * Runs instance lifecycle scenario.
259
+ * @returns {Promise<Record<string, number>>} - Scenario result.
260
+ */
215
261
  async function instanceLifecycleScenario() {
216
262
  const subscriptions = buildFakeSubscriptions();
217
263
  const model = buildFakeModel("task-1", subscriptions);
218
- /** @type {Array<FrontendModelHookTestCreateUpdatePayload | FrontendModelHookTestDestroyPayload>} */
264
+ /**
265
+ * Received events.
266
+ @type {Array<FrontendModelHookTestCreateUpdatePayload | FrontendModelHookTestDestroyPayload>} */
219
267
  const receivedEvents = [];
220
268
  let connectedCount = 0;
221
- /** @returns {React.ReactElement} - Test element. */
269
+ /**
270
+ * Runs test component.
271
+ * @returns {React.ReactElement} - Test element.
272
+ */
222
273
  function TestComponent() {
223
274
  useUpdatedEvent(model, (payload) => receivedEvents.push(payload), {
224
275
  onConnected: () => { connectedCount += 1; }
@@ -246,7 +297,10 @@ async function instanceLifecycleScenario() {
246
297
  unmountedUpdateSubscriptions: subscriptions.update.size
247
298
  };
248
299
  }
249
- /** @returns {Promise<Record<string, number>>} - Scenario result. */
300
+ /**
301
+ * Runs projection options scenario.
302
+ * @returns {Promise<Record<string, number>>} - Scenario result.
303
+ */
250
304
  async function projectionOptionsScenario() {
251
305
  const { ModelClass, subscriptions: classSubscriptions } = buildFakeModelClass();
252
306
  const instanceSubscriptions = buildFakeSubscriptions();
@@ -254,7 +308,10 @@ async function projectionOptionsScenario() {
254
308
  const classQuery = ModelClass
255
309
  .where({ id: "task-1" })
256
310
  .select(["id"]);
257
- /** @returns {React.ReactElement} - Test element. */
311
+ /**
312
+ * Runs test component.
313
+ * @returns {React.ReactElement} - Test element.
314
+ */
258
315
  function TestComponent() {
259
316
  useCreatedEvent(ModelClass, () => { }, {
260
317
  preload: "project",
@@ -287,14 +344,22 @@ async function projectionOptionsScenario() {
287
344
  instanceUpdateWithCountComments: updateOptions.withCount === "comments" ? 1 : 0
288
345
  };
289
346
  }
290
- /** @returns {Promise<Record<string, number>>} - Scenario result. */
347
+ /**
348
+ * Runs debounce unmount scenario.
349
+ * @returns {Promise<Record<string, number>>} - Scenario result.
350
+ */
291
351
  async function debounceUnmountScenario() {
292
352
  const { ModelClass, subscriptions: classSubscriptions } = buildFakeModelClass();
293
353
  const instanceSubscriptions = buildFakeSubscriptions();
294
354
  const model = buildFakeModel("task-1", instanceSubscriptions);
295
- /** @type {Array<FrontendModelHookTestCreateUpdatePayload | FrontendModelHookTestDestroyPayload>} */
355
+ /**
356
+ * Received events.
357
+ @type {Array<FrontendModelHookTestCreateUpdatePayload | FrontendModelHookTestDestroyPayload>} */
296
358
  const receivedEvents = [];
297
- /** @returns {React.ReactElement} - Test element. */
359
+ /**
360
+ * Runs test component.
361
+ * @returns {React.ReactElement} - Test element.
362
+ */
298
363
  function TestComponent() {
299
364
  useModelClassEvent(ModelClass, "update", (payload) => receivedEvents.push(payload), { debounce: 20 });
300
365
  useUpdatedEvent(model, (payload) => receivedEvents.push(payload), { debounce: 20 });
@@ -310,15 +375,21 @@ async function debounceUnmountScenario() {
310
375
  await wait(30);
311
376
  return { receivedEventsAfterDebounceWindow: receivedEvents.length };
312
377
  }
313
- /** @returns {Promise<Record<string, number>>} - Scenario result. */
378
+ /**
379
+ * Runs resubscribe instance scenario.
380
+ * @returns {Promise<Record<string, number>>} - Scenario result.
381
+ */
314
382
  async function resubscribeInstanceScenario() {
315
383
  const firstSubscriptions = buildFakeSubscriptions();
316
384
  const secondSubscriptions = buildFakeSubscriptions();
317
385
  const firstModel = buildFakeModel("task-1", firstSubscriptions);
318
386
  const secondModel = buildFakeModel("task-1", secondSubscriptions);
319
- /** @type {Array<FrontendModelHookTestCreateUpdatePayload | FrontendModelHookTestDestroyPayload>} */
387
+ /**
388
+ * Received events.
389
+ @type {Array<FrontendModelHookTestCreateUpdatePayload | FrontendModelHookTestDestroyPayload>} */
320
390
  const receivedEvents = [];
321
391
  /**
392
+ * Runs test component.
322
393
  * @param {{model: import("../frontend-models/base.js").default}} props - Component props.
323
394
  * @returns {React.ReactElement} - Test element.
324
395
  */
@@ -360,6 +431,7 @@ const scenarios = {
360
431
  resubscribeInstance: resubscribeInstanceScenario
361
432
  };
362
433
  /**
434
+ * Runs run frontend model event hook scenario.
363
435
  * @param {keyof typeof scenarios} scenarioName - Scenario name.
364
436
  * @returns {Promise<Record<string, number>>} - Scenario result.
365
437
  */
@@ -369,4 +441,4 @@ export default async function runFrontendModelEventHookScenario(scenarioName) {
369
441
  throw new Error(`Unknown frontend model event hook scenario: ${scenarioName}`);
370
442
  return await scenario();
371
443
  }
372
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJvd3Nlci1mcm9udGVuZC1tb2RlbC1ldmVudC1ob29rLXNjZW5hcmlvcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90ZXN0aW5nL2Jyb3dzZXItZnJvbnRlbmQtbW9kZWwtZXZlbnQtaG9vay1zY2VuYXJpb3MuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaLE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQTtBQUN6QixPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sa0JBQWtCLENBQUE7QUFFM0MsT0FBTyxpQkFBaUIsTUFBTSwyQ0FBMkMsQ0FBQTtBQUN6RSxPQUFPLGVBQWUsTUFBTSx5Q0FBeUMsQ0FBQTtBQUNyRSxPQUFPLGlCQUFpQixNQUFNLDRCQUE0QixDQUFBO0FBQzFELE9BQU8sa0JBQWtCLE1BQU0sNkNBQTZDLENBQUE7QUFDNUUsT0FBTyxlQUFlLE1BQU0seUNBQXlDLENBQUE7QUFDckUsT0FBTyxJQUFJLE1BQU0sd0JBQXdCLENBQUE7QUFFekMsOEdBQThHO0FBQzlHLGlHQUFpRztBQUNqRyxrRUFBa0U7QUFDbEU7Ozs7OztHQU1HO0FBRUgsd0VBQXdFO0FBQ3hFLEtBQUssVUFBVSxZQUFZO0lBQ3pCLE1BQU0sT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFBO0lBQ3ZCLE1BQU0sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQTtBQUN4RCxDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsS0FBSyxVQUFVLE9BQU8sQ0FBQyxRQUFRO0lBQzdCLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQTtJQUU1QixPQUFPLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQztRQUNuQixJQUFJLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxTQUFTLEdBQUcsSUFBSTtZQUFFLE9BQU07UUFFekMsTUFBTSxJ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QWlDLENBQUMsWUFBWTtJQUMxRSxNQUFNLFFBQVEsR0FBRyxTQUFTLENBQUMsWUFBWSxDQUFDLENBQUE7SUFFeEMsSUFBSSxDQUFDLFFBQVE7UUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLCtDQUErQyxZQUFZLEVBQUUsQ0FBQyxDQUFBO0lBRTdGLE9BQU8sTUFBTSxRQUFRLEVBQUUsQ0FBQTtBQUN6QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIlxuaW1wb3J0IHtjcmVhdGVSb290fSBmcm9tIFwicmVhY3QtZG9tL2NsaWVudFwiXG5cbmltcG9ydCB1c2VEZXN0cm95ZWRFdmVudCBmcm9tIFwiLi4vZnJvbnRlbmQtbW9kZWxzL3VzZS1kZXN0cm95ZWQtZXZlbnQuanNcIlxuaW1wb3J0IHVzZUNyZWF0ZWRFdmVudCBmcm9tIFwiLi4vZnJvbnRlbmQtbW9kZWxzL3VzZS1jcmVhdGVkLWV2ZW50LmpzXCJcbmltcG9ydCBGcm9udGVuZE1vZGVsQmFzZSBmcm9tIFwiLi4vZnJvbnRlbmQtbW9kZWxzL2Jhc2UuanNcIlxuaW1wb3J0IHVzZU1vZGVsQ2xhc3NFdmVudCBmcm9tIFwiLi4vZnJvbnRlbmQtbW9kZWxzL3VzZS1tb2RlbC1jbGFzcy1ldmVudC5qc1wiXG5pbXBvcnQgdXNlVXBkYXRlZEV2ZW50IGZyb20gXCIuLi9mcm9udGVuZC1tb2RlbHMvdXNlLXVwZGF0ZWQtZXZlbnQuanNcIlxuaW1wb3J0IHdhaXQgZnJvbSBcImF3YWl0ZXJ5L2J1aWxkL3dhaXQuanNcIlxuXG4vKiogQHR5cGVkZWYge2ltcG9ydChcIi4uL2Zyb250ZW5kLW1vZGVscy9iYXNlLmpzXCIpLkZyb250ZW5kTW9kZWxSZXNvdXJjZUNvbmZpZ30gRnJvbnRlbmRNb2RlbFJlc291cmNlQ29uZmlnICovXG4vKiogQHR5cGVkZWYge3tpZDogc3RyaW5nLCBtb2RlbDogRnJvbnRlbmRNb2RlbEJhc2V9fSBGcm9udGVuZE1vZGVsSG9va1Rlc3RDcmVhdGVVcGRhdGVQYXlsb2FkICovXG4vKiogQHR5cGVkZWYge3tpZDogc3RyaW5nfX0gRnJvbnRlbmRNb2RlbEhvb2tUZXN0RGVzdHJveVBheWxvYWQgKi9cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gRmFrZVN1YnNjcmlwdGlvbnNcbiAqIEBwcm9wZXJ0eSB7U2V0PChwYXlsb2FkOiBGcm9udGVuZE1vZGVsSG9va1Rlc3RDcmVhdGVVcGRhdGVQYXlsb2FkKSA9PiB2b2lkPn0gY3JlYXRlIC0gQ3JlYXRlIGNhbGxiYWNrcy5cbiAqIEBwcm9wZXJ0eSB7U2V0PChwYXlsb2FkOiBGcm9udGVuZE1vZGVsSG9va1Rlc3REZXN0cm95UGF5bG9hZCkgPT4gdm9pZD59IGRlc3Ryb3kgLSBEZXN0cm95IGNhbGxiYWNrcy5cbiAqIEBwcm9wZXJ0eSB7e2NyZWF0ZTogaW1wb3J0KFwiLi4vZnJvbnRlbmQtbW9kZWxzL3F1ZXJ5LmpzXCIpLkZyb250ZW5kTW9kZWxFdmVudE9wdGlvbnNPYmplY3RbXSwgZGVzdHJveTogaW1wb3J0KFwiLi4vZnJvbnRlbmQtbW9kZWxzL3F1ZXJ5LmpzXCIpLkZyb250ZW5kTW9kZWxFdmVudE9wdGlvbnNPYmplY3RbXSwgdXBkYXRlOiBpbXBvcnQoXCIuLi9mcm9udGVuZC1tb2RlbHMvcXVlcnkuanNcIikuRnJvbnRlbmRNb2RlbEV2ZW50T3B0aW9uc09iamVjdFtdfX0gb3B0aW9ucyAtIFN1YnNjcmlwdGlvbiBvcHRpb25zLlxuICogQHByb3BlcnR5IHtTZXQ8KHBheWxvYWQ6IEZyb250ZW5kTW9kZWxIb29rVGVzdENyZWF0ZVVwZGF0ZVBheWxvYWQpID0+IHZvaWQ+fSB1cGRhdGUgLSBVcGRhdGUgY2FsbGJhY2tzLlxuICovXG5cbi8qKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gLSBSZXNvbHZlcyBhZnRlciBSZWFjdCBlZmZlY3RzIGhhdmUgcnVuLiAqL1xuYXN5bmMgZnVuY3Rpb24gZmx1c2hFZmZlY3RzKCkge1xuICBhd2FpdCBQcm9taXNlLnJlc29sdmUoKVxuICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gc2V0VGltZW91dChyZXNvbHZlLCAwKSlcbn1cblxuLyoqXG4gKiBAcGFyYW0geygpID0+IGJvb2xlYW59IGNhbGxiYWNrIC0gUHJlZGljYXRlIHRvIHdhaXQgZm9yLlxuICogQHJldHVybnMge1Byb21pc2U8dm9pZD59IC0gUmVzb2x2ZXMgd2hlbiB0aGUgcHJlZGljYXRlIHJldHVybnMgdHJ1ZS5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gd2FpdEZvcihjYWxsYmFjaykge1xuICBjb25zdCBzdGFydGVkQXQgPSBEYXRlLm5vdygpXG5cbiAgd2hpbGUgKCFjYWxsYmFjaygpKSB7XG4gICAgaWYgKERhdGUubm93KCkgLSBzdGFydGVkQXQgPiAxMDAwKSByZXR1cm5cblxuICAgIGF3YWl0IHdhaXQoMTApXG4gIH1cbn1cblxuLyoqIEByZXR1cm5zIHtGYWtlU3Vic2NyaXB0aW9uc30gLSBFbXB0eSBmYWtlIHN1YnNjcmlwdGlvbiBzdG9yZS4gKi9cbmZ1bmN0aW9uIGJ1aWxkRmFrZVN1YnNjcmlwdGlvbnMoKSB7XG4gIHJldHVybiB7XG4gICAgY3JlYXRlOiBuZXcgU2V0KCksXG4gICAgZGVzdHJveTogbmV3IFNldCgpLFxuICAgIG9wdGlvbnM6IHtjcmVhdGU6IFtdLCBkZXN0cm95OiBbXSwgdXBkYXRlOiBbXX0sXG4gICAgdXBkYXRlOiBuZXcgU2V0KClcbiAgfVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBtb2RlbE5hbWUgLSBGYWtlIGZyb250ZW5kIG1vZGVsIG5hbWUuXG4gKiBAcmV0dXJucyB7RnJvbnRlbmRNb2RlbFJlc291cmNlQ29uZmlnfSAtIE1pbmltYWwgcmVzb3VyY2UgY29uZmlnIGZvciBmYWtlIHN1YmNsYXNzZXMuXG4gKi9cbmZ1bmN0aW9uIGZha2VSZXNvdXJjZUNvbmZpZyhtb2RlbE5hbWUpIHtcbiAgcmV0dXJuIHtcbiAgICBhdHRyaWJ1dGVzOiBbXCJpZFwiXSxcbiAgICBtb2RlbE5hbWUsXG4gICAgcHJpbWFyeUtleTogXCJpZFwiXG4gIH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge1JlYWN0LlJlYWN0RWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gcmVuZGVyLlxuICogQHJldHVybnMge1Byb21pc2U8e3JlcmVuZGVyOiAobmV4dEVsZW1lbnQ6IFJlYWN0LlJlYWN0RWxlbWVudCkgPT4gUHJvbWlzZTx2b2lkPiwgdW5tb3VudDogKCkgPT4gUHJvbWlzZTx2b2lkPn0+fSAtIFJlbmRlciBjb250cm9scy5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gcmVuZGVyRWxlbWVudChlbGVtZW50KSB7XG4gIGNvbnN0IGNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIilcbiAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChjb250YWluZXIpXG4gIGNvbnN0IHJvb3QgPSBjcmVhdGVSb290KGNvbnRhaW5lcilcblxuICByb290LnJlbmRlcihlbGVtZW50KVxuICBhd2FpdCBmbHVzaEVmZmVjdHMoKVxuXG4gIHJldHVybiB7XG4gICAgcmVyZW5kZXI6IGFzeW5jIChuZXh0RWxlbWVudCkgPT4ge1xuICAgICAgcm9vdC5yZW5kZXIobmV4dEVsZW1lbnQpXG4gICAgICBhd2FpdCBmbHVzaEVmZmVjdHMoKVxuICAgIH0sXG4gICAgdW5tb3VudDogYXN5bmMgKCkgPT4ge1xuICAgICAgcm9vdC51bm1vdW50KClcbiAgICAgIGNvbnRhaW5lci5yZW1vdmUoKVxuICAgICAgYXdhaXQgZmx1c2hFZmZlY3RzKClcbiAgICB9XG4gIH1cbn1cblxuLyoqIEByZXR1cm5zIHt7TW9kZWxDbGFzczogdHlwZW9mIEZyb250ZW5kTW9kZWxCYXNlLCBzdWJzY3JpcHRpb25zOiBGYWtlU3Vic2NyaXB0aW9uc319IC0gRmFrZSBtb2RlbCBjbGFzcyBzZXR1cC4gKi9cbmZ1bmN0aW9uIGJ1aWxkRmFrZU1vZGVsQ2xhc3MoKSB7XG4gIGNvbnN0IHN1YnNjcmlwdGlvbnMgPSBidWlsZEZha2VTdWJzY3JpcHRpb25zKClcblxuICBjbGFzcyBGYWtlTW9kZWxDbGFzcyBleHRlbmRzIEZyb250ZW5kTW9kZWxCYXNlIHtcbiAgICAvKiogQHJldHVybnMge0Zyb250ZW5kTW9kZWxSZXNvdXJjZUNvbmZpZ30gLSBGYWtlIHJlc291cmNlIGNvbmZpZy4gKi9cbiAgICBzdGF0aWMgcmVzb3VyY2VDb25maWcoKSB7XG4gICAgICByZXR1cm4gZmFrZVJlc291cmNlQ29uZmlnKFwiSG9va0Zha2VDbGFzc01vZGVsXCIpXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIHsocGF5bG9hZDogRnJvbnRlbmRNb2RlbEhvb2tUZXN0Q3JlYXRlVXBkYXRlUGF5bG9hZCkgPT4gdm9pZH0gY2FsbGJhY2sgLSBFdmVudCBjYWxsYmFjay5cbiAgICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uL2Zyb250ZW5kLW1vZGVscy9xdWVyeS5qc1wiKS5Gcm9udGVuZE1vZGVsRXZlbnRPcHRpb25zT2JqZWN0fSBbb3B0aW9uc10gLSBFdmVudCBxdWVyeSBvciBwcm9qZWN0aW9uIG9wdGlvbnMuXG4gICAgICogQHJldHVybnMge1Byb21pc2U8KCkgPT4gdm9pZD59IC0gVW5zdWJzY3JpYmUgY2FsbGJhY2suXG4gICAgICovXG4gICAgc3RhdGljIGFzeW5jIG9uQ3JlYXRlKGNhbGxiYWNrLCBvcHRpb25zID0ge30pIHtcbiAgICAgIHN1YnNjcmlwdGlvbnMuY3JlYXRlLmFkZChjYWxsYmFjaylcbiAgICAgIHN1YnNjcmlwdGlvbnMub3B0aW9ucy5jcmVhdGUucHVzaChvcHRpb25zKVxuXG4gICAgICByZXR1cm4gKCkgPT4gc3Vic2NyaXB0aW9ucy5jcmVhdGUuZGVsZXRlKGNhbGxiYWNrKVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7KHBheWxvYWQ6IEZyb250ZW5kTW9kZWxIb29rVGVzdERlc3Ryb3lQYXlsb2FkKSA9PiB2b2lkfSBjYWxsYmFjayAtIEV2ZW50IGNhbGxiYWNrLlxuICAgICAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vZnJvbnRlbmQtbW9kZWxzL3F1ZXJ5LmpzXCIpLkZyb250ZW5kTW9kZWxFdmVudE9wdGlvbnNPYmplY3R9IFtvcHRpb25zXSAtIEV2ZW50IHF1ZXJ5IG9yIHByb2plY3Rpb24gb3B0aW9ucy5cbiAgICAgKiBAcmV0dXJucyB7UHJvbWlzZTwoKSA9PiB2b2lkPn0gLSBVbnN1YnNjcmliZSBjYWxsYmFjay5cbiAgICAgKi9cbiAgICBzdGF0aWMgYXN5bmMgb25EZXN0cm95KGNhbGxiYWNrLCBvcHRpb25zID0ge30pIHtcbiAgICAgIHN1YnNjcmlwdGlvbnMuZGVzdHJveS5hZGQoY2FsbGJhY2spXG4gICAgICBzdWJzY3JpcHRpb25zLm9wdGlvbnMuZGVzdHJveS5wdXNoKG9wdGlvbnMpXG5cbiAgICAgIHJldHVybiAoKSA9PiBzdWJzY3JpcHRpb25zLmRlc3Ryb3kuZGVsZXRlKGNhbGxiYWNrKVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7KHBheWxvYWQ6IEZyb250ZW5kTW9kZWxIb29rVGVzdENyZWF0ZVVwZGF0ZVBheWxvYWQpID0+IHZvaWR9IGNhbGxiYWNrIC0gRXZlbnQgY2FsbGJhY2suXG4gICAgICogQHBhcmFtIHtpbXBvcnQoXCIuLi9mcm9udGVuZC1tb2RlbHMvcXVlcnkuanNcIikuRnJvbnRlbmRNb2RlbEV2ZW50T3B0aW9uc09iamVjdH0gW29wdGlvbnNdIC0gRXZlbnQgcXVlcnkgb3IgcHJvamVjdGlvbiBvcHRpb25zLlxuICAgICAqIEByZXR1cm5zIHtQcm9taXNlPCgpID0+IHZvaWQ+fSAtIFVuc3Vic2NyaWJlIGNhbGxiYWNrLlxuICAgICAqL1xuICAgIHN0YXRpYyBhc3luYyBvblVwZGF0ZShjYWxsYmFjaywgb3B0aW9ucyA9IHt9KSB7XG4gICAgICBzdWJzY3JpcHRpb25zLnVwZGF0ZS5hZGQoY2FsbGJhY2spXG4gICAgICBzdWJzY3JpcHRpb25zLm9wdGlvbnMudXBkYXRlLnB1c2gob3B0aW9ucylcblxuICAgICAgcmV0dXJuICgpID0+IHN1YnNjcmlwdGlvbnMudXBkYXRlLmRlbGV0ZShjYWxsYmFjaylcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge01vZGVsQ2xhc3M6IEZha2VNb2RlbENsYXNzLCBzdWJzY3JpcHRpb25zfVxufVxuXG4vKipcbiAqIEBwYXJhbSB7RmFrZVN1YnNjcmlwdGlvbnN9IHN1YnNjcmlwdGlvbnMgLSBDYWxsYmFjayBzZXRzLlxuICogQHBhcmFtIHtcImNyZWF0ZVwiIHwgXCJkZXN0cm95XCIgfCBcInVwZGF0ZVwifSBldmVudE5hbWUgLSBFdmVudCBuYW1lLlxuICogQHBhcmFtIHtGcm9udGVuZE1vZGVsSG9va1Rlc3RDcmVhdGVVcGRhdGVQYXlsb2FkIHwgRnJvbnRlbmRNb2RlbEhvb2tUZXN0RGVzdHJveVBheWxvYWR9IHBheWxvYWQgLSBFdmVudCBwYXlsb2FkLlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIGVtaXRFdmVudChzdWJzY3JpcHRpb25zLCBldmVudE5hbWUsIHBheWxvYWQpIHtcbiAgaWYgKGV2ZW50TmFtZSA9PT0gXCJkZXN0cm95XCIpIHtcbiAgICBmb3IgKGNvbnN0IGNhbGxiYWNrIG9mIHN1YnNjcmlwdGlvbnMuZGVzdHJveSkge1xuICAgICAgY2FsbGJhY2soe2lkOiBwYXlsb2FkLmlkfSlcbiAgICB9XG5cbiAgICByZXR1cm5cbiAgfVxuXG4gIGlmICghKFwibW9kZWxcIiBpbiBwYXlsb2FkKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgbW9kZWwgcGF5bG9hZCBmb3IgJHtldmVudE5hbWV9YClcbiAgfVxuXG4gIGZvciAoY29uc3QgY2FsbGJhY2sgb2Ygc3Vic2NyaXB0aW9uc1tldmVudE5hbWVdKSB7XG4gICAgY2FsbGJhY2socGF5bG9hZClcbiAgfVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBpZCAtIE1vZGVsIGlkLlxuICogQHBhcmFtIHtGYWtlU3Vic2NyaXB0aW9uc30gc3Vic2NyaXB0aW9ucyAtIENhbGxiYWNrIHNldHMuXG4gKiBAcmV0dXJucyB7RnJvbnRlbmRNb2RlbEJhc2V9IC0gRmFrZSBtb2RlbCBpbnN0YW5jZS5cbiAqL1xuZnVuY3Rpb24gYnVpbGRGYWtlTW9kZWwoaWQsIHN1YnNjcmlwdGlvbnMpIHtcbiAgY2xhc3MgRmFrZU1vZGVsIGV4dGVuZHMgRnJvbnRlbmRNb2RlbEJhc2Uge1xuICAgIC8qKiBAcmV0dXJucyB7RnJvbnRlbmRNb2RlbFJlc291cmNlQ29uZmlnfSAtIEZha2UgcmVzb3VyY2UgY29uZmlnLiAqL1xuICAgIHN0YXRpYyByZXNvdXJjZUNvbmZpZygpIHtcbiAgICAgIHJldHVybiBmYWtlUmVzb3VyY2VDb25maWcoXCJIb29rRmFrZUluc3RhbmNlTW9kZWxcIilcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0geyhwYXlsb2FkOiBGcm9udGVuZE1vZGVsSG9va1Rlc3REZXN0cm95UGF5bG9hZCkgPT4gdm9pZH0gY2FsbGJhY2sgLSBFdmVudCBjYWxsYmFjay5cbiAgICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uL2Zyb250ZW5kLW1vZGVscy9xdWVyeS5qc1wiKS5Gcm9udGVuZE1vZGVsRXZlbnRPcHRpb25zT2JqZWN0fSBbb3B0aW9uc10gLSBFdmVudCBxdWVyeSBvciBwcm9qZWN0aW9uIG9wdGlvbnMuXG4gICAgICogQHJldHVybnMge1Byb21pc2U8KCkgPT4gdm9pZD59IC0gVW5zdWJzY3JpYmUgY2FsbGJhY2suXG4gICAgICovXG4gICAgYXN5bmMgb25EZXN0cm95KGNhbGxiYWNrLCBvcHRpb25zID0ge30pIHtcbiAgICAgIHN1YnNjcmlwdGlvbnMuZGVzdHJveS5hZGQoY2FsbGJhY2spXG4gICAgICBzdWJzY3JpcHRpb25zLm9wdGlvbnMuZGVzdHJveS5wdXNoKG9wdGlvbnMpXG5cbiAgICAgIHJldHVybiAoKSA9PiBzdWJzY3JpcHRpb25zLmRlc3Ryb3kuZGVsZXRlKGNhbGxiYWNrKVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7KHBheWxvYWQ6IEZyb250ZW5kTW9kZWxIb29rVGVzdENyZWF0ZVVwZGF0ZVBheWxvYWQpID0+IHZvaWR9IGNhbGxiYWNrIC0gRXZlbnQgY2FsbGJhY2suXG4gICAgICogQHBhcmFtIHtpbXBvcnQoXCIuLi9mcm9udGVuZC1tb2RlbHMvcXVlcnkuanNcIikuRnJvbnRlbmRNb2RlbEV2ZW50T3B0aW9uc09iamVjdH0gW29wdGlvbnNdIC0gRXZlbnQgcXVlcnkgb3IgcHJvamVjdGlvbiBvcHRpb25zLlxuICAgICAqIEByZXR1cm5zIHtQcm9taXNlPCgpID0+IHZvaWQ+fSAtIFVuc3Vic2NyaWJlIGNhbGxiYWNrLlxuICAgICAqL1xuICAgIGFzeW5jIG9uVXBkYXRlKGNhbGxiYWNrLCBvcHRpb25zID0ge30pIHtcbiAgICAgIHN1YnNjcmlwdGlvbnMudXBkYXRlLmFkZChjYWxsYmFjaylcbiAgICAgIHN1YnNjcmlwdGlvbnMub3B0aW9ucy51cGRhdGUucHVzaChvcHRpb25zKVxuXG4gICAgICByZXR1cm4gKCkgPT4gc3Vic2NyaXB0aW9ucy51cGRhdGUuZGVsZXRlKGNhbGxiYWNrKVxuICAgIH1cblxuICAgIC8qKiBAcmV0dXJucyB7c3RyaW5nfSAtIFByaW1hcnkga2V5IHZhbHVlLiAqL1xuICAgIHByaW1hcnlLZXlWYWx1ZSgpIHtcbiAgICAgIHJldHVybiBpZFxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZXcgRmFrZU1vZGVsKHtpZH0pXG59XG5cbi8qKiBAcmV0dXJucyB7UHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBudW1iZXI+Pn0gLSBTY2VuYXJpbyByZXN1bHQuICovXG5hc3luYyBmdW5jdGlvbiBjbGFzc0xpZmVjeWNsZVNjZW5hcmlvKCkge1xuICBjb25zdCB7TW9kZWxDbGFzcywgc3Vic2NyaXB0aW9uc30gPSBidWlsZEZha2VNb2RlbENsYXNzKClcbiAgY29uc3QgZXZlbnRNb2RlbCA9IGJ1aWxkRmFrZU1vZGVsKFwiMVwiLCBidWlsZEZha2VTdWJzY3JpcHRpb25zKCkpXG4gIC8qKiBAdHlwZSB7QXJyYXk8RnJvbnRlbmRNb2RlbEhvb2tUZXN0Q3JlYXRlVXBkYXRlUGF5bG9hZCB8IEZyb250ZW5kTW9kZWxIb29rVGVzdERlc3Ryb3lQYXlsb2FkPn0gKi9cbiAgY29uc3QgcmVjZWl2ZWRFdmVudHMgPSBbXVxuICBsZXQgY29ubmVjdGVkQ291bnQgPSAwXG5cbiAgLyoqIEByZXR1cm5zIHtSZWFjdC5SZWFjdEVsZW1lbnR9IC0gVGVzdCBlbGVtZW50LiAqL1xuICBmdW5jdGlvbiBUZXN0Q29tcG9uZW50KCkge1xuICAgIHVzZU1vZGVsQ2xhc3NFdmVudChNb2RlbENsYXNzLCBbXCJjcmVhdGVcIiwgXCJ1cGRhdGVcIl0sIChwYXlsb2FkKSA9PiByZWNlaXZlZEV2ZW50cy5wdXNoKHBheWxvYWQpLCB7XG4gICAgICBvbkNvbm5lY3RlZDogKCkgPT4geyBjb25uZWN0ZWRDb3VudCArPSAxIH1cbiAgICB9KVxuICAgIHVzZUNyZWF0ZWRFdmVudChNb2RlbENsYXNzLCAocGF5bG9hZCkgPT4gcmVjZWl2ZWRFdmVudHMucHVzaChwYXlsb2FkKSlcblxuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpXG4gIH1cblxuICBjb25zdCBjb250cm9scyA9IGF3YWl0IHJlbmRlckVsZW1lbnQoUmVhY3QuY3JlYXRlRWxlbWVudChUZXN0Q29tcG9uZW50KSlcbiAgYXdhaXQgd2FpdEZvcigoKSA9PiBzdWJzY3JpcHRpb25zLmNyZWF0ZS5zaXplID09PSAyICYmIHN1YnNjcmlwdGlvbnMudXBkYXRlLnNpemUgPT09IDEpXG5cbiAgY29uc3QgbW91bnRlZENyZWF0ZVN1YnNjcmlwdGlvbnMgPSBzdWJzY3JpcHRpb25zLmNyZWF0ZS5zaXplXG4gIGNvbnN0IG1vdW50ZWRVcGRhdGVTdWJzY3JpcHRpb25zID0gc3Vic2NyaXB0aW9ucy51cGRhdGUuc2l6ZVxuICBjb25zdCBtb3VudGVkRGVzdHJveVN1YnNjcmlwdGlvbnMgPSBzdWJzY3JpcHRpb25zLmRlc3Ryb3kuc2l6ZVxuICBjb25zdCBtb3VudGVkQ29ubmVjdGVkQ291bnQgPSBjb25uZWN0ZWRDb3VudFxuXG4gIGVtaXRFdmVudChzdWJzY3JpcHRpb25zLCBcImNyZWF0ZVwiLCB7aWQ6IFwiMVwiLCBtb2RlbDogZXZlbnRNb2RlbH0pXG4gIGVtaXRFdmVudChzdWJzY3JpcHRpb25zLCBcInVwZGF0ZVwiLCB7aWQ6IFwiMVwiLCBtb2RlbDogZXZlbnRNb2RlbH0pXG4gIGVtaXRFdmVudChzdWJzY3JpcHRpb25zLCBcImRlc3Ryb3lcIiwge2lkOiBcIjFcIn0pXG5cbiAgY29uc3QgcmVjZWl2ZWRFdmVudHNBZnRlckVtaXQgPSByZWNlaXZlZEV2ZW50cy5sZW5ndGhcblxuICBhd2FpdCBjb250cm9scy51bm1vdW50KClcblxuICByZXR1cm4ge1xuICAgIG1vdW50ZWRDb25uZWN0ZWRDb3VudCxcbiAgICBtb3VudGVkQ3JlYXRlU3Vic2NyaXB0aW9ucyxcbiAgICBtb3VudGVkRGVzdHJveVN1YnNjcmlwdGlvbnMsXG4gICAgbW91bnRlZFVwZGF0ZVN1YnNjcmlwdGlvbnMsXG4gICAgcmVjZWl2ZWRFdmVudHNBZnRlckVtaXQsXG4gICAgdW5tb3VudGVkQ3JlYXRlU3Vic2NyaXB0aW9uczogc3Vic2NyaXB0aW9ucy5jcmVhdGUuc2l6ZSxcbiAgICB1bm1vdW50ZWRVcGRhdGVTdWJzY3JpcHRpb25zOiBzdWJzY3JpcHRpb25zLnVwZGF0ZS5zaXplXG4gIH1cbn1cblxuLyoqIEByZXR1cm5zIHtQcm9taXNlPFJlY29yZDxzdHJpbmcsIG51bWJlcj4+fSAtIFNjZW5hcmlvIHJlc3VsdC4gKi9cbmFzeW5jIGZ1bmN0aW9uIGluc3RhbmNlTGlmZWN5Y2xlU2NlbmFyaW8oKSB7XG4gIGNvbnN0IHN1YnNjcmlwdGlvbnMgPSBidWlsZEZha2VTdWJzY3JpcHRpb25zKClcbiAgY29uc3QgbW9kZWwgPSBidWlsZEZha2VNb2RlbChcInRhc2stMVwiLCBzdWJzY3JpcHRpb25zKVxuICAvKiogQHR5cGUge0FycmF5PEZyb250ZW5kTW9kZWxIb29rVGVzdENyZWF0ZVVwZGF0ZVBheWxvYWQgfCBGcm9udGVuZE1vZGVsSG9va1Rlc3REZXN0cm95UGF5bG9hZD59ICovXG4gIGNvbnN0IHJlY2VpdmVkRXZlbnRzID0gW11cbiAgbGV0IGNvbm5lY3RlZENvdW50ID0gMFxuXG4gIC8qKiBAcmV0dXJucyB7UmVhY3QuUmVhY3RFbGVtZW50fSAtIFRlc3QgZWxlbWVudC4gKi9cbiAgZnVuY3Rpb24gVGVzdENvbXBvbmVudCgpIHtcbiAgICB1c2VVcGRhdGVkRXZlbnQobW9kZWwsIChwYXlsb2FkKSA9PiByZWNlaXZlZEV2ZW50cy5wdXNoKHBheWxvYWQpLCB7XG4gICAgICBvbkNvbm5lY3RlZDogKCkgPT4geyBjb25uZWN0ZWRDb3VudCArPSAxIH1cbiAgICB9KVxuICAgIHVzZURlc3Ryb3llZEV2ZW50KFttb2RlbF0sIChwYXlsb2FkKSA9PiByZWNlaXZlZEV2ZW50cy5wdXNoKHBheWxvYWQpLCB7XG4gICAgICBvbkNvbm5lY3RlZDogKCkgPT4geyBjb25uZWN0ZWRDb3VudCArPSAxIH1cbiAgICB9KVxuXG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIilcbiAgfVxuXG4gIGNvbnN0IGNvbnRyb2xzID0gYXdhaXQgcmVuZGVyRWxlbWVudChSZWFjdC5jcmVhdGVFbGVtZW50KFRlc3RDb21wb25lbnQpKVxuICBhd2FpdCB3YWl0Rm9yKCgpID0+IHN1YnNjcmlwdGlvbnMudXBkYXRlLnNpemUgPT09IDEgJiYgc3Vic2NyaXB0aW9ucy5kZXN0cm95LnNpemUgPT09IDEpXG5cbiAgY29uc3QgbW91bnRlZENvbm5lY3RlZENvdW50ID0gY29ubmVjdGVkQ291bnRcbiAgY29uc3QgbW91bnRlZERlc3Ryb3lTdWJzY3JpcHRpb25zID0gc3Vic2NyaXB0aW9ucy5kZXN0cm95LnNpemVcbiAgY29uc3QgbW91bnRlZFVwZGF0ZVN1YnNjcmlwdGlvbnMgPSBzdWJzY3JpcHRpb25zLnVwZGF0ZS5zaXplXG5cbiAgZW1pdEV2ZW50KHN1YnNjcmlwdGlvbnMsIFwidXBkYXRlXCIsIHtpZDogXCJ0YXNrLTFcIiwgbW9kZWx9KVxuICBlbWl0RXZlbnQoc3Vic2NyaXB0aW9ucywgXCJkZXN0cm95XCIsIHtpZDogXCJ0YXNrLTFcIn0pXG5cbiAgY29uc3QgcmVjZWl2ZWRFdmVudHNBZnRlckVtaXQgPSByZWNlaXZlZEV2ZW50cy5sZW5ndGhcblxuICBhd2FpdCBjb250cm9scy51bm1vdW50KClcblxuICByZXR1cm4ge1xuICAgIG1vdW50ZWRDb25uZWN0ZWRDb3VudCxcbiAgICBtb3VudGVkRGVzdHJveVN1YnNjcmlwdGlvbnMsXG4gICAgbW91bnRlZFVwZGF0ZVN1YnNjcmlwdGlvbnMsXG4gICAgcmVjZWl2ZWRFdmVudHNBZnRlckVtaXQsXG4gICAgdW5tb3VudGVkRGVzdHJveVN1YnNjcmlwdGlvbnM6IHN1YnNjcmlwdGlvbnMuZGVzdHJveS5zaXplLFxuICAgIHVubW91bnRlZFVwZGF0ZVN1YnNjcmlwdGlvbnM6IHN1YnNjcmlwdGlvbnMudXBkYXRlLnNpemVcbiAgfVxufVxuXG4vKiogQHJldHVybnMge1Byb21pc2U8UmVjb3JkPHN0cmluZywgbnVtYmVyPj59IC0gU2NlbmFyaW8gcmVzdWx0LiAqL1xuYXN5bmMgZnVuY3Rpb24gcHJvamVjdGlvbk9wdGlvbnNTY2VuYXJpbygpIHtcbiAgY29uc3Qge01vZGVsQ2xhc3MsIHN1YnNjcmlwdGlvbnM6IGNsYXNzU3Vic2NyaXB0aW9uc30gPSBidWlsZEZha2VNb2RlbENsYXNzKClcbiAgY29uc3QgaW5zdGFuY2VTdWJzY3JpcHRpb25zID0gYnVpbGRGYWtlU3Vic2NyaXB0aW9ucygpXG4gIGNvbnN0IG1vZGVsID0gYnVpbGRGYWtlTW9kZWwoXCJ0YXNrLTFcIiwgaW5zdGFuY2VTdWJzY3JpcHRpb25zKVxuICBjb25zdCBjbGFzc1F1ZXJ5ID0gTW9kZWxDbGFzc1xuICAgIC53aGVyZSh7aWQ6IFwidGFzay0xXCJ9KVxuICAgIC5zZWxlY3QoW1wiaWRcIl0pXG5cbiAgLyoqIEByZXR1cm5zIHtSZWFjdC5SZWFjdEVsZW1lbnR9IC0gVGVzdCBlbGVtZW50LiAqL1xuICBmdW5jdGlvbiBUZXN0Q29tcG9uZW50KCkge1xuICAgIHVzZUNyZWF0ZWRFdmVudChNb2RlbENsYXNzLCAoKSA9PiB7fSwge1xuICAgICAgcHJlbG9hZDogXCJwcm9qZWN0XCIsXG4gICAgICBxdWVyeTogY2xhc3NRdWVyeSxcbiAgICAgIHNlbGVjdDoge1Rhc2s6IFtcImlkXCIsIFwibmFtZVVwcGVyY2FzZVwiXX1cbiAgICB9KVxuICAgIHVzZVVwZGF0ZWRFdmVudChtb2RlbCwgKCkgPT4ge30sIHtcbiAgICAgIHNlbGVjdDogW1wiaWRcIl0sXG4gICAgICB3aXRoQ291bnQ6IFwiY29tbWVudHNcIlxuICAgIH0pXG4gICAgdXNlRGVzdHJveWVkRXZlbnQobW9kZWwsICgpID0+IHt9LCB7XG4gICAgICBwcmVsb2FkOiBcInByb2plY3RcIixcbiAgICAgIHNlbGVjdDogW1wiaWRcIl1cbiAgICB9KVxuXG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIilcbiAgfVxuXG4gIGNvbnN0IGNvbnRyb2xzID0gYXdhaXQgcmVuZGVyRWxlbWVudChSZWFjdC5jcmVhdGVFbGVtZW50KFRlc3RDb21wb25lbnQpKVxuICBhd2FpdCB3YWl0Rm9yKCgpID0+IGNsYXNzU3Vic2NyaXB0aW9ucy5jcmVhdGUuc2l6ZSA9PT0gMSAmJiBpbnN0YW5jZVN1YnNjcmlwdGlvbnMudXBkYXRlLnNpemUgPT09IDEgJiYgaW5zdGFuY2VTdWJzY3JpcHRpb25zLmRlc3Ryb3kuc2l6ZSA9PT0gMSlcblxuICBjb25zdCBjcmVhdGVPcHRpb25zID0gY2xhc3NTdWJzY3JpcHRpb25zLm9wdGlvbnMuY3JlYXRlWzBdIHx8IHt9XG4gIGNvbnN0IHVwZGF0ZU9wdGlvbnMgPSBpbnN0YW5jZVN1YnNjcmlwdGlvbnMub3B0aW9ucy51cGRhdGVbMF0gfHwge31cbiAgY29uc3QgZGVzdHJveU9wdGlvbnMgPSBpbnN0YW5jZVN1YnNjcmlwdGlvbnMub3B0aW9ucy5kZXN0cm95WzBdIHx8IHt9XG5cbiAgYXdhaXQgY29udHJvbHMudW5tb3VudCgpXG5cbiAgcmV0dXJuIHtcbiAgICBjbGFzc0NyZWF0ZVByZWxvYWRQcm9qZWN0OiBjcmVhdGVPcHRpb25zLnByZWxvYWQgPT09IFwicHJvamVjdFwiID8gMSA6IDAsXG4gICAgY2xhc3NDcmVhdGVRdWVyeVBhc3NlZDogY3JlYXRlT3B0aW9ucy5xdWVyeSA9PT0gY2xhc3NRdWVyeSA/IDEgOiAwLFxuICAgIGNsYXNzQ3JlYXRlU2VsZWN0Q291bnQ6IGNyZWF0ZU9wdGlvbnMuc2VsZWN0ICYmIHR5cGVvZiBjcmVhdGVPcHRpb25zLnNlbGVjdCA9PT0gXCJvYmplY3RcIiAmJiAhQXJyYXkuaXNBcnJheShjcmVhdGVPcHRpb25zLnNlbGVjdCkgJiYgQXJyYXkuaXNBcnJheShjcmVhdGVPcHRpb25zLnNlbGVjdC5UYXNrKSA/IGNyZWF0ZU9wdGlvbnMuc2VsZWN0LlRhc2subGVuZ3RoIDogMCxcbiAgICBpbnN0YW5jZURlc3Ryb3lQcmVsb2FkUHJvamVjdDogZGVzdHJveU9wdGlvbnMucHJlbG9hZCA9PT0gXCJwcm9qZWN0XCIgPyAxIDogMCxcbiAgICBpbnN0YW5jZURlc3Ryb3lTZWxlY3RDb3VudDogQXJyYXkuaXNBcnJheShkZXN0cm95T3B0aW9ucy5zZWxlY3QpID8gZGVzdHJveU9wdGlvbnMuc2VsZWN0Lmxlbmd0aCA6IDAsXG4gICAgaW5zdGFuY2VVcGRhdGVTZWxlY3RDb3VudDogQXJyYXkuaXNBcnJheSh1cGRhdGVPcHRpb25zLnNlbGVjdCkgPyB1cGRhdGVPcHRpb25zLnNlbGVjdC5sZW5ndGggOiAwLFxuICAgIGluc3RhbmNlVXBkYXRlV2l0aENvdW50Q29tbWVudHM6IHVwZGF0ZU9wdGlvbnMud2l0aENvdW50ID09PSBcImNvbW1lbnRzXCIgPyAxIDogMFxuICB9XG59XG5cbi8qKiBAcmV0dXJucyB7UHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBudW1iZXI+Pn0gLSBTY2VuYXJpbyByZXN1bHQuICovXG5hc3luYyBmdW5jdGlvbiBkZWJvdW5jZVVubW91bnRTY2VuYXJpbygpIHtcbiAgY29uc3Qge01vZGVsQ2xhc3MsIHN1YnNjcmlwdGlvbnM6IGNsYXNzU3Vic2NyaXB0aW9uc30gPSBidWlsZEZha2VNb2RlbENsYXNzKClcbiAgY29uc3QgaW5zdGFuY2VTdWJzY3JpcHRpb25zID0gYnVpbGRGYWtlU3Vic2NyaXB0aW9ucygpXG4gIGNvbnN0IG1vZGVsID0gYnVpbGRGYWtlTW9kZWwoXCJ0YXNrLTFcIiwgaW5zdGFuY2VTdWJzY3JpcHRpb25zKVxuICAvKiogQHR5cGUge0FycmF5PEZyb250ZW5kTW9kZWxIb29rVGVzdENyZWF0ZVVwZGF0ZVBheWxvYWQgfCBGcm9udGVuZE1vZGVsSG9va1Rlc3REZXN0cm95UGF5bG9hZD59ICovXG4gIGNvbnN0IHJlY2VpdmVkRXZlbnRzID0gW11cblxuICAvKiogQHJldHVybnMge1JlYWN0LlJlYWN0RWxlbWVudH0gLSBUZXN0IGVsZW1lbnQuICovXG4gIGZ1bmN0aW9uIFRlc3RDb21wb25lbnQoKSB7XG4gICAgdXNlTW9kZWxDbGFzc0V2ZW50KE1vZGVsQ2xhc3MsIFwidXBkYXRlXCIsIChwYXlsb2FkKSA9PiByZWNlaXZlZEV2ZW50cy5wdXNoKHBheWxvYWQpLCB7ZGVib3VuY2U6IDIwfSlcbiAgICB1c2VVcGRhdGVkRXZlbnQobW9kZWwsIChwYXlsb2FkKSA9PiByZWNlaXZlZEV2ZW50cy5wdXNoKHBheWxvYWQpLCB7ZGVib3VuY2U6IDIwfSlcbiAgICB1c2VEZXN0cm95ZWRFdmVudChtb2RlbCwgKHBheWxvYWQpID0+IHJlY2VpdmVkRXZlbnRzLnB1c2gocGF5bG9hZCksIHtkZWJvdW5jZTogMjB9KVxuXG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIilcbiAgfVxuXG4gIGNvbnN0IGNvbnRyb2xzID0gYXdhaXQgcmVuZGVyRWxlbWVudChSZWFjdC5jcmVhdGVFbGVtZW50KFRlc3RDb21wb25lbnQpKVxuICBhd2FpdCB3YWl0Rm9yKCgpID0+IGNsYXNzU3Vic2NyaXB0aW9ucy51cGRhdGUuc2l6ZSA9PT0gMSAmJiBpbnN0YW5jZVN1YnNjcmlwdGlvbnMudXBkYXRlLnNpemUgPT09IDEgJiYgaW5zdGFuY2VTdWJzY3JpcHRpb25zLmRlc3Ryb3kuc2l6ZSA9PT0gMSlcblxuICBlbWl0RXZlbnQoY2xhc3NTdWJzY3JpcHRpb25zLCBcInVwZGF0ZVwiLCB7aWQ6IFwidGFzay0xXCIsIG1vZGVsfSlcbiAgZW1pdEV2ZW50KGluc3RhbmNlU3Vic2NyaXB0aW9ucywgXCJ1cGRhdGVcIiwge2lkOiBcInRhc2stMVwiLCBtb2RlbH0pXG4gIGVtaXRFdmVudChpbnN0YW5jZVN1YnNjcmlwdGlvbnMsIFwiZGVzdHJveVwiLCB7aWQ6IFwidGFzay0xXCJ9KVxuXG4gIGF3YWl0IGNvbnRyb2xzLnVubW91bnQoKVxuICBhd2FpdCB3YWl0KDMwKVxuXG4gIHJldHVybiB7cmVjZWl2ZWRFdmVudHNBZnRlckRlYm91bmNlV2luZG93OiByZWNlaXZlZEV2ZW50cy5sZW5ndGh9XG59XG5cbi8qKiBAcmV0dXJucyB7UHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBudW1iZXI+Pn0gLSBTY2VuYXJpbyByZXN1bHQuICovXG5hc3luYyBmdW5jdGlvbiByZXN1YnNjcmliZUluc3RhbmNlU2NlbmFyaW8oKSB7XG4gIGNvbnN0IGZpcnN0U3Vic2NyaXB0aW9ucyA9IGJ1aWxkRmFrZVN1YnNjcmlwdGlvbnMoKVxuICBjb25zdCBzZWNvbmRTdWJzY3JpcHRpb25zID0gYnVpbGRGYWtlU3Vic2NyaXB0aW9ucygpXG4gIGNvbnN0IGZpcnN0TW9kZWwgPSBidWlsZEZha2VNb2RlbChcInRhc2stMVwiLCBmaXJzdFN1YnNjcmlwdGlvbnMpXG4gIGNvbnN0IHNlY29uZE1vZGVsID0gYnVpbGRGYWtlTW9kZWwoXCJ0YXNrLTFcIiwgc2Vjb25kU3Vic2NyaXB0aW9ucylcbiAgLyoqIEB0eXBlIHtBcnJheTxGcm9udGVuZE1vZGVsSG9va1Rlc3RDcmVhdGVVcGRhdGVQYXlsb2FkIHwgRnJvbnRlbmRNb2RlbEhvb2tUZXN0RGVzdHJveVBheWxvYWQ+fSAqL1xuICBjb25zdCByZWNlaXZlZEV2ZW50cyA9IFtdXG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7e21vZGVsOiBpbXBvcnQoXCIuLi9mcm9udGVuZC1tb2RlbHMvYmFzZS5qc1wiKS5kZWZhdWx0fX0gcHJvcHMgLSBDb21wb25lbnQgcHJvcHMuXG4gICAqIEByZXR1cm5zIHtSZWFjdC5SZWFjdEVsZW1lbnR9IC0gVGVzdCBlbGVtZW50LlxuICAgKi9cbiAgZnVuY3Rpb24gVGVzdENvbXBvbmVudCh7bW9kZWx9KSB7XG4gICAgdXNlVXBkYXRlZEV2ZW50KG1vZGVsLCAocGF5bG9hZCkgPT4gcmVjZWl2ZWRFdmVudHMucHVzaChwYXlsb2FkKSlcbiAgICB1c2VEZXN0cm95ZWRFdmVudChtb2RlbCwgKHBheWxvYWQpID0+IHJlY2VpdmVkRXZlbnRzLnB1c2gocGF5bG9hZCkpXG5cbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiKVxuICB9XG5cbiAgY29uc3QgY29udHJvbHMgPSBhd2FpdCByZW5kZXJFbGVtZW50KFJlYWN0LmNyZWF0ZUVsZW1lbnQoVGVzdENvbXBvbmVudCwge21vZGVsOiBmaXJzdE1vZGVsfSkpXG4gIGF3YWl0IHdhaXRGb3IoKCkgPT4gZmlyc3RTdWJzY3JpcHRpb25zLnVwZGF0ZS5zaXplID09PSAxICYmIGZpcnN0U3Vic2NyaXB0aW9ucy5kZXN0cm95LnNpemUgPT09IDEpXG5cbiAgY29uc3QgZmlyc3RNb3VudGVkRGVzdHJveVN1YnNjcmlwdGlvbnMgPSBmaXJzdFN1YnNjcmlwdGlvbnMuZGVzdHJveS5zaXplXG4gIGNvbnN0IGZpcnN0TW91bnRlZFVwZGF0ZVN1YnNjcmlwdGlvbnMgPSBmaXJzdFN1YnNjcmlwdGlvbnMudXBkYXRlLnNpemVcblxuICBhd2FpdCBjb250cm9scy5yZXJlbmRlcihSZWFjdC5jcmVhdGVFbGVtZW50KFRlc3RDb21wb25lbnQsIHttb2RlbDogc2Vjb25kTW9kZWx9KSlcbiAgYXdhaXQgd2FpdEZvcigoKSA9PiBmaXJzdFN1YnNjcmlwdGlvbnMudXBkYXRlLnNpemUgPT09IDAgJiYgZmlyc3RTdWJzY3JpcHRpb25zLmRlc3Ryb3kuc2l6ZSA9PT0gMCAmJiBzZWNvbmRTdWJzY3JpcHRpb25zLnVwZGF0ZS5zaXplID09PSAxICYmIHNlY29uZFN1YnNjcmlwdGlvbnMuZGVzdHJveS5zaXplID09PSAxKVxuXG4gIGNvbnN0IGZpcnN0QWZ0ZXJSZXJlbmRlckRlc3Ryb3lTdWJzY3JpcHRpb25zID0gZmlyc3RTdWJzY3JpcHRpb25zLmRlc3Ryb3kuc2l6ZVxuICBjb25zdCBmaXJzdEFmdGVyUmVyZW5kZXJVcGRhdGVTdWJzY3JpcHRpb25zID0gZmlyc3RTdWJzY3JpcHRpb25zLnVwZGF0ZS5zaXplXG4gIGNvbnN0IHNlY29uZEFmdGVyUmVyZW5kZXJEZXN0cm95U3Vic2NyaXB0aW9ucyA9IHNlY29uZFN1YnNjcmlwdGlvbnMuZGVzdHJveS5zaXplXG4gIGNvbnN0IHNlY29uZEFmdGVyUmVyZW5kZXJVcGRhdGVTdWJzY3JpcHRpb25zID0gc2Vjb25kU3Vic2NyaXB0aW9ucy51cGRhdGUuc2l6ZVxuXG4gIGVtaXRFdmVudChmaXJzdFN1YnNjcmlwdGlvbnMsIFwidXBkYXRlXCIsIHtpZDogXCJ0YXNrLTFcIiwgbW9kZWw6IGZpcnN0TW9kZWx9KVxuICBlbWl0RXZlbnQoc2Vjb25kU3Vic2NyaXB0aW9ucywgXCJ1cGRhdGVcIiwge2lkOiBcInRhc2stMVwiLCBtb2RlbDogc2Vjb25kTW9kZWx9KVxuICBlbWl0RXZlbnQoc2Vjb25kU3Vic2NyaXB0aW9ucywgXCJkZXN0cm95XCIsIHtpZDogXCJ0YXNrLTFcIn0pXG5cbiAgY29uc3QgcmVjZWl2ZWRFdmVudHNBZnRlckVtaXQgPSByZWNlaXZlZEV2ZW50cy5sZW5ndGhcblxuICBhd2FpdCBjb250cm9scy51bm1vdW50KClcblxuICByZXR1cm4ge1xuICAgIGZpcnN0QWZ0ZXJSZXJlbmRlckRlc3Ryb3lTdWJzY3JpcHRpb25zLFxuICAgIGZpcnN0QWZ0ZXJSZXJlbmRlclVwZGF0ZVN1YnNjcmlwdGlvbnMsXG4gICAgZmlyc3RNb3VudGVkRGVzdHJveVN1YnNjcmlwdGlvbnMsXG4gICAgZmlyc3RNb3VudGVkVXBkYXRlU3Vic2NyaXB0aW9ucyxcbiAgICByZWNlaXZlZEV2ZW50c0FmdGVyRW1pdCxcbiAgICBzZWNvbmRBZnRlclJlcmVuZGVyRGVzdHJveVN1YnNjcmlwdGlvbnMsXG4gICAgc2Vjb25kQWZ0ZXJSZXJlbmRlclVwZGF0ZVN1YnNjcmlwdGlvbnNcbiAgfVxufVxuXG5jb25zdCBzY2VuYXJpb3MgPSB7XG4gIGNsYXNzTGlmZWN5Y2xlOiBjbGFzc0xpZmVjeWNsZVNjZW5hcmlvLFxuICBkZWJvdW5jZVVubW91bnQ6IGRlYm91bmNlVW5tb3VudFNjZW5hcmlvLFxuICBpbnN0YW5jZUxpZmVjeWNsZTogaW5zdGFuY2VMaWZlY3ljbGVTY2VuYXJpbyxcbiAgcHJvamVjdGlvbk9wdGlvbnM6IHByb2plY3Rpb25PcHRpb25zU2NlbmFyaW8sXG4gIHJlc3Vic2NyaWJlSW5zdGFuY2U6IHJlc3Vic2NyaWJlSW5zdGFuY2VTY2VuYXJpb1xufVxuXG4vKipcbiAqIEBwYXJhbSB7a2V5b2YgdHlwZW9mIHNjZW5hcmlvc30gc2NlbmFyaW9OYW1lIC0gU2NlbmFyaW8gbmFtZS5cbiAqIEByZXR1cm5zIHtQcm9taXNlPFJlY29yZDxzdHJpbmcsIG51bWJlcj4+fSAtIFNjZW5hcmlvIHJlc3VsdC5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgYXN5bmMgZnVuY3Rpb24gcnVuRnJvbnRlbmRNb2RlbEV2ZW50SG9va1NjZW5hcmlvKHNjZW5hcmlvTmFtZSkge1xuICBjb25zdCBzY2VuYXJpbyA9IHNjZW5hcmlvc1tzY2VuYXJpb05hbWVdXG5cbiAgaWYgKCFzY2VuYXJpbykgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIGZyb250ZW5kIG1vZGVsIGV2ZW50IGhvb2sgc2NlbmFyaW86ICR7c2NlbmFyaW9OYW1lfWApXG5cbiAgcmV0dXJuIGF3YWl0IHNjZW5hcmlvKClcbn1cbiJdfQ==
444
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJvd3Nlci1mcm9udGVuZC1tb2RlbC1ldmVudC1ob29rLXNjZW5hcmlvcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90ZXN0aW5nL2Jyb3dzZXItZnJvbnRlbmQtbW9kZWwtZXZlbnQtaG9vay1zY2VuYXJpb3MuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaLE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQTtBQUN6QixPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sa0JBQWtCLENBQUE7QUFFM0MsT0FBTyxpQkFBaUIsTUFBTSwyQ0FBMkMsQ0FBQTtBQUN6RSxPQUFPLGVBQWUsTUFBTSx5Q0FBeUMsQ0FBQTtBQUNyRSxPQUFPLGlCQUFpQixNQUFNLDRCQUE0QixDQUFBO0FBQzFELE9BQU8sa0JBQWtCLE1BQU0sNkNBQTZDLENBQUE7QUFDNUUsT0FBTyxlQUFlLE1BQU0seUNBQXlDLENBQUE7QUFDckUsT0FBTyxJQUFJLE1BQU0sd0JBQXdCLENBQUE7QUFFekM7OzRHQUU0RztBQUM1Rzs7K0ZBRStGO0FBQy9GOztnRUFFZ0U7QUFDaEU7Ozs7Ozs7R0FPRztBQUVIOzs7R0FHRztBQUNILEtBQUssVUFBVSxZQUFZO0lBQ3pCLE1BQU0sT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFBO0lBQ3ZCLE1BQU0sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQTtBQUN4RCxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILEtBQUssVUFBVSxPQUFPLENBQUMsUUFBUTtJQUM3QixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUE7SUFFNUIsT0FBTyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUM7UUFDbkIsSUFBSSxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsU0FBUyxHQUFHLElBQUk7WUFBRSxPQUFNO1FBRXpDLE1B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VSxpQ0FBaUMsQ0FBQyxZQUFZO0lBQzFFLE1BQU0sUUFBUSxHQUFHLFNBQVMsQ0FBQyxZQUFZLENBQUMsQ0FBQTtJQUV4QyxJQUFJLENBQUMsUUFBUTtRQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsK0NBQStDLFlBQVksRUFBRSxDQUFDLENBQUE7SUFFN0YsT0FBTyxNQUFNLFFBQVEsRUFBRSxDQUFBO0FBQ3pCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiXG5pbXBvcnQge2NyZWF0ZVJvb3R9IGZyb20gXCJyZWFjdC1kb20vY2xpZW50XCJcblxuaW1wb3J0IHVzZURlc3Ryb3llZEV2ZW50IGZyb20gXCIuLi9mcm9udGVuZC1tb2RlbHMvdXNlLWRlc3Ryb3llZC1ldmVudC5qc1wiXG5pbXBvcnQgdXNlQ3JlYXRlZEV2ZW50IGZyb20gXCIuLi9mcm9udGVuZC1tb2RlbHMvdXNlLWNyZWF0ZWQtZXZlbnQuanNcIlxuaW1wb3J0IEZyb250ZW5kTW9kZWxCYXNlIGZyb20gXCIuLi9mcm9udGVuZC1tb2RlbHMvYmFzZS5qc1wiXG5pbXBvcnQgdXNlTW9kZWxDbGFzc0V2ZW50IGZyb20gXCIuLi9mcm9udGVuZC1tb2RlbHMvdXNlLW1vZGVsLWNsYXNzLWV2ZW50LmpzXCJcbmltcG9ydCB1c2VVcGRhdGVkRXZlbnQgZnJvbSBcIi4uL2Zyb250ZW5kLW1vZGVscy91c2UtdXBkYXRlZC1ldmVudC5qc1wiXG5pbXBvcnQgd2FpdCBmcm9tIFwiYXdhaXRlcnkvYnVpbGQvd2FpdC5qc1wiXG5cbi8qKlxuICogRnJvbnRlbmRNb2RlbFJlc291cmNlQ29uZmlnIHR5cGUuXG4gIEB0eXBlZGVmIHtpbXBvcnQoXCIuLi9mcm9udGVuZC1tb2RlbHMvYmFzZS5qc1wiKS5Gcm9udGVuZE1vZGVsUmVzb3VyY2VDb25maWd9IEZyb250ZW5kTW9kZWxSZXNvdXJjZUNvbmZpZyAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoaXMgdHlwZWRlZi5cbiAgQHR5cGVkZWYge3tpZDogc3RyaW5nLCBtb2RlbDogRnJvbnRlbmRNb2RlbEJhc2V9fSBGcm9udGVuZE1vZGVsSG9va1Rlc3RDcmVhdGVVcGRhdGVQYXlsb2FkICovXG4vKipcbiAqIERlZmluZXMgdGhpcyB0eXBlZGVmLlxuICBAdHlwZWRlZiB7e2lkOiBzdHJpbmd9fSBGcm9udGVuZE1vZGVsSG9va1Rlc3REZXN0cm95UGF5bG9hZCAqL1xuLyoqXG4gKiBGYWtlU3Vic2NyaXB0aW9ucyB0eXBlLlxuICogQHR5cGVkZWYge29iamVjdH0gRmFrZVN1YnNjcmlwdGlvbnNcbiAqIEBwcm9wZXJ0eSB7U2V0PChwYXlsb2FkOiBGcm9udGVuZE1vZGVsSG9va1Rlc3RDcmVhdGVVcGRhdGVQYXlsb2FkKSA9PiB2b2lkPn0gY3JlYXRlIC0gQ3JlYXRlIGNhbGxiYWNrcy5cbiAqIEBwcm9wZXJ0eSB7U2V0PChwYXlsb2FkOiBGcm9udGVuZE1vZGVsSG9va1Rlc3REZXN0cm95UGF5bG9hZCkgPT4gdm9pZD59IGRlc3Ryb3kgLSBEZXN0cm95IGNhbGxiYWNrcy5cbiAqIEBwcm9wZXJ0eSB7e2NyZWF0ZTogaW1wb3J0KFwiLi4vZnJvbnRlbmQtbW9kZWxzL3F1ZXJ5LmpzXCIpLkZyb250ZW5kTW9kZWxFdmVudE9wdGlvbnNPYmplY3RbXSwgZGVzdHJveTogaW1wb3J0KFwiLi4vZnJvbnRlbmQtbW9kZWxzL3F1ZXJ5LmpzXCIpLkZyb250ZW5kTW9kZWxFdmVudE9wdGlvbnNPYmplY3RbXSwgdXBkYXRlOiBpbXBvcnQoXCIuLi9mcm9udGVuZC1tb2RlbHMvcXVlcnkuanNcIikuRnJvbnRlbmRNb2RlbEV2ZW50T3B0aW9uc09iamVjdFtdfX0gb3B0aW9ucyAtIFN1YnNjcmlwdGlvbiBvcHRpb25zLlxuICogQHByb3BlcnR5IHtTZXQ8KHBheWxvYWQ6IEZyb250ZW5kTW9kZWxIb29rVGVzdENyZWF0ZVVwZGF0ZVBheWxvYWQpID0+IHZvaWQ+fSB1cGRhdGUgLSBVcGRhdGUgY2FsbGJhY2tzLlxuICovXG5cbi8qKlxuICogUnVucyBmbHVzaCBlZmZlY3RzLlxuICogQHJldHVybnMge1Byb21pc2U8dm9pZD59IC0gUmVzb2x2ZXMgYWZ0ZXIgUmVhY3QgZWZmZWN0cyBoYXZlIHJ1bi5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZmx1c2hFZmZlY3RzKCkge1xuICBhd2FpdCBQcm9taXNlLnJlc29sdmUoKVxuICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gc2V0VGltZW91dChyZXNvbHZlLCAwKSlcbn1cblxuLyoqXG4gKiBSdW5zIHdhaXQgZm9yLlxuICogQHBhcmFtIHsoKSA9PiBib29sZWFufSBjYWxsYmFjayAtIFByZWRpY2F0ZSB0byB3YWl0IGZvci5cbiAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fSAtIFJlc29sdmVzIHdoZW4gdGhlIHByZWRpY2F0ZSByZXR1cm5zIHRydWUuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHdhaXRGb3IoY2FsbGJhY2spIHtcbiAgY29uc3Qgc3RhcnRlZEF0ID0gRGF0ZS5ub3coKVxuXG4gIHdoaWxlICghY2FsbGJhY2soKSkge1xuICAgIGlmIChEYXRlLm5vdygpIC0gc3RhcnRlZEF0ID4gMTAwMCkgcmV0dXJuXG5cbiAgICBhd2FpdCB3YWl0KDEwKVxuICB9XG59XG5cbi8qKlxuICogUnVucyBidWlsZCBmYWtlIHN1YnNjcmlwdGlvbnMuXG4gKiBAcmV0dXJucyB7RmFrZVN1YnNjcmlwdGlvbnN9IC0gRW1wdHkgZmFrZSBzdWJzY3JpcHRpb24gc3RvcmUuXG4gKi9cbmZ1bmN0aW9uIGJ1aWxkRmFrZVN1YnNjcmlwdGlvbnMoKSB7XG4gIHJldHVybiB7XG4gICAgY3JlYXRlOiBuZXcgU2V0KCksXG4gICAgZGVzdHJveTogbmV3IFNldCgpLFxuICAgIG9wdGlvbnM6IHtjcmVhdGU6IFtdLCBkZXN0cm95OiBbXSwgdXBkYXRlOiBbXX0sXG4gICAgdXBkYXRlOiBuZXcgU2V0KClcbiAgfVxufVxuXG4vKipcbiAqIFJ1bnMgZmFrZSByZXNvdXJjZSBjb25maWcuXG4gKiBAcGFyYW0ge3N0cmluZ30gbW9kZWxOYW1lIC0gRmFrZSBmcm9udGVuZCBtb2RlbCBuYW1lLlxuICogQHJldHVybnMge0Zyb250ZW5kTW9kZWxSZXNvdXJjZUNvbmZpZ30gLSBNaW5pbWFsIHJlc291cmNlIGNvbmZpZyBmb3IgZmFrZSBzdWJjbGFzc2VzLlxuICovXG5mdW5jdGlvbiBmYWtlUmVzb3VyY2VDb25maWcobW9kZWxOYW1lKSB7XG4gIHJldHVybiB7XG4gICAgYXR0cmlidXRlczogW1wiaWRcIl0sXG4gICAgbW9kZWxOYW1lLFxuICAgIHByaW1hcnlLZXk6IFwiaWRcIlxuICB9XG59XG5cbi8qKlxuICogUnVucyByZW5kZXIgZWxlbWVudC5cbiAqIEBwYXJhbSB7UmVhY3QuUmVhY3RFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byByZW5kZXIuXG4gKiBAcmV0dXJucyB7UHJvbWlzZTx7cmVyZW5kZXI6IChuZXh0RWxlbWVudDogUmVhY3QuUmVhY3RFbGVtZW50KSA9PiBQcm9taXNlPHZvaWQ+LCB1bm1vdW50OiAoKSA9PiBQcm9taXNlPHZvaWQ+fT59IC0gUmVuZGVyIGNvbnRyb2xzLlxuICovXG5hc3luYyBmdW5jdGlvbiByZW5kZXJFbGVtZW50KGVsZW1lbnQpIHtcbiAgY29uc3QgY29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKVxuICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGNvbnRhaW5lcilcbiAgY29uc3Qgcm9vdCA9IGNyZWF0ZVJvb3QoY29udGFpbmVyKVxuXG4gIHJvb3QucmVuZGVyKGVsZW1lbnQpXG4gIGF3YWl0IGZsdXNoRWZmZWN0cygpXG5cbiAgcmV0dXJuIHtcbiAgICByZXJlbmRlcjogYXN5bmMgKG5leHRFbGVtZW50KSA9PiB7XG4gICAgICByb290LnJlbmRlcihuZXh0RWxlbWVudClcbiAgICAgIGF3YWl0IGZsdXNoRWZmZWN0cygpXG4gICAgfSxcbiAgICB1bm1vdW50OiBhc3luYyAoKSA9PiB7XG4gICAgICByb290LnVubW91bnQoKVxuICAgICAgY29udGFpbmVyLnJlbW92ZSgpXG4gICAgICBhd2FpdCBmbHVzaEVmZmVjdHMoKVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFJ1bnMgYnVpbGQgZmFrZSBtb2RlbCBjbGFzcy5cbiAqIEByZXR1cm5zIHt7TW9kZWxDbGFzczogdHlwZW9mIEZyb250ZW5kTW9kZWxCYXNlLCBzdWJzY3JpcHRpb25zOiBGYWtlU3Vic2NyaXB0aW9uc319IC0gRmFrZSBtb2RlbCBjbGFzcyBzZXR1cC5cbiAqL1xuZnVuY3Rpb24gYnVpbGRGYWtlTW9kZWxDbGFzcygpIHtcbiAgY29uc3Qgc3Vic2NyaXB0aW9ucyA9IGJ1aWxkRmFrZVN1YnNjcmlwdGlvbnMoKVxuXG4gIGNsYXNzIEZha2VNb2RlbENsYXNzIGV4dGVuZHMgRnJvbnRlbmRNb2RlbEJhc2Uge1xuICAgIC8qKlxuICAgICAqIFJ1bnMgcmVzb3VyY2UgY29uZmlnLlxuICAgICAqIEByZXR1cm5zIHtGcm9udGVuZE1vZGVsUmVzb3VyY2VDb25maWd9IC0gRmFrZSByZXNvdXJjZSBjb25maWcuXG4gICAgICovXG4gICAgc3RhdGljIHJlc291cmNlQ29uZmlnKCkge1xuICAgICAgcmV0dXJuIGZha2VSZXNvdXJjZUNvbmZpZyhcIkhvb2tGYWtlQ2xhc3NNb2RlbFwiKVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJ1bnMgb24gY3JlYXRlLlxuICAgICAqIEBwYXJhbSB7KHBheWxvYWQ6IEZyb250ZW5kTW9kZWxIb29rVGVzdENyZWF0ZVVwZGF0ZVBheWxvYWQpID0+IHZvaWR9IGNhbGxiYWNrIC0gRXZlbnQgY2FsbGJhY2suXG4gICAgICogQHBhcmFtIHtpbXBvcnQoXCIuLi9mcm9udGVuZC1tb2RlbHMvcXVlcnkuanNcIikuRnJvbnRlbmRNb2RlbEV2ZW50T3B0aW9uc09iamVjdH0gW29wdGlvbnNdIC0gRXZlbnQgcXVlcnkgb3IgcHJvamVjdGlvbiBvcHRpb25zLlxuICAgICAqIEByZXR1cm5zIHtQcm9taXNlPCgpID0+IHZvaWQ+fSAtIFVuc3Vic2NyaWJlIGNhbGxiYWNrLlxuICAgICAqL1xuICAgIHN0YXRpYyBhc3luYyBvbkNyZWF0ZShjYWxsYmFjaywgb3B0aW9ucyA9IHt9KSB7XG4gICAgICBzdWJzY3JpcHRpb25zLmNyZWF0ZS5hZGQoY2FsbGJhY2spXG4gICAgICBzdWJzY3JpcHRpb25zLm9wdGlvbnMuY3JlYXRlLnB1c2gob3B0aW9ucylcblxuICAgICAgcmV0dXJuICgpID0+IHN1YnNjcmlwdGlvbnMuY3JlYXRlLmRlbGV0ZShjYWxsYmFjaylcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSdW5zIG9uIGRlc3Ryb3kuXG4gICAgICogQHBhcmFtIHsocGF5bG9hZDogRnJvbnRlbmRNb2RlbEhvb2tUZXN0RGVzdHJveVBheWxvYWQpID0+IHZvaWR9IGNhbGxiYWNrIC0gRXZlbnQgY2FsbGJhY2suXG4gICAgICogQHBhcmFtIHtpbXBvcnQoXCIuLi9mcm9udGVuZC1tb2RlbHMvcXVlcnkuanNcIikuRnJvbnRlbmRNb2RlbEV2ZW50T3B0aW9uc09iamVjdH0gW29wdGlvbnNdIC0gRXZlbnQgcXVlcnkgb3IgcHJvamVjdGlvbiBvcHRpb25zLlxuICAgICAqIEByZXR1cm5zIHtQcm9taXNlPCgpID0+IHZvaWQ+fSAtIFVuc3Vic2NyaWJlIGNhbGxiYWNrLlxuICAgICAqL1xuICAgIHN0YXRpYyBhc3luYyBvbkRlc3Ryb3koY2FsbGJhY2ssIG9wdGlvbnMgPSB7fSkge1xuICAgICAgc3Vic2NyaXB0aW9ucy5kZXN0cm95LmFkZChjYWxsYmFjaylcbiAgICAgIHN1YnNjcmlwdGlvbnMub3B0aW9ucy5kZXN0cm95LnB1c2gob3B0aW9ucylcblxuICAgICAgcmV0dXJuICgpID0+IHN1YnNjcmlwdGlvbnMuZGVzdHJveS5kZWxldGUoY2FsbGJhY2spXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUnVucyBvbiB1cGRhdGUuXG4gICAgICogQHBhcmFtIHsocGF5bG9hZDogRnJvbnRlbmRNb2RlbEhvb2tUZXN0Q3JlYXRlVXBkYXRlUGF5bG9hZCkgPT4gdm9pZH0gY2FsbGJhY2sgLSBFdmVudCBjYWxsYmFjay5cbiAgICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uL2Zyb250ZW5kLW1vZGVscy9xdWVyeS5qc1wiKS5Gcm9udGVuZE1vZGVsRXZlbnRPcHRpb25zT2JqZWN0fSBbb3B0aW9uc10gLSBFdmVudCBxdWVyeSBvciBwcm9qZWN0aW9uIG9wdGlvbnMuXG4gICAgICogQHJldHVybnMge1Byb21pc2U8KCkgPT4gdm9pZD59IC0gVW5zdWJzY3JpYmUgY2FsbGJhY2suXG4gICAgICovXG4gICAgc3RhdGljIGFzeW5jIG9uVXBkYXRlKGNhbGxiYWNrLCBvcHRpb25zID0ge30pIHtcbiAgICAgIHN1YnNjcmlwdGlvbnMudXBkYXRlLmFkZChjYWxsYmFjaylcbiAgICAgIHN1YnNjcmlwdGlvbnMub3B0aW9ucy51cGRhdGUucHVzaChvcHRpb25zKVxuXG4gICAgICByZXR1cm4gKCkgPT4gc3Vic2NyaXB0aW9ucy51cGRhdGUuZGVsZXRlKGNhbGxiYWNrKVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7TW9kZWxDbGFzczogRmFrZU1vZGVsQ2xhc3MsIHN1YnNjcmlwdGlvbnN9XG59XG5cbi8qKlxuICogUnVucyBlbWl0IGV2ZW50LlxuICogQHBhcmFtIHtGYWtlU3Vic2NyaXB0aW9uc30gc3Vic2NyaXB0aW9ucyAtIENhbGxiYWNrIHNldHMuXG4gKiBAcGFyYW0ge1wiY3JlYXRlXCIgfCBcImRlc3Ryb3lcIiB8IFwidXBkYXRlXCJ9IGV2ZW50TmFtZSAtIEV2ZW50IG5hbWUuXG4gKiBAcGFyYW0ge0Zyb250ZW5kTW9kZWxIb29rVGVzdENyZWF0ZVVwZGF0ZVBheWxvYWQgfCBGcm9udGVuZE1vZGVsSG9va1Rlc3REZXN0cm95UGF5bG9hZH0gcGF5bG9hZCAtIEV2ZW50IHBheWxvYWQuXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gZW1pdEV2ZW50KHN1YnNjcmlwdGlvbnMsIGV2ZW50TmFtZSwgcGF5bG9hZCkge1xuICBpZiAoZXZlbnROYW1lID09PSBcImRlc3Ryb3lcIikge1xuICAgIGZvciAoY29uc3QgY2FsbGJhY2sgb2Ygc3Vic2NyaXB0aW9ucy5kZXN0cm95KSB7XG4gICAgICBjYWxsYmFjayh7aWQ6IHBheWxvYWQuaWR9KVxuICAgIH1cblxuICAgIHJldHVyblxuICB9XG5cbiAgaWYgKCEoXCJtb2RlbFwiIGluIHBheWxvYWQpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBtb2RlbCBwYXlsb2FkIGZvciAke2V2ZW50TmFtZX1gKVxuICB9XG5cbiAgZm9yIChjb25zdCBjYWxsYmFjayBvZiBzdWJzY3JpcHRpb25zW2V2ZW50TmFtZV0pIHtcbiAgICBjYWxsYmFjayhwYXlsb2FkKVxuICB9XG59XG5cbi8qKlxuICogUnVucyBidWlsZCBmYWtlIG1vZGVsLlxuICogQHBhcmFtIHtzdHJpbmd9IGlkIC0gTW9kZWwgaWQuXG4gKiBAcGFyYW0ge0Zha2VTdWJzY3JpcHRpb25zfSBzdWJzY3JpcHRpb25zIC0gQ2FsbGJhY2sgc2V0cy5cbiAqIEByZXR1cm5zIHtGcm9udGVuZE1vZGVsQmFzZX0gLSBGYWtlIG1vZGVsIGluc3RhbmNlLlxuICovXG5mdW5jdGlvbiBidWlsZEZha2VNb2RlbChpZCwgc3Vic2NyaXB0aW9ucykge1xuICBjbGFzcyBGYWtlTW9kZWwgZXh0ZW5kcyBGcm9udGVuZE1vZGVsQmFzZSB7XG4gICAgLyoqXG4gICAgICogUnVucyByZXNvdXJjZSBjb25maWcuXG4gICAgICogQHJldHVybnMge0Zyb250ZW5kTW9kZWxSZXNvdXJjZUNvbmZpZ30gLSBGYWtlIHJlc291cmNlIGNvbmZpZy5cbiAgICAgKi9cbiAgICBzdGF0aWMgcmVzb3VyY2VDb25maWcoKSB7XG4gICAgICByZXR1cm4gZmFrZVJlc291cmNlQ29uZmlnKFwiSG9va0Zha2VJbnN0YW5jZU1vZGVsXCIpXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUnVucyBvbiBkZXN0cm95LlxuICAgICAqIEBwYXJhbSB7KHBheWxvYWQ6IEZyb250ZW5kTW9kZWxIb29rVGVzdERlc3Ryb3lQYXlsb2FkKSA9PiB2b2lkfSBjYWxsYmFjayAtIEV2ZW50IGNhbGxiYWNrLlxuICAgICAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vZnJvbnRlbmQtbW9kZWxzL3F1ZXJ5LmpzXCIpLkZyb250ZW5kTW9kZWxFdmVudE9wdGlvbnNPYmplY3R9IFtvcHRpb25zXSAtIEV2ZW50IHF1ZXJ5IG9yIHByb2plY3Rpb24gb3B0aW9ucy5cbiAgICAgKiBAcmV0dXJucyB7UHJvbWlzZTwoKSA9PiB2b2lkPn0gLSBVbnN1YnNjcmliZSBjYWxsYmFjay5cbiAgICAgKi9cbiAgICBhc3luYyBvbkRlc3Ryb3koY2FsbGJhY2ssIG9wdGlvbnMgPSB7fSkge1xuICAgICAgc3Vic2NyaXB0aW9ucy5kZXN0cm95LmFkZChjYWxsYmFjaylcbiAgICAgIHN1YnNjcmlwdGlvbnMub3B0aW9ucy5kZXN0cm95LnB1c2gob3B0aW9ucylcblxuICAgICAgcmV0dXJuICgpID0+IHN1YnNjcmlwdGlvbnMuZGVzdHJveS5kZWxldGUoY2FsbGJhY2spXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUnVucyBvbiB1cGRhdGUuXG4gICAgICogQHBhcmFtIHsocGF5bG9hZDogRnJvbnRlbmRNb2RlbEhvb2tUZXN0Q3JlYXRlVXBkYXRlUGF5bG9hZCkgPT4gdm9pZH0gY2FsbGJhY2sgLSBFdmVudCBjYWxsYmFjay5cbiAgICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uL2Zyb250ZW5kLW1vZGVscy9xdWVyeS5qc1wiKS5Gcm9udGVuZE1vZGVsRXZlbnRPcHRpb25zT2JqZWN0fSBbb3B0aW9uc10gLSBFdmVudCBxdWVyeSBvciBwcm9qZWN0aW9uIG9wdGlvbnMuXG4gICAgICogQHJldHVybnMge1Byb21pc2U8KCkgPT4gdm9pZD59IC0gVW5zdWJzY3JpYmUgY2FsbGJhY2suXG4gICAgICovXG4gICAgYXN5bmMgb25VcGRhdGUoY2FsbGJhY2ssIG9wdGlvbnMgPSB7fSkge1xuICAgICAgc3Vic2NyaXB0aW9ucy51cGRhdGUuYWRkKGNhbGxiYWNrKVxuICAgICAgc3Vic2NyaXB0aW9ucy5vcHRpb25zLnVwZGF0ZS5wdXNoKG9wdGlvbnMpXG5cbiAgICAgIHJldHVybiAoKSA9PiBzdWJzY3JpcHRpb25zLnVwZGF0ZS5kZWxldGUoY2FsbGJhY2spXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUnVucyBwcmltYXJ5IGtleSB2YWx1ZS5cbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSAtIFByaW1hcnkga2V5IHZhbHVlLlxuICAgICAqL1xuICAgIHByaW1hcnlLZXlWYWx1ZSgpIHtcbiAgICAgIHJldHVybiBpZFxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZXcgRmFrZU1vZGVsKHtpZH0pXG59XG5cbi8qKlxuICogUnVucyBjbGFzcyBsaWZlY3ljbGUgc2NlbmFyaW8uXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBudW1iZXI+Pn0gLSBTY2VuYXJpbyByZXN1bHQuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGNsYXNzTGlmZWN5Y2xlU2NlbmFyaW8oKSB7XG4gIGNvbnN0IHtNb2RlbENsYXNzLCBzdWJzY3JpcHRpb25zfSA9IGJ1aWxkRmFrZU1vZGVsQ2xhc3MoKVxuICBjb25zdCBldmVudE1vZGVsID0gYnVpbGRGYWtlTW9kZWwoXCIxXCIsIGJ1aWxkRmFrZVN1YnNjcmlwdGlvbnMoKSlcbiAgLyoqXG4gICAqIFJlY2VpdmVkIGV2ZW50cy5cbiAgICBAdHlwZSB7QXJyYXk8RnJvbnRlbmRNb2RlbEhvb2tUZXN0Q3JlYXRlVXBkYXRlUGF5bG9hZCB8IEZyb250ZW5kTW9kZWxIb29rVGVzdERlc3Ryb3lQYXlsb2FkPn0gKi9cbiAgY29uc3QgcmVjZWl2ZWRFdmVudHMgPSBbXVxuICBsZXQgY29ubmVjdGVkQ291bnQgPSAwXG5cbiAgLyoqXG4gICAqIFJ1bnMgdGVzdCBjb21wb25lbnQuXG4gICAqIEByZXR1cm5zIHtSZWFjdC5SZWFjdEVsZW1lbnR9IC0gVGVzdCBlbGVtZW50LlxuICAgKi9cbiAgZnVuY3Rpb24gVGVzdENvbXBvbmVudCgpIHtcbiAgICB1c2VNb2RlbENsYXNzRXZlbnQoTW9kZWxDbGFzcywgW1wiY3JlYXRlXCIsIFwidXBkYXRlXCJdLCAocGF5bG9hZCkgPT4gcmVjZWl2ZWRFdmVudHMucHVzaChwYXlsb2FkKSwge1xuICAgICAgb25Db25uZWN0ZWQ6ICgpID0+IHsgY29ubmVjdGVkQ291bnQgKz0gMSB9XG4gICAgfSlcbiAgICB1c2VDcmVhdGVkRXZlbnQoTW9kZWxDbGFzcywgKHBheWxvYWQpID0+IHJlY2VpdmVkRXZlbnRzLnB1c2gocGF5bG9hZCkpXG5cbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiKVxuICB9XG5cbiAgY29uc3QgY29udHJvbHMgPSBhd2FpdCByZW5kZXJFbGVtZW50KFJlYWN0LmNyZWF0ZUVsZW1lbnQoVGVzdENvbXBvbmVudCkpXG4gIGF3YWl0IHdhaXRGb3IoKCkgPT4gc3Vic2NyaXB0aW9ucy5jcmVhdGUuc2l6ZSA9PT0gMiAmJiBzdWJzY3JpcHRpb25zLnVwZGF0ZS5zaXplID09PSAxKVxuXG4gIGNvbnN0IG1vdW50ZWRDcmVhdGVTdWJzY3JpcHRpb25zID0gc3Vic2NyaXB0aW9ucy5jcmVhdGUuc2l6ZVxuICBjb25zdCBtb3VudGVkVXBkYXRlU3Vic2NyaXB0aW9ucyA9IHN1YnNjcmlwdGlvbnMudXBkYXRlLnNpemVcbiAgY29uc3QgbW91bnRlZERlc3Ryb3lTdWJzY3JpcHRpb25zID0gc3Vic2NyaXB0aW9ucy5kZXN0cm95LnNpemVcbiAgY29uc3QgbW91bnRlZENvbm5lY3RlZENvdW50ID0gY29ubmVjdGVkQ291bnRcblxuICBlbWl0RXZlbnQoc3Vic2NyaXB0aW9ucywgXCJjcmVhdGVcIiwge2lkOiBcIjFcIiwgbW9kZWw6IGV2ZW50TW9kZWx9KVxuICBlbWl0RXZlbnQoc3Vic2NyaXB0aW9ucywgXCJ1cGRhdGVcIiwge2lkOiBcIjFcIiwgbW9kZWw6IGV2ZW50TW9kZWx9KVxuICBlbWl0RXZlbnQoc3Vic2NyaXB0aW9ucywgXCJkZXN0cm95XCIsIHtpZDogXCIxXCJ9KVxuXG4gIGNvbnN0IHJlY2VpdmVkRXZlbnRzQWZ0ZXJFbWl0ID0gcmVjZWl2ZWRFdmVudHMubGVuZ3RoXG5cbiAgYXdhaXQgY29udHJvbHMudW5tb3VudCgpXG5cbiAgcmV0dXJuIHtcbiAgICBtb3VudGVkQ29ubmVjdGVkQ291bnQsXG4gICAgbW91bnRlZENyZWF0ZVN1YnNjcmlwdGlvbnMsXG4gICAgbW91bnRlZERlc3Ryb3lTdWJzY3JpcHRpb25zLFxuICAgIG1vdW50ZWRVcGRhdGVTdWJzY3JpcHRpb25zLFxuICAgIHJlY2VpdmVkRXZlbnRzQWZ0ZXJFbWl0LFxuICAgIHVubW91bnRlZENyZWF0ZVN1YnNjcmlwdGlvbnM6IHN1YnNjcmlwdGlvbnMuY3JlYXRlLnNpemUsXG4gICAgdW5tb3VudGVkVXBkYXRlU3Vic2NyaXB0aW9uczogc3Vic2NyaXB0aW9ucy51cGRhdGUuc2l6ZVxuICB9XG59XG5cbi8qKlxuICogUnVucyBpbnN0YW5jZSBsaWZlY3ljbGUgc2NlbmFyaW8uXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBudW1iZXI+Pn0gLSBTY2VuYXJpbyByZXN1bHQuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGluc3RhbmNlTGlmZWN5Y2xlU2NlbmFyaW8oKSB7XG4gIGNvbnN0IHN1YnNjcmlwdGlvbnMgPSBidWlsZEZha2VTdWJzY3JpcHRpb25zKClcbiAgY29uc3QgbW9kZWwgPSBidWlsZEZha2VNb2RlbChcInRhc2stMVwiLCBzdWJzY3JpcHRpb25zKVxuICAvKipcbiAgICogUmVjZWl2ZWQgZXZlbnRzLlxuICAgIEB0eXBlIHtBcnJheTxGcm9udGVuZE1vZGVsSG9va1Rlc3RDcmVhdGVVcGRhdGVQYXlsb2FkIHwgRnJvbnRlbmRNb2RlbEhvb2tUZXN0RGVzdHJveVBheWxvYWQ+fSAqL1xuICBjb25zdCByZWNlaXZlZEV2ZW50cyA9IFtdXG4gIGxldCBjb25uZWN0ZWRDb3VudCA9IDBcblxuICAvKipcbiAgICogUnVucyB0ZXN0IGNvbXBvbmVudC5cbiAgICogQHJldHVybnMge1JlYWN0LlJlYWN0RWxlbWVudH0gLSBUZXN0IGVsZW1lbnQuXG4gICAqL1xuICBmdW5jdGlvbiBUZXN0Q29tcG9uZW50KCkge1xuICAgIHVzZVVwZGF0ZWRFdmVudChtb2RlbCwgKHBheWxvYWQpID0+IHJlY2VpdmVkRXZlbnRzLnB1c2gocGF5bG9hZCksIHtcbiAgICAgIG9uQ29ubmVjdGVkOiAoKSA9PiB7IGNvbm5lY3RlZENvdW50ICs9IDEgfVxuICAgIH0pXG4gICAgdXNlRGVzdHJveWVkRXZlbnQoW21vZGVsXSwgKHBheWxvYWQpID0+IHJlY2VpdmVkRXZlbnRzLnB1c2gocGF5bG9hZCksIHtcbiAgICAgIG9uQ29ubmVjdGVkOiAoKSA9PiB7IGNvbm5lY3RlZENvdW50ICs9IDEgfVxuICAgIH0pXG5cbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiKVxuICB9XG5cbiAgY29uc3QgY29udHJvbHMgPSBhd2FpdCByZW5kZXJFbGVtZW50KFJlYWN0LmNyZWF0ZUVsZW1lbnQoVGVzdENvbXBvbmVudCkpXG4gIGF3YWl0IHdhaXRGb3IoKCkgPT4gc3Vic2NyaXB0aW9ucy51cGRhdGUuc2l6ZSA9PT0gMSAmJiBzdWJzY3JpcHRpb25zLmRlc3Ryb3kuc2l6ZSA9PT0gMSlcblxuICBjb25zdCBtb3VudGVkQ29ubmVjdGVkQ291bnQgPSBjb25uZWN0ZWRDb3VudFxuICBjb25zdCBtb3VudGVkRGVzdHJveVN1YnNjcmlwdGlvbnMgPSBzdWJzY3JpcHRpb25zLmRlc3Ryb3kuc2l6ZVxuICBjb25zdCBtb3VudGVkVXBkYXRlU3Vic2NyaXB0aW9ucyA9IHN1YnNjcmlwdGlvbnMudXBkYXRlLnNpemVcblxuICBlbWl0RXZlbnQoc3Vic2NyaXB0aW9ucywgXCJ1cGRhdGVcIiwge2lkOiBcInRhc2stMVwiLCBtb2RlbH0pXG4gIGVtaXRFdmVudChzdWJzY3JpcHRpb25zLCBcImRlc3Ryb3lcIiwge2lkOiBcInRhc2stMVwifSlcblxuICBjb25zdCByZWNlaXZlZEV2ZW50c0FmdGVyRW1pdCA9IHJlY2VpdmVkRXZlbnRzLmxlbmd0aFxuXG4gIGF3YWl0IGNvbnRyb2xzLnVubW91bnQoKVxuXG4gIHJldHVybiB7XG4gICAgbW91bnRlZENvbm5lY3RlZENvdW50LFxuICAgIG1vdW50ZWREZXN0cm95U3Vic2NyaXB0aW9ucyxcbiAgICBtb3VudGVkVXBkYXRlU3Vic2NyaXB0aW9ucyxcbiAgICByZWNlaXZlZEV2ZW50c0FmdGVyRW1pdCxcbiAgICB1bm1vdW50ZWREZXN0cm95U3Vic2NyaXB0aW9uczogc3Vic2NyaXB0aW9ucy5kZXN0cm95LnNpemUsXG4gICAgdW5tb3VudGVkVXBkYXRlU3Vic2NyaXB0aW9uczogc3Vic2NyaXB0aW9ucy51cGRhdGUuc2l6ZVxuICB9XG59XG5cbi8qKlxuICogUnVucyBwcm9qZWN0aW9uIG9wdGlvbnMgc2NlbmFyaW8uXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBudW1iZXI+Pn0gLSBTY2VuYXJpbyByZXN1bHQuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHByb2plY3Rpb25PcHRpb25zU2NlbmFyaW8oKSB7XG4gIGNvbnN0IHtNb2RlbENsYXNzLCBzdWJzY3JpcHRpb25zOiBjbGFzc1N1YnNjcmlwdGlvbnN9ID0gYnVpbGRGYWtlTW9kZWxDbGFzcygpXG4gIGNvbnN0IGluc3RhbmNlU3Vic2NyaXB0aW9ucyA9IGJ1aWxkRmFrZVN1YnNjcmlwdGlvbnMoKVxuICBjb25zdCBtb2RlbCA9IGJ1aWxkRmFrZU1vZGVsKFwidGFzay0xXCIsIGluc3RhbmNlU3Vic2NyaXB0aW9ucylcbiAgY29uc3QgY2xhc3NRdWVyeSA9IE1vZGVsQ2xhc3NcbiAgICAud2hlcmUoe2lkOiBcInRhc2stMVwifSlcbiAgICAuc2VsZWN0KFtcImlkXCJdKVxuXG4gIC8qKlxuICAgKiBSdW5zIHRlc3QgY29tcG9uZW50LlxuICAgKiBAcmV0dXJucyB7UmVhY3QuUmVhY3RFbGVtZW50fSAtIFRlc3QgZWxlbWVudC5cbiAgICovXG4gIGZ1bmN0aW9uIFRlc3RDb21wb25lbnQoKSB7XG4gICAgdXNlQ3JlYXRlZEV2ZW50KE1vZGVsQ2xhc3MsICgpID0+IHt9LCB7XG4gICAgICBwcmVsb2FkOiBcInByb2plY3RcIixcbiAgICAgIHF1ZXJ5OiBjbGFzc1F1ZXJ5LFxuICAgICAgc2VsZWN0OiB7VGFzazogW1wiaWRcIiwgXCJuYW1lVXBwZXJjYXNlXCJdfVxuICAgIH0pXG4gICAgdXNlVXBkYXRlZEV2ZW50KG1vZGVsLCAoKSA9PiB7fSwge1xuICAgICAgc2VsZWN0OiBbXCJpZFwiXSxcbiAgICAgIHdpdGhDb3VudDogXCJjb21tZW50c1wiXG4gICAgfSlcbiAgICB1c2VEZXN0cm95ZWRFdmVudChtb2RlbCwgKCkgPT4ge30sIHtcbiAgICAgIHByZWxvYWQ6IFwicHJvamVjdFwiLFxuICAgICAgc2VsZWN0OiBbXCJpZFwiXVxuICAgIH0pXG5cbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiKVxuICB9XG5cbiAgY29uc3QgY29udHJvbHMgPSBhd2FpdCByZW5kZXJFbGVtZW50KFJlYWN0LmNyZWF0ZUVsZW1lbnQoVGVzdENvbXBvbmVudCkpXG4gIGF3YWl0IHdhaXRGb3IoKCkgPT4gY2xhc3NTdWJzY3JpcHRpb25zLmNyZWF0ZS5zaXplID09PSAxICYmIGluc3RhbmNlU3Vic2NyaXB0aW9ucy51cGRhdGUuc2l6ZSA9PT0gMSAmJiBpbnN0YW5jZVN1YnNjcmlwdGlvbnMuZGVzdHJveS5zaXplID09PSAxKVxuXG4gIGNvbnN0IGNyZWF0ZU9wdGlvbnMgPSBjbGFzc1N1YnNjcmlwdGlvbnMub3B0aW9ucy5jcmVhdGVbMF0gfHwge31cbiAgY29uc3QgdXBkYXRlT3B0aW9ucyA9IGluc3RhbmNlU3Vic2NyaXB0aW9ucy5vcHRpb25zLnVwZGF0ZVswXSB8fCB7fVxuICBjb25zdCBkZXN0cm95T3B0aW9ucyA9IGluc3RhbmNlU3Vic2NyaXB0aW9ucy5vcHRpb25zLmRlc3Ryb3lbMF0gfHwge31cblxuICBhd2FpdCBjb250cm9scy51bm1vdW50KClcblxuICByZXR1cm4ge1xuICAgIGNsYXNzQ3JlYXRlUHJlbG9hZFByb2plY3Q6IGNyZWF0ZU9wdGlvbnMucHJlbG9hZCA9PT0gXCJwcm9qZWN0XCIgPyAxIDogMCxcbiAgICBjbGFzc0NyZWF0ZVF1ZXJ5UGFzc2VkOiBjcmVhdGVPcHRpb25zLnF1ZXJ5ID09PSBjbGFzc1F1ZXJ5ID8gMSA6IDAsXG4gICAgY2xhc3NDcmVhdGVTZWxlY3RDb3VudDogY3JlYXRlT3B0aW9ucy5zZWxlY3QgJiYgdHlwZW9mIGNyZWF0ZU9wdGlvbnMuc2VsZWN0ID09PSBcIm9iamVjdFwiICYmICFBcnJheS5pc0FycmF5KGNyZWF0ZU9wdGlvbnMuc2VsZWN0KSAmJiBBcnJheS5pc0FycmF5KGNyZWF0ZU9wdGlvbnMuc2VsZWN0LlRhc2spID8gY3JlYXRlT3B0aW9ucy5zZWxlY3QuVGFzay5sZW5ndGggOiAwLFxuICAgIGluc3RhbmNlRGVzdHJveVByZWxvYWRQcm9qZWN0OiBkZXN0cm95T3B0aW9ucy5wcmVsb2FkID09PSBcInByb2plY3RcIiA/IDEgOiAwLFxuICAgIGluc3RhbmNlRGVzdHJveVNlbGVjdENvdW50OiBBcnJheS5pc0FycmF5KGRlc3Ryb3lPcHRpb25zLnNlbGVjdCkgPyBkZXN0cm95T3B0aW9ucy5zZWxlY3QubGVuZ3RoIDogMCxcbiAgICBpbnN0YW5jZVVwZGF0ZVNlbGVjdENvdW50OiBBcnJheS5pc0FycmF5KHVwZGF0ZU9wdGlvbnMuc2VsZWN0KSA/IHVwZGF0ZU9wdGlvbnMuc2VsZWN0Lmxlbmd0aCA6IDAsXG4gICAgaW5zdGFuY2VVcGRhdGVXaXRoQ291bnRDb21tZW50czogdXBkYXRlT3B0aW9ucy53aXRoQ291bnQgPT09IFwiY29tbWVudHNcIiA/IDEgOiAwXG4gIH1cbn1cblxuLyoqXG4gKiBSdW5zIGRlYm91bmNlIHVubW91bnQgc2NlbmFyaW8uXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBudW1iZXI+Pn0gLSBTY2VuYXJpbyByZXN1bHQuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGRlYm91bmNlVW5tb3VudFNjZW5hcmlvKCkge1xuICBjb25zdCB7TW9kZWxDbGFzcywgc3Vic2NyaXB0aW9uczogY2xhc3NTdWJzY3JpcHRpb25zfSA9IGJ1aWxkRmFrZU1vZGVsQ2xhc3MoKVxuICBjb25zdCBpbnN0YW5jZVN1YnNjcmlwdGlvbnMgPSBidWlsZEZha2VTdWJzY3JpcHRpb25zKClcbiAgY29uc3QgbW9kZWwgPSBidWlsZEZha2VNb2RlbChcInRhc2stMVwiLCBpbnN0YW5jZVN1YnNjcmlwdGlvbnMpXG4gIC8qKlxuICAgKiBSZWNlaXZlZCBldmVudHMuXG4gICAgQHR5cGUge0FycmF5PEZyb250ZW5kTW9kZWxIb29rVGVzdENyZWF0ZVVwZGF0ZVBheWxvYWQgfCBGcm9udGVuZE1vZGVsSG9va1Rlc3REZXN0cm95UGF5bG9hZD59ICovXG4gIGNvbnN0IHJlY2VpdmVkRXZlbnRzID0gW11cblxuICAvKipcbiAgICogUnVucyB0ZXN0IGNvbXBvbmVudC5cbiAgICogQHJldHVybnMge1JlYWN0LlJlYWN0RWxlbWVudH0gLSBUZXN0IGVsZW1lbnQuXG4gICAqL1xuICBmdW5jdGlvbiBUZXN0Q29tcG9uZW50KCkge1xuICAgIHVzZU1vZGVsQ2xhc3NFdmVudChNb2RlbENsYXNzLCBcInVwZGF0ZVwiLCAocGF5bG9hZCkgPT4gcmVjZWl2ZWRFdmVudHMucHVzaChwYXlsb2FkKSwge2RlYm91bmNlOiAyMH0pXG4gICAgdXNlVXBkYXRlZEV2ZW50KG1vZGVsLCAocGF5bG9hZCkgPT4gcmVjZWl2ZWRFdmVudHMucHVzaChwYXlsb2FkKSwge2RlYm91bmNlOiAyMH0pXG4gICAgdXNlRGVzdHJveWVkRXZlbnQobW9kZWwsIChwYXlsb2FkKSA9PiByZWNlaXZlZEV2ZW50cy5wdXNoKHBheWxvYWQpLCB7ZGVib3VuY2U6IDIwfSlcblxuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpXG4gIH1cblxuICBjb25zdCBjb250cm9scyA9IGF3YWl0IHJlbmRlckVsZW1lbnQoUmVhY3QuY3JlYXRlRWxlbWVudChUZXN0Q29tcG9uZW50KSlcbiAgYXdhaXQgd2FpdEZvcigoKSA9PiBjbGFzc1N1YnNjcmlwdGlvbnMudXBkYXRlLnNpemUgPT09IDEgJiYgaW5zdGFuY2VTdWJzY3JpcHRpb25zLnVwZGF0ZS5zaXplID09PSAxICYmIGluc3RhbmNlU3Vic2NyaXB0aW9ucy5kZXN0cm95LnNpemUgPT09IDEpXG5cbiAgZW1pdEV2ZW50KGNsYXNzU3Vic2NyaXB0aW9ucywgXCJ1cGRhdGVcIiwge2lkOiBcInRhc2stMVwiLCBtb2RlbH0pXG4gIGVtaXRFdmVudChpbnN0YW5jZVN1YnNjcmlwdGlvbnMsIFwidXBkYXRlXCIsIHtpZDogXCJ0YXNrLTFcIiwgbW9kZWx9KVxuICBlbWl0RXZlbnQoaW5zdGFuY2VTdWJzY3JpcHRpb25zLCBcImRlc3Ryb3lcIiwge2lkOiBcInRhc2stMVwifSlcblxuICBhd2FpdCBjb250cm9scy51bm1vdW50KClcbiAgYXdhaXQgd2FpdCgzMClcblxuICByZXR1cm4ge3JlY2VpdmVkRXZlbnRzQWZ0ZXJEZWJvdW5jZVdpbmRvdzogcmVjZWl2ZWRFdmVudHMubGVuZ3RofVxufVxuXG4vKipcbiAqIFJ1bnMgcmVzdWJzY3JpYmUgaW5zdGFuY2Ugc2NlbmFyaW8uXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBudW1iZXI+Pn0gLSBTY2VuYXJpbyByZXN1bHQuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHJlc3Vic2NyaWJlSW5zdGFuY2VTY2VuYXJpbygpIHtcbiAgY29uc3QgZmlyc3RTdWJzY3JpcHRpb25zID0gYnVpbGRGYWtlU3Vic2NyaXB0aW9ucygpXG4gIGNvbnN0IHNlY29uZFN1YnNjcmlwdGlvbnMgPSBidWlsZEZha2VTdWJzY3JpcHRpb25zKClcbiAgY29uc3QgZmlyc3RNb2RlbCA9IGJ1aWxkRmFrZU1vZGVsKFwidGFzay0xXCIsIGZpcnN0U3Vic2NyaXB0aW9ucylcbiAgY29uc3Qgc2Vjb25kTW9kZWwgPSBidWlsZEZha2VNb2RlbChcInRhc2stMVwiLCBzZWNvbmRTdWJzY3JpcHRpb25zKVxuICAvKipcbiAgICogUmVjZWl2ZWQgZXZlbnRzLlxuICAgIEB0eXBlIHtBcnJheTxGcm9udGVuZE1vZGVsSG9va1Rlc3RDcmVhdGVVcGRhdGVQYXlsb2FkIHwgRnJvbnRlbmRNb2RlbEhvb2tUZXN0RGVzdHJveVBheWxvYWQ+fSAqL1xuICBjb25zdCByZWNlaXZlZEV2ZW50cyA9IFtdXG5cbiAgLyoqXG4gICAqIFJ1bnMgdGVzdCBjb21wb25lbnQuXG4gICAqIEBwYXJhbSB7e21vZGVsOiBpbXBvcnQoXCIuLi9mcm9udGVuZC1tb2RlbHMvYmFzZS5qc1wiKS5kZWZhdWx0fX0gcHJvcHMgLSBDb21wb25lbnQgcHJvcHMuXG4gICAqIEByZXR1cm5zIHtSZWFjdC5SZWFjdEVsZW1lbnR9IC0gVGVzdCBlbGVtZW50LlxuICAgKi9cbiAgZnVuY3Rpb24gVGVzdENvbXBvbmVudCh7bW9kZWx9KSB7XG4gICAgdXNlVXBkYXRlZEV2ZW50KG1vZGVsLCAocGF5bG9hZCkgPT4gcmVjZWl2ZWRFdmVudHMucHVzaChwYXlsb2FkKSlcbiAgICB1c2VEZXN0cm95ZWRFdmVudChtb2RlbCwgKHBheWxvYWQpID0+IHJlY2VpdmVkRXZlbnRzLnB1c2gocGF5bG9hZCkpXG5cbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiKVxuICB9XG5cbiAgY29uc3QgY29udHJvbHMgPSBhd2FpdCByZW5kZXJFbGVtZW50KFJlYWN0LmNyZWF0ZUVsZW1lbnQoVGVzdENvbXBvbmVudCwge21vZGVsOiBmaXJzdE1vZGVsfSkpXG4gIGF3YWl0IHdhaXRGb3IoKCkgPT4gZmlyc3RTdWJzY3JpcHRpb25zLnVwZGF0ZS5zaXplID09PSAxICYmIGZpcnN0U3Vic2NyaXB0aW9ucy5kZXN0cm95LnNpemUgPT09IDEpXG5cbiAgY29uc3QgZmlyc3RNb3VudGVkRGVzdHJveVN1YnNjcmlwdGlvbnMgPSBmaXJzdFN1YnNjcmlwdGlvbnMuZGVzdHJveS5zaXplXG4gIGNvbnN0IGZpcnN0TW91bnRlZFVwZGF0ZVN1YnNjcmlwdGlvbnMgPSBmaXJzdFN1YnNjcmlwdGlvbnMudXBkYXRlLnNpemVcblxuICBhd2FpdCBjb250cm9scy5yZXJlbmRlcihSZWFjdC5jcmVhdGVFbGVtZW50KFRlc3RDb21wb25lbnQsIHttb2RlbDogc2Vjb25kTW9kZWx9KSlcbiAgYXdhaXQgd2FpdEZvcigoKSA9PiBmaXJzdFN1YnNjcmlwdGlvbnMudXBkYXRlLnNpemUgPT09IDAgJiYgZmlyc3RTdWJzY3JpcHRpb25zLmRlc3Ryb3kuc2l6ZSA9PT0gMCAmJiBzZWNvbmRTdWJzY3JpcHRpb25zLnVwZGF0ZS5zaXplID09PSAxICYmIHNlY29uZFN1YnNjcmlwdGlvbnMuZGVzdHJveS5zaXplID09PSAxKVxuXG4gIGNvbnN0IGZpcnN0QWZ0ZXJSZXJlbmRlckRlc3Ryb3lTdWJzY3JpcHRpb25zID0gZmlyc3RTdWJzY3JpcHRpb25zLmRlc3Ryb3kuc2l6ZVxuICBjb25zdCBmaXJzdEFmdGVyUmVyZW5kZXJVcGRhdGVTdWJzY3JpcHRpb25zID0gZmlyc3RTdWJzY3JpcHRpb25zLnVwZGF0ZS5zaXplXG4gIGNvbnN0IHNlY29uZEFmdGVyUmVyZW5kZXJEZXN0cm95U3Vic2NyaXB0aW9ucyA9IHNlY29uZFN1YnNjcmlwdGlvbnMuZGVzdHJveS5zaXplXG4gIGNvbnN0IHNlY29uZEFmdGVyUmVyZW5kZXJVcGRhdGVTdWJzY3JpcHRpb25zID0gc2Vjb25kU3Vic2NyaXB0aW9ucy51cGRhdGUuc2l6ZVxuXG4gIGVtaXRFdmVudChmaXJzdFN1YnNjcmlwdGlvbnMsIFwidXBkYXRlXCIsIHtpZDogXCJ0YXNrLTFcIiwgbW9kZWw6IGZpcnN0TW9kZWx9KVxuICBlbWl0RXZlbnQoc2Vjb25kU3Vic2NyaXB0aW9ucywgXCJ1cGRhdGVcIiwge2lkOiBcInRhc2stMVwiLCBtb2RlbDogc2Vjb25kTW9kZWx9KVxuICBlbWl0RXZlbnQoc2Vjb25kU3Vic2NyaXB0aW9ucywgXCJkZXN0cm95XCIsIHtpZDogXCJ0YXNrLTFcIn0pXG5cbiAgY29uc3QgcmVjZWl2ZWRFdmVudHNBZnRlckVtaXQgPSByZWNlaXZlZEV2ZW50cy5sZW5ndGhcblxuICBhd2FpdCBjb250cm9scy51bm1vdW50KClcblxuICByZXR1cm4ge1xuICAgIGZpcnN0QWZ0ZXJSZXJlbmRlckRlc3Ryb3lTdWJzY3JpcHRpb25zLFxuICAgIGZpcnN0QWZ0ZXJSZXJlbmRlclVwZGF0ZVN1YnNjcmlwdGlvbnMsXG4gICAgZmlyc3RNb3VudGVkRGVzdHJveVN1YnNjcmlwdGlvbnMsXG4gICAgZmlyc3RNb3VudGVkVXBkYXRlU3Vic2NyaXB0aW9ucyxcbiAgICByZWNlaXZlZEV2ZW50c0FmdGVyRW1pdCxcbiAgICBzZWNvbmRBZnRlclJlcmVuZGVyRGVzdHJveVN1YnNjcmlwdGlvbnMsXG4gICAgc2Vjb25kQWZ0ZXJSZXJlbmRlclVwZGF0ZVN1YnNjcmlwdGlvbnNcbiAgfVxufVxuXG5jb25zdCBzY2VuYXJpb3MgPSB7XG4gIGNsYXNzTGlmZWN5Y2xlOiBjbGFzc0xpZmVjeWNsZVNjZW5hcmlvLFxuICBkZWJvdW5jZVVubW91bnQ6IGRlYm91bmNlVW5tb3VudFNjZW5hcmlvLFxuICBpbnN0YW5jZUxpZmVjeWNsZTogaW5zdGFuY2VMaWZlY3ljbGVTY2VuYXJpbyxcbiAgcHJvamVjdGlvbk9wdGlvbnM6IHByb2plY3Rpb25PcHRpb25zU2NlbmFyaW8sXG4gIHJlc3Vic2NyaWJlSW5zdGFuY2U6IHJlc3Vic2NyaWJlSW5zdGFuY2VTY2VuYXJpb1xufVxuXG4vKipcbiAqIFJ1bnMgcnVuIGZyb250ZW5kIG1vZGVsIGV2ZW50IGhvb2sgc2NlbmFyaW8uXG4gKiBAcGFyYW0ge2tleW9mIHR5cGVvZiBzY2VuYXJpb3N9IHNjZW5hcmlvTmFtZSAtIFNjZW5hcmlvIG5hbWUuXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBudW1iZXI+Pn0gLSBTY2VuYXJpbyByZXN1bHQuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGFzeW5jIGZ1bmN0aW9uIHJ1bkZyb250ZW5kTW9kZWxFdmVudEhvb2tTY2VuYXJpbyhzY2VuYXJpb05hbWUpIHtcbiAgY29uc3Qgc2NlbmFyaW8gPSBzY2VuYXJpb3Nbc2NlbmFyaW9OYW1lXVxuXG4gIGlmICghc2NlbmFyaW8pIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBmcm9udGVuZCBtb2RlbCBldmVudCBob29rIHNjZW5hcmlvOiAke3NjZW5hcmlvTmFtZX1gKVxuXG4gIHJldHVybiBhd2FpdCBzY2VuYXJpbygpXG59XG4iXX0=
@@ -1,5 +1,6 @@
1
1
  export default class ExpectToChange extends BaseExpect {
2
2
  /**
3
+ * Runs constructor.
3
4
  * @param {object} args - Options object.
4
5
  * @param {function(): Promise<number>} args.changeCallback - Change callback.
5
6
  * @param {import("./expect.js").default} args.expect - Expect.
@@ -11,6 +12,7 @@ export default class ExpectToChange extends BaseExpect {
11
12
  expect: import("./expect.js").default;
12
13
  changeCallback: () => Promise<number>;
13
14
  /**
15
+ * Runs by.
14
16
  * @param {number} count - Count value.
15
17
  * @returns {import("./expect.js").default} - The by.
16
18
  */
@@ -19,6 +21,7 @@ export default class ExpectToChange extends BaseExpect {
19
21
  oldCount: number | undefined;
20
22
  newCount: number | undefined;
21
23
  /**
24
+ * Runs execute.
22
25
  * @returns {Promise<void>} - Resolves when complete.
23
26
  */
24
27
  execute(): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"expect-to-change.d.ts","sourceRoot":"","sources":["../../../src/testing/expect-to-change.js"],"names":[],"mappings":"AAKA;IACE;;;;OAIG;IACH,qDAHG;QAA0C,cAAc,EAAhD,MAAY,OAAO,CAAC,MAAM,CAAC;QACS,MAAM,EAA1C,OAAO,aAAa,EAAE,OAAO;KACvC,EAOA;IAFC,sCAAoB;IACpB,sBARqB,OAAO,CAAC,MAAM,CAAC,CAQA;IAGtC;;;OAGG;IACH,UAHW,MAAM,GACJ,OAAO,aAAa,EAAE,OAAO,CAMzC;IAHC,0BAAkB;IAMlB,6BAA2C;IAI3C,6BAA2C;IAG7C;;OAEG;IACH,WAFa,OAAO,CAAC,IAAI,CAAC,CAYzB;CACF;uBAjDsB,kBAAkB"}
1
+ {"version":3,"file":"expect-to-change.d.ts","sourceRoot":"","sources":["../../../src/testing/expect-to-change.js"],"names":[],"mappings":"AAKA;IACE;;;;;OAKG;IACH,qDAHG;QAA0C,cAAc,EAAhD,MAAY,OAAO,CAAC,MAAM,CAAC;QACS,MAAM,EAA1C,OAAO,aAAa,EAAE,OAAO;KACvC,EAOA;IAFC,sCAAoB;IACpB,sBARqB,OAAO,CAAC,MAAM,CAAC,CAQA;IAGtC;;;;OAIG;IACH,UAHW,MAAM,GACJ,OAAO,aAAa,EAAE,OAAO,CAMzC;IAHC,0BAAkB;IAMlB,6BAA2C;IAI3C,6BAA2C;IAG7C;;;OAGG;IACH,WAFa,OAAO,CAAC,IAAI,CAAC,CAYzB;CACF;uBApDsB,kBAAkB"}
@@ -3,6 +3,7 @@ import BaseExpect from "./base-expect.js";
3
3
  import restArgsError from "../utils/rest-args-error.js";
4
4
  export default class ExpectToChange extends BaseExpect {
5
5
  /**
6
+ * Runs constructor.
6
7
  * @param {object} args - Options object.
7
8
  * @param {function(): Promise<number>} args.changeCallback - Change callback.
8
9
  * @param {import("./expect.js").default} args.expect - Expect.
@@ -14,6 +15,7 @@ export default class ExpectToChange extends BaseExpect {
14
15
  this.changeCallback = changeCallback;
15
16
  }
16
17
  /**
18
+ * Runs by.
17
19
  * @param {number} count - Count value.
18
20
  * @returns {import("./expect.js").default} - The by.
19
21
  */
@@ -28,6 +30,7 @@ export default class ExpectToChange extends BaseExpect {
28
30
  this.newCount = await this.changeCallback();
29
31
  }
30
32
  /**
33
+ * Runs execute.
31
34
  * @returns {Promise<void>} - Resolves when complete.
32
35
  */
33
36
  async execute() {
@@ -40,4 +43,4 @@ export default class ExpectToChange extends BaseExpect {
40
43
  }
41
44
  }
42
45
  }
43
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwZWN0LXRvLWNoYW5nZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90ZXN0aW5nL2V4cGVjdC10by1jaGFuZ2UuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaLE9BQU8sVUFBVSxNQUFNLGtCQUFrQixDQUFBO0FBQ3pDLE9BQU8sYUFBYSxNQUFNLDZCQUE2QixDQUFBO0FBRXZELE1BQU0sQ0FBQyxPQUFPLE9BQU8sY0FBZSxTQUFRLFVBQVU7SUFDcEQ7Ozs7T0FJRztJQUNILFlBQVksRUFBQyxjQUFjLEVBQUUsTUFBTSxFQUFFLEdBQUcsUUFBUSxFQUFDO1FBQy9DLEtBQUssRUFBRSxDQUFBO1FBQ1AsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFBO1FBRXZCLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFBO1FBQ3BCLElBQUksQ0FBQyxjQUFjLEdBQUcsY0FBYyxDQUFBO0lBQ3RDLENBQUM7SUFFRDs7O09BR0c7SUFDSCxFQUFFLENBQUMsS0FBSztRQUNOLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFBO1FBRWxCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQTtJQUNwQixDQUFDO0lBRUQsS0FBSyxDQUFDLFNBQVM7UUFDYixJQUFJLENBQUMsUUFBUSxHQUFHLE1BQU0sSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFBO0lBQzdDLENBQUM7SUFFRCxLQUFLLENBQUMsUUFBUTtRQUNaLElBQUksQ0FBQyxRQUFRLEdBQUcsTUFBTSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUE7SUFDN0MsQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSyxDQUFDLE9BQU87UUFDWCxJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssU0FBUyxJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDL0QsTUFBTSxJQUFJLEtBQUssQ0FBQyxzQ0FBc0MsQ0FBQyxDQUFBO1FBQ3pELENBQUM7UUFFRCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUE7UUFFaEQsSUFBSSxVQUFVLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQzdCLE1BQU0sSUFBSSxLQUFLLENBQUMseUJBQXlCLElBQUksQ0FBQyxLQUFLLG1CQUFtQixVQUFVLEVBQUUsQ0FBQyxDQUFBO1FBQ3JGLENBQUM7SUFDSCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuaW1wb3J0IEJhc2VFeHBlY3QgZnJvbSBcIi4vYmFzZS1leHBlY3QuanNcIlxuaW1wb3J0IHJlc3RBcmdzRXJyb3IgZnJvbSBcIi4uL3V0aWxzL3Jlc3QtYXJncy1lcnJvci5qc1wiXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEV4cGVjdFRvQ2hhbmdlIGV4dGVuZHMgQmFzZUV4cGVjdCB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIE9wdGlvbnMgb2JqZWN0LlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKCk6IFByb21pc2U8bnVtYmVyPn0gYXJncy5jaGFuZ2VDYWxsYmFjayAtIENoYW5nZSBjYWxsYmFjay5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuL2V4cGVjdC5qc1wiKS5kZWZhdWx0fSBhcmdzLmV4cGVjdCAtIEV4cGVjdC5cbiAgICovXG4gIGNvbnN0cnVjdG9yKHtjaGFuZ2VDYWxsYmFjaywgZXhwZWN0LCAuLi5yZXN0QXJnc30pIHtcbiAgICBzdXBlcigpXG4gICAgcmVzdEFyZ3NFcnJvcihyZXN0QXJncylcblxuICAgIHRoaXMuZXhwZWN0ID0gZXhwZWN0XG4gICAgdGhpcy5jaGFuZ2VDYWxsYmFjayA9IGNoYW5nZUNhbGxiYWNrXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtudW1iZXJ9IGNvdW50IC0gQ291bnQgdmFsdWUuXG4gICAqIEByZXR1cm5zIHtpbXBvcnQoXCIuL2V4cGVjdC5qc1wiKS5kZWZhdWx0fSAtIFRoZSBieS5cbiAgICovXG4gIGJ5KGNvdW50KSB7XG4gICAgdGhpcy5jb3VudCA9IGNvdW50XG5cbiAgICByZXR1cm4gdGhpcy5leHBlY3RcbiAgfVxuXG4gIGFzeW5jIHJ1bkJlZm9yZSgpIHtcbiAgICB0aGlzLm9sZENvdW50ID0gYXdhaXQgdGhpcy5jaGFuZ2VDYWxsYmFjaygpXG4gIH1cblxuICBhc3luYyBydW5BZnRlcigpIHtcbiAgICB0aGlzLm5ld0NvdW50ID0gYXdhaXQgdGhpcy5jaGFuZ2VDYWxsYmFjaygpXG4gIH1cblxuICAvKipcbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59IC0gUmVzb2x2ZXMgd2hlbiBjb21wbGV0ZS5cbiAgICovXG4gIGFzeW5jIGV4ZWN1dGUoKSB7XG4gICAgaWYgKHRoaXMubmV3Q291bnQgPT09IHVuZGVmaW5lZCB8fCB0aGlzLm9sZENvdW50ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkV4cGVjdFRvQ2hhbmdlIG5vdCBleGVjdXRlZCBwcm9wZXJseVwiKVxuICAgIH1cblxuICAgIGNvbnN0IGRpZmZlcmVuY2UgPSB0aGlzLm5ld0NvdW50IC0gdGhpcy5vbGRDb3VudFxuXG4gICAgaWYgKGRpZmZlcmVuY2UgIT0gdGhpcy5jb3VudCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCB0byBjaGFuZ2UgYnkgJHt0aGlzLmNvdW50fSBidXQgY2hhbmdlZCBieSAke2RpZmZlcmVuY2V9YClcbiAgICB9XG4gIH1cbn1cbiJdfQ==
46
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwZWN0LXRvLWNoYW5nZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90ZXN0aW5nL2V4cGVjdC10by1jaGFuZ2UuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaLE9BQU8sVUFBVSxNQUFNLGtCQUFrQixDQUFBO0FBQ3pDLE9BQU8sYUFBYSxNQUFNLDZCQUE2QixDQUFBO0FBRXZELE1BQU0sQ0FBQyxPQUFPLE9BQU8sY0FBZSxTQUFRLFVBQVU7SUFDcEQ7Ozs7O09BS0c7SUFDSCxZQUFZLEVBQUMsY0FBYyxFQUFFLE1BQU0sRUFBRSxHQUFHLFFBQVEsRUFBQztRQUMvQyxLQUFLLEVBQUUsQ0FBQTtRQUNQLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQTtRQUV2QixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQTtRQUNwQixJQUFJLENBQUMsY0FBYyxHQUFHLGNBQWMsQ0FBQTtJQUN0QyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILEVBQUUsQ0FBQyxLQUFLO1FBQ04sSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUE7UUFFbEIsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFBO0lBQ3BCLENBQUM7SUFFRCxLQUFLLENBQUMsU0FBUztRQUNiLElBQUksQ0FBQyxRQUFRLEdBQUcsTUFBTSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUE7SUFDN0MsQ0FBQztJQUVELEtBQUssQ0FBQyxRQUFRO1FBQ1osSUFBSSxDQUFDLFFBQVEsR0FBRyxNQUFNLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQTtJQUM3QyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsS0FBSyxDQUFDLE9BQU87UUFDWCxJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssU0FBUyxJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDL0QsTUFBTSxJQUFJLEtBQUssQ0FBQyxzQ0FBc0MsQ0FBQyxDQUFBO1FBQ3pELENBQUM7UUFFRCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUE7UUFFaEQsSUFBSSxVQUFVLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQzdCLE1BQU0sSUFBSSxLQUFLLENBQUMseUJBQXlCLElBQUksQ0FBQyxLQUFLLG1CQUFtQixVQUFVLEVBQUUsQ0FBQyxDQUFBO1FBQ3JGLENBQUM7SUFDSCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuaW1wb3J0IEJhc2VFeHBlY3QgZnJvbSBcIi4vYmFzZS1leHBlY3QuanNcIlxuaW1wb3J0IHJlc3RBcmdzRXJyb3IgZnJvbSBcIi4uL3V0aWxzL3Jlc3QtYXJncy1lcnJvci5qc1wiXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEV4cGVjdFRvQ2hhbmdlIGV4dGVuZHMgQmFzZUV4cGVjdCB7XG4gIC8qKlxuICAgKiBSdW5zIGNvbnN0cnVjdG9yLlxuICAgKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIE9wdGlvbnMgb2JqZWN0LlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKCk6IFByb21pc2U8bnVtYmVyPn0gYXJncy5jaGFuZ2VDYWxsYmFjayAtIENoYW5nZSBjYWxsYmFjay5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuL2V4cGVjdC5qc1wiKS5kZWZhdWx0fSBhcmdzLmV4cGVjdCAtIEV4cGVjdC5cbiAgICovXG4gIGNvbnN0cnVjdG9yKHtjaGFuZ2VDYWxsYmFjaywgZXhwZWN0LCAuLi5yZXN0QXJnc30pIHtcbiAgICBzdXBlcigpXG4gICAgcmVzdEFyZ3NFcnJvcihyZXN0QXJncylcblxuICAgIHRoaXMuZXhwZWN0ID0gZXhwZWN0XG4gICAgdGhpcy5jaGFuZ2VDYWxsYmFjayA9IGNoYW5nZUNhbGxiYWNrXG4gIH1cblxuICAvKipcbiAgICogUnVucyBieS5cbiAgICogQHBhcmFtIHtudW1iZXJ9IGNvdW50IC0gQ291bnQgdmFsdWUuXG4gICAqIEByZXR1cm5zIHtpbXBvcnQoXCIuL2V4cGVjdC5qc1wiKS5kZWZhdWx0fSAtIFRoZSBieS5cbiAgICovXG4gIGJ5KGNvdW50KSB7XG4gICAgdGhpcy5jb3VudCA9IGNvdW50XG5cbiAgICByZXR1cm4gdGhpcy5leHBlY3RcbiAgfVxuXG4gIGFzeW5jIHJ1bkJlZm9yZSgpIHtcbiAgICB0aGlzLm9sZENvdW50ID0gYXdhaXQgdGhpcy5jaGFuZ2VDYWxsYmFjaygpXG4gIH1cblxuICBhc3luYyBydW5BZnRlcigpIHtcbiAgICB0aGlzLm5ld0NvdW50ID0gYXdhaXQgdGhpcy5jaGFuZ2VDYWxsYmFjaygpXG4gIH1cblxuICAvKipcbiAgICogUnVucyBleGVjdXRlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gLSBSZXNvbHZlcyB3aGVuIGNvbXBsZXRlLlxuICAgKi9cbiAgYXN5bmMgZXhlY3V0ZSgpIHtcbiAgICBpZiAodGhpcy5uZXdDb3VudCA9PT0gdW5kZWZpbmVkIHx8IHRoaXMub2xkQ291bnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRXhwZWN0VG9DaGFuZ2Ugbm90IGV4ZWN1dGVkIHByb3Blcmx5XCIpXG4gICAgfVxuXG4gICAgY29uc3QgZGlmZmVyZW5jZSA9IHRoaXMubmV3Q291bnQgLSB0aGlzLm9sZENvdW50XG5cbiAgICBpZiAoZGlmZmVyZW5jZSAhPSB0aGlzLmNvdW50KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIHRvIGNoYW5nZSBieSAke3RoaXMuY291bnR9IGJ1dCBjaGFuZ2VkIGJ5ICR7ZGlmZmVyZW5jZX1gKVxuICAgIH1cbiAgfVxufVxuIl19