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,5 +1,6 @@
1
1
  export default class VelociousDatabaseQueryWhereModelClassHash extends WhereBase {
2
2
  /**
3
+ * Runs constructor.
3
4
  * @param {object} args - Options object.
4
5
  * @param {import("./index.js").default} args.query - Query instance.
5
6
  * @param {WhereHash} args.hash - Hash.
@@ -17,73 +18,83 @@ export default class VelociousDatabaseQueryWhereModelClassHash extends WhereBase
17
18
  qualifyBaseTable: boolean;
18
19
  query: import("./index.js").default;
19
20
  /**
21
+ * Runs get model class.
20
22
  * @returns {typeof import("../record/index.js").default} - The model class.
21
23
  */
22
24
  getModelClass(): typeof import("../record/index.js").default;
23
25
  /**
26
+ * Runs resolve column name.
24
27
  * @param {typeof import("../record/index.js").default} modelClass - Model class.
25
28
  * @param {string} key - Attribute or column name.
26
29
  * @returns {string | undefined} - The resolved column name.
27
30
  */
28
31
  _resolveColumnName(modelClass: typeof import("../record/index.js").default, key: string): string | undefined;
29
32
  /**
33
+ * Runs get relationship.
30
34
  * @param {typeof import("../record/index.js").default} modelClass - Model class.
31
35
  * @param {string} relationshipName - Relationship name.
32
36
  * @returns {import("../record/relationships/base.js").default | undefined} - The relationship.
33
37
  */
34
38
  _getRelationship(modelClass: typeof import("../record/index.js").default, relationshipName: string): import("../record/relationships/base.js").default | undefined;
35
39
  /**
36
- * @param {unknown} tupleValue - Candidate tuple.
40
+ * Runs is relationship where operator tuple.
41
+ * @param {?} tupleValue - Candidate tuple.
37
42
  * @returns {boolean} - Whether this is a relationship where tuple.
38
43
  */
39
44
  _isRelationshipWhereOperatorTuple(tupleValue: unknown): boolean;
40
45
  /**
41
- * @param {unknown} value - Candidate relationship where value.
42
- * @returns {Array<[string, "eq" | "notEq" | "gt" | "gteq" | "lt" | "lteq" | "like", any]>} - Normalized tuples.
46
+ * Runs normalize relationship where operator tuples.
47
+ * @param {?} value - Candidate relationship where value.
48
+ * @returns {Array<[string, "eq" | "notEq" | "gt" | "gteq" | "lt" | "lteq" | "like", unknown]>} - Normalized tuples.
43
49
  */
44
- _normalizeRelationshipWhereOperatorTuples(value: unknown): Array<[string, "eq" | "notEq" | "gt" | "gteq" | "lt" | "lteq" | "like", any]>;
50
+ _normalizeRelationshipWhereOperatorTuples(value: unknown): Array<[string, "eq" | "notEq" | "gt" | "gteq" | "lt" | "lteq" | "like", unknown]>;
45
51
  /**
46
- * @param {unknown} value - Candidate relationship where value.
52
+ * Runs is relationship where operator tuple container.
53
+ * @param {?} value - Candidate relationship where value.
47
54
  * @returns {boolean} - Whether value can be normalized to relationship tuples.
48
55
  */
49
56
  _isRelationshipWhereOperatorTupleContainer(value: unknown): boolean;
50
57
  /**
58
+ * Runs where sqlfrom relationship where operator tuples.
51
59
  * @param {object} args - Relationship where options.
52
60
  * @param {typeof import("../record/index.js").default} args.modelClass - Relationship model class.
53
61
  * @param {string} args.tableName - Relationship table reference name.
54
- * @param {Array<[string, "eq" | "notEq" | "gt" | "gteq" | "lt" | "lteq" | "like", any]>} args.tuples - Operator tuples.
62
+ * @param {Array<[string, "eq" | "notEq" | "gt" | "gteq" | "lt" | "lteq" | "like", unknown]>} args.tuples - Operator tuples.
55
63
  * @returns {string} - SQL where fragment.
56
64
  */
57
65
  _whereSQLFromRelationshipWhereOperatorTuples({ modelClass, tableName, tuples }: {
58
66
  modelClass: typeof import("../record/index.js").default;
59
67
  tableName: string;
60
- tuples: Array<[string, "eq" | "notEq" | "gt" | "gteq" | "lt" | "lteq" | "like", any]>;
68
+ tuples: Array<[string, "eq" | "notEq" | "gt" | "gteq" | "lt" | "lteq" | "like", unknown]>;
61
69
  }): string;
62
70
  /**
71
+ * Runs normalize sqlite boolean value.
63
72
  * @param {object} args - Options object.
64
73
  * @param {typeof import("../record/index.js").default} args.modelClass - Model class.
65
74
  * @param {string} args.columnName - Column name.
66
- * @param {any} args.value - Value to normalize.
67
- * @returns {any} - Normalized value.
75
+ * @param {?} args.value - Value to normalize.
76
+ * @returns {?} - Normalized value.
68
77
  */
69
78
  _normalizeSqliteBooleanValue({ modelClass, columnName, value }: {
70
79
  modelClass: typeof import("../record/index.js").default;
71
80
  columnName: string;
72
- value: any;
73
- }): any;
81
+ value: unknown;
82
+ }): unknown;
74
83
  /**
84
+ * Runs normalize value for column type.
75
85
  * @param {object} args - Options object.
76
86
  * @param {typeof import("../record/index.js").default} args.modelClass - Model class.
77
87
  * @param {string} args.columnName - Column name.
78
- * @param {any} args.value - Value to normalize.
79
- * @returns {any} - Normalized value.
88
+ * @param {?} args.value - Value to normalize.
89
+ * @returns {?} - Normalized value.
80
90
  */
81
91
  _normalizeValueForColumnType({ modelClass, columnName, value }: {
82
92
  modelClass: typeof import("../record/index.js").default;
83
93
  columnName: string;
84
- value: any;
85
- }): any;
94
+ value: unknown;
95
+ }): unknown;
86
96
  /**
97
+ * Runs where sqlfrom hash.
87
98
  * @param {WhereHash} hash - Hash.
88
99
  * @param {typeof import("../record/index.js").default} modelClass - Model class.
89
100
  * @param {string[]} path - Join path.
@@ -93,8 +104,11 @@ export default class VelociousDatabaseQueryWhereModelClassHash extends WhereBase
93
104
  */
94
105
  _whereSQLFromHash(hash: WhereHash, modelClass: typeof import("../record/index.js").default, path: string[], tableName?: string, index?: number): string;
95
106
  }
107
+ /**
108
+ * No match.
109
+ */
96
110
  export type WhereHash = {
97
- [key: string]: string | number | boolean | null | Array<string | number | boolean | null> | Record<string, any>;
111
+ [key: string]: string | number | boolean | null | Array<string | number | boolean | null> | Record<string, unknown>;
98
112
  };
99
113
  import WhereBase from "./where-base.js";
100
114
  //# sourceMappingURL=where-model-class-hash.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"where-model-class-hash.d.ts","sourceRoot":"","sources":["../../../../src/database/query/where-model-class-hash.js"],"names":[],"mappings":"AA8BA;IACE;;;;;;OAMG;IACH,2DALG;QAA2C,KAAK,EAAxC,OAAO,YAAY,EAAE,OAAO;QACZ,IAAI,EAApB,SAAS;QACyC,UAAU,EAA5D,cAAc,oBAAoB,EAAE,OAAO;QAC5B,gBAAgB;KACzC,EAOA;IAJC,gBAAgB;IAChB,wDAA4B;IAC5B,0BAAwC;IACxC,oCAAkB;IAGpB;;OAEG;IACH,iBAFa,cAAc,oBAAoB,EAAE,OAAO,CAMvD;IAmBD;;;;OAIG;IACH,+BAJW,cAAc,oBAAoB,EAAE,OAAO,OAC3C,MAAM,GACJ,MAAM,GAAG,SAAS,CAc9B;IAED;;;;OAIG;IACH,6BAJW,cAAc,oBAAoB,EAAE,OAAO,oBAC3C,MAAM,GACJ,OAAO,iCAAiC,EAAE,OAAO,GAAG,SAAS,CAIzE;IAED;;;OAGG;IACH,8CAHW,OAAO,GACL,OAAO,CAUnB;IAED;;;OAGG;IACH,iDAHW,OAAO,GACL,KAAK,CAAC,CAAC,MAAM,EAAE,IAAI,GAAG,OAAO,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,GAAG,MAAM,GAAG,MAAM,EAAE,GAAG,CAAC,CAAC,CA8CzF;IAED;;;OAGG;IACH,kDAHW,OAAO,GACL,OAAO,CAUnB;IAED;;;;;;OAMG;IACH,gFALG;QAA0D,UAAU,EAA5D,cAAc,oBAAoB,EAAE,OAAO;QAC9B,SAAS,EAAtB,MAAM;QAC8E,MAAM,EAA1F,KAAK,CAAC,CAAC,MAAM,EAAE,IAAI,GAAG,OAAO,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,GAAG,MAAM,GAAG,MAAM,EAAE,GAAG,CAAC,CAAC;KACrF,GAAU,MAAM,CAkGlB;IAED;;;;;;OAMG;IACH,gEALG;QAA0D,UAAU,EAA5D,cAAc,oBAAoB,EAAE,OAAO;QAC9B,UAAU,EAAvB,MAAM;QACI,KAAK,EAAf,GAAG;KACX,GAAU,GAAG,CAsBf;IAED;;;;;;OAMG;IACH,gEALG;QAA0D,UAAU,EAA5D,cAAc,oBAAoB,EAAE,OAAO;QAC9B,UAAU,EAAvB,MAAM;QACI,KAAK,EAAf,GAAG;KACX,GAAU,GAAG,CAmCf;IAED;;;;;;;OAOG;IACH,wBAPW,SAAS,cACT,cAAc,oBAAoB,EAAE,OAAO,QAC3C,MAAM,EAAE,cACR,MAAM,UACN,MAAM,GACJ,MAAM,CA4GlB;CACF;wBA9cY;IAAC,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,KAAK,CAAC,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;CAAC;sBAHxG,iBAAiB"}
1
+ {"version":3,"file":"where-model-class-hash.d.ts","sourceRoot":"","sources":["../../../../src/database/query/where-model-class-hash.js"],"names":[],"mappings":"AAkCA;IACE;;;;;;;OAOG;IACH,2DALG;QAA2C,KAAK,EAAxC,OAAO,YAAY,EAAE,OAAO;QACZ,IAAI,EAApB,SAAS;QACyC,UAAU,EAA5D,cAAc,oBAAoB,EAAE,OAAO;QAC5B,gBAAgB;KACzC,EAOA;IAJC,gBAAgB;IAChB,wDAA4B;IAC5B,0BAAwC;IACxC,oCAAkB;IAGpB;;;OAGG;IACH,iBAFa,cAAc,oBAAoB,EAAE,OAAO,CAMvD;IAsBD;;;;;OAKG;IACH,+BAJW,cAAc,oBAAoB,EAAE,OAAO,OAC3C,MAAM,GACJ,MAAM,GAAG,SAAS,CAc9B;IAED;;;;;OAKG;IACH,6BAJW,cAAc,oBAAoB,EAAE,OAAO,oBAC3C,MAAM,GACJ,OAAO,iCAAiC,EAAE,OAAO,GAAG,SAAS,CAIzE;IAED;;;;OAIG;IACH,8CAHW,OAAC,GACC,OAAO,CAUnB;IAED;;;;OAIG;IACH,iDAHW,OAAC,GACC,KAAK,CAAC,CAAC,MAAM,EAAE,IAAI,GAAG,OAAO,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,GAAG,MAAM,GAAG,MAAM,EAAE,OAAO,CAAC,CAAC,CAqD7F;IAED;;;;OAIG;IACH,kDAHW,OAAC,GACC,OAAO,CAUnB;IAED;;;;;;;OAOG;IACH,gFALG;QAA0D,UAAU,EAA5D,cAAc,oBAAoB,EAAE,OAAO;QAC9B,SAAS,EAAtB,MAAM;QACkF,MAAM,EAA9F,KAAK,CAAC,CAAC,MAAM,EAAE,IAAI,GAAG,OAAO,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,GAAG,MAAM,GAAG,MAAM,EAAE,OAAO,CAAC,CAAC;KACzF,GAAU,MAAM,CAkGlB;IAED;;;;;;;OAOG;IACH,gEALG;QAA0D,UAAU,EAA5D,cAAc,oBAAoB,EAAE,OAAO;QAC9B,UAAU,EAAvB,MAAM;QACE,KAAK,EAAb,OAAC;KACT,GAAU,OAAC,CAyBb;IAED;;;;;;;OAOG;IACH,gEALG;QAA0D,UAAU,EAA5D,cAAc,oBAAoB,EAAE,OAAO;QAC9B,UAAU,EAAvB,MAAM;QACE,KAAK,EAAb,OAAC;KACT,GAAU,OAAC,CAsCb;IAED;;;;;;;;OAQG;IACH,wBAPW,SAAS,cACT,cAAc,oBAAoB,EAAE,OAAO,QAC3C,MAAM,EAAE,cACR,MAAM,UACN,MAAM,GACJ,MAAM,CAgHlB;CACF;;;;wBAhfY;IAAC,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,KAAK,CAAC,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAC,CAAC,CAAA;CAAC;sBAJtG,iBAAiB"}
@@ -3,11 +3,13 @@ import * as inflection from "inflection";
3
3
  import { isPlainObject } from "is-plain-object";
4
4
  import WhereBase from "./where-base.js";
5
5
  /**
6
- * @typedef {{[key: string]: string | number | boolean | null | Array<string | number | boolean | null> | Record<string, any>}} WhereHash
6
+ * No match.
7
+ * @typedef {{[key: string]: string | number | boolean | null | Array<string | number | boolean | null> | Record<string, ?>}} WhereHash
7
8
  */
8
9
  const NO_MATCH = Symbol("no-match");
9
10
  const relationshipWhereOperators = new Set(["eq", "notEq", "gt", "gteq", "lt", "lteq", "like", ">", ">=", "<", "<="]);
10
11
  /**
12
+ * Runs normalize relationship where operator.
11
13
  * @param {string} operator - Raw relationship where operator.
12
14
  * @returns {"eq" | "notEq" | "gt" | "gteq" | "lt" | "lteq" | "like"} - Normalized operator.
13
15
  */
@@ -18,10 +20,13 @@ function normalizeRelationshipWhereOperator(operator) {
18
20
  ">": "gt",
19
21
  ">=": "gteq"
20
22
  };
21
- return /** @type {"eq" | "notEq" | "gt" | "gteq" | "lt" | "lteq" | "like"} */ (operatorAliases[ /** @type {"<" | "<=" | ">" | ">="} */(operator)] || operator);
23
+ return /** Narrows the runtime value to the documented type. @type {"eq" | "notEq" | "gt" | "gteq" | "lt" | "lteq" | "like"} */ (operatorAliases[ /**
24
+ * Narrows the runtime value to the documented type.
25
+ @type {"<" | "<=" | ">" | ">="} */(operator)] || operator);
22
26
  }
