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,24 +1,28 @@
1
1
  export default class Cookie {
2
2
  /**
3
+ * Runs parse header.
3
4
  * @param {string | undefined | null} headerValue - Cookie header.
4
5
  * @param {string | undefined} secret - Encryption secret.
5
6
  * @returns {Cookie[]} - Cookie list.
6
7
  */
7
8
  static parseHeader(headerValue: string | undefined | null, secret: string | undefined): Cookie[];
8
9
  /**
9
- * @param {unknown} value - Value to encrypt.
10
+ * Runs encrypt value.
11
+ * @param {?} value - Value to encrypt.
10
12
  * @param {string} secret - Encryption secret.
11
13
  * @returns {string} - Encrypted value.
12
14
  */
13
15
  static encryptValue(value: unknown, secret: string): string;
14
16
  /**
17
+ * Runs decrypt value.
15
18
  * @param {string} value - Encrypted value.
16
19
  * @param {string} secret - Encryption secret.
17
20
  * @returns {string} - Decrypted value.
18
21
  */
19
22
  static decryptValue(value: string, secret: string): string;
20
23
  /**
21
- * @param {unknown} value - Value to serialize.
24
+ * Runs serialize encrypted value.
25
+ * @param {?} value - Value to serialize.
22
26
  * @returns {{payload: string, type: string}} - Serialized payload.
23
27
  */
24
28
  static _serializeEncryptedValue(value: unknown): {
@@ -26,27 +30,32 @@ export default class Cookie {
26
30
  type: string;
27
31
  };
28
32
  /**
33
+ * Runs deserialize encrypted value.
29
34
  * @param {string} type - Serialized type.
30
35
  * @param {string} payload - Payload.
31
36
  * @returns {string} - Deserialized value.
32
37
  */
33
38
  static _deserializeEncryptedValue(type: string, payload: string): string;
34
39
  /**
40
+ * Runs derive key.
35
41
  * @param {string} secret - Secret.
36
42
  * @returns {Buffer} - Key.
37
43
  */
38
44
  static _deriveKey(secret: string): Buffer;
39
45
  /**
46
+ * Runs to base64 url.
40
47
  * @param {Buffer} buffer - Buffer.
41
48
  * @returns {string} - Base64 URL encoded string.
42
49
  */
43
50
  static _toBase64Url(buffer: Buffer): string;
44
51
  /**
52
+ * Runs from base64 url.
45
53
  * @param {string} value - Base64 URL encoded string.
46
54
  * @returns {Buffer} - Buffer.
47
55
  */
48
56
  static _fromBase64Url(value: string): Buffer;
49
57
  /**
58
+ * CookieOptions type.
50
59
  * @typedef {object} CookieOptions
51
60
  * @property {string} [domain] - Domain.
52
61
  * @property {Date} [expires] - Expires date.
@@ -57,6 +66,7 @@ export default class Cookie {
57
66
  * @property {"Lax" | "Strict" | "None"} [sameSite] - SameSite value.
58
67
  */
59
68
  /**
69
+ * Runs constructor.
60
70
  * @param {object} args - Options object.
61
71
  * @param {string} args.name - Cookie name.
62
72
  * @param {string | undefined | null} args.value - Cookie value.
@@ -137,17 +147,35 @@ export default class Cookie {
137
147
  };
138
148
  _encrypted: boolean;
139
149
  _error: Error | undefined;
140
- /** @returns {string} - Cookie name. */
150
+ /**
151
+ * Runs name.
152
+ * @returns {string} - Cookie name.
153
+ */
141
154
  name(): string;
142
- /** @returns {string} - Cookie value (decrypted when available). */
155
+ /**
156
+ * Runs value.
157
+ * @returns {string} - Cookie value (decrypted when available).
158
+ */
143
159
  value(): string;
144
- /** @returns {string} - Raw cookie value. */
160
+ /**
161
+ * Runs raw value.
162
+ * @returns {string} - Raw cookie value.
163
+ */
145
164
  rawValue(): string;
146
- /** @returns {boolean} - Whether cookie is encrypted. */
165
+ /**
166
+ * Runs is encrypted.
167
+ * @returns {boolean} - Whether cookie is encrypted.
168
+ */
147
169
  isEncrypted(): boolean;
148
- /** @returns {Error | undefined} - Decryption error. */
170
+ /**
171
+ * Runs error.
172
+ * @returns {Error | undefined} - Decryption error.
173
+ */
149
174
  error(): Error | undefined;
150
- /** @returns {string} - Set-Cookie header value. */
175
+ /**
176
+ * Runs to header.
177
+ * @returns {string} - Set-Cookie header value.
178
+ */
151
179
  toHeader(): string;
152
180
  }
153
181
  //# sourceMappingURL=cookie.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"cookie.d.ts","sourceRoot":"","sources":["../../../src/http-server/cookie.js"],"names":[],"mappings":"AAIA;IA+DE;;;;OAIG;IACH,gCAJW,MAAM,GAAG,SAAS,GAAG,IAAI,UACzB,MAAM,GAAG,SAAS,GAChB,MAAM,EAAE,CAgCpB;IAED;;;;OAIG;IACH,2BAJW,OAAO,UACP,MAAM,GACJ,MAAM,CAalB;IAED;;;;OAIG;IACH,2BAJW,MAAM,UACN,MAAM,GACJ,MAAM,CAwBlB;IAED;;;OAGG;IACH,uCAHW,OAAO,GACL;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAC,CAiB3C;IAED;;;;OAIG;IACH,wCAJW,MAAM,WACN,MAAM,GACJ,MAAM,CAalB;IAED;;;OAGG;IACH,0BAHW,MAAM,GACJ,MAAM,CAIlB;IAED;;;OAGG;IACH,4BAHW,MAAM,GACJ,MAAM,CAIlB;IAED;;;OAGG;IACH,6BAHW,MAAM,GACJ,MAAM,CAOlB;IAlND;;;;;;;;;OASG;IAEH;;;;;;;;OAQG;IACH,kEAPG;QAAqB,IAAI,EAAjB,MAAM;QAC0B,KAAK,EAArC,MAAM,GAAG,SAAS,GAAG,IAAI;QACQ,QAAQ,GAAzC,MAAM,GAAG,SAAS,GAAG,IAAI;QACJ,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QACb,SAAS;QACC,KAAK,GAA9B,KAAK,GAAG,SAAS;KAC3B,EAQA;IANC,cAAiB;IACjB,eAAyB;IACzB,kBAAwC;IACxC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAA6B;IAC7B,oBAA2B;IAC3B,0BAAmB;IAGrB,uCAAuC;IACvC,QADc,MAAM,CACQ;IAE5B,mEAAmE;IACnE,SADc,MAAM,CACwB;IAE5C,4CAA4C;IAC5C,YADc,MAAM,CAC8B;IAElD,wDAAwD;IACxD,eADc,OAAO,CAC4B;IAEjD,uDAAuD;IACvD,SADc,KAAK,GAAG,SAAS,CACD;IAE9B,mDAAmD;IACnD,YADc,MAAM,CAgBnB;CAuJF"}
1
+ {"version":3,"file":"cookie.d.ts","sourceRoot":"","sources":["../../../src/http-server/cookie.js"],"names":[],"mappings":"AAIA;IAmFE;;;;;OAKG;IACH,gCAJW,MAAM,GAAG,SAAS,GAAG,IAAI,UACzB,MAAM,GAAG,SAAS,GAChB,MAAM,EAAE,CAgCpB;IAED;;;;;OAKG;IACH,2BAJW,OAAC,UACD,MAAM,GACJ,MAAM,CAalB;IAED;;;;;OAKG;IACH,2BAJW,MAAM,UACN,MAAM,GACJ,MAAM,CAwBlB;IAED;;;;OAIG;IACH,uCAHW,OAAC,GACC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAC,CAiB3C;IAED;;;;;OAKG;IACH,wCAJW,MAAM,WACN,MAAM,GACJ,MAAM,CAalB;IAED;;;;OAIG;IACH,0BAHW,MAAM,GACJ,MAAM,CAIlB;IAED;;;;OAIG;IACH,4BAHW,MAAM,GACJ,MAAM,CAIlB;IAED;;;;OAIG;IACH,6BAHW,MAAM,GACJ,MAAM,CAOlB;IA9OD;;;;;;;;;;OAUG;IAEH;;;;;;;;;OASG;IACH,kEAPG;QAAqB,IAAI,EAAjB,MAAM;QAC0B,KAAK,EAArC,MAAM,GAAG,SAAS,GAAG,IAAI;QACQ,QAAQ,GAAzC,MAAM,GAAG,SAAS,GAAG,IAAI;QACJ,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QACb,SAAS;QACC,KAAK,GAA9B,KAAK,GAAG,SAAS;KAC3B,EAQA;IANC,cAAiB;IACjB,eAAyB;IACzB,kBAAwC;IACxC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAA6B;IAC7B,oBAA2B;IAC3B,0BAAmB;IAGrB;;;OAGG;IACH,QAFa,MAAM,CAES;IAE5B;;;OAGG;IACH,SAFa,MAAM,CAEyB;IAE5C;;;OAGG;IACH,YAFa,MAAM,CAE+B;IAElD;;;OAGG;IACH,eAFa,OAAO,CAE6B;IAEjD;;;OAGG;IACH,SAFa,KAAK,GAAG,SAAS,CAEA;IAE9B;;;OAGG;IACH,YAFa,MAAM,CAiBlB;CA+JF"}
@@ -2,6 +2,7 @@
2
2
  import crypto from "crypto";
3
3
  export default class Cookie {
4
4
  /**
5
+ * CookieOptions type.
5
6
  * @typedef {object} CookieOptions
6
7
  * @property {string} [domain] - Domain.
7
8
  * @property {Date} [expires] - Expires date.
@@ -12,6 +13,7 @@ export default class Cookie {
12
13
  * @property {"Lax" | "Strict" | "None"} [sameSite] - SameSite value.
13
14
  */
14
15
  /**
16
+ * Runs constructor.
15
17
  * @param {object} args - Options object.
16
18
  * @param {string} args.name - Cookie name.
17
19
  * @param {string | undefined | null} args.value - Cookie value.
@@ -28,17 +30,35 @@ export default class Cookie {
28
30
  this._encrypted = encrypted;
29
31
  this._error = error;
30
32
  }
31
- /** @returns {string} - Cookie name. */
33
+ /**
34
+ * Runs name.
35
+ * @returns {string} - Cookie name.
36
+ */
32
37
  name() { return this._name; }
33
- /** @returns {string} - Cookie value (decrypted when available). */
38
+ /**
39
+ * Runs value.
40
+ * @returns {string} - Cookie value (decrypted when available).
41
+ */
34
42
  value() { return String(this._value ?? ""); }
35
- /** @returns {string} - Raw cookie value. */
43
+ /**
44
+ * Runs raw value.
45
+ * @returns {string} - Raw cookie value.
46
+ */
36
47
  rawValue() { return String(this._rawValue ?? ""); }
37
- /** @returns {boolean} - Whether cookie is encrypted. */
48
+ /**
49
+ * Runs is encrypted.
50
+ * @returns {boolean} - Whether cookie is encrypted.
51
+ */
38
52
  isEncrypted() { return Boolean(this._encrypted); }
39
- /** @returns {Error | undefined} - Decryption error. */
53
+ /**
54
+ * Runs error.
55
+ * @returns {Error | undefined} - Decryption error.
56
+ */
40
57
  error() { return this._error; }
41
- /** @returns {string} - Set-Cookie header value. */
58
+ /**
59
+ * Runs to header.
60
+ * @returns {string} - Set-Cookie header value.
61
+ */
42
62
  toHeader() {
43
63
  const parts = [];
44
64
  const value = encodeURIComponent(this.rawValue());
@@ -60,6 +80,7 @@ export default class Cookie {
60
80
  return parts.join("; ");
61
81
  }
62
82
  /**
83
+ * Runs parse header.
63
84
  * @param {string | undefined | null} headerValue - Cookie header.
64
85
  * @param {string | undefined} secret - Encryption secret.
65
86
  * @returns {Cookie[]} - Cookie list.
@@ -94,7 +115,8 @@ export default class Cookie {
94
115
  });
95
116
  }
96
117
  /**
97
- * @param {unknown} value - Value to encrypt.
118
+ * Runs encrypt value.
119
+ * @param {?} value - Value to encrypt.
98
120
  * @param {string} secret - Encryption secret.
99
121
  * @returns {string} - Encrypted value.
100
122
  */
@@ -110,6 +132,7 @@ export default class Cookie {
110
132
  return `enc:v1:${type}.${this._toBase64Url(iv)}.${this._toBase64Url(authTag)}.${this._toBase64Url(encrypted)}`;
111
133
  }
112
134
  /**
135
+ * Runs decrypt value.
113
136
  * @param {string} value - Encrypted value.
114
137
  * @param {string} secret - Encryption secret.
115
138
  * @returns {string} - Decrypted value.
@@ -134,7 +157,8 @@ export default class Cookie {
134
157
  return this._deserializeEncryptedValue(type, decrypted);
135
158
  }
136
159
  /**
137
- * @param {unknown} value - Value to serialize.
160
+ * Runs serialize encrypted value.
161
+ * @param {?} value - Value to serialize.
138
162
  * @returns {{payload: string, type: string}} - Serialized payload.
139
163
  */
140
164
  static _serializeEncryptedValue(value) {
@@ -154,6 +178,7 @@ export default class Cookie {
154
178
  }
155
179
  }
156
180
  /**
181
+ * Runs deserialize encrypted value.
157
182
  * @param {string} type - Serialized type.
158
183
  * @param {string} payload - Payload.
159
184
  * @returns {string} - Deserialized value.
@@ -171,6 +196,7 @@ export default class Cookie {
171
196
  return payload;
172
197
  }
173
198
  /**
199
+ * Runs derive key.
174
200
  * @param {string} secret - Secret.
175
201
  * @returns {Buffer} - Key.
176
202
  */
@@ -178,6 +204,7 @@ export default class Cookie {
178
204
  return crypto.createHash("sha256").update(secret).digest();
179
205
  }
180
206
  /**
207
+ * Runs to base64 url.
181
208
  * @param {Buffer} buffer - Buffer.
182
209
  * @returns {string} - Base64 URL encoded string.
183
210
  */
@@ -185,6 +212,7 @@ export default class Cookie {
185
212
  return buffer.toString("base64").replace(/\+/g, "-").replace(/\//g, "_").replace(/=+$/g, "");
186
213
  }
187
214
  /**
215
+ * Runs from base64 url.
188
216
  * @param {string} value - Base64 URL encoded string.
189
217
  * @returns {Buffer} - Buffer.
190
218
  */
@@ -194,4 +222,4 @@ export default class Cookie {
194
222
  return Buffer.from(`${normalized}${padding}`, "base64");
195
223
  }
196
224
  }
197
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29va2llLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2h0dHAtc2VydmVyL2Nvb2tpZS5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVosT0FBTyxNQUFNLE1BQU0sUUFBUSxDQUFBO0FBRTNCLE1BQU0sQ0FBQyxPQUFPLE9BQU8sTUFBTTtJQUN6Qjs7Ozs7Ozs7O09BU0c7SUFFSDs7Ozs7Ozs7T0FRRztJQUNILFlBQVksRUFBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsU0FBUyxHQUFHLEtBQUssRUFBRSxLQUFLLEVBQUM7UUFDcEUsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUE7UUFDakIsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLElBQUksRUFBRSxDQUFBO1FBQ3pCLElBQUksQ0FBQyxTQUFTLEdBQUcsUUFBUSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUE7UUFDeEMsSUFBSSxDQUFDLFFBQVEsR0FBRyxPQUFPLElBQUksRUFBRSxDQUFBO1FBQzdCLElBQUksQ0FBQyxVQUFVLEdBQUcsU0FBUyxDQUFBO1FBQzNCLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFBO0lBQ3JCLENBQUM7SUFFRCx1Q0FBdUM7SUFDdkMsSUFBSSxLQUFLLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQSxDQUFDLENBQUM7SUFFNUIsbUVBQW1FO0lBQ25FLEtBQUssS0FBSyxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxJQUFJLEVBQUUsQ0FBQyxDQUFBLENBQUMsQ0FBQztJQUU1Qyw0Q0FBNEM7SUFDNUMsUUFBUSxLQUFLLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLElBQUksRUFBRSxDQUFDLENBQUEsQ0FBQyxDQUFDO0lBRWxELHdEQUF3RDtJQUN4RCxXQUFXLEtBQUssT0FBTyxPQUFPLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFBLENBQUMsQ0FBQztJ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QUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQTtJQUM5RixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsTUFBTSxDQUFDLGNBQWMsQ0FBQyxLQUFLO1FBQ3pCLE1BQU0sVUFBVSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUE7UUFDOUQsTUFBTSxPQUFPLEdBQUcsVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBRTFGLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLFVBQVUsR0FBRyxPQUFPLEVBQUUsRUFBRSxRQUFRLENBQUMsQ0FBQTtJQUN6RCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuaW1wb3J0IGNyeXB0byBmcm9tIFwiY3J5cHRvXCJcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ29va2llIHtcbiAgLyoqXG4gICAqIEB0eXBlZGVmIHtvYmplY3R9IENvb2tpZU9wdGlvbnNcbiAgICogQHByb3BlcnR5IHtzdHJpbmd9IFtkb21haW5dIC0gRG9tYWluLlxuICAgKiBAcHJvcGVydHkge0RhdGV9IFtleHBpcmVzXSAtIEV4cGlyZXMgZGF0ZS5cbiAgICogQHByb3BlcnR5IHtib29sZWFufSBbaHR0cE9ubHldIC0gSHR0cE9ubHkgZmxhZy5cbiAgICogQHByb3BlcnR5IHtudW1iZXJ9IFttYXhBZ2VdIC0gTWF4LUFnZSBpbiBzZWNvbmRzLlxuICAgKiBAcHJvcGVydHkge3N0cmluZ30gW3BhdGhdIC0gUGF0aC5cbiAgICogQHByb3BlcnR5IHtib29sZWFufSBbc2VjdXJlXSAtIFNlY3VyZSBmbGFnLlxuICAgKiBAcHJvcGVydHkge1wiTGF4XCIgfCBcIlN0cmljdFwiIHwgXCJOb25lXCJ9IFtzYW1lU2l0ZV0gLSBTYW1lU2l0ZSB2YWx1ZS5cbiAgICovXG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gT3B0aW9ucyBvYmplY3QuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhcmdzLm5hbWUgLSBDb29raWUgbmFtZS5cbiAgICogQHBhcmFtIHtzdHJpbmcgfCB1bmRlZmluZWQgfCBudWxsfSBhcmdzLnZhbHVlIC0gQ29va2llIHZhbHVlLlxuICAgKiBAcGFyYW0ge3N0cmluZyB8IHVuZGVmaW5lZCB8IG51bGx9IFthcmdzLnJhd1ZhbHVlXSAtIFJhdyBjb29raWUgdmFsdWUuXG4gICAqIEBwYXJhbSB7Q29va2llT3B0aW9uc30gW2FyZ3Mub3B0aW9uc10gLSBDb29raWUgb3B0aW9ucy5cbiAgICogQHBhcmFtIHtib29sZWFufSBbYXJncy5lbmNyeXB0ZWRdIC0gV2hldGhlciBjb29raWUgaXMgZW5jcnlwdGVkLlxuICAgKiBAcGFyYW0ge0Vycm9yIHwgdW5kZWZpbmVkfSBbYXJncy5lcnJvcl0gLSBEZWNyeXB0aW9uIGVycm9yLlxuICAgKi9cbiAgY29uc3RydWN0b3Ioe25hbWUsIHZhbHVlLCByYXdWYWx1ZSwgb3B0aW9ucywgZW5jcnlwdGVkID0gZmFsc2UsIGVycm9yfSkge1xuICAgIHRoaXMuX25hbWUgPSBuYW1lXG4gICAgdGhpcy5fdmFsdWUgPSB2YWx1ZSA/PyBcIlwiXG4gICAgdGhpcy5fcmF3VmFsdWUgPSByYXdWYWx1ZSA/PyB0aGlzLl92YWx1ZVxuICAgIHRoaXMuX29wdGlvbnMgPSBvcHRpb25zIHx8IHt9XG4gICAgdGhpcy5fZW5jcnlwdGVkID0gZW5jcnlwdGVkXG4gICAgdGhpcy5fZXJyb3IgPSBlcnJvclxuICB9XG5cbiAgLyoqIEByZXR1cm5zIHtzdHJpbmd9IC0gQ29va2llIG5hbWUuICovXG4gIG5hbWUoKSB7IHJldHVybiB0aGlzLl9uYW1lIH1cblxuICAvKiogQHJldHVybnMge3N0cmluZ30gLSBDb29raWUgdmFsdWUgKGRlY3J5cHRlZCB3aGVuIGF2YWlsYWJsZSkuICovXG4gIHZhbHVlKCkgeyByZXR1cm4gU3RyaW5nKHRoaXMuX3ZhbHVlID8/IFwiXCIpIH1cblxuICAvKiogQHJldHVybnMge3N0cmluZ30gLSBSYXcgY29va2llIHZhbHVlLiAqL1xuICByYXdWYWx1ZSgpIHsgcmV0dXJuIFN0cmluZyh0aGlzLl9yYXdWYWx1ZSA/PyBcIlwiKSB9XG5cbiAgLyoqIEByZXR1cm5zIHtib29sZWFufSAtIFdoZXRoZXIgY29va2llIGlzIGVuY3J5cHRlZC4gKi9cbiAgaXNFbmNyeXB0ZWQoKSB7IHJldHVybiBCb29sZWFuKHRoaXMuX2VuY3J5cHRlZCkgfVxuXG4gIC8qKiBAcmV0dXJucyB7RXJyb3IgfCB1bmRlZmluZWR9IC0gRGVjcnlwdGlvbiBlcnJvci4gKi9cbiAgZXJyb3IoKSB7IHJldHVybiB0aGlzLl9lcnJvciB9XG5cbiAgLyoqIEByZXR1cm5zIHtzdHJpbmd9IC0gU2V0LUNvb2tpZSBoZWFkZXIgdmFsdWUuICovXG4gIHRvSGVhZGVyKCkge1xuICAgIGNvbnN0IHBhcnRzID0gW11cbiAgICBjb25zdCB2YWx1ZSA9IGVuY29kZVVSSUNvbXBvbmVudCh0aGlzLnJhd1ZhbHVlKCkpXG5cbiAgICBwYXJ0cy5wdXNoKGAke3RoaXMuX25hbWV9PSR7dmFsdWV9YClcblxuICAgIGlmICh0aGlzLl9vcHRpb25zLmRvbWFpbikgcGFydHMucHVzaChgRG9tYWluPSR7dGhpcy5fb3B0aW9ucy5kb21haW59YClcbiAgICBpZiAodGhpcy5fb3B0aW9ucy5wYXRoKSBwYXJ0cy5wdXNoKGBQYXRoPSR7dGhpcy5fb3B0aW9ucy5wYXRofWApXG4gICAgaWYgKHRoaXMuX29wdGlvbnMuZXhwaXJlcyBpbnN0YW5jZW9mIERhdGUpIHBhcnRzLnB1c2goYEV4cGlyZXM9JHt0aGlzLl9vcHRpb25zLmV4cGlyZXMudG9VVENTdHJpbmcoKX1gKVxuICAgIGlmICh0eXBlb2YgdGhpcy5fb3B0aW9ucy5tYXhBZ2UgPT09IFwibnVtYmVyXCIpIHBhcnRzLnB1c2goYE1heC1BZ2U9JHt0aGlzLl9vcHRpb25zLm1heEFnZX1gKVxuICAgIGlmICh0aGlzLl9vcHRpb25zLmh0dHBPbmx5KSBwYXJ0cy5wdXNoKFwiSHR0cE9ubHlcIilcbiAgICBpZiAodGhpcy5fb3B0aW9ucy5zZWN1cmUpIHBhcnRzLnB1c2goXCJTZWN1cmVcIilcbiAgICBpZiAodGhpcy5fb3B0aW9ucy5zYW1lU2l0ZSkgcGFydHMucHVzaChgU2FtZVNpdGU9JHt0aGlzLl9vcHRpb25zLnNhbWVTaXRlfWApXG5cbiAgICByZXR1cm4gcGFydHMuam9pbihcIjsgXCIpXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmcgfCB1bmRlZmluZWQgfCBudWxsfSBoZWFkZXJWYWx1ZSAtIENvb2tpZSBoZWFkZXIuXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgdW5kZWZpbmVkfSBzZWNyZXQgLSBFbmNyeXB0aW9uIHNlY3JldC5cbiAgICogQHJldHVybnMge0Nvb2tpZVtdfSAtIENvb2tpZSBsaXN0LlxuICAgKi9cbiAgc3RhdGljIHBhcnNlSGVhZGVyKGhlYWRlclZhbHVlLCBzZWNyZXQpIHtcbiAgICBpZiAoIWhlYWRlclZhbHVlKSByZXR1cm4gW11cblxuICAgIHJldHVybiBoZWFkZXJWYWx1ZS5zcGxpdChcIjtcIikubWFwKChwYWlyKSA9PiBwYWlyLnRyaW0oKSkuZmlsdGVyKEJvb2xlYW4pLm1hcCgocGFpcikgPT4ge1xuICAgICAgY29uc3QgW25hbWUsIC4uLnJlc3RdID0gcGFpci5zcGxpdChcIj1cIilcbiAgICAgIGNvbnN0IHJhd1ZhbHVlID0gcmVzdC5qb2luKFwiPVwiKVxuICAgICAgbGV0IHZhbHVlID0gcmF3VmFsdWVcblxuICAgICAgdHJ5IHtcbiAgICAgICAgdmFsdWUgPSBkZWNvZGVVUklDb21wb25lbnQocmF3VmFsdWUpXG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgLy8gVXNlIHJhdyB2YWx1ZSB3aGVuIGRlY29kaW5nIGZhaWxzLlxuICAgICAgfVxuXG4gICAgICBpZiAodmFsdWUuc3RhcnRzV2l0aChcImVuYzp2MTpcIikpIHtcbiAgICAgICAgaWYgKCFzZWNyZXQpIHtcbiAgICAgICAgICByZXR1cm4gbmV3IENvb2tpZSh7bmFtZSwgdmFsdWU6IFwiXCIsIHJhd1ZhbHVlOiB2YWx1ZSwgZW5jcnlwdGVkOiB0cnVlLCBlcnJvcjogbmV3IEVycm9yKFwiTm8gY29va2llIHNlY3JldCBjb25maWd1cmVkXCIpfSlcbiAgICAgICAgfVxuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgZGVjcnlwdGVkVmFsdWUgPSB0aGlzLmRlY3J5cHRWYWx1ZSh2YWx1ZSwgc2VjcmV0KVxuICAgICAgICAgIHJldHVybiBuZXcgQ29va2llKHtuYW1lLCB2YWx1ZTogZGVjcnlwdGVkVmFsdWUsIHJhd1ZhbHVlOiB2YWx1ZSwgZW5jcnlwdGVkOiB0cnVlfSlcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBjb25zdCBlbnN1cmVkRXJyb3IgPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IgOiBuZXcgRXJyb3IoU3RyaW5nKGVycm9yKSlcbiAgICAgICAgICByZXR1cm4gbmV3IENvb2tpZSh7bmFtZSwgdmFsdWU6IFwiXCIsIHJhd1ZhbHVlOiB2YWx1ZSwgZW5jcnlwdGVkOiB0cnVlLCBlcnJvcjogZW5zdXJlZEVycm9yfSlcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gbmV3IENvb2tpZSh7bmFtZSwgdmFsdWUsIHJhd1ZhbHVlOiB2YWx1ZX0pXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3Vua25vd259IHZhbHVlIC0gVmFsdWUgdG8gZW5jcnlwdC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHNlY3JldCAtIEVuY3J5cHRpb24gc2VjcmV0LlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSAtIEVuY3J5cHRlZCB2YWx1ZS5cbiAgICovXG4gIHN0YXRpYyBlbmNyeXB0VmFsdWUodmFsdWUsIHNlY3JldCkge1xuICAgIGlmICghc2VjcmV0KSB0aHJvdyBuZXcgRXJyb3IoXCJObyBjb29raWUgc2VjcmV0IGNvbmZpZ3VyZWRcIilcblxuICAgIGNvbnN0IHtwYXlsb2FkLCB0eXBlfSA9IHRoaXMuX3NlcmlhbGl6ZUVuY3J5cHRlZFZhbHVlKHZhbHVlKVxuICAgIGNvbnN0IGl2ID0gY3J5cHRvLnJhbmRvbUJ5dGVzKDEyKVxuICAgIGNvbnN0IGtleSA9IHRoaXMuX2Rlcml2ZUtleShzZWNyZXQpXG4gICAgY29uc3QgY2lwaGVyID0gY3J5cHRvLmNyZWF0ZUNpcGhlcml2KFwiYWVzLTI1Ni1nY21cIiwga2V5LCBpdilcbiAgICBjb25zdCBlbmNyeXB0ZWQgPSBCdWZmZXIuY29uY2F0KFtjaXBoZXIudXBkYXRlKHBheWxvYWQsIFwidXRmOFwiKSwgY2lwaGVyLmZpbmFsKCldKVxuICAgIGNvbnN0IGF1dGhUYWcgPSBjaXBoZXIuZ2V0QXV0aFRhZygpXG5cbiAgICByZXR1cm4gYGVuYzp2MToke3R5cGV9LiR7dGhpcy5fdG9CYXNlNjRVcmwoaXYpfS4ke3RoaXMuX3RvQmFzZTY0VXJsKGF1dGhUYWcpfS4ke3RoaXMuX3RvQmFzZTY0VXJsKGVuY3J5cHRlZCl9YFxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZSAtIEVuY3J5cHRlZCB2YWx1ZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHNlY3JldCAtIEVuY3J5cHRpb24gc2VjcmV0LlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSAtIERlY3J5cHRlZCB2YWx1ZS5cbiAgICovXG4gIHN0YXRpYyBkZWNyeXB0VmFsdWUodmFsdWUsIHNlY3JldCkge1xuICAgIGlmICghc2VjcmV0KSB0aHJvdyBuZXcgRXJyb3IoXCJObyBjb29raWUgc2VjcmV0IGNvbmZpZ3VyZWRcIilcbiAgICBpZiAoIXZhbHVlLnN0YXJ0c1dpdGgoXCJlbmM6djE6XCIpKSByZXR1cm4gdmFsdWVcblxuICAgIGNvbnN0IHBheWxvYWQgPSB2YWx1ZS5zbGljZShcImVuYzp2MTpcIi5sZW5ndGgpXG4gICAgY29uc3QgW3R5cGUsIGl2RW5jb2RlZCwgdGFnRW5jb2RlZCwgZGF0YUVuY29kZWRdID0gcGF5bG9hZC5zcGxpdChcIi5cIilcblxuICAgIGlmICghdHlwZSB8fCAhaXZFbmNvZGVkIHx8ICF0YWdFbmNvZGVkIHx8ICFkYXRhRW5jb2RlZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBlbmNyeXB0ZWQgY29va2llIGZvcm1hdFwiKVxuICAgIH1cblxuICAgIGNvbnN0IGl2ID0gdGhpcy5fZnJvbUJhc2U2NFVybChpdkVuY29kZWQpXG4gICAgY29uc3QgYXV0aFRhZyA9IHRoaXMuX2Zyb21CYXNlNjRVcmwodGFnRW5jb2RlZClcbiAgICBjb25zdCBkYXRhID0gdGhpcy5fZnJvbUJhc2U2NFVybChkYXRhRW5jb2RlZClcbiAgICBjb25zdCBrZXkgPSB0aGlzLl9kZXJpdmVLZXkoc2VjcmV0KVxuICAgIGNvbnN0IGRlY2lwaGVyID0gY3J5cHRvLmNyZWF0ZURlY2lwaGVyaXYoXCJhZXMtMjU2LWdjbVwiLCBrZXksIGl2KVxuXG4gICAgZGVjaXBoZXIuc2V0QXV0aFRhZyhhdXRoVGFnKVxuXG4gICAgY29uc3QgZGVjcnlwdGVkID0gQnVmZmVyLmNvbmNhdChbZGVjaXBoZXIudXBkYXRlKGRhdGEpLCBkZWNpcGhlci5maW5hbCgpXSkudG9TdHJpbmcoXCJ1dGY4XCIpXG5cbiAgICByZXR1cm4gdGhpcy5fZGVzZXJpYWxpemVFbmNyeXB0ZWRWYWx1ZSh0eXBlLCBkZWNyeXB0ZWQpXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHt1bmtub3dufSB2YWx1ZSAtIFZhbHVlIHRvIHNlcmlhbGl6ZS5cbiAgICogQHJldHVybnMge3twYXlsb2FkOiBzdHJpbmcsIHR5cGU6IHN0cmluZ319IC0gU2VyaWFsaXplZCBwYXlsb2FkLlxuICAgKi9cbiAgc3RhdGljIF9zZXJpYWxpemVFbmNyeXB0ZWRWYWx1ZSh2YWx1ZSkge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIpIHJldHVybiB7cGF5bG9hZDogdmFsdWUsIHR5cGU6IFwic1wifVxuICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSByZXR1cm4ge3BheWxvYWQ6IFwiXCIsIHR5cGU6IFwic1wifVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHBheWxvYWQgPSBKU09OLnN0cmluZ2lmeSh2YWx1ZSlcblxuICAgICAgaWYgKHBheWxvYWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4ge3BheWxvYWQ6IFN0cmluZyh2YWx1ZSksIHR5cGU6IFwic1wifVxuICAgICAgfVxuXG4gICAgICByZXR1cm4ge3BheWxvYWQsIHR5cGU6IFwialwifVxuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIHtwYXlsb2FkOiBTdHJpbmcodmFsdWUpLCB0eXBlOiBcInNcIn1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IHR5cGUgLSBTZXJpYWxpemVkIHR5cGUuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwYXlsb2FkIC0gUGF5bG9hZC5cbiAgICogQHJldHVybnMge3N0cmluZ30gLSBEZXNlcmlhbGl6ZWQgdmFsdWUuXG4gICAqL1xuICBzdGF0aWMgX2Rlc2VyaWFsaXplRW5jcnlwdGVkVmFsdWUodHlwZSwgcGF5bG9hZCkge1xuICAgIGlmICh0eXBlID09PSBcImpcIikge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcGFyc2VkID0gSlNPTi5wYXJzZShwYXlsb2FkKVxuICAgICAgICByZXR1cm4gdHlwZW9mIHBhcnNlZCA9PT0gXCJzdHJpbmdcIiA/IHBhcnNlZCA6IEpTT04uc3RyaW5naWZ5KHBhcnNlZClcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICByZXR1cm4gcGF5bG9hZFxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBwYXlsb2FkXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IHNlY3JldCAtIFNlY3JldC5cbiAgICogQHJldHVybnMge0J1ZmZlcn0gLSBLZXkuXG4gICAqL1xuICBzdGF0aWMgX2Rlcml2ZUtleShzZWNyZXQpIHtcbiAgICByZXR1cm4gY3J5cHRvLmNyZWF0ZUhhc2goXCJzaGEyNTZcIikudXBkYXRlKHNlY3JldCkuZGlnZXN0KClcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0J1ZmZlcn0gYnVmZmVyIC0gQnVmZmVyLlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSAtIEJhc2U2NCBVUkwgZW5jb2RlZCBzdHJpbmcuXG4gICAqL1xuICBzdGF0aWMgX3RvQmFzZTY0VXJsKGJ1ZmZlcikge1xuICAgIHJldHVybiBidWZmZXIudG9TdHJpbmcoXCJiYXNlNjRcIikucmVwbGFjZSgvXFwrL2csIFwiLVwiKS5yZXBsYWNlKC9cXC8vZywgXCJfXCIpLnJlcGxhY2UoLz0rJC9nLCBcIlwiKVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZSAtIEJhc2U2NCBVUkwgZW5jb2RlZCBzdHJpbmcuXG4gICAqIEByZXR1cm5zIHtCdWZmZXJ9IC0gQnVmZmVyLlxuICAgKi9cbiAgc3RhdGljIF9mcm9tQmFzZTY0VXJsKHZhbHVlKSB7XG4gICAgY29uc3Qgbm9ybWFsaXplZCA9IHZhbHVlLnJlcGxhY2UoLy0vZywgXCIrXCIpLnJlcGxhY2UoL18vZywgXCIvXCIpXG4gICAgY29uc3QgcGFkZGluZyA9IG5vcm1hbGl6ZWQubGVuZ3RoICUgNCA9PT0gMCA/IFwiXCIgOiBcIj1cIi5yZXBlYXQoNCAtIChub3JtYWxpemVkLmxlbmd0aCAlIDQpKVxuXG4gICAgcmV0dXJuIEJ1ZmZlci5mcm9tKGAke25vcm1hbGl6ZWR9JHtwYWRkaW5nfWAsIFwiYmFzZTY0XCIpXG4gIH1cbn1cbiJdfQ==
225
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29va2llLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2h0dHAtc2VydmVyL2Nvb2tpZS5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVosT0FBTyxNQUFNLE1BQU0sUUFBUSxDQUFBO0FBRTNCLE1BQU0sQ0FBQyxPQUFPLE9BQU8sTUFBTTtJQUN6Qjs7Ozs7Ozs7OztPQVVHO0lBRUg7Ozs7Ozs7OztPQVNHO0lBQ0gsWUFBWSxFQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxTQUFTLEdBQUcsS0FBSyxFQUFFLEtBQUssRUFBQztRQUNwRSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQTtRQUNqQixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssSUFBSSxFQUFFLENBQUE7UUFDekIsSUFBSSxDQUFDLFNBQVMsR0FBRyxRQUFRLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQTtRQUN4QyxJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sSUFBSSxFQUFFLENBQUE7UUFDN0IsSUFBSSxDQUFDLFVBQVUsR0FBRyxTQUFTLENBQUE7UUFDM0IsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUE7SUFDckIsQ0FBQztJQUVEOzs7T0FHRztJQUNILElBQUksS0FBSyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUEsQ0FBQyxDQUFDO0lBRTVCOzs7T0FHRztJQUNILEtBQUssS0FBSyxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxJQUFJLEVBQUUsQ0FBQyxDQUFBLENBQUMsQ0FBQztJQUU1Qzs7O09BR0c7SUFDSCxRQUFRLEtBQUssT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsSUFBSSxFQUFFLENBQUMsQ0FBQSxDQUFDLENBQUM7SUFFbEQ7OztPQUdHO0lBQ0gsV0FBVyxLQUFLLE9BQU8sT0FBTyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQSxDQUFDLENBQUM7SUFF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LENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQTtJQUM5RixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILE1BQU0sQ0FBQyxjQUFjLENBQUMsS0FBSztRQUN6QixNQUFNLFVBQVUsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFBO1FBQzlELE1BQU0sT0FBTyxHQUFHLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUUxRixPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxVQUFVLEdBQUcsT0FBTyxFQUFFLEVBQUUsUUFBUSxDQUFDLENBQUE7SUFDekQsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbmltcG9ydCBjcnlwdG8gZnJvbSBcImNyeXB0b1wiXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENvb2tpZSB7XG4gIC8qKlxuICAgKiBDb29raWVPcHRpb25zIHR5cGUuXG4gICAqIEB0eXBlZGVmIHtvYmplY3R9IENvb2tpZU9wdGlvbnNcbiAgICogQHByb3BlcnR5IHtzdHJpbmd9IFtkb21haW5dIC0gRG9tYWluLlxuICAgKiBAcHJvcGVydHkge0RhdGV9IFtleHBpcmVzXSAtIEV4cGlyZXMgZGF0ZS5cbiAgICogQHByb3BlcnR5IHtib29sZWFufSBbaHR0cE9ubHldIC0gSHR0cE9ubHkgZmxhZy5cbiAgICogQHByb3BlcnR5IHtudW1iZXJ9IFttYXhBZ2VdIC0gTWF4LUFnZSBpbiBzZWNvbmRzLlxuICAgKiBAcHJvcGVydHkge3N0cmluZ30gW3BhdGhdIC0gUGF0aC5cbiAgICogQHByb3BlcnR5IHtib29sZWFufSBbc2VjdXJlXSAtIFNlY3VyZSBmbGFnLlxuICAgKiBAcHJvcGVydHkge1wiTGF4XCIgfCBcIlN0cmljdFwiIHwgXCJOb25lXCJ9IFtzYW1lU2l0ZV0gLSBTYW1lU2l0ZSB2YWx1ZS5cbiAgICovXG5cbiAgLyoqXG4gICAqIFJ1bnMgY29uc3RydWN0b3IuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gT3B0aW9ucyBvYmplY3QuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhcmdzLm5hbWUgLSBDb29raWUgbmFtZS5cbiAgICogQHBhcmFtIHtzdHJpbmcgfCB1bmRlZmluZWQgfCBudWxsfSBhcmdzLnZhbHVlIC0gQ29va2llIHZhbHVlLlxuICAgKiBAcGFyYW0ge3N0cmluZyB8IHVuZGVmaW5lZCB8IG51bGx9IFthcmdzLnJhd1ZhbHVlXSAtIFJhdyBjb29raWUgdmFsdWUuXG4gICAqIEBwYXJhbSB7Q29va2llT3B0aW9uc30gW2FyZ3Mub3B0aW9uc10gLSBDb29raWUgb3B0aW9ucy5cbiAgICogQHBhcmFtIHtib29sZWFufSBbYXJncy5lbmNyeXB0ZWRdIC0gV2hldGhlciBjb29raWUgaXMgZW5jcnlwdGVkLlxuICAgKiBAcGFyYW0ge0Vycm9yIHwgdW5kZWZpbmVkfSBbYXJncy5lcnJvcl0gLSBEZWNyeXB0aW9uIGVycm9yLlxuICAgKi9cbiAgY29uc3RydWN0b3Ioe25hbWUsIHZhbHVlLCByYXdWYWx1ZSwgb3B0aW9ucywgZW5jcnlwdGVkID0gZmFsc2UsIGVycm9yfSkge1xuICAgIHRoaXMuX25hbWUgPSBuYW1lXG4gICAgdGhpcy5fdmFsdWUgPSB2YWx1ZSA/PyBcIlwiXG4gICAgdGhpcy5fcmF3VmFsdWUgPSByYXdWYWx1ZSA/PyB0aGlzLl92YWx1ZVxuICAgIHRoaXMuX29wdGlvbnMgPSBvcHRpb25zIHx8IHt9XG4gICAgdGhpcy5fZW5jcnlwdGVkID0gZW5jcnlwdGVkXG4gICAgdGhpcy5fZXJyb3IgPSBlcnJvclxuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgbmFtZS5cbiAgICogQHJldHVybnMge3N0cmluZ30gLSBDb29raWUgbmFtZS5cbiAgICovXG4gIG5hbWUoKSB7IHJldHVybiB0aGlzLl9uYW1lIH1cblxuICAvKipcbiAgICogUnVucyB2YWx1ZS5cbiAgICogQHJldHVybnMge3N0cmluZ30gLSBDb29raWUgdmFsdWUgKGRlY3J5cHRlZCB3aGVuIGF2YWlsYWJsZSkuXG4gICAqL1xuICB2YWx1ZSgpIHsgcmV0dXJuIFN0cmluZyh0aGlzLl92YWx1ZSA/PyBcIlwiKSB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgcmF3IHZhbHVlLlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSAtIFJhdyBjb29raWUgdmFsdWUuXG4gICAqL1xuICByYXdWYWx1ZSgpIHsgcmV0dXJuIFN0cmluZyh0aGlzLl9yYXdWYWx1ZSA/PyBcIlwiKSB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgaXMgZW5jcnlwdGVkLlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gLSBXaGV0aGVyIGNvb2tpZSBpcyBlbmNyeXB0ZWQuXG4gICAqL1xuICBpc0VuY3J5cHRlZCgpIHsgcmV0dXJuIEJvb2xlYW4odGhpcy5fZW5jcnlwdGVkKSB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgZXJyb3IuXG4gICAqIEByZXR1cm5zIHtFcnJvciB8IHVuZGVmaW5lZH0gLSBEZWNyeXB0aW9uIGVycm9yLlxuICAgKi9cbiAgZXJyb3IoKSB7IHJldHVybiB0aGlzLl9lcnJvciB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgdG8gaGVhZGVyLlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSAtIFNldC1Db29raWUgaGVhZGVyIHZhbHVlLlxuICAgKi9cbiAgdG9IZWFkZXIoKSB7XG4gICAgY29uc3QgcGFydHMgPSBbXVxuICAgIGNvbnN0IHZhbHVlID0gZW5jb2RlVVJJQ29tcG9uZW50KHRoaXMucmF3VmFsdWUoKSlcblxuICAgIHBhcnRzLnB1c2goYCR7dGhpcy5fbmFtZX09JHt2YWx1ZX1gKVxuXG4gICAgaWYgKHRoaXMuX29wdGlvbnMuZG9tYWluKSBwYXJ0cy5wdXNoKGBEb21haW49JHt0aGlzLl9vcHRpb25zLmRvbWFpbn1gKVxuICAgIGlmICh0aGlzLl9vcHRpb25zLnBhdGgpIHBhcnRzLnB1c2goYFBhdGg9JHt0aGlzLl9vcHRpb25zLnBhdGh9YClcbiAgICBpZiAodGhpcy5fb3B0aW9ucy5leHBpcmVzIGluc3RhbmNlb2YgRGF0ZSkgcGFydHMucHVzaChgRXhwaXJlcz0ke3RoaXMuX29wdGlvbnMuZXhwaXJlcy50b1VUQ1N0cmluZygpfWApXG4gICAgaWYgKHR5cGVvZiB0aGlzLl9vcHRpb25zLm1heEFnZSA9PT0gXCJudW1iZXJcIikgcGFydHMucHVzaChgTWF4LUFnZT0ke3RoaXMuX29wdGlvbnMubWF4QWdlfWApXG4gICAgaWYgKHRoaXMuX29wdGlvbnMuaHR0cE9ubHkpIHBhcnRzLnB1c2goXCJIdHRwT25seVwiKVxuICAgIGlmICh0aGlzLl9vcHRpb25zLnNlY3VyZSkgcGFydHMucHVzaChcIlNlY3VyZVwiKVxuICAgIGlmICh0aGlzLl9vcHRpb25zLnNhbWVTaXRlKSBwYXJ0cy5wdXNoKGBTYW1lU2l0ZT0ke3RoaXMuX29wdGlvbnMuc2FtZVNpdGV9YClcblxuICAgIHJldHVybiBwYXJ0cy5qb2luKFwiOyBcIilcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIHBhcnNlIGhlYWRlci5cbiAgICogQHBhcmFtIHtzdHJpbmcgfCB1bmRlZmluZWQgfCBudWxsfSBoZWFkZXJWYWx1ZSAtIENvb2tpZSBoZWFkZXIuXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgdW5kZWZpbmVkfSBzZWNyZXQgLSBFbmNyeXB0aW9uIHNlY3JldC5cbiAgICogQHJldHVybnMge0Nvb2tpZVtdfSAtIENvb2tpZSBsaXN0LlxuICAgKi9cbiAgc3RhdGljIHBhcnNlSGVhZGVyKGhlYWRlclZhbHVlLCBzZWNyZXQpIHtcbiAgICBpZiAoIWhlYWRlclZhbHVlKSByZXR1cm4gW11cblxuICAgIHJldHVybiBoZWFkZXJWYWx1ZS5zcGxpdChcIjtcIikubWFwKChwYWlyKSA9PiBwYWlyLnRyaW0oKSkuZmlsdGVyKEJvb2xlYW4pLm1hcCgocGFpcikgPT4ge1xuICAgICAgY29uc3QgW25hbWUsIC4uLnJlc3RdID0gcGFpci5zcGxpdChcIj1cIilcbiAgICAgIGNvbnN0IHJhd1ZhbHVlID0gcmVzdC5qb2luKFwiPVwiKVxuICAgICAgbGV0IHZhbHVlID0gcmF3VmFsdWVcblxuICAgICAgdHJ5IHtcbiAgICAgICAgdmFsdWUgPSBkZWNvZGVVUklDb21wb25lbnQocmF3VmFsdWUpXG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgLy8gVXNlIHJhdyB2YWx1ZSB3aGVuIGRlY29kaW5nIGZhaWxzLlxuICAgICAgfVxuXG4gICAgICBpZiAodmFsdWUuc3RhcnRzV2l0aChcImVuYzp2MTpcIikpIHtcbiAgICAgICAgaWYgKCFzZWNyZXQpIHtcbiAgICAgICAgICByZXR1cm4gbmV3IENvb2tpZSh7bmFtZSwgdmFsdWU6IFwiXCIsIHJhd1ZhbHVlOiB2YWx1ZSwgZW5jcnlwdGVkOiB0cnVlLCBlcnJvcjogbmV3IEVycm9yKFwiTm8gY29va2llIHNlY3JldCBjb25maWd1cmVkXCIpfSlcbiAgICAgICAgfVxuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgZGVjcnlwdGVkVmFsdWUgPSB0aGlzLmRlY3J5cHRWYWx1ZSh2YWx1ZSwgc2VjcmV0KVxuICAgICAgICAgIHJldHVybiBuZXcgQ29va2llKHtuYW1lLCB2YWx1ZTogZGVjcnlwdGVkVmFsdWUsIHJhd1ZhbHVlOiB2YWx1ZSwgZW5jcnlwdGVkOiB0cnVlfSlcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBjb25zdCBlbnN1cmVkRXJyb3IgPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IgOiBuZXcgRXJyb3IoU3RyaW5nKGVycm9yKSlcbiAgICAgICAgICByZXR1cm4gbmV3IENvb2tpZSh7bmFtZSwgdmFsdWU6IFwiXCIsIHJhd1ZhbHVlOiB2YWx1ZSwgZW5jcnlwdGVkOiB0cnVlLCBlcnJvcjogZW5zdXJlZEVycm9yfSlcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gbmV3IENvb2tpZSh7bmFtZSwgdmFsdWUsIHJhd1ZhbHVlOiB2YWx1ZX0pXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIGVuY3J5cHQgdmFsdWUuXG4gICAqIEBwYXJhbSB7P30gdmFsdWUgLSBWYWx1ZSB0byBlbmNyeXB0LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc2VjcmV0IC0gRW5jcnlwdGlvbiBzZWNyZXQuXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IC0gRW5jcnlwdGVkIHZhbHVlLlxuICAgKi9cbiAgc3RhdGljIGVuY3J5cHRWYWx1ZSh2YWx1ZSwgc2VjcmV0KSB7XG4gICAgaWYgKCFzZWNyZXQpIHRocm93IG5ldyBFcnJvcihcIk5vIGNvb2tpZSBzZWNyZXQgY29uZmlndXJlZFwiKVxuXG4gICAgY29uc3Qge3BheWxvYWQsIHR5cGV9ID0gdGhpcy5fc2VyaWFsaXplRW5jcnlwdGVkVmFsdWUodmFsdWUpXG4gICAgY29uc3QgaXYgPSBjcnlwdG8ucmFuZG9tQnl0ZXMoMTIpXG4gICAgY29uc3Qga2V5ID0gdGhpcy5fZGVyaXZlS2V5KHNlY3JldClcbiAgICBjb25zdCBjaXBoZXIgPSBjcnlwdG8uY3JlYXRlQ2lwaGVyaXYoXCJhZXMtMjU2LWdjbVwiLCBrZXksIGl2KVxuICAgIGNvbnN0IGVuY3J5cHRlZCA9IEJ1ZmZlci5jb25jYXQoW2NpcGhlci51cGRhdGUocGF5bG9hZCwgXCJ1dGY4XCIpLCBjaXBoZXIuZmluYWwoKV0pXG4gICAgY29uc3QgYXV0aFRhZyA9IGNpcGhlci5nZXRBdXRoVGFnKClcblxuICAgIHJldHVybiBgZW5jOnYxOiR7dHlwZX0uJHt0aGlzLl90b0Jhc2U2NFVybChpdil9LiR7dGhpcy5fdG9CYXNlNjRVcmwoYXV0aFRhZyl9LiR7dGhpcy5fdG9CYXNlNjRVcmwoZW5jcnlwdGVkKX1gXG4gIH1cblxuICAvKipcbiAgICogUnVucyBkZWNyeXB0IHZhbHVlLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdmFsdWUgLSBFbmNyeXB0ZWQgdmFsdWUuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzZWNyZXQgLSBFbmNyeXB0aW9uIHNlY3JldC5cbiAgICogQHJldHVybnMge3N0cmluZ30gLSBEZWNyeXB0ZWQgdmFsdWUuXG4gICAqL1xuICBzdGF0aWMgZGVjcnlwdFZhbHVlKHZhbHVlLCBzZWNyZXQpIHtcbiAgICBpZiAoIXNlY3JldCkgdGhyb3cgbmV3IEVycm9yKFwiTm8gY29va2llIHNlY3JldCBjb25maWd1cmVkXCIpXG4gICAgaWYgKCF2YWx1ZS5zdGFydHNXaXRoKFwiZW5jOnYxOlwiKSkgcmV0dXJuIHZhbHVlXG5cbiAgICBjb25zdCBwYXlsb2FkID0gdmFsdWUuc2xpY2UoXCJlbmM6djE6XCIubGVuZ3RoKVxuICAgIGNvbnN0IFt0eXBlLCBpdkVuY29kZWQsIHRhZ0VuY29kZWQsIGRhdGFFbmNvZGVkXSA9IHBheWxvYWQuc3BsaXQoXCIuXCIpXG5cbiAgICBpZiAoIXR5cGUgfHwgIWl2RW5jb2RlZCB8fCAhdGFnRW5jb2RlZCB8fCAhZGF0YUVuY29kZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgZW5jcnlwdGVkIGNvb2tpZSBmb3JtYXRcIilcbiAgICB9XG5cbiAgICBjb25zdCBpdiA9IHRoaXMuX2Zyb21CYXNlNjRVcmwoaXZFbmNvZGVkKVxuICAgIGNvbnN0IGF1dGhUYWcgPSB0aGlzLl9mcm9tQmFzZTY0VXJsKHRhZ0VuY29kZWQpXG4gICAgY29uc3QgZGF0YSA9IHRoaXMuX2Zyb21CYXNlNjRVcmwoZGF0YUVuY29kZWQpXG4gICAgY29uc3Qga2V5ID0gdGhpcy5fZGVyaXZlS2V5KHNlY3JldClcbiAgICBjb25zdCBkZWNpcGhlciA9IGNyeXB0by5jcmVhdGVEZWNpcGhlcml2KFwiYWVzLTI1Ni1nY21cIiwga2V5LCBpdilcblxuICAgIGRlY2lwaGVyLnNldEF1dGhUYWcoYXV0aFRhZylcblxuICAgIGNvbnN0IGRlY3J5cHRlZCA9IEJ1ZmZlci5jb25jYXQoW2RlY2lwaGVyLnVwZGF0ZShkYXRhKSwgZGVjaXBoZXIuZmluYWwoKV0pLnRvU3RyaW5nKFwidXRmOFwiKVxuXG4gICAgcmV0dXJuIHRoaXMuX2Rlc2VyaWFsaXplRW5jcnlwdGVkVmFsdWUodHlwZSwgZGVjcnlwdGVkKVxuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgc2VyaWFsaXplIGVuY3J5cHRlZCB2YWx1ZS5cbiAgICogQHBhcmFtIHs/fSB2YWx1ZSAtIFZhbHVlIHRvIHNlcmlhbGl6ZS5cbiAgICogQHJldHVybnMge3twYXlsb2FkOiBzdHJpbmcsIHR5cGU6IHN0cmluZ319IC0gU2VyaWFsaXplZCBwYXlsb2FkLlxuICAgKi9cbiAgc3RhdGljIF9zZXJpYWxpemVFbmNyeXB0ZWRWYWx1ZSh2YWx1ZSkge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIpIHJldHVybiB7cGF5bG9hZDogdmFsdWUsIHR5cGU6IFwic1wifVxuICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSByZXR1cm4ge3BheWxvYWQ6IFwiXCIsIHR5cGU6IFwic1wifVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHBheWxvYWQgPSBKU09OLnN0cmluZ2lmeSh2YWx1ZSlcblxuICAgICAgaWYgKHBheWxvYWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4ge3BheWxvYWQ6IFN0cmluZyh2YWx1ZSksIHR5cGU6IFwic1wifVxuICAgICAgfVxuXG4gICAgICByZXR1cm4ge3BheWxvYWQsIHR5cGU6IFwialwifVxuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIHtwYXlsb2FkOiBTdHJpbmcodmFsdWUpLCB0eXBlOiBcInNcIn1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUnVucyBkZXNlcmlhbGl6ZSBlbmNyeXB0ZWQgdmFsdWUuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlIC0gU2VyaWFsaXplZCB0eXBlLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcGF5bG9hZCAtIFBheWxvYWQuXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IC0gRGVzZXJpYWxpemVkIHZhbHVlLlxuICAgKi9cbiAgc3RhdGljIF9kZXNlcmlhbGl6ZUVuY3J5cHRlZFZhbHVlKHR5cGUsIHBheWxvYWQpIHtcbiAgICBpZiAodHlwZSA9PT0gXCJqXCIpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2UocGF5bG9hZClcbiAgICAgICAgcmV0dXJuIHR5cGVvZiBwYXJzZWQgPT09IFwic3RyaW5nXCIgPyBwYXJzZWQgOiBKU09OLnN0cmluZ2lmeShwYXJzZWQpXG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgcmV0dXJuIHBheWxvYWRcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcGF5bG9hZFxuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgZGVyaXZlIGtleS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHNlY3JldCAtIFNlY3JldC5cbiAgICogQHJldHVybnMge0J1ZmZlcn0gLSBLZXkuXG4gICAqL1xuICBzdGF0aWMgX2Rlcml2ZUtleShzZWNyZXQpIHtcbiAgICByZXR1cm4gY3J5cHRvLmNyZWF0ZUhhc2goXCJzaGEyNTZcIikudXBkYXRlKHNlY3JldCkuZGlnZXN0KClcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIHRvIGJhc2U2NCB1cmwuXG4gICAqIEBwYXJhbSB7QnVmZmVyfSBidWZmZXIgLSBCdWZmZXIuXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IC0gQmFzZTY0IFVSTCBlbmNvZGVkIHN0cmluZy5cbiAgICovXG4gIHN0YXRpYyBfdG9CYXNlNjRVcmwoYnVmZmVyKSB7XG4gICAgcmV0dXJuIGJ1ZmZlci50b1N0cmluZyhcImJhc2U2NFwiKS5yZXBsYWNlKC9cXCsvZywgXCItXCIpLnJlcGxhY2UoL1xcLy9nLCBcIl9cIikucmVwbGFjZSgvPSskL2csIFwiXCIpXG4gIH1cblxuICAvKipcbiAgICogUnVucyBmcm9tIGJhc2U2NCB1cmwuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZSAtIEJhc2U2NCBVUkwgZW5jb2RlZCBzdHJpbmcuXG4gICAqIEByZXR1cm5zIHtCdWZmZXJ9IC0gQnVmZmVyLlxuICAgKi9cbiAgc3RhdGljIF9mcm9tQmFzZTY0VXJsKHZhbHVlKSB7XG4gICAgY29uc3Qgbm9ybWFsaXplZCA9IHZhbHVlLnJlcGxhY2UoLy0vZywgXCIrXCIpLnJlcGxhY2UoL18vZywgXCIvXCIpXG4gICAgY29uc3QgcGFkZGluZyA9IG5vcm1hbGl6ZWQubGVuZ3RoICUgNCA9PT0gMCA/IFwiXCIgOiBcIj1cIi5yZXBlYXQoNCAtIChub3JtYWxpemVkLmxlbmd0aCAlIDQpKVxuXG4gICAgcmV0dXJuIEJ1ZmZlci5mcm9tKGAke25vcm1hbGl6ZWR9JHtwYWRkaW5nfWAsIFwiYmFzZTY0XCIpXG4gIH1cbn1cbiJdfQ==
@@ -4,6 +4,7 @@
4
4
  */
5
5
  export default class VelociousHttpServerDevelopmentReloader {
6
6
  /**
7
+ * Runs constructor.
7
8
  * @param {object} args - Options object.
8
9
  * @param {import("../configuration.js").default} args.configuration - Configuration instance.
9
10
  * @param {function({changedPath: string}) : Promise<void>} args.onReload - Reload callback.
@@ -31,22 +32,36 @@ export default class VelociousHttpServerDevelopmentReloader {
31
32
  readdir: typeof fs.readdir;
32
33
  stat: typeof fs.stat;
33
34
  watchFactory: typeof fsWatch;
34
- /** @type {ReturnType<typeof setTimeout> | undefined} */
35
+ /**
36
+ * Narrows the runtime value to the documented type.
37
+ @type {ReturnType<typeof setTimeout> | undefined} */
35
38
  reloadTimer: ReturnType<typeof setTimeout> | undefined;
36
- /** @type {string | undefined} */
39
+ /**
40
+ * Narrows the runtime value to the documented type.
41
+ @type {string | undefined} */
37
42
  pendingChangedPath: string | undefined;
38
- /** @type {Map<string, import("fs").FSWatcher>} */
43
+ /**
44
+ * Narrows the runtime value to the documented type.
45
+ @type {Map<string, import("fs").FSWatcher>} */
39
46
  watchers: Map<string, import("fs").FSWatcher>;
40
- /** @returns {Promise<void>} - Resolves when watching has started. */
47
+ /**
48
+ * Runs start.
49
+ * @returns {Promise<void>} - Resolves when watching has started.
50
+ */
41
51
  start(): Promise<void>;
42
- /** @returns {string[]} - Source directories to watch. */
52
+ /**
53
+ * Runs watch root paths.
54
+ * @returns {string[]} - Source directories to watch.
55
+ */
43
56
  watchRootPaths(): string[];
44
57
  /**
58
+ * Runs watch directory recursive.
45
59
  * @param {string} directoryPath - Directory path.
46
60
  * @returns {Promise<void>} - Resolves when child directories are watched.
47
61
  */
48
62
  watchDirectoryRecursive(directoryPath: string): Promise<void>;
49
63
  /**
64
+ * Runs on watcher event.
50
65
  * @param {object} args - Options object.
51
66
  * @param {string} args.directoryPath - Watched directory path.
52
67
  * @param {string} args.eventType - Watch event type.
@@ -59,6 +74,7 @@ export default class VelociousHttpServerDevelopmentReloader {
59
74
  fileName: string | Buffer | null;
60
75
  }): Promise<void>;
61
76
  /**
77
+ * Runs should reload path.
62
78
  * @param {object} args - Options object.
63
79
  * @param {string} args.changedPath - Changed path.
64
80
  * @param {string | Buffer | null} args.fileName - Raw filename from fs.watch.
@@ -69,23 +85,32 @@ export default class VelociousHttpServerDevelopmentReloader {
69
85
  fileName: string | Buffer | null;
70
86
  }): boolean;
71
87
  /**
88
+ * Runs watch potential directory.
72
89
  * @param {string} changedPath - Candidate directory path.
73
90
  * @returns {Promise<void>} - Resolves when any new directory watchers are added.
74
91
  */
75
92
  watchPotentialDirectory(changedPath: string): Promise<void>;
76
93
  /**
94
+ * Runs schedule reload.
77
95
  * @param {string} changedPath - Changed path.
78
96
  * @returns {void} - No return value.
79
97
  */
80
98
  scheduleReload(changedPath: string): void;
81
- /** @returns {Promise<void>} - Resolves when the queued reload is handled. */
99
+ /**
100
+ * Runs flush reload.
101
+ * @returns {Promise<void>} - Resolves when the queued reload is handled.
102
+ */
82
103
  flushReload(): Promise<void>;
83
104
  /**
105
+ * On watcher error.
84
106
  * @param {Error} error - Watcher error.
85
107
  * @returns {void} - No return value.
86
108
  */
87
109
  onWatcherError: (error: Error) => void;
88
- /** @returns {Promise<void>} - Resolves when watchers are closed. */
110
+ /**
111
+ * Runs stop.
112
+ * @returns {Promise<void>} - Resolves when watchers are closed.
113
+ */
89
114
  stop(): Promise<void>;
90
115
  }
91
116
  import Logger from "../logger.js";
@@ -1 +1 @@
1
- {"version":3,"file":"development-reloader.d.ts","sourceRoot":"","sources":["../../../src/http-server/development-reloader.js"],"names":[],"mappings":"AAeA;;;GAGG;AACH;IACE;;;;;;;;OAQG;IACH,kFAPG;QAAoD,aAAa,EAAzD,OAAO,qBAAqB,EAAE,OAAO;QACiB,QAAQ,EAA9D,CAAS,IAAqB,EAArB;YAAC,WAAW,EAAE,MAAM,CAAA;SAAC,KAAI,OAAO,CAAC,IAAI,CAAC;QACjC,UAAU;QACF,YAAY;QACT,OAAO;QACV,IAAI;KACpC,EAkBA;IAhBC,qDAAkC;IAClC,mBAA4B;IAC5B,eAAgE;IAChE,iBAVkB;QAAC,WAAW,EAAE,MAAM,CAAA;KAAC,KAAI,OAAO,CAAC,IAAI,CAAC,CAUhC;IACxB,2BAAsB;IACtB,qBAAgB;IAChB,6BAAgC;IAEhC,wDAAwD;IACxD,aADW,UAAU,CAAC,OAAO,UAAU,CAAC,GAAG,SAAS,CACxB;IAE5B,iCAAiC;IACjC,oBADW,MAAM,GAAG,SAAS,CACM;IAEnC,kDAAkD;IAClD,UADW,GAAG,CAAC,MAAM,EAAE,OAAO,IAAI,EAAE,SAAS,CAAC,CACrB;IAG3B,qEAAqE;IACrE,SADc,OAAO,CAAC,IAAI,CAAC,CAK1B;IAED,yDAAyD;IACzD,kBADc,MAAM,EAAE,CAarB;IAED;;;OAGG;IACH,uCAHW,MAAM,GACJ,OAAO,CAAC,IAAI,CAAC,CAgCzB;IAED;;;;;;OAMG;IACH,uDALG;QAAqB,aAAa,EAA1B,MAAM;QACO,SAAS,EAAtB,MAAM;QACuB,QAAQ,EAArC,MAAM,GAAG,MAAM,GAAG,IAAI;KAC9B,GAAU,OAAO,CAAC,IAAI,CAAC,CAczB;IAED;;;;;OAKG;IACH,4CAJG;QAAqB,WAAW,EAAxB,MAAM;QACuB,QAAQ,EAArC,MAAM,GAAG,MAAM,GAAG,IAAI;KAC9B,GAAU,OAAO,CAQnB;IAED;;;OAGG;IACH,qCAHW,MAAM,GACJ,OAAO,CAAC,IAAI,CAAC,CAczB;IAED;;;OAGG;IACH,4BAHW,MAAM,GACJ,IAAI,CAYhB;IAED,6EAA6E;IAC7E,eADc,OAAO,CAAC,IAAI,CAAC,CAU1B;IAED;;;OAGG;IACH,iBAAkB,OAHP,KAGY,KAFV,IAAI,CAIhB;IAED,oEAAoE;IACpE,QADc,OAAO,CAAC,IAAI,CAAC,CAc1B;CACF;mBA9MkB,cAAc;eADlB,aAAa;iCADG,IAAI"}
1
+ {"version":3,"file":"development-reloader.d.ts","sourceRoot":"","sources":["../../../src/http-server/development-reloader.js"],"names":[],"mappings":"AAeA;;;GAGG;AACH;IACE;;;;;;;;;OASG;IACH,kFAPG;QAAoD,aAAa,EAAzD,OAAO,qBAAqB,EAAE,OAAO;QACiB,QAAQ,EAA9D,CAAS,IAAqB,EAArB;YAAC,WAAW,EAAE,MAAM,CAAA;SAAC,KAAI,OAAO,CAAC,IAAI,CAAC;QACjC,UAAU;QACF,YAAY;QACT,OAAO;QACV,IAAI;KACpC,EAwBA;IAtBC,qDAAkC;IAClC,mBAA4B;IAC5B,eAAgE;IAChE,iBAVkB;QAAC,WAAW,EAAE,MAAM,CAAA;KAAC,KAAI,OAAO,CAAC,IAAI,CAAC,CAUhC;IACxB,2BAAsB;IACtB,qBAAgB;IAChB,6BAAgC;IAEhC;;0DAEsD;IACtD,aADS,UAAU,CAAC,OAAO,UAAU,CAAC,GAAG,SAAS,CACtB;IAE5B;;mCAE+B;IAC/B,oBADS,MAAM,GAAG,SAAS,CACQ;IAEnC;;oDAEgD;IAChD,UADS,GAAG,CAAC,MAAM,EAAE,OAAO,IAAI,EAAE,SAAS,CAAC,CACnB;IAG3B;;;OAGG;IACH,SAFa,OAAO,CAAC,IAAI,CAAC,CAMzB;IAED;;;OAGG;IACH,kBAFa,MAAM,EAAE,CAcpB;IAED;;;;OAIG;IACH,uCAHW,MAAM,GACJ,OAAO,CAAC,IAAI,CAAC,CAkCzB;IAED;;;;;;;OAOG;IACH,uDALG;QAAqB,aAAa,EAA1B,MAAM;QACO,SAAS,EAAtB,MAAM;QACuB,QAAQ,EAArC,MAAM,GAAG,MAAM,GAAG,IAAI;KAC9B,GAAU,OAAO,CAAC,IAAI,CAAC,CAczB;IAED;;;;;;OAMG;IACH,4CAJG;QAAqB,WAAW,EAAxB,MAAM;QACuB,QAAQ,EAArC,MAAM,GAAG,MAAM,GAAG,IAAI;KAC9B,GAAU,OAAO,CAQnB;IAED;;;;OAIG;IACH,qCAHW,MAAM,GACJ,OAAO,CAAC,IAAI,CAAC,CAgBzB;IAED;;;;OAIG;IACH,4BAHW,MAAM,GACJ,IAAI,CAYhB;IAED;;;OAGG;IACH,eAFa,OAAO,CAAC,IAAI,CAAC,CAWzB;IAED;;;;OAIG;IACH,iBAAkB,OAHP,KAGY,KAFV,IAAI,CAIhB;IAED;;;OAGG;IACH,QAFa,OAAO,CAAC,IAAI,CAAC,CAezB;CACF;mBA3OkB,cAAc;eADlB,aAAa;iCADG,IAAI"}
@@ -16,6 +16,7 @@ const RELOADABLE_EXTENSIONS = new Set([
16
16
  */
17
17
  export default class VelociousHttpServerDevelopmentReloader {
18
18
  /**
19
+ * Runs constructor.
19
20
  * @param {object} args - Options object.
20
21
  * @param {import("../configuration.js").default} args.configuration - Configuration instance.
21
22
  * @param {function({changedPath: string}) : Promise<void>} args.onReload - Reload callback.
@@ -32,20 +33,32 @@ export default class VelociousHttpServerDevelopmentReloader {
32
33
  this.readdir = readdir;
33
34
  this.stat = stat;
34
35
  this.watchFactory = watchFactory;
35
- /** @type {ReturnType<typeof setTimeout> | undefined} */
36
+ /**
37
+ * Narrows the runtime value to the documented type.
38
+ @type {ReturnType<typeof setTimeout> | undefined} */
36
39
  this.reloadTimer = undefined;
37
- /** @type {string | undefined} */
40
+ /**
41
+ * Narrows the runtime value to the documented type.
42
+ @type {string | undefined} */
38
43
  this.pendingChangedPath = undefined;
39
- /** @type {Map<string, import("fs").FSWatcher>} */
44
+ /**
45
+ * Narrows the runtime value to the documented type.
46
+ @type {Map<string, import("fs").FSWatcher>} */
40
47
  this.watchers = new Map();
41
48
  }
42
- /** @returns {Promise<void>} - Resolves when watching has started. */
49
+ /**
50
+ * Runs start.
51
+ * @returns {Promise<void>} - Resolves when watching has started.
52
+ */
43
53
  async start() {
44
54
  for (const rootPath of this.watchRootPaths()) {
45
55
  await this.watchDirectoryRecursive(rootPath);
46
56
  }
47
57
  }
48
- /** @returns {string[]} - Source directories to watch. */
58
+ /**
59
+ * Runs watch root paths.
60
+ * @returns {string[]} - Source directories to watch.
61
+ */
49
62
  watchRootPaths() {
50
63
  const rootPaths = new Set();
51
64
  const configurationDirectory = this.configuration.getDirectory();
@@ -58,6 +71,7 @@ export default class VelociousHttpServerDevelopmentReloader {
58
71
  return Array.from(rootPaths);
59
72
  }
60
73
  /**
74
+ * Runs watch directory recursive.
61
75
  * @param {string} directoryPath - Directory path.
62
76
  * @returns {Promise<void>} - Resolves when child directories are watched.
63
77
  */
@@ -70,7 +84,9 @@ export default class VelociousHttpServerDevelopmentReloader {
70
84
  entries = await this.readdir(resolvedDirectoryPath, { withFileTypes: true });
71
85
  }
72
86
  catch (error) {
73
- if ( /** @type {{code?: string}} */(error)?.code === "ENOENT")
87
+ if ( /**
88
+ * Narrows the runtime value to the documented type.
89
+ @type {{code?: string}} */(error)?.code === "ENOENT")
74
90
  return;
75
91
  throw error;
76
92
  }
@@ -90,6 +106,7 @@ export default class VelociousHttpServerDevelopmentReloader {
90
106
  }
91
107
  }
92
108
  /**
109
+ * Runs on watcher event.
93
110
  * @param {object} args - Options object.
94
111
  * @param {string} args.directoryPath - Watched directory path.
95
112
  * @param {string} args.eventType - Watch event type.
@@ -107,6 +124,7 @@ export default class VelociousHttpServerDevelopmentReloader {
107
124
  await this.logger.debug(() => ["Queued development hot reload", { changedPath, eventType }]);
108
125
  }
109
126
  /**
127
+ * Runs should reload path.
110
128
  * @param {object} args - Options object.
111
129
  * @param {string} args.changedPath - Changed path.
112
130
  * @param {string | Buffer | null} args.fileName - Raw filename from fs.watch.
@@ -119,6 +137,7 @@ export default class VelociousHttpServerDevelopmentReloader {
119
137
  return RELOADABLE_EXTENSIONS.has(extension);
120
138
  }
121
139
  /**
140
+ * Runs watch potential directory.
122
141
  * @param {string} changedPath - Candidate directory path.
123
142
  * @returns {Promise<void>} - Resolves when any new directory watchers are added.
124
143
  */
@@ -130,12 +149,15 @@ export default class VelociousHttpServerDevelopmentReloader {
130
149
  }
131
150
  }
132
151
  catch (error) {
133
- if ( /** @type {{code?: string}} */(error)?.code !== "ENOENT") {
152
+ if ( /**
153
+ * Narrows the runtime value to the documented type.
154
+ @type {{code?: string}} */(error)?.code !== "ENOENT") {
134
155
  throw error;
135
156
  }
136
157
  }
137
158
  }
138
159
  /**
160
+ * Runs schedule reload.
139
161
  * @param {string} changedPath - Changed path.
140
162
  * @returns {void} - No return value.
141
163
  */
@@ -148,7 +170,10 @@ export default class VelociousHttpServerDevelopmentReloader {
148
170
  void this.flushReload();
149
171
  }, this.debounceMs);
150
172
  }
151
- /** @returns {Promise<void>} - Resolves when the queued reload is handled. */
173
+ /**
174
+ * Runs flush reload.
175
+ * @returns {Promise<void>} - Resolves when the queued reload is handled.
176
+ */
152
177
  async flushReload() {
153
178
  this.reloadTimer = undefined;
154
179
  const changedPath = this.pendingChangedPath;
@@ -158,13 +183,17 @@ export default class VelociousHttpServerDevelopmentReloader {
158
183
  await this.onReload({ changedPath });
159
184
  }
160
185
  /**
186
+ * On watcher error.
161
187
  * @param {Error} error - Watcher error.
162
188
  * @returns {void} - No return value.
163
189
  */
164
190
  onWatcherError = (error) => {
165
191
  void this.logger.warn("Development hot reload watcher error", error);
166
192
  };
167
- /** @returns {Promise<void>} - Resolves when watchers are closed. */
193
+ /**
194
+ * Runs stop.
195
+ * @returns {Promise<void>} - Resolves when watchers are closed.
196
+ */
168
197
  async stop() {
169
198
  if (this.reloadTimer) {
170
199
  clearTimeout(this.reloadTimer);
@@ -177,4 +206,4 @@ export default class VelociousHttpServerDevelopmentReloader {
177
206
  this.watchers.clear();
178
207
  }
179
208
  }
180
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV2ZWxvcG1lbnQtcmVsb2FkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvaHR0cC1zZXJ2ZXIvZGV2ZWxvcG1lbnQtcmVsb2FkZXIuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaLE9BQU8sRUFBQyxLQUFLLElBQUksT0FBTyxFQUFDLE1BQU0sSUFBSSxDQUFBO0FBQ25DLE9BQU8sRUFBRSxNQUFNLGFBQWEsQ0FBQTtBQUM1QixPQUFPLE1BQU0sTUFBTSxjQUFjLENBQUE7QUFDakMsT0FBTyxJQUFJLE1BQU0sTUFBTSxDQUFBO0FBRXZCLE1BQU0scUJBQXFCLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDcEMsTUFBTTtJQUNOLE1BQU07SUFDTixLQUFLO0lBQ0wsT0FBTztJQUNQLE1BQU07Q0FDUCxDQUFDLENBQUE7QUFFRjs7O0dBR0c7QUFDSCxNQUFNLENBQUMsT0FBTyxPQUFPLHNDQUFzQztJQUN6RDs7Ozs7Ozs7T0FRRztJQUNILFlBQVksRUFBQyxhQUFhLEVBQUUsUUFBUSxFQUFFLFVBQVUsR0FBRyxFQUFFLEVBQUUsWUFBWSxHQUFHLE9BQU8sRUFBRSxPQUFPLEdBQUcsRUFBRSxDQUFDLE9BQU8sRUFBRSxJQUFJLEdBQUcsRUFBRSxDQUFDLElBQUksRUFBQztRQUNsSCxJQUFJLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQTtRQUNsQyxJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQTtRQUM1QixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksTUFBTSxDQUFDLHFCQUFxQixFQUFFLEVBQUMsYUFBYSxFQUFDLENBQUMsQ0FBQTtRQUNoRSxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQTtRQUN4QixJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQTtRQUN0QixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQTtRQUNoQixJQUFJLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQTtRQUVo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Q0FBQyxXQUFXLEdBQUcsU0FBUyxDQUFBO1FBQzlCLENBQUM7UUFFRCxJQUFJLENBQUMsa0JBQWtCLEdBQUcsU0FBUyxDQUFBO1FBRW5DLEtBQUssTUFBTSxPQUFPLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDO1lBQzdDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQTtRQUNqQixDQUFDO1FBRUQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQTtJQUN2QixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuaW1wb3J0IHt3YXRjaCBhcyBmc1dhdGNofSBmcm9tIFwiZnNcIlxuaW1wb3J0IGZzIGZyb20gXCJmcy9wcm9taXNlc1wiXG5pbXBvcnQgTG9nZ2VyIGZyb20gXCIuLi9sb2dnZXIuanNcIlxuaW1wb3J0IHBhdGggZnJvbSBcInBhdGhcIlxuXG5jb25zdCBSRUxPQURBQkxFX0VYVEVOU0lPTlMgPSBuZXcgU2V0KFtcbiAgXCIuY2pzXCIsXG4gIFwiLmVqc1wiLFxuICBcIi5qc1wiLFxuICBcIi5qc29uXCIsXG4gIFwiLm1qc1wiXG5dKVxuXG4vKipcbiAqIERldmVsb3BtZW50LW9ubHkgZmlsZSB3YXRjaGVyIHRoYXQgYXNrcyB0aGUgSFRUUCBzZXJ2ZXIgdG8gcmVjeWNsZSB3b3JrZXJzXG4gKiB3aGVuIGFwcGxpY2F0aW9uIHNvdXJjZSBmaWxlcyBjaGFuZ2UuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFZlbG9jaW91c0h0dHBTZXJ2ZXJEZXZlbG9wbWVudFJlbG9hZGVyIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gT3B0aW9ucyBvYmplY3QuXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vY29uZmlndXJhdGlvbi5qc1wiKS5kZWZhdWx0fSBhcmdzLmNvbmZpZ3VyYXRpb24gLSBDb25maWd1cmF0aW9uIGluc3RhbmNlLlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKHtjaGFuZ2VkUGF0aDogc3RyaW5nfSkgOiBQcm9taXNlPHZvaWQ+fSBhcmdzLm9uUmVsb2FkIC0gUmVsb2FkIGNhbGxiYWNrLlxuICAgKiBAcGFyYW0ge251bWJlcn0gW2FyZ3MuZGVib3VuY2VNc10gLSBEZWJvdW5jZSB3aW5kb3cgZm9yIGdyb3VwZWQgY2hhbmdlcy5cbiAgICogQHBhcmFtIHt0eXBlb2YgZnNXYXRjaH0gW2FyZ3Mud2F0Y2hGYWN0b3J5XSAtIEZpbGUgd2F0Y2ggZmFjdG9yeS5cbiAgICogQHBhcmFtIHt0eXBlb2YgZnMucmVhZGRpcn0gW2FyZ3MucmVhZGRpcl0gLSBEaXJlY3RvcnkgcmVhZGVyLlxuICAgKiBAcGFyYW0ge3R5cGVvZiBmcy5zdGF0fSBbYXJncy5zdGF0XSAtIFN0YXQgcmVhZGVyLlxuICAgKi9cbiAgY29uc3RydWN0b3Ioe2NvbmZpZ3VyYXRpb24sIG9uUmVsb2FkLCBkZWJvdW5jZU1zID0gNzUsIHdhdGNoRmFjdG9yeSA9IGZzV2F0Y2gsIHJlYWRkaXIgPSBmcy5yZWFkZGlyLCBzdGF0ID0gZnMuc3RhdH0pIHtcbiAgICB0aGlzLmNvbmZpZ3VyYXRpb24gPSBjb25maWd1cmF0aW9uXG4gICAgdGhpcy5kZWJvdW5jZU1zID0gZGVib3VuY2VNc1xuICAgIHRoaXMubG9nZ2VyID0gbmV3IExvZ2dlcihcIkRldmVsb3BtZW50UmVsb2FkZXJcIiwge2NvbmZpZ3VyYXRpb259KVxuICAgIHRoaXMub25SZWxvYWQgPSBvblJlbG9hZFxuICAgIHRoaXMucmVhZGRpciA9IHJlYWRkaXJcbiAgICB0aGlzLnN0YXQgPSBzdGF0XG4gICAgdGhpcy53YXRjaEZhY3RvcnkgPSB3YXRjaEZhY3RvcnlcblxuICAgIC8qKiBAdHlwZSB7UmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD4gfCB1bmRlZmluZWR9ICovXG4gICAgdGhpcy5yZWxvYWRUaW1lciA9IHVuZGVmaW5lZFxuXG4gICAgLyoqIEB0eXBlIHtzdHJpbmcgfCB1bmRlZmluZWR9ICovXG4gICAgdGhpcy5wZW5kaW5nQ2hhbmdlZFBhdGggPSB1bmRlZmluZWRcblxuICAgIC8qKiBAdHlwZSB7TWFwPHN0cmluZywgaW1wb3J0KFwiZnNcIikuRlNXYXRjaGVyPn0gKi9cbiAgICB0aGlzLndhdGNoZXJzID0gbmV3IE1hcCgpXG4gIH1cblxuICAvKiogQHJldHVybnMge1Byb21pc2U8dm9pZD59IC0gUmVzb2x2ZXMgd2hlbiB3YXRjaGluZyBoYXMgc3RhcnRlZC4gKi9cbiAgYXN5bmMgc3RhcnQoKSB7XG4gICAgZm9yIChjb25zdCByb290UGF0aCBvZiB0aGlzLndhdGNoUm9vdFBhdGhzKCkpIHtcbiAgICAgIGF3YWl0IHRoaXMud2F0Y2hEaXJlY3RvcnlSZWN1cnNpdmUocm9vdFBhdGgpXG4gICAgfVxuICB9XG5cbiAgLyoqIEByZXR1cm5zIHtzdHJpbmdbXX0gLSBTb3VyY2UgZGlyZWN0b3JpZXMgdG8gd2F0Y2guICovXG4gIHdhdGNoUm9vdFBhdGhzKCkge1xuICAgIGNvbnN0IHJvb3RQYXRocyA9IG5ldyBTZXQoKVxuICAgIGNvbnN0IGNvbmZpZ3VyYXRpb25EaXJlY3RvcnkgPSB0aGlzLmNvbmZpZ3VyYXRpb24uZ2V0RGlyZWN0b3J5KClcblxuICAgIHJvb3RQYXRocy5hZGQocGF0aC5qb2luKGNvbmZpZ3VyYXRpb25EaXJlY3RvcnksIFwic3JjXCIpKVxuXG4gICAgZm9yIChjb25zdCBiYWNrZW5kUHJvamVjdCBvZiB0aGlzLmNvbmZpZ3VyYXRpb24uZ2V0QmFja2VuZFByb2plY3RzKCkpIHtcbiAgICAgIGlmICghYmFja2VuZFByb2plY3Q/LnBhdGgpIGNvbnRpbnVlXG4gICAgICByb290UGF0aHMuYWRkKHBhdGguam9pbihiYWNrZW5kUHJvamVjdC5wYXRoLCBcInNyY1wiKSlcbiAgICB9XG5cbiAgICByZXR1cm4gQXJyYXkuZnJvbShyb290UGF0aHMpXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IGRpcmVjdG9yeVBhdGggLSBEaXJlY3RvcnkgcGF0aC5cbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59IC0gUmVzb2x2ZXMgd2hlbiBjaGlsZCBkaXJlY3RvcmllcyBhcmUgd2F0Y2hlZC5cbiAgICovXG4gIGFzeW5jIHdhdGNoRGlyZWN0b3J5UmVjdXJzaXZlKGRpcmVjdG9yeVBhdGgpIHtcbiAgICBjb25zdCByZXNvbHZlZERpcmVjdG9yeVBhdGggPSBwYXRoLnJlc29sdmUoZGlyZWN0b3J5UGF0aClcblxuICAgIGlmICh0aGlzLndhdGNoZXJzLmhhcyhyZXNvbHZlZERpcmVjdG9yeVBhdGgpKSByZXR1cm5cblxuICAgIGxldCBlbnRyaWVzXG5cbiAgICB0cnkge1xuICAgICAgZW50cmllcyA9IGF3YWl0IHRoaXMucmVhZGRpcihyZXNvbHZlZERpcmVjdG9yeVBhdGgsIHt3aXRoRmlsZVR5cGVzOiB0cnVlfSlcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKC8qKiBAdHlwZSB7e2NvZGU/OiBzdHJpbmd9fSAqLyAoZXJyb3IpPy5jb2RlID09PSBcIkVOT0VOVFwiKSByZXR1cm5cbiAgICAgIHRocm93IGVycm9yXG4gICAgfVxuXG4gICAgY29uc3Qgd2F0Y2hlciA9IHRoaXMud2F0Y2hGYWN0b3J5KHJlc29sdmVkRGlyZWN0b3J5UGF0aCwgKGV2ZW50VHlwZSwgZmlsZU5hbWUpID0+IHtcbiAgICAgIHZvaWQgdGhpcy5vbldhdGNoZXJFdmVudCh7XG4gICAgICAgIGRpcmVjdG9yeVBhdGg6IHJlc29sdmVkRGlyZWN0b3J5UGF0aCxcbiAgICAgICAgZXZlbnRUeXBlLFxuICAgICAgICBmaWxlTmFtZVxuICAgICAgfSlcbiAgICB9KVxuXG4gICAgd2F0Y2hlci5vbihcImVycm9yXCIsIHRoaXMub25XYXRjaGVyRXJyb3IpXG4gICAgdGhpcy53YXRjaGVycy5zZXQocmVzb2x2ZWREaXJlY3RvcnlQYXRoLCB3YXRjaGVyKVxuXG4gICAgZm9yIChjb25zdCBlbnRyeSBvZiBlbnRyaWVzKSB7XG4gICAgICBpZiAoIWVudHJ5LmlzRGlyZWN0b3J5KCkpIGNvbnRpbnVlXG5cbiAgICAgIGF3YWl0IHRoaXMud2F0Y2hEaXJlY3RvcnlSZWN1cnNpdmUocGF0aC5qb2luKHJlc29sdmVkRGlyZWN0b3J5UGF0aCwgZW50cnkubmFtZSkpXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gT3B0aW9ucyBvYmplY3QuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhcmdzLmRpcmVjdG9yeVBhdGggLSBXYXRjaGVkIGRpcmVjdG9yeSBwYXRoLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYXJncy5ldmVudFR5cGUgLSBXYXRjaCBldmVudCB0eXBlLlxuICAgKiBAcGFyYW0ge3N0cmluZyB8IEJ1ZmZlciB8IG51bGx9IGFyZ3MuZmlsZU5hbWUgLSBSZWxhdGl2ZSBjaGFuZ2VkIGZpbGVuYW1lLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gLSBSZXNvbHZlcyB3aGVuIGNvbXBsZXRlLlxuICAgKi9cbiAgYXN5bmMgb25XYXRjaGVyRXZlbnQoe2RpcmVjdG9yeVBhdGgsIGV2ZW50VHlwZSwgZmlsZU5hbWV9KSB7XG4gICAgY29uc3QgY2hhbmdlZFBhdGggPSBmaWxlTmFtZVxuICAgICAgPyBwYXRoLmpvaW4oZGlyZWN0b3J5UGF0aCwgZmlsZU5hbWUudG9TdHJpbmcoKSlcbiAgICAgIDogZGlyZWN0b3J5UGF0aFxuXG4gICAgYXdhaXQgdGhpcy53YXRjaFBvdGVudGlhbERpcmVjdG9yeShjaGFuZ2VkUGF0aClcblxuICAgIGlmICghdGhpcy5zaG91bGRSZWxvYWRQYXRoKHtjaGFuZ2VkUGF0aCwgZmlsZU5hbWV9KSkgcmV0dXJuXG5cbiAgICB0aGlzLnNjaGVkdWxlUmVsb2FkKGNoYW5nZWRQYXRoKVxuXG4gICAgYXdhaXQgdGhpcy5sb2dnZXIuZGVidWcoKCkgPT4gW1wiUXVldWVkIGRldmVsb3BtZW50IGhvdCByZWxvYWRcIiwge2NoYW5nZWRQYXRoLCBldmVudFR5cGV9XSlcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIE9wdGlvbnMgb2JqZWN0LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYXJncy5jaGFuZ2VkUGF0aCAtIENoYW5nZWQgcGF0aC5cbiAgICogQHBhcmFtIHtzdHJpbmcgfCBCdWZmZXIgfCBudWxsfSBhcmdzLmZpbGVOYW1lIC0gUmF3IGZpbGVuYW1lIGZyb20gZnMud2F0Y2guXG4gICAqIEByZXR1cm5zIHtib29sZWFufSAtIFdoZXRoZXIgdGhlIHBhdGggc2hvdWxkIHRyaWdnZXIgcmVsb2FkLlxuICAgKi9cbiAgc2hvdWxkUmVsb2FkUGF0aCh7Y2hhbmdlZFBhdGgsIGZpbGVOYW1lfSkge1xuICAgIGlmICghZmlsZU5hbWUpIHJldHVybiB0cnVlXG5cbiAgICBjb25zdCBleHRlbnNpb24gPSBwYXRoLmV4dG5hbWUoY2hhbmdlZFBhdGgpLnRvTG93ZXJDYXNlKClcblxuICAgIHJldHVybiBSRUxPQURBQkxFX0VYVEVOU0lPTlMuaGFzKGV4dGVuc2lvbilcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2hhbmdlZFBhdGggLSBDYW5kaWRhdGUgZGlyZWN0b3J5IHBhdGguXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fSAtIFJlc29sdmVzIHdoZW4gYW55IG5ldyBkaXJlY3Rvcnkgd2F0Y2hlcnMgYXJlIGFkZGVkLlxuICAgKi9cbiAgYXN5bmMgd2F0Y2hQb3RlbnRpYWxEaXJlY3RvcnkoY2hhbmdlZFBhdGgpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgc3RhdCA9IGF3YWl0IHRoaXMuc3RhdChjaGFuZ2VkUGF0aClcblxuICAgICAgaWYgKHN0YXQuaXNEaXJlY3RvcnkoKSkge1xuICAgICAgICBhd2FpdCB0aGlzLndhdGNoRGlyZWN0b3J5UmVjdXJzaXZlKGNoYW5nZWRQYXRoKVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoLyoqIEB0eXBlIHt7Y29kZT86IHN0cmluZ319ICovIChlcnJvcik/LmNvZGUgIT09IFwiRU5PRU5UXCIpIHtcbiAgICAgICAgdGhyb3cgZXJyb3JcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNoYW5nZWRQYXRoIC0gQ2hhbmdlZCBwYXRoLlxuICAgKiBAcmV0dXJucyB7dm9pZH0gLSBObyByZXR1cm4gdmFsdWUuXG4gICAqL1xuICBzY2hlZHVsZVJlbG9hZChjaGFuZ2VkUGF0aCkge1xuICAgIHRoaXMucGVuZGluZ0NoYW5nZWRQYXRoID0gY2hhbmdlZFBhdGhcblxuICAgIGlmICh0aGlzLnJlbG9hZFRpbWVyKSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5yZWxvYWRUaW1lcilcbiAgICB9XG5cbiAgICB0aGlzLnJlbG9hZFRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB2b2lkIHRoaXMuZmx1c2hSZWxvYWQoKVxuICAgIH0sIHRoaXMuZGVib3VuY2VNcylcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gLSBSZXNvbHZlcyB3aGVuIHRoZSBxdWV1ZWQgcmVsb2FkIGlzIGhhbmRsZWQuICovXG4gIGFzeW5jIGZsdXNoUmVsb2FkKCkge1xuICAgIHRoaXMucmVsb2FkVGltZXIgPSB1bmRlZmluZWRcblxuICAgIGNvbnN0IGNoYW5nZWRQYXRoID0gdGhpcy5wZW5kaW5nQ2hhbmdlZFBhdGhcblxuICAgIGlmICghY2hhbmdlZFBhdGgpIHJldHVyblxuXG4gICAgdGhpcy5wZW5kaW5nQ2hhbmdlZFBhdGggPSB1bmRlZmluZWRcbiAgICBhd2FpdCB0aGlzLm9uUmVsb2FkKHtjaGFuZ2VkUGF0aH0pXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtFcnJvcn0gZXJyb3IgLSBXYXRjaGVyIGVycm9yLlxuICAgKiBAcmV0dXJucyB7dm9pZH0gLSBObyByZXR1cm4gdmFsdWUuXG4gICAqL1xuICBvbldhdGNoZXJFcnJvciA9IChlcnJvcikgPT4ge1xuICAgIHZvaWQgdGhpcy5sb2dnZXIud2FybihcIkRldmVsb3BtZW50IGhvdCByZWxvYWQgd2F0Y2hlciBlcnJvclwiLCBlcnJvcilcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gLSBSZXNvbHZlcyB3aGVuIHdhdGNoZXJzIGFyZSBjbG9zZWQuICovXG4gIGFzeW5jIHN0b3AoKSB7XG4gICAgaWYgKHRoaXMucmVsb2FkVGltZXIpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLnJlbG9hZFRpbWVyKVxuICAgICAgdGhpcy5yZWxvYWRUaW1lciA9IHVuZGVmaW5lZFxuICAgIH1cblxuICAgIHRoaXMucGVuZGluZ0NoYW5nZWRQYXRoID0gdW5kZWZpbmVkXG5cbiAgICBmb3IgKGNvbnN0IHdhdGNoZXIgb2YgdGhpcy53YXRjaGVycy52YWx1ZXMoKSkge1xuICAgICAgd2F0Y2hlci5jbG9zZSgpXG4gICAgfVxuXG4gICAgdGhpcy53YXRjaGVycy5jbGVhcigpXG4gIH1cbn1cbiJdfQ==
209
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV2ZWxvcG1lbnQtcmVsb2FkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvaHR0cC1zZXJ2ZXIvZGV2ZWxvcG1lbnQtcmVsb2FkZXIuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaLE9BQU8sRUFBQyxLQUFLLElBQUksT0FBTyxFQUFDLE1BQU0sSUFBSSxDQUFBO0FBQ25DLE9BQU8sRUFBRSxNQUFNLGFBQWEsQ0FBQTtBQUM1QixPQUFPLE1BQU0sTUFBTSxjQUFjLENBQUE7QUFDakMsT0FBTyxJQUFJLE1BQU0sTUFBTSxDQUFBO0FBRXZCLE1BQU0scUJBQXFCLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDcEMsTUFBTTtJQUNOLE1BQU07SUFDTixLQUFLO0lBQ0wsT0FBTztJQUNQLE1BQU07Q0FDUCxDQUFDLENBQUE7QUFFRjs7O0dBR0c7QUFDSCxNQUFNLENBQUMsT0FBTyxPQUFPLHNDQUFzQztJQUN6RDs7Ozs7Ozs7O09BU0c7SUFDSCxZQUFZLEVBQUMsYUFBYSxFQUFFLFFBQVEsRUFBRSxVQUFVLEdBQUcsRUFBRSxFQUFFLFlBQVksR0FBRyxPQUFPLEVBQUUsT0FBTyxHQUFHLEVBQUUsQ0FBQyxPQUFPLEVBQUUsSUFBSSxHQUFHLEVBQUUsQ0FBQyxJQUFJLEVBQUM7UUFDbEgsSUFBSSxDQUFDLGFBQWEsR0FBRyxhQUFhLENBQUE7UUFDbEMsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUE7UUFDNUIsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLE1BQU0sQ0FBQyxxQkFBcUIsRUFBRSxFQUFDLGFBQWEsRUFBQyxDQUFDLENBQUE7UUFDaEUsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUE7UUFDeEIsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUE7UUFDdEIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUE7UUFDaEIsSUFBSSxDQUFDLFlBQVksR0FBRyxZQUFZLENBQUE7UUFF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OUIsSUFBSSxDQUFDLFdBQVcsR0FBRyxTQUFTLENBQUE7UUFDOUIsQ0FBQztRQUVELElBQUksQ0FBQyxrQkFBa0IsR0FBRyxTQUFTLENBQUE7UUFFbkMsS0FBSyxNQUFNLE9BQU8sSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUM7WUFDN0MsT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFBO1FBQ2pCLENBQUM7UUFFRCxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFBO0lBQ3ZCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG5pbXBvcnQge3dhdGNoIGFzIGZzV2F0Y2h9IGZyb20gXCJmc1wiXG5pbXBvcnQgZnMgZnJvbSBcImZzL3Byb21pc2VzXCJcbmltcG9ydCBMb2dnZXIgZnJvbSBcIi4uL2xvZ2dlci5qc1wiXG5pbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiXG5cbmNvbnN0IFJFTE9BREFCTEVfRVhURU5TSU9OUyA9IG5ldyBTZXQoW1xuICBcIi5janNcIixcbiAgXCIuZWpzXCIsXG4gIFwiLmpzXCIsXG4gIFwiLmpzb25cIixcbiAgXCIubWpzXCJcbl0pXG5cbi8qKlxuICogRGV2ZWxvcG1lbnQtb25seSBmaWxlIHdhdGNoZXIgdGhhdCBhc2tzIHRoZSBIVFRQIHNlcnZlciB0byByZWN5Y2xlIHdvcmtlcnNcbiAqIHdoZW4gYXBwbGljYXRpb24gc291cmNlIGZpbGVzIGNoYW5nZS5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVmVsb2Npb3VzSHR0cFNlcnZlckRldmVsb3BtZW50UmVsb2FkZXIge1xuICAvKipcbiAgICogUnVucyBjb25zdHJ1Y3Rvci5cbiAgICogQHBhcmFtIHtvYmplY3R9IGFyZ3MgLSBPcHRpb25zIG9iamVjdC5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuLi9jb25maWd1cmF0aW9uLmpzXCIpLmRlZmF1bHR9IGFyZ3MuY29uZmlndXJhdGlvbiAtIENvbmZpZ3VyYXRpb24gaW5zdGFuY2UuXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24oe2NoYW5nZWRQYXRoOiBzdHJpbmd9KSA6IFByb21pc2U8dm9pZD59IGFyZ3Mub25SZWxvYWQgLSBSZWxvYWQgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbYXJncy5kZWJvdW5jZU1zXSAtIERlYm91bmNlIHdpbmRvdyBmb3IgZ3JvdXBlZCBjaGFuZ2VzLlxuICAgKiBAcGFyYW0ge3R5cGVvZiBmc1dhdGNofSBbYXJncy53YXRjaEZhY3RvcnldIC0gRmlsZSB3YXRjaCBmYWN0b3J5LlxuICAgKiBAcGFyYW0ge3R5cGVvZiBmcy5yZWFkZGlyfSBbYXJncy5yZWFkZGlyXSAtIERpcmVjdG9yeSByZWFkZXIuXG4gICAqIEBwYXJhbSB7dHlwZW9mIGZzLnN0YXR9IFthcmdzLnN0YXRdIC0gU3RhdCByZWFkZXIuXG4gICAqL1xuICBjb25zdHJ1Y3Rvcih7Y29uZmlndXJhdGlvbiwgb25SZWxvYWQsIGRlYm91bmNlTXMgPSA3NSwgd2F0Y2hGYWN0b3J5ID0gZnNXYXRjaCwgcmVhZGRpciA9IGZzLnJlYWRkaXIsIHN0YXQgPSBmcy5zdGF0fSkge1xuICAgIHRoaXMuY29uZmlndXJhdGlvbiA9IGNvbmZpZ3VyYXRpb25cbiAgICB0aGlzLmRlYm91bmNlTXMgPSBkZWJvdW5jZU1zXG4gICAgdGhpcy5sb2dnZXIgPSBuZXcgTG9nZ2VyKFwiRGV2ZWxvcG1lbnRSZWxvYWRlclwiLCB7Y29uZmlndXJhdGlvbn0pXG4gICAgdGhpcy5vblJlbG9hZCA9IG9uUmVsb2FkXG4gICAgdGhpcy5yZWFkZGlyID0gcmVhZGRpclxuICAgIHRoaXMuc3RhdCA9IHN0YXRcbiAgICB0aGlzLndhdGNoRmFjdG9yeSA9IHdhdGNoRmFjdG9yeVxuXG4gICAgLyoqXG4gICAgICogTmFycm93cyB0aGUgcnVudGltZSB2YWx1ZSB0byB0aGUgZG9jdW1lbnRlZCB0eXBlLlxuICAgICAgQHR5cGUge1JldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+IHwgdW5kZWZpbmVkfSAqL1xuICAgIHRoaXMucmVsb2FkVGltZXIgPSB1bmRlZmluZWRcblxuICAgIC8qKlxuICAgICAqIE5hcnJvd3MgdGhlIHJ1bnRpbWUgdmFsdWUgdG8gdGhlIGRvY3VtZW50ZWQgdHlwZS5cbiAgICAgIEB0eXBlIHtzdHJpbmcgfCB1bmRlZmluZWR9ICovXG4gICAgdGhpcy5wZW5kaW5nQ2hhbmdlZFBhdGggPSB1bmRlZmluZWRcblxuICAgIC8qKlxuICAgICAqIE5hcnJvd3MgdGhlIHJ1bnRpbWUgdmFsdWUgdG8gdGhlIGRvY3VtZW50ZWQgdHlwZS5cbiAgICAgIEB0eXBlIHtNYXA8c3RyaW5nLCBpbXBvcnQoXCJmc1wiKS5GU1dhdGNoZXI+fSAqL1xuICAgIHRoaXMud2F0Y2hlcnMgPSBuZXcgTWFwKClcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIHN0YXJ0LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gLSBSZXNvbHZlcyB3aGVuIHdhdGNoaW5nIGhhcyBzdGFydGVkLlxuICAgKi9cbiAgYXN5bmMgc3RhcnQoKSB7XG4gICAgZm9yIChjb25zdCByb290UGF0aCBvZiB0aGlzLndhdGNoUm9vdFBhdGhzKCkpIHtcbiAgICAgIGF3YWl0IHRoaXMud2F0Y2hEaXJlY3RvcnlSZWN1cnNpdmUocm9vdFBhdGgpXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgd2F0Y2ggcm9vdCBwYXRocy5cbiAgICogQHJldHVybnMge3N0cmluZ1tdfSAtIFNvdXJjZSBkaXJlY3RvcmllcyB0byB3YXRjaC5cbiAgICovXG4gIHdhdGNoUm9vdFBhdGhzKCkge1xuICAgIGNvbnN0IHJvb3RQYXRocyA9IG5ldyBTZXQoKVxuICAgIGNvbnN0IGNvbmZpZ3VyYXRpb25EaXJlY3RvcnkgPSB0aGlzLmNvbmZpZ3VyYXRpb24uZ2V0RGlyZWN0b3J5KClcblxuICAgIHJvb3RQYXRocy5hZGQocGF0aC5qb2luKGNvbmZpZ3VyYXRpb25EaXJlY3RvcnksIFwic3JjXCIpKVxuXG4gICAgZm9yIChjb25zdCBiYWNrZW5kUHJvamVjdCBvZiB0aGlzLmNvbmZpZ3VyYXRpb24uZ2V0QmFja2VuZFByb2plY3RzKCkpIHtcbiAgICAgIGlmICghYmFja2VuZFByb2plY3Q/LnBhdGgpIGNvbnRpbnVlXG4gICAgICByb290UGF0aHMuYWRkKHBhdGguam9pbihiYWNrZW5kUHJvamVjdC5wYXRoLCBcInNyY1wiKSlcbiAgICB9XG5cbiAgICByZXR1cm4gQXJyYXkuZnJvbShyb290UGF0aHMpXG4gIH1cblxuICAvKipcbiAgICogUnVucyB3YXRjaCBkaXJlY3RvcnkgcmVjdXJzaXZlLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZGlyZWN0b3J5UGF0aCAtIERpcmVjdG9yeSBwYXRoLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gLSBSZXNvbHZlcyB3aGVuIGNoaWxkIGRpcmVjdG9yaWVzIGFyZSB3YXRjaGVkLlxuICAgKi9cbiAgYXN5bmMgd2F0Y2hEaXJlY3RvcnlSZWN1cnNpdmUoZGlyZWN0b3J5UGF0aCkge1xuICAgIGNvbnN0IHJlc29sdmVkRGlyZWN0b3J5UGF0aCA9IHBhdGgucmVzb2x2ZShkaXJlY3RvcnlQYXRoKVxuXG4gICAgaWYgKHRoaXMud2F0Y2hlcnMuaGFzKHJlc29sdmVkRGlyZWN0b3J5UGF0aCkpIHJldHVyblxuXG4gICAgbGV0IGVudHJpZXNcblxuICAgIHRyeSB7XG4gICAgICBlbnRyaWVzID0gYXdhaXQgdGhpcy5yZWFkZGlyKHJlc29sdmVkRGlyZWN0b3J5UGF0aCwge3dpdGhGaWxlVHlwZXM6IHRydWV9KVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoLyoqXG4gICAgICAgICAgICogTmFycm93cyB0aGUgcnVudGltZSB2YWx1ZSB0byB0aGUgZG9jdW1lbnRlZCB0eXBlLlxuICAgICAgICAgICAgQHR5cGUge3tjb2RlPzogc3RyaW5nfX0gKi8gKGVycm9yKT8uY29kZSA9PT0gXCJFTk9FTlRcIikgcmV0dXJuXG4gICAgICB0aHJvdyBlcnJvclxuICAgIH1cblxuICAgIGNvbnN0IHdhdGNoZXIgPSB0aGlzLndhdGNoRmFjdG9yeShyZXNvbHZlZERpcmVjdG9yeVBhdGgsIChldmVudFR5cGUsIGZpbGVOYW1lKSA9PiB7XG4gICAgICB2b2lkIHRoaXMub25XYXRjaGVyRXZlbnQoe1xuICAgICAgICBkaXJlY3RvcnlQYXRoOiByZXNvbHZlZERpcmVjdG9yeVBhdGgsXG4gICAgICAgIGV2ZW50VHlwZSxcbiAgICAgICAgZmlsZU5hbWVcbiAgICAgIH0pXG4gICAgfSlcblxuICAgIHdhdGNoZXIub24oXCJlcnJvclwiLCB0aGlzLm9uV2F0Y2hlckVycm9yKVxuICAgIHRoaXMud2F0Y2hlcnMuc2V0KHJlc29sdmVkRGlyZWN0b3J5UGF0aCwgd2F0Y2hlcilcblxuICAgIGZvciAoY29uc3QgZW50cnkgb2YgZW50cmllcykge1xuICAgICAgaWYgKCFlbnRyeS5pc0RpcmVjdG9yeSgpKSBjb250aW51ZVxuXG4gICAgICBhd2FpdCB0aGlzLndhdGNoRGlyZWN0b3J5UmVjdXJzaXZlKHBhdGguam9pbihyZXNvbHZlZERpcmVjdG9yeVBhdGgsIGVudHJ5Lm5hbWUpKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIG9uIHdhdGNoZXIgZXZlbnQuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gT3B0aW9ucyBvYmplY3QuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhcmdzLmRpcmVjdG9yeVBhdGggLSBXYXRjaGVkIGRpcmVjdG9yeSBwYXRoLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYXJncy5ldmVudFR5cGUgLSBXYXRjaCBldmVudCB0eXBlLlxuICAgKiBAcGFyYW0ge3N0cmluZyB8IEJ1ZmZlciB8IG51bGx9IGFyZ3MuZmlsZU5hbWUgLSBSZWxhdGl2ZSBjaGFuZ2VkIGZpbGVuYW1lLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gLSBSZXNvbHZlcyB3aGVuIGNvbXBsZXRlLlxuICAgKi9cbiAgYXN5bmMgb25XYXRjaGVyRXZlbnQoe2RpcmVjdG9yeVBhdGgsIGV2ZW50VHlwZSwgZmlsZU5hbWV9KSB7XG4gICAgY29uc3QgY2hhbmdlZFBhdGggPSBmaWxlTmFtZVxuICAgICAgPyBwYXRoLmpvaW4oZGlyZWN0b3J5UGF0aCwgZmlsZU5hbWUudG9TdHJpbmcoKSlcbiAgICAgIDogZGlyZWN0b3J5UGF0aFxuXG4gICAgYXdhaXQgdGhpcy53YXRjaFBvdGVudGlhbERpcmVjdG9yeShjaGFuZ2VkUGF0aClcblxuICAgIGlmICghdGhpcy5zaG91bGRSZWxvYWRQYXRoKHtjaGFuZ2VkUGF0aCwgZmlsZU5hbWV9KSkgcmV0dXJuXG5cbiAgICB0aGlzLnNjaGVkdWxlUmVsb2FkKGNoYW5nZWRQYXRoKVxuXG4gICAgYXdhaXQgdGhpcy5sb2dnZXIuZGVidWcoKCkgPT4gW1wiUXVldWVkIGRldmVsb3BtZW50IGhvdCByZWxvYWRcIiwge2NoYW5nZWRQYXRoLCBldmVudFR5cGV9XSlcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIHNob3VsZCByZWxvYWQgcGF0aC5cbiAgICogQHBhcmFtIHtvYmplY3R9IGFyZ3MgLSBPcHRpb25zIG9iamVjdC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MuY2hhbmdlZFBhdGggLSBDaGFuZ2VkIHBhdGguXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgQnVmZmVyIHwgbnVsbH0gYXJncy5maWxlTmFtZSAtIFJhdyBmaWxlbmFtZSBmcm9tIGZzLndhdGNoLlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gLSBXaGV0aGVyIHRoZSBwYXRoIHNob3VsZCB0cmlnZ2VyIHJlbG9hZC5cbiAgICovXG4gIHNob3VsZFJlbG9hZFBhdGgoe2NoYW5nZWRQYXRoLCBmaWxlTmFtZX0pIHtcbiAgICBpZiAoIWZpbGVOYW1lKSByZXR1cm4gdHJ1ZVxuXG4gICAgY29uc3QgZXh0ZW5zaW9uID0gcGF0aC5leHRuYW1lKGNoYW5nZWRQYXRoKS50b0xvd2VyQ2FzZSgpXG5cbiAgICByZXR1cm4gUkVMT0FEQUJMRV9FWFRFTlNJT05TLmhhcyhleHRlbnNpb24pXG4gIH1cblxuICAvKipcbiAgICogUnVucyB3YXRjaCBwb3RlbnRpYWwgZGlyZWN0b3J5LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2hhbmdlZFBhdGggLSBDYW5kaWRhdGUgZGlyZWN0b3J5IHBhdGguXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fSAtIFJlc29sdmVzIHdoZW4gYW55IG5ldyBkaXJlY3Rvcnkgd2F0Y2hlcnMgYXJlIGFkZGVkLlxuICAgKi9cbiAgYXN5bmMgd2F0Y2hQb3RlbnRpYWxEaXJlY3RvcnkoY2hhbmdlZFBhdGgpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgc3RhdCA9IGF3YWl0IHRoaXMuc3RhdChjaGFuZ2VkUGF0aClcblxuICAgICAgaWYgKHN0YXQuaXNEaXJlY3RvcnkoKSkge1xuICAgICAgICBhd2FpdCB0aGlzLndhdGNoRGlyZWN0b3J5UmVjdXJzaXZlKGNoYW5nZWRQYXRoKVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoLyoqXG4gICAgICAgICAgICogTmFycm93cyB0aGUgcnVudGltZSB2YWx1ZSB0byB0aGUgZG9jdW1lbnRlZCB0eXBlLlxuICAgICAgICAgICAgQHR5cGUge3tjb2RlPzogc3RyaW5nfX0gKi8gKGVycm9yKT8uY29kZSAhPT0gXCJFTk9FTlRcIikge1xuICAgICAgICB0aHJvdyBlcnJvclxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIHNjaGVkdWxlIHJlbG9hZC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGNoYW5nZWRQYXRoIC0gQ2hhbmdlZCBwYXRoLlxuICAgKiBAcmV0dXJucyB7dm9pZH0gLSBObyByZXR1cm4gdmFsdWUuXG4gICAqL1xuICBzY2hlZHVsZVJlbG9hZChjaGFuZ2VkUGF0aCkge1xuICAgIHRoaXMucGVuZGluZ0NoYW5nZWRQYXRoID0gY2hhbmdlZFBhdGhcblxuICAgIGlmICh0aGlzLnJlbG9hZFRpbWVyKSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5yZWxvYWRUaW1lcilcbiAgICB9XG5cbiAgICB0aGlzLnJlbG9hZFRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB2b2lkIHRoaXMuZmx1c2hSZWxvYWQoKVxuICAgIH0sIHRoaXMuZGVib3VuY2VNcylcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIGZsdXNoIHJlbG9hZC5cbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59IC0gUmVzb2x2ZXMgd2hlbiB0aGUgcXVldWVkIHJlbG9hZCBpcyBoYW5kbGVkLlxuICAgKi9cbiAgYXN5bmMgZmx1c2hSZWxvYWQoKSB7XG4gICAgdGhpcy5yZWxvYWRUaW1lciA9IHVuZGVmaW5lZFxuXG4gICAgY29uc3QgY2hhbmdlZFBhdGggPSB0aGlzLnBlbmRpbmdDaGFuZ2VkUGF0aFxuXG4gICAgaWYgKCFjaGFuZ2VkUGF0aCkgcmV0dXJuXG5cbiAgICB0aGlzLnBlbmRpbmdDaGFuZ2VkUGF0aCA9IHVuZGVmaW5lZFxuICAgIGF3YWl0IHRoaXMub25SZWxvYWQoe2NoYW5nZWRQYXRofSlcbiAgfVxuXG4gIC8qKlxuICAgKiBPbiB3YXRjaGVyIGVycm9yLlxuICAgKiBAcGFyYW0ge0Vycm9yfSBlcnJvciAtIFdhdGNoZXIgZXJyb3IuXG4gICAqIEByZXR1cm5zIHt2b2lkfSAtIE5vIHJldHVybiB2YWx1ZS5cbiAgICovXG4gIG9uV2F0Y2hlckVycm9yID0gKGVycm9yKSA9PiB7XG4gICAgdm9pZCB0aGlzLmxvZ2dlci53YXJuKFwiRGV2ZWxvcG1lbnQgaG90IHJlbG9hZCB3YXRjaGVyIGVycm9yXCIsIGVycm9yKVxuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgc3RvcC5cbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59IC0gUmVzb2x2ZXMgd2hlbiB3YXRjaGVycyBhcmUgY2xvc2VkLlxuICAgKi9cbiAgYXN5bmMgc3RvcCgpIHtcbiAgICBpZiAodGhpcy5yZWxvYWRUaW1lcikge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMucmVsb2FkVGltZXIpXG4gICAgICB0aGlzLnJlbG9hZFRpbWVyID0gdW5kZWZpbmVkXG4gICAgfVxuXG4gICAgdGhpcy5wZW5kaW5nQ2hhbmdlZFBhdGggPSB1bmRlZmluZWRcblxuICAgIGZvciAoY29uc3Qgd2F0Y2hlciBvZiB0aGlzLndhdGNoZXJzLnZhbHVlcygpKSB7XG4gICAgICB3YXRjaGVyLmNsb3NlKClcbiAgICB9XG5cbiAgICB0aGlzLndhdGNoZXJzLmNsZWFyKClcbiAgfVxufVxuIl19