23
27
  export default class VelociousDatabaseQueryWhereModelClassHash extends WhereBase {
24
28
  /**
29
+ * Runs constructor.
25
30
  * @param {object} args - Options object.
26
31
  * @param {import("./index.js").default} args.query - Query instance.
27
32
  * @param {WhereHash} args.hash - Hash.
@@ -36,6 +41,7 @@ export default class VelociousDatabaseQueryWhereModelClassHash extends WhereBase
36
41
  this.query = query;
37
42
  }
38
43
  /**
44
+ * Runs get model class.
39
45
  * @returns {typeof import("../record/index.js").default} - The model class.
40
46
  */
41
47
  getModelClass() {
@@ -44,11 +50,14 @@ export default class VelociousDatabaseQueryWhereModelClassHash extends WhereBase
44
50
  return this.modelClass;
45
51
  }
46
52
  /**
53
+ * Runs to sql.
47
54
  * @returns {string} - SQL string.
48
55
  */
49
56
  toSql() {
50
57
  let sql = "(";
51
- const modelQuery = /** @type {import("./model-class-query.js").default} */ (this.query);
58
+ const modelQuery = /**
59
+ * Narrows the runtime value to the documented type.
60
+ @type {import("./model-class-query.js").default} */ (this.query);
52
61
  const baseTableName = this.qualifyBaseTable
53
62
  ? modelQuery.getTableReferenceForJoin()
54
63
  : undefined;
@@ -57,6 +66,7 @@ export default class VelociousDatabaseQueryWhereModelClassHash extends WhereBase
57
66
  return sql;
58
67
  }
59
68
  /**
69
+ * Runs resolve column name.
60
70
  * @param {typeof import("../record/index.js").default} modelClass - Model class.
61
71
  * @param {string} key - Attribute or column name.
62
72
  * @returns {string | undefined} - The resolved column name.
@@ -74,6 +84,7 @@ export default class VelociousDatabaseQueryWhereModelClassHash extends WhereBase
74
84
  return undefined;
75
85
  }
76
86
  /**
87
+ * Runs get relationship.
77
88
  * @param {typeof import("../record/index.js").default} modelClass - Model class.
78
89
  * @param {string} relationshipName - Relationship name.
79
90
  * @returns {import("../record/relationships/base.js").default | undefined} - The relationship.
@@ -82,7 +93,8 @@ export default class VelociousDatabaseQueryWhereModelClassHash extends WhereBase
82
93
  return modelClass.getRelationshipsMap()[relationshipName];
83
94
  }
84
95
  /**
85
- * @param {unknown} tupleValue - Candidate tuple.
96
+ * Runs is relationship where operator tuple.
97
+ * @param {?} tupleValue - Candidate tuple.
86
98
  * @returns {boolean} - Whether this is a relationship where tuple.
87
99
  */
88
100
  _isRelationshipWhereOperatorTuple(tupleValue) {
@@ -94,19 +106,27 @@ export default class VelociousDatabaseQueryWhereModelClassHash extends WhereBase
94
106
  relationshipWhereOperators.has(tupleValue[1]);
95
107
  }
96
108
  /**
97
- * @param {unknown} value - Candidate relationship where value.
98
- * @returns {Array<[string, "eq" | "notEq" | "gt" | "gteq" | "lt" | "lteq" | "like", any]>} - Normalized tuples.
109
+ * Runs normalize relationship where operator tuples.
110
+ * @param {?} value - Candidate relationship where value.
111
+ * @returns {Array<[string, "eq" | "notEq" | "gt" | "gteq" | "lt" | "lteq" | "like", unknown]>} - Normalized tuples.
99
112
  */
100
113
  _normalizeRelationshipWhereOperatorTuples(value) {
101
114
  if (!Array.isArray(value)) {
102
115
  throw new Error(`Invalid relationship where tuple container type: ${typeof value}`);
103
116
  }
104
- /** @type {Array<[string, "eq" | "notEq" | "gt" | "gteq" | "lt" | "lteq" | "like", any]>} */
117
+ /**
118
+ * Normalized.
119
+ @type {Array<[string, "eq" | "notEq" | "gt" | "gteq" | "lt" | "lteq" | "like", unknown]>} */
105
120
  const normalized = [];
106
- /** @param {unknown} conditionValue - Candidate nested condition. */
121
+ /**
122
+ * Add condition.
123
+ * @param {?} conditionValue - Candidate nested condition.
124
+ */
107
125
  const addCondition = (conditionValue) => {
108
126
  if (this._isRelationshipWhereOperatorTuple(conditionValue)) {
109
- const tuple = /** @type {[string, "eq" | "notEq" | "gt" | "gteq" | "lt" | "lteq" | "like" | ">" | ">=" | "<" | "<=", any, ...unknown[]]} */ (conditionValue);
127
+ const tuple = /**
128
+ * Narrows the runtime value to the documented type.
129
+ @type {[string, "eq" | "notEq" | "gt" | "gteq" | "lt" | "lteq" | "like" | ">" | ">=" | "<" | "<=", unknown, ...Array<unknown>]} */ (conditionValue);
110
130
  const normalizedOperator = normalizeRelationshipWhereOperator(tuple[1]);
111
131
  normalized.push([
112
132
  tuple[0],
@@ -134,7 +154,8 @@ export default class VelociousDatabaseQueryWhereModelClassHash extends WhereBase
134
154
  return normalized;
135
155
  }
136
156
  /**
137
- * @param {unknown} value - Candidate relationship where value.
157
+ * Runs is relationship where operator tuple container.
158
+ * @param {?} value - Candidate relationship where value.
138
159
  * @returns {boolean} - Whether value can be normalized to relationship tuples.
139
160
  */
140
161
  _isRelationshipWhereOperatorTupleContainer(value) {
@@ -147,10 +168,11 @@ export default class VelociousDatabaseQueryWhereModelClassHash extends WhereBase
147
168
  }
148
169
  }
149
170
  /**
171
+ * Runs where sqlfrom relationship where operator tuples.
150
172
  * @param {object} args - Relationship where options.
151
173
  * @param {typeof import("../record/index.js").default} args.modelClass - Relationship model class.
152
174
  * @param {string} args.tableName - Relationship table reference name.
153
- * @param {Array<[string, "eq" | "notEq" | "gt" | "gteq" | "lt" | "lteq" | "like", any]>} args.tuples - Operator tuples.
175
+ * @param {Array<[string, "eq" | "notEq" | "gt" | "gteq" | "lt" | "lteq" | "like", unknown]>} args.tuples - Operator tuples.
154
176
  * @returns {string} - SQL where fragment.
155
177
  */
156
178
  _whereSQLFromRelationshipWhereOperatorTuples({ modelClass, tableName, tuples }) {
@@ -244,11 +266,12 @@ export default class VelociousDatabaseQueryWhereModelClassHash extends WhereBase
244
266
  return sql;
245
267
  }
246
268
  /**
269
+ * Runs normalize sqlite boolean value.
247
270
  * @param {object} args - Options object.
248
271
  * @param {typeof import("../record/index.js").default} args.modelClass - Model class.
249
272
  * @param {string} args.columnName - Column name.
250
- * @param {any} args.value - Value to normalize.
251
- * @returns {any} - Normalized value.
273
+ * @param {?} args.value - Value to normalize.
274
+ * @returns {?} - Normalized value.
252
275
  */
253
276
  _normalizeSqliteBooleanValue({ modelClass, columnName, value }) {
254
277
  if (modelClass.getDatabaseType() != "sqlite")
@@ -258,7 +281,10 @@ export default class VelociousDatabaseQueryWhereModelClassHash extends WhereBase
258
281
  return value;
259
282
  if (columnType.toLowerCase() !== "boolean")
260
283
  return value;
261
- /** @param {any} entry - Value to normalize. */
284
+ /**
285
+ * Normalize.
286
+ * @param {?} entry - Value to normalize.
287
+ */
262
288
  const normalize = (entry) => {
263
289
  if (entry === true)
264
290
  return 1;
@@ -272,11 +298,12 @@ export default class VelociousDatabaseQueryWhereModelClassHash extends WhereBase
272
298
  return normalize(value);
273
299
  }
274
300
  /**
301
+ * Runs normalize value for column type.
275
302
  * @param {object} args - Options object.
276
303
  * @param {typeof import("../record/index.js").default} args.modelClass - Model class.
277
304
  * @param {string} args.columnName - Column name.
278
- * @param {any} args.value - Value to normalize.
279
- * @returns {any} - Normalized value.
305
+ * @param {?} args.value - Value to normalize.
306
+ * @returns {?} - Normalized value.
280
307
  */
281
308
  _normalizeValueForColumnType({ modelClass, columnName, value }) {
282
309
  const columnType = modelClass.getColumnTypeByName(columnName);
@@ -288,7 +315,10 @@ export default class VelociousDatabaseQueryWhereModelClassHash extends WhereBase
288
315
  const shouldCoerceToString = normalizedType.includes("uuid") ||
289
316
  normalizedType.includes("text") ||
290
317
  stringTypes.has(normalizedType);
291
- /** @param {any} entry - Value to normalize. */
318
+ /**
319
+ * Normalize.
320
+ * @param {?} entry - Value to normalize.
321
+ */
292
322
  const normalize = (entry) => {
293
323
  if (isUuidType && typeof entry === "number")
294
324
  return NO_MATCH;
@@ -308,6 +338,7 @@ export default class VelociousDatabaseQueryWhereModelClassHash extends WhereBase
308
338
  return normalized;
309
339
  }
310
340
  /**
341
+ * Runs where sqlfrom hash.
311
342
  * @param {WhereHash} hash - Hash.
312
343
  * @param {typeof import("../record/index.js").default} modelClass - Model class.
313
344
  * @param {string[]} path - Join path.
@@ -317,7 +348,9 @@ export default class VelociousDatabaseQueryWhereModelClassHash extends WhereBase
317
348
  */
318
349
  _whereSQLFromHash(hash, modelClass, path, tableName, index = 0) {
319
350
  const options = this.getOptions();
320
- const modelQuery = /** @type {import("./model-class-query.js").default} */ (this.query);
351
+ const modelQuery = /**
352
+ * Narrows the runtime value to the documented type.
353
+ @type {import("./model-class-query.js").default} */ (this.query);
321
354
  let sql = "";
322
355
  for (const whereKey in hash) {
323
356
  const whereValue = hash[whereKey];
@@ -361,7 +394,9 @@ export default class VelociousDatabaseQueryWhereModelClassHash extends WhereBase
361
394
  const targetModelClass = relationship.getTargetModelClass();
362
395
  if (!targetModelClass)
363
396
  throw new Error(`Relationship "${whereKey}" for ${modelClass.name} has no target model class`);
364
- const nestedHash = /** @type {WhereHash} */ (whereValue);
397
+ const nestedHash = /**
398
+ * Narrows the runtime value to the documented type.
399
+ @type {WhereHash} */ (whereValue);
365
400
  const nestedPath = path.concat([whereKey]);
366
401
  const nestedTableName = modelQuery.getTableReferenceForJoin(...nestedPath);
367
402
  sql += this._whereSQLFromHash(nestedHash, targetModelClass, nestedPath, nestedTableName, index);
@@ -412,4 +447,4 @@ export default class VelociousDatabaseQueryWhereModelClassHash extends WhereBase
412
447
  return sql;
413
448
  }
414
449
  }
415
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2hlcmUtbW9kZWwtY2xhc3MtaGFzaC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kYXRhYmFzZS9xdWVyeS93aGVyZS1tb2RlbC1jbGFzcy1oYXNoLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWixPQUFPLEtBQUssVUFBVSxNQUFNLFlBQVksQ0FBQTtBQUN4QyxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0saUJBQWlCLENBQUE7QUFDN0MsT0FBTyxTQUFTLE1BQU0saUJBQWlCLENBQUE7QUFFdkM7O0dBRUc7QUFFSCxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUE7QUFDbkMsTUFBTSwwQkFBMEIsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFBO0FBRXJIOzs7R0FHRztBQUNILFNBQVMsa0NBQWtDLENBQUMsUUFBUTtJQUNsRCxNQUFNLGVBQWUsR0FBRztRQUN0QixHQUFHLEVBQUUsSUFBSTtRQUNULElBQUksRUFBRSxNQUFNO1FBQ1osR0FBRyxFQUFFLElBQUk7UUFDVCxJQUFJLEVBQUUsTUFBTTtLQUNiLENBQUE7SUFFRCxPQUFPLHNFQUFzRSxDQUFDLENBQzVFLGVBQWUsRUFBQyxzQ0FBdUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLFFBQVEsQ0FDL0UsQ0FBQTtBQUNILENBQUM7QUFFRCxNQUFNLENBQUMsT0FBTyxPQUFPLHlDQUEwQyxTQUFRLFNBQVM7SUFDOUU7Ozs7OztPQU1HO0lBQ0gsWUFBWSxFQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLGdCQUFnQixHQUFHLEtBQUssRUFBQztRQUM3RCxLQUFLLEVBQUUsQ0FBQTtRQUNQLElB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QUFLLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7b0JBQzlCLEdBQUcsSUFBSSxRQUFRLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQTtnQkFDOUUsQ0FBQztxQkFBTSxJQUFJLFVBQVUsS0FBSyxJQUFJLEVBQUUsQ0FBQztvQkFDL0IsR0FBRyxJQUFJLFVBQVUsQ0FBQTtnQkFDbkIsQ0FBQztxQkFBTSxDQUFDO29CQUNOLEdBQUcsSUFBSSxNQUFNLE9BQU8sQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQTtnQkFDMUMsQ0FBQztZQUNILENBQUM7WUFFRCxLQUFLLEVBQUUsQ0FBQTtRQUNULENBQUM7UUFFRCxPQUFPLEdBQUcsQ0FBQTtJQUNaLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG5pbXBvcnQgKiBhcyBpbmZsZWN0aW9uIGZyb20gXCJpbmZsZWN0aW9uXCJcbmltcG9ydCB7aXNQbGFpbk9iamVjdH0gZnJvbSBcImlzLXBsYWluLW9iamVjdFwiXG5pbXBvcnQgV2hlcmVCYXNlIGZyb20gXCIuL3doZXJlLWJhc2UuanNcIlxuXG4vKipcbiAqIEB0eXBlZGVmIHt7W2tleTogc3RyaW5nXTogc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IG51bGwgfCBBcnJheTxzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgbnVsbD4gfCBSZWNvcmQ8c3RyaW5nLCBhbnk+fX0gV2hlcmVIYXNoXG4gKi9cblxuY29uc3QgTk9fTUFUQ0ggPSBTeW1ib2woXCJuby1tYXRjaFwiKVxuY29uc3QgcmVsYXRpb25zaGlwV2hlcmVPcGVyYXRvcnMgPSBuZXcgU2V0KFtcImVxXCIsIFwibm90RXFcIiwgXCJndFwiLCBcImd0ZXFcIiwgXCJsdFwiLCBcImx0ZXFcIiwgXCJsaWtlXCIsIFwiPlwiLCBcIj49XCIsIFwiPFwiLCBcIjw9XCJdKVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBvcGVyYXRvciAtIFJhdyByZWxhdGlvbnNoaXAgd2hlcmUgb3BlcmF0b3IuXG4gKiBAcmV0dXJucyB7XCJlcVwiIHwgXCJub3RFcVwiIHwgXCJndFwiIHwgXCJndGVxXCIgfCBcImx0XCIgfCBcImx0ZXFcIiB8IFwibGlrZVwifSAtIE5vcm1hbGl6ZWQgb3BlcmF0b3IuXG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZVJlbGF0aW9uc2hpcFdoZXJlT3BlcmF0b3Iob3BlcmF0b3IpIHtcbiAgY29uc3Qgb3BlcmF0b3JBbGlhc2VzID0ge1xuICAgIFwiPFwiOiBcImx0XCIsXG4gICAgXCI8PVwiOiBcImx0ZXFcIixcbiAgICBcIj5cIjogXCJndFwiLFxuICAgIFwiPj1cIjogXCJndGVxXCJcbiAgfVxuXG4gIHJldHVybiAvKiogQHR5cGUge1wiZXFcIiB8IFwibm90RXFcIiB8IFwiZ3RcIiB8IFwiZ3RlcVwiIHwgXCJsdFwiIHwgXCJsdGVxXCIgfCBcImxpa2VcIn0gKi8gKFxuICAgIG9wZXJhdG9yQWxpYXNlc1svKiogQHR5cGUge1wiPFwiIHwgXCI8PVwiIHwgXCI+XCIgfCBcIj49XCJ9ICovIChvcGVyYXRvcildIHx8IG9wZXJhdG9yXG4gIClcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVmVsb2Npb3VzRGF0YWJhc2VRdWVyeVdoZXJlTW9kZWxDbGFzc0hhc2ggZXh0ZW5kcyBXaGVyZUJhc2Uge1xuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IGFyZ3MgLSBPcHRpb25zIG9iamVjdC5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuL2luZGV4LmpzXCIpLmRlZmF1bHR9IGFyZ3MucXVlcnkgLSBRdWVyeSBpbnN0YW5jZS5cbiAgICogQHBhcmFtIHtXaGVyZUhhc2h9IGFyZ3MuaGFzaCAtIEhhc2guXG4gICAqIEBwYXJhbSB7dHlwZW9mIGltcG9ydChcIi4uL3JlY29yZC9pbmRleC5qc1wiKS5kZWZhdWx0fSBhcmdzLm1vZGVsQ2xhc3MgLSBNb2RlbCBjbGFzcy5cbiAgICogQHBhcmFtIHtib29sZWFufSBbYXJncy5xdWFsaWZ5QmFzZVRhYmxlXSAtIFdoZXRoZXIgdG8gcXVhbGlmeSBiYXNlIHRhYmxlIGNvbHVtbnMuXG4gICAqL1xuICBjb25zdHJ1Y3Rvcih7cXVlcnksIGhhc2gsIG1vZGVsQ2xhc3MsIHF1YWxpZnlCYXNlVGFibGUgPSBmYWxzZX0pIHtcbiAgICBzdXBlcigpXG4gICAgdGhpcy5oYXNoID0gaGFzaFxuICAgIHRoaXMubW9kZWxDbGFzcyA9IG1vZGVsQ2xhc3NcbiAgICB0aGlzLnF1YWxpZnlCYXNlVGFibGUgPSBxdWFsaWZ5QmFzZVRhYmxlXG4gICAgdGhpcy5xdWVyeSA9IHF1ZXJ5XG4gIH1cblxuICAvKipcbiAgICogQHJldHVybnMge3R5cGVvZiBpbXBvcnQoXCIuLi9yZWNvcmQvaW5kZXguanNcIikuZGVmYXVsdH0gLSBUaGUgbW9kZWwgY2xhc3MuXG4gICAqL1xuICBnZXRNb2RlbENsYXNzKCkge1xuICAgIGlmICghdGhpcy5tb2RlbENsYXNzKSB0aHJvdyBuZXcgRXJyb3IoXCJtb2RlbENsYXNzIG5vdCBzZXRcIilcblxuICAgIHJldHVybiB0aGlzLm1vZGVsQ2xhc3NcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSAtIFNRTCBzdHJpbmcuXG4gICAqL1xuICB0b1NxbCgpIHtcbiAgICBsZXQgc3FsID0gXCIoXCJcblxuICAgIGNvbnN0IG1vZGVsUXVlcnkgPSAvKiogQHR5cGUge2ltcG9ydChcIi4vbW9kZWwtY2xhc3MtcXVlcnkuanNcIikuZGVmYXVsdH0gKi8gKHRoaXMucXVlcnkpXG4gICAgY29uc3QgYmFzZVRhYmxlTmFtZSA9IHRoaXMucXVhbGlmeUJhc2VUYWJsZVxuICAgICAgPyBtb2RlbFF1ZXJ5LmdldFRhYmxlUmVmZXJlbmNlRm9ySm9pbigpXG4gICAgICA6IHVuZGVmaW5lZFxuXG4gICAgc3FsICs9IHRoaXMuX3doZXJlU1FMRnJvbUhhc2godGhpcy5oYXNoLCB0aGlzLmdldE1vZGVsQ2xhc3MoKSwgW10sIGJhc2VUYWJsZU5hbWUpXG4gICAgc3FsICs9IFwiKVwiXG5cbiAgICByZXR1cm4gc3FsXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHt0eXBlb2YgaW1wb3J0KFwiLi4vcmVjb3JkL2luZGV4LmpzXCIpLmRlZmF1bHR9IG1vZGVsQ2xhc3MgLSBNb2RlbCBjbGFzcy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIEF0dHJpYnV0ZSBvciBjb2x1bW4gbmFtZS5cbiAgICogQHJldHVybnMge3N0cmluZyB8IHVuZGVmaW5lZH0gLSBUaGUgcmVzb2x2ZWQgY29sdW1uIG5hbWUuXG4gICAqL1xuICBfcmVzb2x2ZUNvbHVtbk5hbWUobW9kZWxDbGFzcywga2V5KSB7XG4gICAgY29uc3QgYXR0cmlidXRlTWFwID0gbW9kZWxDbGFzcy5nZXRBdHRyaWJ1dGVOYW1lVG9Db2x1bW5OYW1lTWFwKClcblxuICAgIGlmIChhdHRyaWJ1dGVNYXBba2V5XSkgcmV0dXJuIGF0dHJpYnV0ZU1hcFtrZXldXG5cbiAgICBjb25zdCBjb2x1bW5NYXAgPSBtb2RlbENsYXNzLmdldENvbHVtbk5hbWVUb0F0dHJpYnV0ZU5hbWVNYXAoKVxuICAgIGNvbnN0IHVuZGVyc2NvcmVkID0gaW5mbGVjdGlvbi51bmRlcnNjb3JlKGtleSlcblxuICAgIGlmIChjb2x1bW5NYXBba2V5XSkgcmV0dXJuIGtleVxuICAgIGlmIChjb2x1bW5NYXBbdW5kZXJzY29yZWRdKSByZXR1cm4gdW5kZXJzY29yZWRcblxuICAgIHJldHVybiB1bmRlZmluZWRcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3R5cGVvZiBpbXBvcnQoXCIuLi9yZWNvcmQvaW5kZXguanNcIikuZGVmYXVsdH0gbW9kZWxDbGFzcyAtIE1vZGVsIGNsYXNzLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcmVsYXRpb25zaGlwTmFtZSAtIFJlbGF0aW9uc2hpcCBuYW1lLlxuICAgKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vcmVjb3JkL3JlbGF0aW9uc2hpcHMvYmFzZS5qc1wiKS5kZWZhdWx0IHwgdW5kZWZpbmVkfSAtIFRoZSByZWxhdGlvbnNoaXAuXG4gICAqL1xuICBfZ2V0UmVsYXRpb25zaGlwKG1vZGVsQ2xhc3MsIHJlbGF0aW9uc2hpcE5hbWUpIHtcbiAgICByZXR1cm4gbW9kZWxDbGFzcy5nZXRSZWxhdGlvbnNoaXBzTWFwKClbcmVsYXRpb25zaGlwTmFtZV1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3Vua25vd259IHR1cGxlVmFsdWUgLSBDYW5kaWRhdGUgdHVwbGUuXG4gICAqIEByZXR1cm5zIHtib29sZWFufSAtIFdoZXRoZXIgdGhpcyBpcyBhIHJlbGF0aW9uc2hpcCB3aGVyZSB0dXBsZS5cbiAgICovXG4gIF9pc1JlbGF0aW9uc2hpcFdoZXJlT3BlcmF0b3JUdXBsZSh0dXBsZVZhbHVlKSB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHR1cGxlVmFsdWUpIHx8IHR1cGxlVmFsdWUubGVuZ3RoIDwgMykge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgcmV0dXJuIHR5cGVvZiB0dXBsZVZhbHVlWzBdID09PSBcInN0cmluZ1wiICYmXG4gICAgICB0eXBlb2YgdHVwbGVWYWx1ZVsxXSA9PT0gXCJzdHJpbmdcIiAmJlxuICAgICAgcmVsYXRpb25zaGlwV2hlcmVPcGVyYXRvcnMuaGFzKHR1cGxlVmFsdWVbMV0pXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHt1bmtub3dufSB2YWx1ZSAtIENhbmRpZGF0ZSByZWxhdGlvbnNoaXAgd2hlcmUgdmFsdWUuXG4gICAqIEByZXR1cm5zIHtBcnJheTxbc3RyaW5nLCBcImVxXCIgfCBcIm5vdEVxXCIgfCBcImd0XCIgfCBcImd0ZXFcIiB8IFwibHRcIiB8IFwibHRlcVwiIHwgXCJsaWtlXCIsIGFueV0+fSAtIE5vcm1hbGl6ZWQgdHVwbGVzLlxuICAgKi9cbiAgX25vcm1hbGl6ZVJlbGF0aW9uc2hpcFdoZXJlT3BlcmF0b3JUdXBsZXModmFsdWUpIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgcmVsYXRpb25zaGlwIHdoZXJlIHR1cGxlIGNvbnRhaW5lciB0eXBlOiAke3R5cGVvZiB2YWx1ZX1gKVxuICAgIH1cblxuICAgIC8qKiBAdHlwZSB7QXJyYXk8W3N0cmluZywgXCJlcVwiIHwgXCJub3RFcVwiIHwgXCJndFwiIHwgXCJndGVxXCIgfCBcImx0XCIgfCBcImx0ZXFcIiB8IFwibGlrZVwiLCBhbnldPn0gKi9cbiAgICBjb25zdCBub3JtYWxpemVkID0gW11cbiAgICAvKiogQHBhcmFtIHt1bmtub3dufSBjb25kaXRpb25WYWx1ZSAtIENhbmRpZGF0ZSBuZXN0ZWQgY29uZGl0aW9uLiAqL1xuICAgIGNvbnN0IGFkZENvbmRpdGlvbiA9IChjb25kaXRpb25WYWx1ZSkgPT4ge1xuICAgICAgaWYgKHRoaXMuX2lzUmVsYXRpb25zaGlwV2hlcmVPcGVyYXRvclR1cGxlKGNvbmRpdGlvblZhbHVlKSkge1xuICAgICAgICBjb25zdCB0dXBsZSA9IC8qKiBAdHlwZSB7W3N0cmluZywgXCJlcVwiIHwgXCJub3RFcVwiIHwgXCJndFwiIHwgXCJndGVxXCIgfCBcImx0XCIgfCBcImx0ZXFcIiB8IFwibGlrZVwiIHwgXCI+XCIgfCBcIj49XCIgfCBcIjxcIiB8IFwiPD1cIiwgYW55LCAuLi51bmtub3duW11dfSAqLyAoY29uZGl0aW9uVmFsdWUpXG4gICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRPcGVyYXRvciA9IG5vcm1hbGl6ZVJlbGF0aW9uc2hpcFdoZXJlT3BlcmF0b3IodHVwbGVbMV0pXG5cbiAgICAgICAgbm9ybWFsaXplZC5wdXNoKFtcbiAgICAgICAgICB0dXBsZVswXSxcbiAgICAgICAgICBub3JtYWxpemVkT3BlcmF0b3IsXG4gICAgICAgICAgdHVwbGVbMl1cbiAgICAgICAgXSlcblxuICAgICAgICBpZiAodHVwbGUubGVuZ3RoID4gMykge1xuICAgICAgICAgIGZvciAobGV0IGluZGV4ID0gMzsgaW5kZXggPCB0dXBsZS5sZW5ndGg7IGluZGV4ICs9IDEpIHtcbiAgICAgICAgICAgIGFkZENvbmRpdGlvbih0dXBsZVtpbmRleF0pXG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGlmICghQXJyYXkuaXNBcnJheShjb25kaXRpb25WYWx1ZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUmVsYXRpb25zaGlwIHdoZXJlIGNvbmRpdGlvbnMgbXVzdCBiZSB0dXBsZXNcIilcbiAgICAgIH1cblxuICAgICAgY29uZGl0aW9uVmFsdWUuZm9yRWFjaCgobmVzdGVkQ29uZGl0aW9uVmFsdWUpID0+IHtcbiAgICAgICAgYWRkQ29uZGl0aW9uKG5lc3RlZENvbmRpdGlvblZhbHVlKVxuICAgICAgfSlcbiAgICB9XG5cbiAgICBhZGRDb25kaXRpb24odmFsdWUpXG5cbiAgICBpZiAobm9ybWFsaXplZC5sZW5ndGggPCAxKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJSZWxhdGlvbnNoaXAgd2hlcmUgdHVwbGUgY29udGFpbmVyIGNhbm5vdCBiZSBlbXB0eVwiKVxuICAgIH1cblxuICAgIHJldHVybiBub3JtYWxpemVkXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHt1bmtub3dufSB2YWx1ZSAtIENhbmRpZGF0ZSByZWxhdGlvbnNoaXAgd2hlcmUgdmFsdWUuXG4gICAqIEByZXR1cm5zIHtib29sZWFufSAtIFdoZXRoZXIgdmFsdWUgY2FuIGJlIG5vcm1hbGl6ZWQgdG8gcmVsYXRpb25zaGlwIHR1cGxlcy5cbiAgICovXG4gIF9pc1JlbGF0aW9uc2hpcFdoZXJlT3BlcmF0b3JUdXBsZUNvbnRhaW5lcih2YWx1ZSkge1xuICAgIHRyeSB7XG4gICAgICB0aGlzLl9ub3JtYWxpemVSZWxhdGlvbnNoaXBXaGVyZU9wZXJhdG9yVHVwbGVzKHZhbHVlKVxuXG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gUmVsYXRpb25zaGlwIHdoZXJlIG9wdGlvbnMuXG4gICAqIEBwYXJhbSB7dHlwZW9mIGltcG9ydChcIi4uL3JlY29yZC9pbmRleC5qc1wiKS5kZWZhdWx0fSBhcmdzLm1vZGVsQ2xhc3MgLSBSZWxhdGlvbnNoaXAgbW9kZWwgY2xhc3MuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhcmdzLnRhYmxlTmFtZSAtIFJlbGF0aW9uc2hpcCB0YWJsZSByZWZlcmVuY2UgbmFtZS5cbiAgICogQHBhcmFtIHtBcnJheTxbc3RyaW5nLCBcImVxXCIgfCBcIm5vdEVxXCIgfCBcImd0XCIgfCBcImd0ZXFcIiB8IFwibHRcIiB8IFwibHRlcVwiIHwgXCJsaWtlXCIsIGFueV0+fSBhcmdzLnR1cGxlcyAtIE9wZXJhdG9yIHR1cGxlcy5cbiAgICogQHJldHVybnMge3N0cmluZ30gLSBTUUwgd2hlcmUgZnJhZ21lbnQuXG4gICAqL1xuICBfd2hlcmVTUUxGcm9tUmVsYXRpb25zaGlwV2hlcmVPcGVyYXRvclR1cGxlcyh7bW9kZWxDbGFzcywgdGFibGVOYW1lLCB0dXBsZXN9KSB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMuZ2V0T3B0aW9ucygpXG4gICAgbGV0IHNxbCA9IFwiXCJcbiAgICBsZXQgaW5kZXggPSAwXG5cbiAgICB0dXBsZXMuZm9yRWFjaCgoW2F0dHJpYnV0ZU5hbWUsIG9wZXJhdG9yLCB3aGVyZVZhbHVlXSkgPT4ge1xuICAgICAgaWYgKGluZGV4ID4gMCkgc3FsICs9IFwiIEFORCBcIlxuXG4gICAgICBjb25zdCBjb2x1bW5OYW1lID0gdGhpcy5fcmVzb2x2ZUNvbHVtbk5hbWUobW9kZWxDbGFzcywgYXR0cmlidXRlTmFtZSlcblxuICAgICAgaWYgKCFjb2x1bW5OYW1lKSB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gYXR0cmlidXRlIFwiJHthdHRyaWJ1dGVOYW1lfVwiIGZvciAke21vZGVsQ2xhc3MubmFtZX1gKVxuXG4gICAgICBjb25zdCBub3JtYWxpemVkVmFsdWUgPSB0aGlzLl9ub3JtYWxpemVTcWxpdGVCb29sZWFuVmFsdWUoe1xuICAgICAgICBjb2x1bW5OYW1lLFxuICAgICAgICBtb2RlbENsYXNzLFxuICAgICAgICB2YWx1ZTogd2hlcmVWYWx1ZVxuICAgICAgfSlcbiAgICAgIGNvbnN0IHR5cGVkVmFsdWUgPSB0aGlzLl9ub3JtYWxpemVWYWx1ZUZvckNvbHVtblR5cGUoe1xuICAgICAgICBjb2x1bW5OYW1lLFxuICAgICAgICBtb2RlbENsYXNzLFxuICAgICAgICB2YWx1ZTogbm9ybWFsaXplZFZhbHVlXG4gICAgICB9KVxuICAgICAgY29uc3QgY29sdW1uVHlwZSA9IG1vZGVsQ2xhc3MuZ2V0Q29sdW1uVHlwZUJ5TmFtZShjb2x1bW5OYW1lKVxuICAgICAgY29uc3QgZHJpdmVyVHlwZSA9IHRoaXMuZ2V0UXVlcnkoKS5kcml2ZXIuZ2V0VHlwZSgpXG5cbiAgICAgIGlmICh0eXBlZFZhbHVlID09PSBOT19NQVRDSCkge1xuICAgICAgICBpZiAob3BlcmF0b3IgPT09IFwibm90RXFcIikge1xuICAgICAgICAgIHNxbCArPSBcIjE9MVwiXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3FsICs9IFwiMT0wXCJcbiAgICAgICAgfVxuICAgICAgICBpbmRleCArPSAxXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBsZXQgY29sdW1uU3FsID0gYCR7b3B0aW9ucy5xdW90ZVRhYmxlTmFtZSh0YWJsZU5hbWUpfS4ke29wdGlvbnMucXVvdGVDb2x1bW5OYW1lKGNvbHVtbk5hbWUpfWBcblxuICAgICAgaWYgKGRyaXZlclR5cGUgPT0gXCJtc3NxbFwiICYmIHR5cGVvZiB3aGVyZVZhbHVlID09PSBcInN0cmluZ1wiICYmIGNvbHVtblR5cGU/LnRvTG93ZXJDYXNlKCkgPT0gXCJ0ZXh0XCIpIHtcbiAgICAgICAgY29sdW1uU3FsID0gYENBU1QoJHtjb2x1bW5TcWx9IEFTIE5WQVJDSEFSKE1BWCkpYFxuICAgICAgfVxuXG4gICAgICBpZiAob3BlcmF0b3IgPT09IFwiZXFcIikge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh0eXBlZFZhbHVlKSkge1xuICAgICAgICAgIGlmICh0eXBlZFZhbHVlLmxlbmd0aCA8IDEpIHtcbiAgICAgICAgICAgIHNxbCArPSBcIjE9MFwiXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHNxbCArPSBgJHtjb2x1bW5TcWx9IElOICgke3R5cGVkVmFsdWUubWFwKCh2YWx1ZSkgPT4gb3B0aW9ucy5xdW90ZSh2YWx1ZSkpLmpvaW4oXCIsIFwiKX0pYFxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICh0eXBlZFZhbHVlID09PSBudWxsKSB7XG4gICAgICAgICAgc3FsICs9IGAke2NvbHVtblNxbH0gSVMgTlVMTGBcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzcWwgKz0gYCR7Y29sdW1uU3FsfSA9ICR7b3B0aW9ucy5xdW90ZSh0eXBlZFZhbHVlKX1gXG4gICAgICAgIH1cblxuICAgICAgICBpbmRleCArPSAxXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBpZiAob3BlcmF0b3IgPT09IFwibm90RXFcIikge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh0eXBlZFZhbHVlKSkge1xuICAgICAgICAgIGlmICh0eXBlZFZhbHVlLmxlbmd0aCA8IDEpIHtcbiAgICAgICAgICAgIHNxbCArPSBcIjE9MVwiXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHNxbCArPSBgJHtjb2x1bW5TcWx9IE5PVCBJTiAoJHt0eXBlZFZhbHVlLm1hcCgodmFsdWUpID0+IG9wdGlvbnMucXVvdGUodmFsdWUpKS5qb2luKFwiLCBcIil9KWBcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZWRWYWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICAgIHNxbCArPSBgJHtjb2x1bW5TcWx9IElTIE5PVCBOVUxMYFxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNxbCArPSBgJHtjb2x1bW5TcWx9ICE9ICR7b3B0aW9ucy5xdW90ZSh0eXBlZFZhbHVlKX1gXG4gICAgICAgIH1cblxuICAgICAgICBpbmRleCArPSAxXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh0eXBlZFZhbHVlKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE9wZXJhdG9yIFwiJHtvcGVyYXRvcn1cIiBkb2VzIG5vdCBzdXBwb3J0IGFycmF5IHZhbHVlcyBmb3IgJHttb2RlbENsYXNzLm5hbWV9LiR7YXR0cmlidXRlTmFtZX1gKVxuICAgICAgfVxuXG4gICAgICBpZiAodHlwZWRWYWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE9wZXJhdG9yIFwiJHtvcGVyYXRvcn1cIiBkb2VzIG5vdCBzdXBwb3J0IG51bGwgdmFsdWVzIGZvciAke21vZGVsQ2xhc3MubmFtZX0uJHthdHRyaWJ1dGVOYW1lfWApXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG9wZXJhdG9yTWFwID0ge1xuICAgICAgICBndDogXCI+XCIsXG4gICAgICAgIGd0ZXE6IFwiPj1cIixcbiAgICAgICAgbGlrZTogXCJMSUtFXCIsXG4gICAgICAgIGx0OiBcIjxcIixcbiAgICAgICAgbHRlcTogXCI8PVwiXG4gICAgICB9XG5cbiAgICAgIHNxbCArPSBgJHtjb2x1bW5TcWx9ICR7b3BlcmF0b3JNYXBbb3BlcmF0b3JdfSAke29wdGlvbnMucXVvdGUodHlwZWRWYWx1ZSl9YFxuICAgICAgaW5kZXggKz0gMVxuICAgIH0pXG5cbiAgICByZXR1cm4gc3FsXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IGFyZ3MgLSBPcHRpb25zIG9iamVjdC5cbiAgICogQHBhcmFtIHt0eXBlb2YgaW1wb3J0KFwiLi4vcmVjb3JkL2luZGV4LmpzXCIpLmRlZmF1bHR9IGFyZ3MubW9kZWxDbGFzcyAtIE1vZGVsIGNsYXNzLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYXJncy5jb2x1bW5OYW1lIC0gQ29sdW1uIG5hbWUuXG4gICAqIEBwYXJhbSB7YW55fSBhcmdzLnZhbHVlIC0gVmFsdWUgdG8gbm9ybWFsaXplLlxuICAgKiBAcmV0dXJucyB7YW55fSAtIE5vcm1hbGl6ZWQgdmFsdWUuXG4gICAqL1xuICBfbm9ybWFsaXplU3FsaXRlQm9vbGVhblZhbHVlKHttb2RlbENsYXNzLCBjb2x1bW5OYW1lLCB2YWx1ZX0pIHtcbiAgICBpZiAobW9kZWxDbGFzcy5nZXREYXRhYmFzZVR5cGUoKSAhPSBcInNxbGl0ZVwiKSByZXR1cm4gdmFsdWVcblxuICAgIGNvbnN0IGNvbHVtblR5cGUgPSBtb2RlbENsYXNzLmdldENvbHVtblR5cGVCeU5hbWUoY29sdW1uTmFtZSlcblxuICAgIGlmICghY29sdW1uVHlwZSkgcmV0dXJuIHZhbHVlXG4gICAgaWYgKGNvbHVtblR5cGUudG9Mb3dlckNhc2UoKSAhPT0gXCJib29sZWFuXCIpIHJldHVybiB2YWx1ZVxuXG4gICAgLyoqIEBwYXJhbSB7YW55fSBlbnRyeSAtIFZhbHVlIHRvIG5vcm1hbGl6ZS4gKi9cbiAgICBjb25zdCBub3JtYWxpemUgPSAoZW50cnkpID0+IHtcbiAgICAgIGlmIChlbnRyeSA9PT0gdHJ1ZSkgcmV0dXJuIDFcbiAgICAgIGlmIChlbnRyeSA9PT0gZmFsc2UpIHJldHVybiAwXG4gICAgICByZXR1cm4gZW50cnlcbiAgICB9XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiB2YWx1ZS5tYXAoKGVudHJ5KSA9PiBub3JtYWxpemUoZW50cnkpKVxuICAgIH1cblxuICAgIHJldHVybiBub3JtYWxpemUodmFsdWUpXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IGFyZ3MgLSBPcHRpb25zIG9iamVjdC5cbiAgICogQHBhcmFtIHt0eXBlb2YgaW1wb3J0KFwiLi4vcmVjb3JkL2luZGV4LmpzXCIpLmRlZmF1bHR9IGFyZ3MubW9kZWxDbGFzcyAtIE1vZGVsIGNsYXNzLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYXJncy5jb2x1bW5OYW1lIC0gQ29sdW1uIG5hbWUuXG4gICAqIEBwYXJhbSB7YW55fSBhcmdzLnZhbHVlIC0gVmFsdWUgdG8gbm9ybWFsaXplLlxuICAgKiBAcmV0dXJucyB7YW55fSAtIE5vcm1hbGl6ZWQgdmFsdWUuXG4gICAqL1xuICBfbm9ybWFsaXplVmFsdWVGb3JDb2x1bW5UeXBlKHttb2RlbENsYXNzLCBjb2x1bW5OYW1lLCB2YWx1ZX0pIHtcbiAgICBjb25zdCBjb2x1bW5UeXBlID0gbW9kZWxDbGFzcy5nZXRDb2x1bW5UeXBlQnlOYW1lKGNvbHVtbk5hbWUpXG5cbiAgICBpZiAoIWNvbHVtblR5cGUpIHJldHVybiB2YWx1ZVxuXG4gICAgY29uc3Qgbm9ybWFsaXplZFR5cGUgPSBjb2x1bW5UeXBlLnRvTG93ZXJDYXNlKClcbiAgICBjb25zdCBzdHJpbmdUeXBlcyA9IG5ldyBTZXQoW1wiY2hhclwiLCBcInZhcmNoYXJcIiwgXCJudmFyY2hhclwiLCBcInN0cmluZ1wiLCBcImVudW1cIiwgXCJqc29uXCIsIFwianNvbmJcIiwgXCJjaXRleHRcIiwgXCJiaW5hcnlcIiwgXCJ2YXJiaW5hcnlcIl0pXG4gICAgY29uc3QgaXNVdWlkVHlwZSA9IG5vcm1hbGl6ZWRUeXBlLmluY2x1ZGVzKFwidXVpZFwiKVxuICAgIGNvbnN0IHNob3VsZENvZXJjZVRvU3RyaW5nID0gbm9ybWFsaXplZFR5cGUuaW5jbHVkZXMoXCJ1dWlkXCIpIHx8XG4gICAgICBub3JtYWxpemVkVHlwZS5pbmNsdWRlcyhcInRleHRcIikgfHxcbiAgICAgIHN0cmluZ1R5cGVzLmhhcyhub3JtYWxpemVkVHlwZSlcblxuICAgIC8qKiBAcGFyYW0ge2FueX0gZW50cnkgLSBWYWx1ZSB0byBub3JtYWxpemUuICovXG4gICAgY29uc3Qgbm9ybWFsaXplID0gKGVudHJ5KSA9PiB7XG4gICAgICBpZiAoaXNVdWlkVHlwZSAmJiB0eXBlb2YgZW50cnkgPT09IFwibnVtYmVyXCIpIHJldHVybiBOT19NQVRDSFxuICAgICAgaWYgKCFzaG91bGRDb2VyY2VUb1N0cmluZyB8fCB0eXBlb2YgZW50cnkgIT09IFwibnVtYmVyXCIpIHJldHVybiBlbnRyeVxuXG4gICAgICByZXR1cm4gU3RyaW5nKGVudHJ5KVxuICAgIH1cblxuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgY29uc3Qgbm9ybWFsaXplZCA9IHZhbHVlLm1hcCgoZW50cnkpID0+IG5vcm1hbGl6ZShlbnRyeSkpLmZpbHRlcigoZW50cnkpID0+IGVudHJ5ICE9PSBOT19NQVRDSClcblxuICAgICAgaWYgKGlzVXVpZFR5cGUgJiYgbm9ybWFsaXplZC5sZW5ndGggPT09IDApIHJldHVybiBOT19NQVRDSFxuXG4gICAgICByZXR1cm4gbm9ybWFsaXplZFxuICAgIH1cblxuICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSBub3JtYWxpemUodmFsdWUpXG5cbiAgICBpZiAobm9ybWFsaXplZCA9PT0gTk9fTUFUQ0gpIHJldHVybiBOT19NQVRDSFxuXG4gICAgcmV0dXJuIG5vcm1hbGl6ZWRcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge1doZXJlSGFzaH0gaGFzaCAtIEhhc2guXG4gICAqIEBwYXJhbSB7dHlwZW9mIGltcG9ydChcIi4uL3JlY29yZC9pbmRleC5qc1wiKS5kZWZhdWx0fSBtb2RlbENsYXNzIC0gTW9kZWwgY2xhc3MuXG4gICAqIEBwYXJhbSB7c3RyaW5nW119IHBhdGggLSBKb2luIHBhdGguXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbdGFibGVOYW1lXSAtIFRhYmxlIG5hbWUuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleCAtIEluZGV4IHZhbHVlLlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSAtIFNRTCBzdHJpbmcuXG4gICAqL1xuICBfd2hlcmVTUUxGcm9tSGFzaChoYXNoLCBtb2RlbENsYXNzLCBwYXRoLCB0YWJsZU5hbWUsIGluZGV4ID0gMCkge1xuICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLmdldE9wdGlvbnMoKVxuICAgIGNvbnN0IG1vZGVsUXVlcnkgPSAvKiogQHR5cGUge2ltcG9ydChcIi4vbW9kZWwtY2xhc3MtcXVlcnkuanNcIikuZGVmYXVsdH0gKi8gKHRoaXMucXVlcnkpXG4gICAgbGV0IHNxbCA9IFwiXCJcblxuICAgIGZvciAoY29uc3Qgd2hlcmVLZXkgaW4gaGFzaCkge1xuICAgICAgY29uc3Qgd2hlcmVWYWx1ZSA9IGhhc2hbd2hlcmVLZXldXG4gICAgICBjb25zdCByZWxhdGlvbnNoaXAgPSB0aGlzLl9nZXRSZWxhdGlvbnNoaXAobW9kZWxDbGFzcywgd2hlcmVLZXkpXG4gICAgICBjb25zdCB0dXBsZXMgPSB0aGlzLl9pc1JlbGF0aW9uc2hpcFdoZXJlT3BlcmF0b3JUdXBsZUNvbnRhaW5lcih3aGVyZVZhbHVlKVxuICAgICAgICA/IHRoaXMuX25vcm1hbGl6ZVJlbGF0aW9uc2hpcFdoZXJlT3BlcmF0b3JUdXBsZXMod2hlcmVWYWx1ZSlcbiAgICAgICAgOiBudWxsXG4gICAgICBjb25zdCByZXNvbHZlZENvbHVtbk5hbWUgPSB0aGlzLl9yZXNvbHZlQ29sdW1uTmFtZShtb2RlbENsYXNzLCB3aGVyZUtleSlcblxuICAgICAgaWYgKHJlbGF0aW9uc2hpcCAmJiB0dXBsZXMpIHtcbiAgICAgICAgaWYgKGluZGV4ID4gMCkgc3FsICs9IFwiIEFORCBcIlxuXG4gICAgICAgIGNvbnN0IHRhcmdldE1vZGVsQ2xhc3MgPSByZWxhdGlvbnNoaXAuZ2V0VGFyZ2V0TW9kZWxDbGFzcygpXG5cbiAgICAgICAgaWYgKCF0YXJnZXRNb2RlbENsYXNzKSB0aHJvdyBuZXcgRXJyb3IoYFJlbGF0aW9uc2hpcCBcIiR7d2hlcmVLZXl9XCIgZm9yICR7bW9kZWxDbGFzcy5uYW1lfSBoYXMgbm8gdGFyZ2V0IG1vZGVsIGNsYXNzYClcblxuICAgICAgICBjb25zdCBuZXN0ZWRQYXRoID0gcGF0aC5jb25jYXQoW3doZXJlS2V5XSlcbiAgICAgICAgY29uc3QgbmVzdGVkVGFibGVOYW1lID0gbW9kZWxRdWVyeS5nZXRUYWJsZVJlZmVyZW5jZUZvckpvaW4oLi4ubmVzdGVkUGF0aClcblxuICAgICAgICBzcWwgKz0gdGhpcy5fd2hlcmVTUUxGcm9tUmVsYXRpb25zaGlwV2hlcmVPcGVyYXRvclR1cGxlcyh7XG4gICAgICAgICAgbW9kZWxDbGFzczogdGFyZ2V0TW9kZWxDbGFzcyxcbiAgICAgICAgICB0YWJsZU5hbWU6IG5lc3RlZFRhYmxlTmFtZSxcbiAgICAgICAgICB0dXBsZXNcbiAgICAgICAgfSlcbiAgICAgIH0gZWxzZSBpZiAocmVzb2x2ZWRDb2x1bW5OYW1lICYmIHR1cGxlcykge1xuICAgICAgICBpZiAoaW5kZXggPiAwKSBzcWwgKz0gXCIgQU5EIFwiXG5cbiAgICAgICAgc3FsICs9IHRoaXMuX3doZXJlU1FMRnJvbVJlbGF0aW9uc2hpcFdoZXJlT3BlcmF0b3JUdXBsZXMoe1xuICAgICAgICAgIG1vZGVsQ2xhc3MsXG4gICAgICAgICAgdGFibGVOYW1lOiB0YWJsZU5hbWUgfHwgbW9kZWxRdWVyeS5nZXRUYWJsZVJlZmVyZW5jZUZvckpvaW4oLi4ucGF0aCksXG4gICAgICAgICAgdHVwbGVzXG4gICAgICAgIH0pXG4gICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkod2hlcmVWYWx1ZSkgJiYgd2hlcmVWYWx1ZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgaWYgKGluZGV4ID4gMCkgc3FsICs9IFwiIEFORCBcIlxuICAgICAgICBzcWwgKz0gXCIxPTBcIlxuICAgICAgfSBlbHNlIGlmIChpc1BsYWluT2JqZWN0KHdoZXJlVmFsdWUpKSB7XG4gICAgICAgIGlmICghcmVsYXRpb25zaGlwKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIHJlbGF0aW9uc2hpcCBcIiR7d2hlcmVLZXl9XCIgZm9yICR7bW9kZWxDbGFzcy5uYW1lfWApXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0YXJnZXRNb2RlbENsYXNzID0gcmVsYXRpb25zaGlwLmdldFRhcmdldE1vZGVsQ2xhc3MoKVxuXG4gICAgICAgIGlmICghdGFyZ2V0TW9kZWxDbGFzcykgdGhyb3cgbmV3IEVycm9yKGBSZWxhdGlvbnNoaXAgXCIke3doZXJlS2V5fVwiIGZvciAke21vZGVsQ2xhc3MubmFtZX0gaGFzIG5vIHRhcmdldCBtb2RlbCBjbGFzc2ApXG5cbiAgICAgICAgY29uc3QgbmVzdGVkSGFzaCA9IC8qKiBAdHlwZSB7V2hlcmVIYXNofSAqLyAod2hlcmVWYWx1ZSlcbiAgICAgICAgY29uc3QgbmVzdGVkUGF0aCA9IHBhdGguY29uY2F0KFt3aGVyZUtleV0pXG4gICAgICAgIGNvbnN0IG5lc3RlZFRhYmxlTmFtZSA9IG1vZGVsUXVlcnkuZ2V0VGFibGVSZWZlcmVuY2VGb3JKb2luKC4uLm5lc3RlZFBhdGgpXG5cbiAgICAgICAgc3FsICs9IHRoaXMuX3doZXJlU1FMRnJvbUhhc2gobmVzdGVkSGFzaCwgdGFyZ2V0TW9kZWxDbGFzcywgbmVzdGVkUGF0aCwgbmVzdGVkVGFibGVOYW1lLCBpbmRleClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChpbmRleCA+IDApIHNxbCArPSBcIiBBTkQgXCJcblxuICAgICAgICBjb25zdCBjb2x1bW5OYW1lID0gdGhpcy5fcmVzb2x2ZUNvbHVtbk5hbWUobW9kZWxDbGFzcywgd2hlcmVLZXkpXG5cbiAgICAgICAgaWYgKCFjb2x1bW5OYW1lKSB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gYXR0cmlidXRlIFwiJHt3aGVyZUtleX1cIiBmb3IgJHttb2RlbENsYXNzLm5hbWV9YClcblxuICAgICAgICBjb25zdCBjb2x1bW5UeXBlID0gbW9kZWxDbGFzcy5nZXRDb2x1bW5UeXBlQnlOYW1lKGNvbHVtbk5hbWUpXG5cbiAgICAgICAgY29uc3Qgbm9ybWFsaXplZFZhbHVlID0gdGhpcy5fbm9ybWFsaXplU3FsaXRlQm9vbGVhblZhbHVlKHtcbiAgICAgICAgICBjb2x1bW5OYW1lLFxuICAgICAgICAgIG1vZGVsQ2xhc3MsXG4gICAgICAgICAgdmFsdWU6IHdoZXJlVmFsdWVcbiAgICAgICAgfSlcbiAgICAgICAgY29uc3QgdHlwZWRWYWx1ZSA9IHRoaXMuX25vcm1hbGl6ZVZhbHVlRm9yQ29sdW1uVHlwZSh7XG4gICAgICAgICAgY29sdW1uTmFtZSxcbiAgICAgICAgICBtb2RlbENsYXNzLFxuICAgICAgICAgIHZhbHVlOiBub3JtYWxpemVkVmFsdWVcbiAgICAgICAgfSlcblxuICAgICAgICBpZiAodHlwZWRWYWx1ZSA9PT0gTk9fTUFUQ0gpIHtcbiAgICAgICAgICBzcWwgKz0gXCIxPTBcIlxuICAgICAgICAgIGluZGV4KytcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGNvbHVtblNxbCA9IGAke29wdGlvbnMucXVvdGVDb2x1bW5OYW1lKGNvbHVtbk5hbWUpfWBcblxuICAgICAgICBpZiAodGFibGVOYW1lKSB7XG4gICAgICAgICAgY29sdW1uU3FsID0gYCR7b3B0aW9ucy5xdW90ZVRhYmxlTmFtZSh0YWJsZU5hbWUpfS4ke2NvbHVtblNxbH1gXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkcml2ZXJUeXBlID0gdGhpcy5nZXRRdWVyeSgpLmRyaXZlci5nZXRUeXBlKClcblxuICAgICAgICBpZiAoZHJpdmVyVHlwZSA9PSBcIm1zc3FsXCIgJiYgdHlwZW9mIHdoZXJlVmFsdWUgPT09IFwic3RyaW5nXCIgJiYgY29sdW1uVHlwZT8udG9Mb3dlckNhc2UoKSA9PSBcInRleHRcIikge1xuICAgICAgICAgIGNvbHVtblNxbCA9IGBDQVNUKCR7Y29sdW1uU3FsfSBBUyBOVkFSQ0hBUihNQVgpKWBcbiAgICAgICAgfVxuXG4gICAgICAgIHNxbCArPSBjb2x1bW5TcWxcblxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh0eXBlZFZhbHVlKSkge1xuICAgICAgICAgIHNxbCArPSBgIElOICgke3R5cGVkVmFsdWUubWFwKCh2YWx1ZSkgPT4gb3B0aW9ucy5xdW90ZSh2YWx1ZSkpLmpvaW4oXCIsIFwiKX0pYFxuICAgICAgICB9IGVsc2UgaWYgKHR5cGVkVmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgICBzcWwgKz0gXCIgSVMgTlVMTFwiXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3FsICs9IGAgPSAke29wdGlvbnMucXVvdGUodHlwZWRWYWx1ZSl9YFxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGluZGV4KytcbiAgICB9XG5cbiAgICByZXR1cm4gc3FsXG4gIH1cbn1cbiJdfQ==
450
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2hlcmUtbW9kZWwtY2xhc3MtaGFzaC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kYXRhYmFzZS9xdWVyeS93aGVyZS1tb2RlbC1jbGFzcy1oYXNoLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWixPQUFPLEtBQUssVUFBVSxNQUFNLFlBQVksQ0FBQTtBQUN4QyxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0saUJBQWlCLENBQUE7QUFDN0MsT0FBTyxTQUFTLE1BQU0saUJBQWlCLENBQUE7QUFFdkM7OztHQUdHO0FBRUgsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFBO0FBQ25DLE1BQU0sMEJBQTBCLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQTtBQUVySDs7OztHQUlHO0FBQ0gsU0FBUyxrQ0FBa0MsQ0FBQyxRQUFRO0lBQ2xELE1BQU0sZUFBZSxHQUFHO1FBQ3RCLEdBQUcsRUFBRSxJQUFJO1FBQ1QsSUFBSSxFQUFFLE1BQU07UUFDWixHQUFHLEVBQUUsSUFBSTtRQUNULElBQUksRUFBRSxNQUFNO0tBQ2IsQ0FBQTtJQUVELE9BQU8sd0hBQXdILENBQUMsQ0FDOUgsZUFBZSxFQUFDOzt3REFFcUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLFFBQVEsQ0FDN0UsQ0FBQTtBQUNILENBQUM7QUFFRCxNQUFNLENBQUMsT0FBTyxPQUFPLHlDQUEwQyxTQUFRLFNBQVM7SUFDOUU7Ozs7Ozs7T0FPRztJQUNILFlBQVksRUFBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxnQkFBZ0IsR0FBRyxLQUFLLEVBQUM7UUFDN0QsS0FBSyxFQUFFLENBQUE7UUFD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QUFBO2dCQUVoQixJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztvQkFDOUIsR0FBRyxJQUFJLFFBQVEsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFBO2dCQUM5RSxDQUFDO3FCQUFNLElBQUksVUFBVSxLQUFLLElBQUksRUFBRSxDQUFDO29CQUMvQixHQUFHLElBQUksVUFBVSxDQUFBO2dCQUNuQixDQUFDO3FCQUFNLENBQUM7b0JBQ04sR0FBRyxJQUFJLE1BQU0sT0FBTyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFBO2dCQUMxQyxDQUFDO1lBQ0gsQ0FBQztZQUVELEtBQUssRUFBRSxDQUFBO1FBQ1QsQ0FBQztRQUVELE9BQU8sR0FBRyxDQUFBO0lBQ1osQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbmltcG9ydCAqIGFzIGluZmxlY3Rpb24gZnJvbSBcImluZmxlY3Rpb25cIlxuaW1wb3J0IHtpc1BsYWluT2JqZWN0fSBmcm9tIFwiaXMtcGxhaW4tb2JqZWN0XCJcbmltcG9ydCBXaGVyZUJhc2UgZnJvbSBcIi4vd2hlcmUtYmFzZS5qc1wiXG5cbi8qKlxuICogTm8gbWF0Y2guXG4gKiBAdHlwZWRlZiB7e1trZXk6IHN0cmluZ106IHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCBudWxsIHwgQXJyYXk8c3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IG51bGw+IHwgUmVjb3JkPHN0cmluZywgPz59fSBXaGVyZUhhc2hcbiAqL1xuXG5jb25zdCBOT19NQVRDSCA9IFN5bWJvbChcIm5vLW1hdGNoXCIpXG5jb25zdCByZWxhdGlvbnNoaXBXaGVyZU9wZXJhdG9ycyA9IG5ldyBTZXQoW1wiZXFcIiwgXCJub3RFcVwiLCBcImd0XCIsIFwiZ3RlcVwiLCBcImx0XCIsIFwibHRlcVwiLCBcImxpa2VcIiwgXCI+XCIsIFwiPj1cIiwgXCI8XCIsIFwiPD1cIl0pXG5cbi8qKlxuICogUnVucyBub3JtYWxpemUgcmVsYXRpb25zaGlwIHdoZXJlIG9wZXJhdG9yLlxuICogQHBhcmFtIHtzdHJpbmd9IG9wZXJhdG9yIC0gUmF3IHJlbGF0aW9uc2hpcCB3aGVyZSBvcGVyYXRvci5cbiAqIEByZXR1cm5zIHtcImVxXCIgfCBcIm5vdEVxXCIgfCBcImd0XCIgfCBcImd0ZXFcIiB8IFwibHRcIiB8IFwibHRlcVwiIHwgXCJsaWtlXCJ9IC0gTm9ybWFsaXplZCBvcGVyYXRvci5cbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplUmVsYXRpb25zaGlwV2hlcmVPcGVyYXRvcihvcGVyYXRvcikge1xuICBjb25zdCBvcGVyYXRvckFsaWFzZXMgPSB7XG4gICAgXCI8XCI6IFwibHRcIixcbiAgICBcIjw9XCI6IFwibHRlcVwiLFxuICAgIFwiPlwiOiBcImd0XCIsXG4gICAgXCI+PVwiOiBcImd0ZXFcIlxuICB9XG5cbiAgcmV0dXJuIC8qKiBOYXJyb3dzIHRoZSBydW50aW1lIHZhbHVlIHRvIHRoZSBkb2N1bWVudGVkIHR5cGUuIEB0eXBlIHtcImVxXCIgfCBcIm5vdEVxXCIgfCBcImd0XCIgfCBcImd0ZXFcIiB8IFwibHRcIiB8IFwibHRlcVwiIHwgXCJsaWtlXCJ9ICovIChcbiAgICBvcGVyYXRvckFsaWFzZXNbLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIE5hcnJvd3MgdGhlIHJ1bnRpbWUgdmFsdWUgdG8gdGhlIGRvY3VtZW50ZWQgdHlwZS5cbiAgICAgICAgICAgICAgICAgICAgICBAdHlwZSB7XCI8XCIgfCBcIjw9XCIgfCBcIj5cIiB8IFwiPj1cIn0gKi8gKG9wZXJhdG9yKV0gfHwgb3BlcmF0b3JcbiAgKVxufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWZWxvY2lvdXNEYXRhYmFzZVF1ZXJ5V2hlcmVNb2RlbENsYXNzSGFzaCBleHRlbmRzIFdoZXJlQmFzZSB7XG4gIC8qKlxuICAgKiBSdW5zIGNvbnN0cnVjdG9yLlxuICAgKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIE9wdGlvbnMgb2JqZWN0LlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4vaW5kZXguanNcIikuZGVmYXVsdH0gYXJncy5xdWVyeSAtIFF1ZXJ5IGluc3RhbmNlLlxuICAgKiBAcGFyYW0ge1doZXJlSGFzaH0gYXJncy5oYXNoIC0gSGFzaC5cbiAgICogQHBhcmFtIHt0eXBlb2YgaW1wb3J0KFwiLi4vcmVjb3JkL2luZGV4LmpzXCIpLmRlZmF1bHR9IGFyZ3MubW9kZWxDbGFzcyAtIE1vZGVsIGNsYXNzLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFthcmdzLnF1YWxpZnlCYXNlVGFibGVdIC0gV2hldGhlciB0byBxdWFsaWZ5IGJhc2UgdGFibGUgY29sdW1ucy5cbiAgICovXG4gIGNvbnN0cnVjdG9yKHtxdWVyeSwgaGFzaCwgbW9kZWxDbGFzcywgcXVhbGlmeUJhc2VUYWJsZSA9IGZhbHNlfSkge1xuICAgIHN1cGVyKClcbiAgICB0aGlzLmhhc2ggPSBoYXNoXG4gICAgdGhpcy5tb2RlbENsYXNzID0gbW9kZWxDbGFzc1xuICAgIHRoaXMucXVhbGlmeUJhc2VUYWJsZSA9IHF1YWxpZnlCYXNlVGFibGVcbiAgICB0aGlzLnF1ZXJ5ID0gcXVlcnlcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIGdldCBtb2RlbCBjbGFzcy5cbiAgICogQHJldHVybnMge3R5cGVvZiBpbXBvcnQoXCIuLi9yZWNvcmQvaW5kZXguanNcIikuZGVmYXVsdH0gLSBUaGUgbW9kZWwgY2xhc3MuXG4gICAqL1xuICBnZXRNb2RlbENsYXNzKCkge1xuICAgIGlmICghdGhpcy5tb2RlbENsYXNzKSB0aHJvdyBuZXcgRXJyb3IoXCJtb2RlbENsYXNzIG5vdCBzZXRcIilcblxuICAgIHJldHVybiB0aGlzLm1vZGVsQ2xhc3NcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIHRvIHNxbC5cbiAgICogQHJldHVybnMge3N0cmluZ30gLSBTUUwgc3RyaW5nLlxuICAgKi9cbiAgdG9TcWwoKSB7XG4gICAgbGV0IHNxbCA9IFwiKFwiXG5cbiAgICBjb25zdCBtb2RlbFF1ZXJ5ID0gLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAqIE5hcnJvd3MgdGhlIHJ1bnRpbWUgdmFsdWUgdG8gdGhlIGRvY3VtZW50ZWQgdHlwZS5cbiAgICAgICAgICAgICAgICAgICAgICAgICBAdHlwZSB7aW1wb3J0KFwiLi9tb2RlbC1jbGFzcy1xdWVyeS5qc1wiKS5kZWZhdWx0fSAqLyAodGhpcy5xdWVyeSlcbiAgICBjb25zdCBiYXNlVGFibGVOYW1lID0gdGhpcy5xdWFsaWZ5QmFzZVRhYmxlXG4gICAgICA/IG1vZGVsUXVlcnkuZ2V0VGFibGVSZWZlcmVuY2VGb3JKb2luKClcbiAgICAgIDogdW5kZWZpbmVkXG5cbiAgICBzcWwgKz0gdGhpcy5fd2hlcmVTUUxGcm9tSGFzaCh0aGlzLmhhc2gsIHRoaXMuZ2V0TW9kZWxDbGFzcygpLCBbXSwgYmFzZVRhYmxlTmFtZSlcbiAgICBzcWwgKz0gXCIpXCJcblxuICAgIHJldHVybiBzcWxcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIHJlc29sdmUgY29sdW1uIG5hbWUuXG4gICAqIEBwYXJhbSB7dHlwZW9mIGltcG9ydChcIi4uL3JlY29yZC9pbmRleC5qc1wiKS5kZWZhdWx0fSBtb2RlbENsYXNzIC0gTW9kZWwgY2xhc3MuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBBdHRyaWJ1dGUgb3IgY29sdW1uIG5hbWUuXG4gICAqIEByZXR1cm5zIHtzdHJpbmcgfCB1bmRlZmluZWR9IC0gVGhlIHJlc29sdmVkIGNvbHVtbiBuYW1lLlxuICAgKi9cbiAgX3Jlc29sdmVDb2x1bW5OYW1lKG1vZGVsQ2xhc3MsIGtleSkge1xuICAgIGNvbnN0IGF0dHJpYnV0ZU1hcCA9IG1vZGVsQ2xhc3MuZ2V0QXR0cmlidXRlTmFtZVRvQ29sdW1uTmFtZU1hcCgpXG5cbiAgICBpZiAoYXR0cmlidXRlTWFwW2tleV0pIHJldHVybiBhdHRyaWJ1dGVNYXBba2V5XVxuXG4gICAgY29uc3QgY29sdW1uTWFwID0gbW9kZWxDbGFzcy5nZXRDb2x1bW5OYW1lVG9BdHRyaWJ1dGVOYW1lTWFwKClcbiAgICBjb25zdCB1bmRlcnNjb3JlZCA9IGluZmxlY3Rpb24udW5kZXJzY29yZShrZXkpXG5cbiAgICBpZiAoY29sdW1uTWFwW2tleV0pIHJldHVybiBrZXlcbiAgICBpZiAoY29sdW1uTWFwW3VuZGVyc2NvcmVkXSkgcmV0dXJuIHVuZGVyc2NvcmVkXG5cbiAgICByZXR1cm4gdW5kZWZpbmVkXG4gIH1cblxuICAvKipcbiAgICogUnVucyBnZXQgcmVsYXRpb25zaGlwLlxuICAgKiBAcGFyYW0ge3R5cGVvZiBpbXBvcnQoXCIuLi9yZWNvcmQvaW5kZXguanNcIikuZGVmYXVsdH0gbW9kZWxDbGFzcyAtIE1vZGVsIGNsYXNzLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcmVsYXRpb25zaGlwTmFtZSAtIFJlbGF0aW9uc2hpcCBuYW1lLlxuICAgKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vcmVjb3JkL3JlbGF0aW9uc2hpcHMvYmFzZS5qc1wiKS5kZWZhdWx0IHwgdW5kZWZpbmVkfSAtIFRoZSByZWxhdGlvbnNoaXAuXG4gICAqL1xuICBfZ2V0UmVsYXRpb25zaGlwKG1vZGVsQ2xhc3MsIHJlbGF0aW9uc2hpcE5hbWUpIHtcbiAgICByZXR1cm4gbW9kZWxDbGFzcy5nZXRSZWxhdGlvbnNoaXBzTWFwKClbcmVsYXRpb25zaGlwTmFtZV1cbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIGlzIHJlbGF0aW9uc2hpcCB3aGVyZSBvcGVyYXRvciB0dXBsZS5cbiAgICogQHBhcmFtIHs/fSB0dXBsZVZhbHVlIC0gQ2FuZGlkYXRlIHR1cGxlLlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gLSBXaGV0aGVyIHRoaXMgaXMgYSByZWxhdGlvbnNoaXAgd2hlcmUgdHVwbGUuXG4gICAqL1xuICBfaXNSZWxhdGlvbnNoaXBXaGVyZU9wZXJhdG9yVHVwbGUodHVwbGVWYWx1ZSkge1xuICAgIGlmICghQXJyYXkuaXNBcnJheSh0dXBsZVZhbHVlKSB8fCB0dXBsZVZhbHVlLmxlbmd0aCA8IDMpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIHJldHVybiB0eXBlb2YgdHVwbGVWYWx1ZVswXSA9PT0gXCJzdHJpbmdcIiAmJlxuICAgICAgdHlwZW9mIHR1cGxlVmFsdWVbMV0gPT09IFwic3RyaW5nXCIgJiZcbiAgICAgIHJlbGF0aW9uc2hpcFdoZXJlT3BlcmF0b3JzLmhhcyh0dXBsZVZhbHVlWzFdKVxuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgbm9ybWFsaXplIHJlbGF0aW9uc2hpcCB3aGVyZSBvcGVyYXRvciB0dXBsZXMuXG4gICAqIEBwYXJhbSB7P30gdmFsdWUgLSBDYW5kaWRhdGUgcmVsYXRpb25zaGlwIHdoZXJlIHZhbHVlLlxuICAgKiBAcmV0dXJucyB7QXJyYXk8W3N0cmluZywgXCJlcVwiIHwgXCJub3RFcVwiIHwgXCJndFwiIHwgXCJndGVxXCIgfCBcImx0XCIgfCBcImx0ZXFcIiB8IFwibGlrZVwiLCB1bmtub3duXT59IC0gTm9ybWFsaXplZCB0dXBsZXMuXG4gICAqL1xuICBfbm9ybWFsaXplUmVsYXRpb25zaGlwV2hlcmVPcGVyYXRvclR1cGxlcyh2YWx1ZSkge1xuICAgIGlmICghQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCByZWxhdGlvbnNoaXAgd2hlcmUgdHVwbGUgY29udGFpbmVyIHR5cGU6ICR7dHlwZW9mIHZhbHVlfWApXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTm9ybWFsaXplZC5cbiAgICAgIEB0eXBlIHtBcnJheTxbc3RyaW5nLCBcImVxXCIgfCBcIm5vdEVxXCIgfCBcImd0XCIgfCBcImd0ZXFcIiB8IFwibHRcIiB8IFwibHRlcVwiIHwgXCJsaWtlXCIsIHVua25vd25dPn0gKi9cbiAgICBjb25zdCBub3JtYWxpemVkID0gW11cbiAgICAvKipcbiAgICAgKiBBZGQgY29uZGl0aW9uLlxuICAgICAqIEBwYXJhbSB7P30gY29uZGl0aW9uVmFsdWUgLSBDYW5kaWRhdGUgbmVzdGVkIGNvbmRpdGlvbi5cbiAgICAgKi9cbiAgICBjb25zdCBhZGRDb25kaXRpb24gPSAoY29uZGl0aW9uVmFsdWUpID0+IHtcbiAgICAgIGlmICh0aGlzLl9pc1JlbGF0aW9uc2hpcFdoZXJlT3BlcmF0b3JUdXBsZShjb25kaXRpb25WYWx1ZSkpIHtcbiAgICAgICAgY29uc3QgdHVwbGUgPSAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgKiBOYXJyb3dzIHRoZSBydW50aW1lIHZhbHVlIHRvIHRoZSBkb2N1bWVudGVkIHR5cGUuXG4gICAgICAgICAgICAgICAgICAgICAgICBAdHlwZSB7W3N0cmluZywgXCJlcVwiIHwgXCJub3RFcVwiIHwgXCJndFwiIHwgXCJndGVxXCIgfCBcImx0XCIgfCBcImx0ZXFcIiB8IFwibGlrZVwiIHwgXCI+XCIgfCBcIj49XCIgfCBcIjxcIiB8IFwiPD1cIiwgdW5rbm93biwgLi4uQXJyYXk8dW5rbm93bj5dfSAqLyAoY29uZGl0aW9uVmFsdWUpXG4gICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRPcGVyYXRvciA9IG5vcm1hbGl6ZVJlbGF0aW9uc2hpcFdoZXJlT3BlcmF0b3IodHVwbGVbMV0pXG5cbiAgICAgICAgbm9ybWFsaXplZC5wdXNoKFtcbiAgICAgICAgICB0dXBsZVswXSxcbiAgICAgICAgICBub3JtYWxpemVkT3BlcmF0b3IsXG4gICAgICAgICAgdHVwbGVbMl1cbiAgICAgICAgXSlcblxuICAgICAgICBpZiAodHVwbGUubGVuZ3RoID4gMykge1xuICAgICAgICAgIGZvciAobGV0IGluZGV4ID0gMzsgaW5kZXggPCB0dXBsZS5sZW5ndGg7IGluZGV4ICs9IDEpIHtcbiAgICAgICAgICAgIGFkZENvbmRpdGlvbih0dXBsZVtpbmRleF0pXG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGlmICghQXJyYXkuaXNBcnJheShjb25kaXRpb25WYWx1ZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUmVsYXRpb25zaGlwIHdoZXJlIGNvbmRpdGlvbnMgbXVzdCBiZSB0dXBsZXNcIilcbiAgICAgIH1cblxuICAgICAgY29uZGl0aW9uVmFsdWUuZm9yRWFjaCgobmVzdGVkQ29uZGl0aW9uVmFsdWUpID0+IHtcbiAgICAgICAgYWRkQ29uZGl0aW9uKG5lc3RlZENvbmRpdGlvblZhbHVlKVxuICAgICAgfSlcbiAgICB9XG5cbiAgICBhZGRDb25kaXRpb24odmFsdWUpXG5cbiAgICBpZiAobm9ybWFsaXplZC5sZW5ndGggPCAxKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJSZWxhdGlvbnNoaXAgd2hlcmUgdHVwbGUgY29udGFpbmVyIGNhbm5vdCBiZSBlbXB0eVwiKVxuICAgIH1cblxuICAgIHJldHVybiBub3JtYWxpemVkXG4gIH1cblxuICAvKipcbiAgICogUnVucyBpcyByZWxhdGlvbnNoaXAgd2hlcmUgb3BlcmF0b3IgdHVwbGUgY29udGFpbmVyLlxuICAgKiBAcGFyYW0gez99IHZhbHVlIC0gQ2FuZGlkYXRlIHJlbGF0aW9uc2hpcCB3aGVyZSB2YWx1ZS5cbiAgICogQHJldHVybnMge2Jvb2xlYW59IC0gV2hldGhlciB2YWx1ZSBjYW4gYmUgbm9ybWFsaXplZCB0byByZWxhdGlvbnNoaXAgdHVwbGVzLlxuICAgKi9cbiAgX2lzUmVsYXRpb25zaGlwV2hlcmVPcGVyYXRvclR1cGxlQ29udGFpbmVyKHZhbHVlKSB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuX25vcm1hbGl6ZVJlbGF0aW9uc2hpcFdoZXJlT3BlcmF0b3JUdXBsZXModmFsdWUpXG5cbiAgICAgIHJldHVybiB0cnVlXG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUnVucyB3aGVyZSBzcWxmcm9tIHJlbGF0aW9uc2hpcCB3aGVyZSBvcGVyYXRvciB0dXBsZXMuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gUmVsYXRpb25zaGlwIHdoZXJlIG9wdGlvbnMuXG4gICAqIEBwYXJhbSB7dHlwZW9mIGltcG9ydChcIi4uL3JlY29yZC9pbmRleC5qc1wiKS5kZWZhdWx0fSBhcmdzLm1vZGVsQ2xhc3MgLSBSZWxhdGlvbnNoaXAgbW9kZWwgY2xhc3MuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhcmdzLnRhYmxlTmFtZSAtIFJlbGF0aW9uc2hpcCB0YWJsZSByZWZlcmVuY2UgbmFtZS5cbiAgICogQHBhcmFtIHtBcnJheTxbc3RyaW5nLCBcImVxXCIgfCBcIm5vdEVxXCIgfCBcImd0XCIgfCBcImd0ZXFcIiB8IFwibHRcIiB8IFwibHRlcVwiIHwgXCJsaWtlXCIsIHVua25vd25dPn0gYXJncy50dXBsZXMgLSBPcGVyYXRvciB0dXBsZXMuXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IC0gU1FMIHdoZXJlIGZyYWdtZW50LlxuICAgKi9cbiAgX3doZXJlU1FMRnJvbVJlbGF0aW9uc2hpcFdoZXJlT3BlcmF0b3JUdXBsZXMoe21vZGVsQ2xhc3MsIHRhYmxlTmFtZSwgdHVwbGVzfSkge1xuICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLmdldE9wdGlvbnMoKVxuICAgIGxldCBzcWwgPSBcIlwiXG4gICAgbGV0IGluZGV4ID0gMFxuXG4gICAgdHVwbGVzLmZvckVhY2goKFthdHRyaWJ1dGVOYW1lLCBvcGVyYXRvciwgd2hlcmVWYWx1ZV0pID0+IHtcbiAgICAgIGlmIChpbmRleCA+IDApIHNxbCArPSBcIiBBTkQgXCJcblxuICAgICAgY29uc3QgY29sdW1uTmFtZSA9IHRoaXMuX3Jlc29sdmVDb2x1bW5OYW1lKG1vZGVsQ2xhc3MsIGF0dHJpYnV0ZU5hbWUpXG5cbiAgICAgIGlmICghY29sdW1uTmFtZSkgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIGF0dHJpYnV0ZSBcIiR7YXR0cmlidXRlTmFtZX1cIiBmb3IgJHttb2RlbENsYXNzLm5hbWV9YClcblxuICAgICAgY29uc3Qgbm9ybWFsaXplZFZhbHVlID0gdGhpcy5fbm9ybWFsaXplU3FsaXRlQm9vbGVhblZhbHVlKHtcbiAgICAgICAgY29sdW1uTmFtZSxcbiAgICAgICAgbW9kZWxDbGFzcyxcbiAgICAgICAgdmFsdWU6IHdoZXJlVmFsdWVcbiAgICAgIH0pXG4gICAgICBjb25zdCB0eXBlZFZhbHVlID0gdGhpcy5fbm9ybWFsaXplVmFsdWVGb3JDb2x1bW5UeXBlKHtcbiAgICAgICAgY29sdW1uTmFtZSxcbiAgICAgICAgbW9kZWxDbGFzcyxcbiAgICAgICAgdmFsdWU6IG5vcm1hbGl6ZWRWYWx1ZVxuICAgICAgfSlcbiAgICAgIGNvbnN0IGNvbHVtblR5cGUgPSBtb2RlbENsYXNzLmdldENvbHVtblR5cGVCeU5hbWUoY29sdW1uTmFtZSlcbiAgICAgIGNvbnN0IGRyaXZlclR5cGUgPSB0aGlzLmdldFF1ZXJ5KCkuZHJpdmVyLmdldFR5cGUoKVxuXG4gICAgICBpZiAodHlwZWRWYWx1ZSA9PT0gTk9fTUFUQ0gpIHtcbiAgICAgICAgaWYgKG9wZXJhdG9yID09PSBcIm5vdEVxXCIpIHtcbiAgICAgICAgICBzcWwgKz0gXCIxPTFcIlxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNxbCArPSBcIjE9MFwiXG4gICAgICAgIH1cbiAgICAgICAgaW5kZXggKz0gMVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgbGV0IGNvbHVtblNxbCA9IGAke29wdGlvbnMucXVvdGVUYWJsZU5hbWUodGFibGVOYW1lKX0uJHtvcHRpb25zLnF1b3RlQ29sdW1uTmFtZShjb2x1bW5OYW1lKX1gXG5cbiAgICAgIGlmIChkcml2ZXJUeXBlID09IFwibXNzcWxcIiAmJiB0eXBlb2Ygd2hlcmVWYWx1ZSA9PT0gXCJzdHJpbmdcIiAmJiBjb2x1bW5UeXBlPy50b0xvd2VyQ2FzZSgpID09IFwidGV4dFwiKSB7XG4gICAgICAgIGNvbHVtblNxbCA9IGBDQVNUKCR7Y29sdW1uU3FsfSBBUyBOVkFSQ0hBUihNQVgpKWBcbiAgICAgIH1cblxuICAgICAgaWYgKG9wZXJhdG9yID09PSBcImVxXCIpIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodHlwZWRWYWx1ZSkpIHtcbiAgICAgICAgICBpZiAodHlwZWRWYWx1ZS5sZW5ndGggPCAxKSB7XG4gICAgICAgICAgICBzcWwgKz0gXCIxPTBcIlxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzcWwgKz0gYCR7Y29sdW1uU3FsfSBJTiAoJHt0eXBlZFZhbHVlLm1hcCgodmFsdWUpID0+IG9wdGlvbnMucXVvdGUodmFsdWUpKS5qb2luKFwiLCBcIil9KWBcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZWRWYWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICAgIHNxbCArPSBgJHtjb2x1bW5TcWx9IElTIE5VTExgXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3FsICs9IGAke2NvbHVtblNxbH0gPSAke29wdGlvbnMucXVvdGUodHlwZWRWYWx1ZSl9YFxuICAgICAgICB9XG5cbiAgICAgICAgaW5kZXggKz0gMVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgaWYgKG9wZXJhdG9yID09PSBcIm5vdEVxXCIpIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodHlwZWRWYWx1ZSkpIHtcbiAgICAgICAgICBpZiAodHlwZWRWYWx1ZS5sZW5ndGggPCAxKSB7XG4gICAgICAgICAgICBzcWwgKz0gXCIxPTFcIlxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzcWwgKz0gYCR7Y29sdW1uU3FsfSBOT1QgSU4gKCR7dHlwZWRWYWx1ZS5tYXAoKHZhbHVlKSA9PiBvcHRpb25zLnF1b3RlKHZhbHVlKSkuam9pbihcIiwgXCIpfSlgXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHR5cGVkVmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgICBzcWwgKz0gYCR7Y29sdW1uU3FsfSBJUyBOT1QgTlVMTGBcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzcWwgKz0gYCR7Y29sdW1uU3FsfSAhPSAke29wdGlvbnMucXVvdGUodHlwZWRWYWx1ZSl9YFxuICAgICAgICB9XG5cbiAgICAgICAgaW5kZXggKz0gMVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodHlwZWRWYWx1ZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBPcGVyYXRvciBcIiR7b3BlcmF0b3J9XCIgZG9lcyBub3Qgc3VwcG9ydCBhcnJheSB2YWx1ZXMgZm9yICR7bW9kZWxDbGFzcy5uYW1lfS4ke2F0dHJpYnV0ZU5hbWV9YClcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVkVmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBPcGVyYXRvciBcIiR7b3BlcmF0b3J9XCIgZG9lcyBub3Qgc3VwcG9ydCBudWxsIHZhbHVlcyBmb3IgJHttb2RlbENsYXNzLm5hbWV9LiR7YXR0cmlidXRlTmFtZX1gKVxuICAgICAgfVxuXG4gICAgICBjb25zdCBvcGVyYXRvck1hcCA9IHtcbiAgICAgICAgZ3Q6IFwiPlwiLFxuICAgICAgICBndGVxOiBcIj49XCIsXG4gICAgICAgIGxpa2U6IFwiTElLRVwiLFxuICAgICAgICBsdDogXCI8XCIsXG4gICAgICAgIGx0ZXE6IFwiPD1cIlxuICAgICAgfVxuXG4gICAgICBzcWwgKz0gYCR7Y29sdW1uU3FsfSAke29wZXJhdG9yTWFwW29wZXJhdG9yXX0gJHtvcHRpb25zLnF1b3RlKHR5cGVkVmFsdWUpfWBcbiAgICAgIGluZGV4ICs9IDFcbiAgICB9KVxuXG4gICAgcmV0dXJuIHNxbFxuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgbm9ybWFsaXplIHNxbGl0ZSBib29sZWFuIHZhbHVlLlxuICAgKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIE9wdGlvbnMgb2JqZWN0LlxuICAgKiBAcGFyYW0ge3R5cGVvZiBpbXBvcnQoXCIuLi9yZWNvcmQvaW5kZXguanNcIikuZGVmYXVsdH0gYXJncy5tb2RlbENsYXNzIC0gTW9kZWwgY2xhc3MuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhcmdzLmNvbHVtbk5hbWUgLSBDb2x1bW4gbmFtZS5cbiAgICogQHBhcmFtIHs/fSBhcmdzLnZhbHVlIC0gVmFsdWUgdG8gbm9ybWFsaXplLlxuICAgKiBAcmV0dXJucyB7P30gLSBOb3JtYWxpemVkIHZhbHVlLlxuICAgKi9cbiAgX25vcm1hbGl6ZVNxbGl0ZUJvb2xlYW5WYWx1ZSh7bW9kZWxDbGFzcywgY29sdW1uTmFtZSwgdmFsdWV9KSB7XG4gICAgaWYgKG1vZGVsQ2xhc3MuZ2V0RGF0YWJhc2VUeXBlKCkgIT0gXCJzcWxpdGVcIikgcmV0dXJuIHZhbHVlXG5cbiAgICBjb25zdCBjb2x1bW5UeXBlID0gbW9kZWxDbGFzcy5nZXRDb2x1bW5UeXBlQnlOYW1lKGNvbHVtbk5hbWUpXG5cbiAgICBpZiAoIWNvbHVtblR5cGUpIHJldHVybiB2YWx1ZVxuICAgIGlmIChjb2x1bW5UeXBlLnRvTG93ZXJDYXNlKCkgIT09IFwiYm9vbGVhblwiKSByZXR1cm4gdmFsdWVcblxuICAgIC8qKlxuICAgICAqIE5vcm1hbGl6ZS5cbiAgICAgKiBAcGFyYW0gez99IGVudHJ5IC0gVmFsdWUgdG8gbm9ybWFsaXplLlxuICAgICAqL1xuICAgIGNvbnN0IG5vcm1hbGl6ZSA9IChlbnRyeSkgPT4ge1xuICAgICAgaWYgKGVudHJ5ID09PSB0cnVlKSByZXR1cm4gMVxuICAgICAgaWYgKGVudHJ5ID09PSBmYWxzZSkgcmV0dXJuIDBcbiAgICAgIHJldHVybiBlbnRyeVxuICAgIH1cblxuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgcmV0dXJuIHZhbHVlLm1hcCgoZW50cnkpID0+IG5vcm1hbGl6ZShlbnRyeSkpXG4gICAgfVxuXG4gICAgcmV0dXJuIG5vcm1hbGl6ZSh2YWx1ZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIG5vcm1hbGl6ZSB2YWx1ZSBmb3IgY29sdW1uIHR5cGUuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gT3B0aW9ucyBvYmplY3QuXG4gICAqIEBwYXJhbSB7dHlwZW9mIGltcG9ydChcIi4uL3JlY29yZC9pbmRleC5qc1wiKS5kZWZhdWx0fSBhcmdzLm1vZGVsQ2xhc3MgLSBNb2RlbCBjbGFzcy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MuY29sdW1uTmFtZSAtIENvbHVtbiBuYW1lLlxuICAgKiBAcGFyYW0gez99IGFyZ3MudmFsdWUgLSBWYWx1ZSB0byBub3JtYWxpemUuXG4gICAqIEByZXR1cm5zIHs/fSAtIE5vcm1hbGl6ZWQgdmFsdWUuXG4gICAqL1xuICBfbm9ybWFsaXplVmFsdWVGb3JDb2x1bW5UeXBlKHttb2RlbENsYXNzLCBjb2x1bW5OYW1lLCB2YWx1ZX0pIHtcbiAgICBjb25zdCBjb2x1bW5UeXBlID0gbW9kZWxDbGFzcy5nZXRDb2x1bW5UeXBlQnlOYW1lKGNvbHVtbk5hbWUpXG5cbiAgICBpZiAoIWNvbHVtblR5cGUpIHJldHVybiB2YWx1ZVxuXG4gICAgY29uc3Qgbm9ybWFsaXplZFR5cGUgPSBjb2x1bW5UeXBlLnRvTG93ZXJDYXNlKClcbiAgICBjb25zdCBzdHJpbmdUeXBlcyA9IG5ldyBTZXQoW1wiY2hhclwiLCBcInZhcmNoYXJcIiwgXCJudmFyY2hhclwiLCBcInN0cmluZ1wiLCBcImVudW1cIiwgXCJqc29uXCIsIFwianNvbmJcIiwgXCJjaXRleHRcIiwgXCJiaW5hcnlcIiwgXCJ2YXJiaW5hcnlcIl0pXG4gICAgY29uc3QgaXNVdWlkVHlwZSA9IG5vcm1hbGl6ZWRUeXBlLmluY2x1ZGVzKFwidXVpZFwiKVxuICAgIGNvbnN0IHNob3VsZENvZXJjZVRvU3RyaW5nID0gbm9ybWFsaXplZFR5cGUuaW5jbHVkZXMoXCJ1dWlkXCIpIHx8XG4gICAgICBub3JtYWxpemVkVHlwZS5pbmNsdWRlcyhcInRleHRcIikgfHxcbiAgICAgIHN0cmluZ1R5cGVzLmhhcyhub3JtYWxpemVkVHlwZSlcblxuICAgIC8qKlxuICAgICAqIE5vcm1hbGl6ZS5cbiAgICAgKiBAcGFyYW0gez99IGVudHJ5IC0gVmFsdWUgdG8gbm9ybWFsaXplLlxuICAgICAqL1xuICAgIGNvbnN0IG5vcm1hbGl6ZSA9IChlbnRyeSkgPT4ge1xuICAgICAgaWYgKGlzVXVpZFR5cGUgJiYgdHlwZW9mIGVudHJ5ID09PSBcIm51bWJlclwiKSByZXR1cm4gTk9fTUFUQ0hcbiAgICAgIGlmICghc2hvdWxkQ29lcmNlVG9TdHJpbmcgfHwgdHlwZW9mIGVudHJ5ICE9PSBcIm51bWJlclwiKSByZXR1cm4gZW50cnlcblxuICAgICAgcmV0dXJuIFN0cmluZyhlbnRyeSlcbiAgICB9XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSB2YWx1ZS5tYXAoKGVudHJ5KSA9PiBub3JtYWxpemUoZW50cnkpKS5maWx0ZXIoKGVudHJ5KSA9PiBlbnRyeSAhPT0gTk9fTUFUQ0gpXG5cbiAgICAgIGlmIChpc1V1aWRUeXBlICYmIG5vcm1hbGl6ZWQubGVuZ3RoID09PSAwKSByZXR1cm4gTk9fTUFUQ0hcblxuICAgICAgcmV0dXJuIG5vcm1hbGl6ZWRcbiAgICB9XG5cbiAgICBjb25zdCBub3JtYWxpemVkID0gbm9ybWFsaXplKHZhbHVlKVxuXG4gICAgaWYgKG5vcm1hbGl6ZWQgPT09IE5PX01BVENIKSByZXR1cm4gTk9fTUFUQ0hcblxuICAgIHJldHVybiBub3JtYWxpemVkXG4gIH1cblxuICAvKipcbiAgICogUnVucyB3aGVyZSBzcWxmcm9tIGhhc2guXG4gICAqIEBwYXJhbSB7V2hlcmVIYXNofSBoYXNoIC0gSGFzaC5cbiAgICogQHBhcmFtIHt0eXBlb2YgaW1wb3J0KFwiLi4vcmVjb3JkL2luZGV4LmpzXCIpLmRlZmF1bHR9IG1vZGVsQ2xhc3MgLSBNb2RlbCBjbGFzcy5cbiAgICogQHBhcmFtIHtzdHJpbmdbXX0gcGF0aCAtIEpvaW4gcGF0aC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFt0YWJsZU5hbWVdIC0gVGFibGUgbmFtZS5cbiAgICogQHBhcmFtIHtudW1iZXJ9IGluZGV4IC0gSW5kZXggdmFsdWUuXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IC0gU1FMIHN0cmluZy5cbiAgICovXG4gIF93aGVyZVNRTEZyb21IYXNoKGhhc2gsIG1vZGVsQ2xhc3MsIHBhdGgsIHRhYmxlTmFtZSwgaW5kZXggPSAwKSB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMuZ2V0T3B0aW9ucygpXG4gICAgY29uc3QgbW9kZWxRdWVyeSA9IC8qKlxuICAgICAgICAgICAgICAgICAgICAgICAgKiBOYXJyb3dzIHRoZSBydW50aW1lIHZhbHVlIHRvIHRoZSBkb2N1bWVudGVkIHR5cGUuXG4gICAgICAgICAgICAgICAgICAgICAgICAgQHR5cGUge2ltcG9ydChcIi4vbW9kZWwtY2xhc3MtcXVlcnkuanNcIikuZGVmYXVsdH0gKi8gKHRoaXMucXVlcnkpXG4gICAgbGV0IHNxbCA9IFwiXCJcblxuICAgIGZvciAoY29uc3Qgd2hlcmVLZXkgaW4gaGFzaCkge1xuICAgICAgY29uc3Qgd2hlcmVWYWx1ZSA9IGhhc2hbd2hlcmVLZXldXG4gICAgICBjb25zdCByZWxhdGlvbnNoaXAgPSB0aGlzLl9nZXRSZWxhdGlvbnNoaXAobW9kZWxDbGFzcywgd2hlcmVLZXkpXG4gICAgICBjb25zdCB0dXBsZXMgPSB0aGlzLl9pc1JlbGF0aW9uc2hpcFdoZXJlT3BlcmF0b3JUdXBsZUNvbnRhaW5lcih3aGVyZVZhbHVlKVxuICAgICAgICA/IHRoaXMuX25vcm1hbGl6ZVJlbGF0aW9uc2hpcFdoZXJlT3BlcmF0b3JUdXBsZXMod2hlcmVWYWx1ZSlcbiAgICAgICAgOiBudWxsXG4gICAgICBjb25zdCByZXNvbHZlZENvbHVtbk5hbWUgPSB0aGlzLl9yZXNvbHZlQ29sdW1uTmFtZShtb2RlbENsYXNzLCB3aGVyZUtleSlcblxuICAgICAgaWYgKHJlbGF0aW9uc2hpcCAmJiB0dXBsZXMpIHtcbiAgICAgICAgaWYgKGluZGV4ID4gMCkgc3FsICs9IFwiIEFORCBcIlxuXG4gICAgICAgIGNvbnN0IHRhcmdldE1vZGVsQ2xhc3MgPSByZWxhdGlvbnNoaXAuZ2V0VGFyZ2V0TW9kZWxDbGFzcygpXG5cbiAgICAgICAgaWYgKCF0YXJnZXRNb2RlbENsYXNzKSB0aHJvdyBuZXcgRXJyb3IoYFJlbGF0aW9uc2hpcCBcIiR7d2hlcmVLZXl9XCIgZm9yICR7bW9kZWxDbGFzcy5uYW1lfSBoYXMgbm8gdGFyZ2V0IG1vZGVsIGNsYXNzYClcblxuICAgICAgICBjb25zdCBuZXN0ZWRQYXRoID0gcGF0aC5jb25jYXQoW3doZXJlS2V5XSlcbiAgICAgICAgY29uc3QgbmVzdGVkVGFibGVOYW1lID0gbW9kZWxRdWVyeS5nZXRUYWJsZVJlZmVyZW5jZUZvckpvaW4oLi4ubmVzdGVkUGF0aClcblxuICAgICAgICBzcWwgKz0gdGhpcy5fd2hlcmVTUUxGcm9tUmVsYXRpb25zaGlwV2hlcmVPcGVyYXRvclR1cGxlcyh7XG4gICAgICAgICAgbW9kZWxDbGFzczogdGFyZ2V0TW9kZWxDbGFzcyxcbiAgICAgICAgICB0YWJsZU5hbWU6IG5lc3RlZFRhYmxlTmFtZSxcbiAgICAgICAgICB0dXBsZXNcbiAgICAgICAgfSlcbiAgICAgIH0gZWxzZSBpZiAocmVzb2x2ZWRDb2x1bW5OYW1lICYmIHR1cGxlcykge1xuICAgICAgICBpZiAoaW5kZXggPiAwKSBzcWwgKz0gXCIgQU5EIFwiXG5cbiAgICAgICAgc3FsICs9IHRoaXMuX3doZXJlU1FMRnJvbVJlbGF0aW9uc2hpcFdoZXJlT3BlcmF0b3JUdXBsZXMoe1xuICAgICAgICAgIG1vZGVsQ2xhc3MsXG4gICAgICAgICAgdGFibGVOYW1lOiB0YWJsZU5hbWUgfHwgbW9kZWxRdWVyeS5nZXRUYWJsZVJlZmVyZW5jZUZvckpvaW4oLi4ucGF0aCksXG4gICAgICAgICAgdHVwbGVzXG4gICAgICAgIH0pXG4gICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkod2hlcmVWYWx1ZSkgJiYgd2hlcmVWYWx1ZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgaWYgKGluZGV4ID4gMCkgc3FsICs9IFwiIEFORCBcIlxuICAgICAgICBzcWwgKz0gXCIxPTBcIlxuICAgICAgfSBlbHNlIGlmIChpc1BsYWluT2JqZWN0KHdoZXJlVmFsdWUpKSB7XG4gICAgICAgIGlmICghcmVsYXRpb25zaGlwKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIHJlbGF0aW9uc2hpcCBcIiR7d2hlcmVLZXl9XCIgZm9yICR7bW9kZWxDbGFzcy5uYW1lfWApXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0YXJnZXRNb2RlbENsYXNzID0gcmVsYXRpb25zaGlwLmdldFRhcmdldE1vZGVsQ2xhc3MoKVxuXG4gICAgICAgIGlmICghdGFyZ2V0TW9kZWxDbGFzcykgdGhyb3cgbmV3IEVycm9yKGBSZWxhdGlvbnNoaXAgXCIke3doZXJlS2V5fVwiIGZvciAke21vZGVsQ2xhc3MubmFtZX0gaGFzIG5vIHRhcmdldCBtb2RlbCBjbGFzc2ApXG5cbiAgICAgICAgY29uc3QgbmVzdGVkSGFzaCA9IC8qKlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICogTmFycm93cyB0aGUgcnVudGltZSB2YWx1ZSB0byB0aGUgZG9jdW1lbnRlZCB0eXBlLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAdHlwZSB7V2hlcmVIYXNofSAqLyAod2hlcmVWYWx1ZSlcbiAgICAgICAgY29uc3QgbmVzdGVkUGF0aCA9IHBhdGguY29uY2F0KFt3aGVyZUtleV0pXG4gICAgICAgIGNvbnN0IG5lc3RlZFRhYmxlTmFtZSA9IG1vZGVsUXVlcnkuZ2V0VGFibGVSZWZlcmVuY2VGb3JKb2luKC4uLm5lc3RlZFBhdGgpXG5cbiAgICAgICAgc3FsICs9IHRoaXMuX3doZXJlU1FMRnJvbUhhc2gobmVzdGVkSGFzaCwgdGFyZ2V0TW9kZWxDbGFzcywgbmVzdGVkUGF0aCwgbmVzdGVkVGFibGVOYW1lLCBpbmRleClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChpbmRleCA+IDApIHNxbCArPSBcIiBBTkQgXCJcblxuICAgICAgICBjb25zdCBjb2x1bW5OYW1lID0gdGhpcy5fcmVzb2x2ZUNvbHVtbk5hbWUobW9kZWxDbGFzcywgd2hlcmVLZXkpXG5cbiAgICAgICAgaWYgKCFjb2x1bW5OYW1lKSB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gYXR0cmlidXRlIFwiJHt3aGVyZUtleX1cIiBmb3IgJHttb2RlbENsYXNzLm5hbWV9YClcblxuICAgICAgICBjb25zdCBjb2x1bW5UeXBlID0gbW9kZWxDbGFzcy5nZXRDb2x1bW5UeXBlQnlOYW1lKGNvbHVtbk5hbWUpXG5cbiAgICAgICAgY29uc3Qgbm9ybWFsaXplZFZhbHVlID0gdGhpcy5fbm9ybWFsaXplU3FsaXRlQm9vbGVhblZhbHVlKHtcbiAgICAgICAgICBjb2x1bW5OYW1lLFxuICAgICAgICAgIG1vZGVsQ2xhc3MsXG4gICAgICAgICAgdmFsdWU6IHdoZXJlVmFsdWVcbiAgICAgICAgfSlcbiAgICAgICAgY29uc3QgdHlwZWRWYWx1ZSA9IHRoaXMuX25vcm1hbGl6ZVZhbHVlRm9yQ29sdW1uVHlwZSh7XG4gICAgICAgICAgY29sdW1uTmFtZSxcbiAgICAgICAgICBtb2RlbENsYXNzLFxuICAgICAgICAgIHZhbHVlOiBub3JtYWxpemVkVmFsdWVcbiAgICAgICAgfSlcblxuICAgICAgICBpZiAodHlwZWRWYWx1ZSA9PT0gTk9fTUFUQ0gpIHtcbiAgICAgICAgICBzcWwgKz0gXCIxPTBcIlxuICAgICAgICAgIGluZGV4KytcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGNvbHVtblNxbCA9IGAke29wdGlvbnMucXVvdGVDb2x1bW5OYW1lKGNvbHVtbk5hbWUpfWBcblxuICAgICAgICBpZiAodGFibGVOYW1lKSB7XG4gICAgICAgICAgY29sdW1uU3FsID0gYCR7b3B0aW9ucy5xdW90ZVRhYmxlTmFtZSh0YWJsZU5hbWUpfS4ke2NvbHVtblNxbH1gXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkcml2ZXJUeXBlID0gdGhpcy5nZXRRdWVyeSgpLmRyaXZlci5nZXRUeXBlKClcblxuICAgICAgICBpZiAoZHJpdmVyVHlwZSA9PSBcIm1zc3FsXCIgJiYgdHlwZW9mIHdoZXJlVmFsdWUgPT09IFwic3RyaW5nXCIgJiYgY29sdW1uVHlwZT8udG9Mb3dlckNhc2UoKSA9PSBcInRleHRcIikge1xuICAgICAgICAgIGNvbHVtblNxbCA9IGBDQVNUKCR7Y29sdW1uU3FsfSBBUyBOVkFSQ0hBUihNQVgpKWBcbiAgICAgICAgfVxuXG4gICAgICAgIHNxbCArPSBjb2x1bW5TcWxcblxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh0eXBlZFZhbHVlKSkge1xuICAgICAgICAgIHNxbCArPSBgIElOICgke3R5cGVkVmFsdWUubWFwKCh2YWx1ZSkgPT4gb3B0aW9ucy5xdW90ZSh2YWx1ZSkpLmpvaW4oXCIsIFwiKX0pYFxuICAgICAgICB9IGVsc2UgaWYgKHR5cGVkVmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgICBzcWwgKz0gXCIgSVMgTlVMTFwiXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3FsICs9IGAgPSAke29wdGlvbnMucXVvdGUodHlwZWRWYWx1ZSl9YFxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGluZGV4KytcbiAgICB9XG5cbiAgICByZXR1cm4gc3FsXG4gIH1cbn1cbiJdfQ==
@@ -1,5 +1,6 @@
1
1
  export default class VelociousDatabaseQueryWhereNot extends WhereBase {
2
2
  /**
3
+ * Runs constructor.
3
4
  * @param {import("./where-base.js").default} where - Where clause.
4
5
  */
5
6
  constructor(where: import("./where-base.js").default);
@@ -1 +1 @@
1
- {"version":3,"file":"where-not.d.ts","sourceRoot":"","sources":["../../../../src/database/query/where-not.js"],"names":[],"mappings":"AAIA;IACE;;OAEG;IACH,mBAFW,OAAO,iBAAiB,EAAE,OAAO,EAM3C;IAFC,iBAAkB;IAClB,oCAA6B;CAShC;sBAlBqB,iBAAiB"}
1
+ {"version":3,"file":"where-not.d.ts","sourceRoot":"","sources":["../../../../src/database/query/where-not.js"],"names":[],"mappings":"AAIA;IACE;;;OAGG;IACH,mBAFW,OAAO,iBAAiB,EAAE,OAAO,EAM3C;IAFC,iBAAkB;IAClB,oCAA6B;CAUhC;sBApBqB,iBAAiB"}
@@ -2,6 +2,7 @@
2
2
  import WhereBase from "./where-base.js";
3
3
  export default class VelociousDatabaseQueryWhereNot extends WhereBase {
4
4
  /**
5
+ * Runs constructor.
5
6
  * @param {import("./where-base.js").default} where - Where clause.
6
7
  */
7
8
  constructor(where) {
@@ -10,10 +11,11 @@ export default class VelociousDatabaseQueryWhereNot extends WhereBase {
10
11
  this.query = where.getQuery();
11
12
  }
12
13
  /**
14
+ * Runs to sql.
13
15
  * @returns {string} - SQL string.
14
16
  */
15
17
  toSql() {
16
18
  return `NOT (${this.where.toSql()})`;
17
19
  }
18
20
  }
19
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2hlcmUtbm90LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2RhdGFiYXNlL3F1ZXJ5L3doZXJlLW5vdC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVosT0FBTyxTQUFTLE1BQU0saUJBQWlCLENBQUE7QUFFdkMsTUFBTSxDQUFDLE9BQU8sT0FBTyw4QkFBK0IsU0FBUSxTQUFTO0lBQ25FOztPQUVHO0lBQ0gsWUFBWSxLQUFLO1FBQ2YsS0FBSyxFQUFFLENBQUE7UUFDUCxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQTtRQUNsQixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQTtJQUMvQixDQUFDO0lBRUQ7O09BRUc7SUFDSCxLQUFLO1FBQ0gsT0FBTyxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQTtJQUN0QyxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuaW1wb3J0IFdoZXJlQmFzZSBmcm9tIFwiLi93aGVyZS1iYXNlLmpzXCJcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVmVsb2Npb3VzRGF0YWJhc2VRdWVyeVdoZXJlTm90IGV4dGVuZHMgV2hlcmVCYXNlIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi93aGVyZS1iYXNlLmpzXCIpLmRlZmF1bHR9IHdoZXJlIC0gV2hlcmUgY2xhdXNlLlxuICAgKi9cbiAgY29uc3RydWN0b3Iod2hlcmUpIHtcbiAgICBzdXBlcigpXG4gICAgdGhpcy53aGVyZSA9IHdoZXJlXG4gICAgdGhpcy5xdWVyeSA9IHdoZXJlLmdldFF1ZXJ5KClcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSAtIFNRTCBzdHJpbmcuXG4gICAqL1xuICB0b1NxbCgpIHtcbiAgICByZXR1cm4gYE5PVCAoJHt0aGlzLndoZXJlLnRvU3FsKCl9KWBcbiAgfVxufVxuIl19
21
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2hlcmUtbm90LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2RhdGFiYXNlL3F1ZXJ5L3doZXJlLW5vdC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVosT0FBTyxTQUFTLE1BQU0saUJBQWlCLENBQUE7QUFFdkMsTUFBTSxDQUFDLE9BQU8sT0FBTyw4QkFBK0IsU0FBUSxTQUFTO0lBQ25FOzs7T0FHRztJQUNILFlBQVksS0FBSztRQUNmLEtBQUssRUFBRSxDQUFBO1FBQ1AsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUE7UUFDbEIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUE7SUFDL0IsQ0FBQztJQUVEOzs7T0FHRztJQUNILEtBQUs7UUFDSCxPQUFPLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFBO0lBQ3RDLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG5pbXBvcnQgV2hlcmVCYXNlIGZyb20gXCIuL3doZXJlLWJhc2UuanNcIlxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWZWxvY2lvdXNEYXRhYmFzZVF1ZXJ5V2hlcmVOb3QgZXh0ZW5kcyBXaGVyZUJhc2Uge1xuICAvKipcbiAgICogUnVucyBjb25zdHJ1Y3Rvci5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuL3doZXJlLWJhc2UuanNcIikuZGVmYXVsdH0gd2hlcmUgLSBXaGVyZSBjbGF1c2UuXG4gICAqL1xuICBjb25zdHJ1Y3Rvcih3aGVyZSkge1xuICAgIHN1cGVyKClcbiAgICB0aGlzLndoZXJlID0gd2hlcmVcbiAgICB0aGlzLnF1ZXJ5ID0gd2hlcmUuZ2V0UXVlcnkoKVxuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgdG8gc3FsLlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSAtIFNRTCBzdHJpbmcuXG4gICAqL1xuICB0b1NxbCgpIHtcbiAgICByZXR1cm4gYE5PVCAoJHt0aGlzLndoZXJlLnRvU3FsKCl9KWBcbiAgfVxufVxuIl19
@@ -1,5 +1,6 @@
1
1
  export default class VelociousDatabaseQueryWhereHash extends WhereBase {
2
2
  /**
3
+ * Runs constructor.
3
4
  * @param {import("./index.js").default} query - Query instance.
4
5
  * @param {string} plain - Plain.
5
6
  */
@@ -1 +1 @@
1
- {"version":3,"file":"where-plain.d.ts","sourceRoot":"","sources":["../../../../src/database/query/where-plain.js"],"names":[],"mappings":"AAIA;IACE;;;OAGG;IACH,mBAHW,OAAO,YAAY,EAAE,OAAO,SAC5B,MAAM,EAMhB;IAFC,cAAkB;IAClB,oCAAkB;CAMrB;sBAhBqB,iBAAiB"}
1
+ {"version":3,"file":"where-plain.d.ts","sourceRoot":"","sources":["../../../../src/database/query/where-plain.js"],"names":[],"mappings":"AAIA;IACE;;;;OAIG;IACH,mBAHW,OAAO,YAAY,EAAE,OAAO,SAC5B,MAAM,EAMhB;IAFC,cAAkB;IAClB,oCAAkB;CAMrB;sBAjBqB,iBAAiB"}
@@ -2,6 +2,7 @@
2
2
  import WhereBase from "./where-base.js";
3
3
  export default class VelociousDatabaseQueryWhereHash extends WhereBase {
4
4
  /**
5
+ * Runs constructor.
5
6
  * @param {import("./index.js").default} query - Query instance.
6
7
  * @param {string} plain - Plain.
7
8
  */
@@ -14,4 +15,4 @@ export default class VelociousDatabaseQueryWhereHash extends WhereBase {
14
15
  return this.plain;
15
16
  }
16
17
  }
17
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2hlcmUtcGxhaW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZGF0YWJhc2UvcXVlcnkvd2hlcmUtcGxhaW4uanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaLE9BQU8sU0FBUyxNQUFNLGlCQUFpQixDQUFBO0FBRXZDLE1BQU0sQ0FBQyxPQUFPLE9BQU8sK0JBQWdDLFNBQVEsU0FBUztJQUNwRTs7O09BR0c7SUFDSCxZQUFZLEtBQUssRUFBRSxLQUFLO1FBQ3RCLEtBQUssRUFBRSxDQUFBO1FBQ1AsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUE7UUFDbEIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUE7SUFDcEIsQ0FBQztJQUVELEtBQUs7UUFDSCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUE7SUFDbkIsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbmltcG9ydCBXaGVyZUJhc2UgZnJvbSBcIi4vd2hlcmUtYmFzZS5qc1wiXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFZlbG9jaW91c0RhdGFiYXNlUXVlcnlXaGVyZUhhc2ggZXh0ZW5kcyBXaGVyZUJhc2Uge1xuICAvKipcbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuL2luZGV4LmpzXCIpLmRlZmF1bHR9IHF1ZXJ5IC0gUXVlcnkgaW5zdGFuY2UuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwbGFpbiAtIFBsYWluLlxuICAgKi9cbiAgY29uc3RydWN0b3IocXVlcnksIHBsYWluKSB7XG4gICAgc3VwZXIoKVxuICAgIHRoaXMucGxhaW4gPSBwbGFpblxuICAgIHRoaXMucXVlcnkgPSBxdWVyeVxuICB9XG5cbiAgdG9TcWwoKSB7XG4gICAgcmV0dXJuIHRoaXMucGxhaW5cbiAgfVxufVxuIl19
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2hlcmUtcGxhaW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZGF0YWJhc2UvcXVlcnkvd2hlcmUtcGxhaW4uanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaLE9BQU8sU0FBUyxNQUFNLGlCQUFpQixDQUFBO0FBRXZDLE1BQU0sQ0FBQyxPQUFPLE9BQU8sK0JBQWdDLFNBQVEsU0FBUztJQUNwRTs7OztPQUlHO0lBQ0gsWUFBWSxLQUFLLEVBQUUsS0FBSztRQUN0QixLQUFLLEVBQUUsQ0FBQTtRQUNQLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFBO1FBQ2xCLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFBO0lBQ3BCLENBQUM7SUFFRCxLQUFLO1FBQ0gsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFBO0lBQ25CLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG5pbXBvcnQgV2hlcmVCYXNlIGZyb20gXCIuL3doZXJlLWJhc2UuanNcIlxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWZWxvY2lvdXNEYXRhYmFzZVF1ZXJ5V2hlcmVIYXNoIGV4dGVuZHMgV2hlcmVCYXNlIHtcbiAgLyoqXG4gICAqIFJ1bnMgY29uc3RydWN0b3IuXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi9pbmRleC5qc1wiKS5kZWZhdWx0fSBxdWVyeSAtIFF1ZXJ5IGluc3RhbmNlLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcGxhaW4gLSBQbGFpbi5cbiAgICovXG4gIGNvbnN0cnVjdG9yKHF1ZXJ5LCBwbGFpbikge1xuICAgIHN1cGVyKClcbiAgICB0aGlzLnBsYWluID0gcGxhaW5cbiAgICB0aGlzLnF1ZXJ5ID0gcXVlcnlcbiAgfVxuXG4gIHRvU3FsKCkge1xuICAgIHJldHVybiB0aGlzLnBsYWluXG4gIH1cbn1cbiJdfQ==