velocious 1.0.147 → 1.0.149

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 (446) hide show
  1. package/README.md +15 -0
  2. package/build/src/application.d.ts +25 -16
  3. package/build/src/application.d.ts.map +1 -1
  4. package/build/src/application.js +17 -17
  5. package/build/src/cli/base-command.d.ts +26 -14
  6. package/build/src/cli/base-command.d.ts.map +1 -1
  7. package/build/src/cli/base-command.js +13 -13
  8. package/build/src/cli/browser-cli.d.ts +5 -5
  9. package/build/src/cli/browser-cli.js +6 -6
  10. package/build/src/cli/commands/db/create.d.ts +4 -4
  11. package/build/src/cli/commands/db/create.js +5 -5
  12. package/build/src/cli/commands/destroy/migration.d.ts +0 -1
  13. package/build/src/cli/commands/destroy/migration.d.ts.map +1 -1
  14. package/build/src/cli/commands/generate/base-models.d.ts +0 -1
  15. package/build/src/cli/commands/generate/base-models.d.ts.map +1 -1
  16. package/build/src/cli/commands/generate/migration.d.ts +0 -1
  17. package/build/src/cli/commands/generate/migration.d.ts.map +1 -1
  18. package/build/src/cli/commands/generate/model.d.ts +0 -1
  19. package/build/src/cli/commands/generate/model.d.ts.map +1 -1
  20. package/build/src/cli/commands/init.d.ts +0 -1
  21. package/build/src/cli/commands/init.d.ts.map +1 -1
  22. package/build/src/cli/commands/routes.d.ts +0 -1
  23. package/build/src/cli/commands/routes.d.ts.map +1 -1
  24. package/build/src/cli/commands/server.d.ts +0 -1
  25. package/build/src/cli/commands/server.d.ts.map +1 -1
  26. package/build/src/cli/commands/test.d.ts +0 -1
  27. package/build/src/cli/commands/test.d.ts.map +1 -1
  28. package/build/src/cli/index.d.ts +11 -11
  29. package/build/src/cli/index.d.ts.map +1 -1
  30. package/build/src/cli/index.js +9 -9
  31. package/build/src/cli/use-browser-cli.d.ts +2 -2
  32. package/build/src/cli/use-browser-cli.js +3 -3
  33. package/build/src/configuration-resolver.d.ts +2 -2
  34. package/build/src/configuration-resolver.js +3 -3
  35. package/build/src/configuration-types.d.ts +149 -44
  36. package/build/src/configuration-types.d.ts.map +1 -1
  37. package/build/src/configuration-types.js +43 -43
  38. package/build/src/configuration.d.ts +75 -59
  39. package/build/src/configuration.d.ts.map +1 -1
  40. package/build/src/configuration.js +68 -56
  41. package/build/src/controller.d.ts +29 -29
  42. package/build/src/controller.d.ts.map +1 -1
  43. package/build/src/controller.js +28 -28
  44. package/build/src/database/drivers/base-column.d.ts +15 -15
  45. package/build/src/database/drivers/base-column.d.ts.map +1 -1
  46. package/build/src/database/drivers/base-column.js +15 -15
  47. package/build/src/database/drivers/base-columns-index.d.ts +10 -10
  48. package/build/src/database/drivers/base-columns-index.js +11 -11
  49. package/build/src/database/drivers/base-foreign-key.d.ts +12 -12
  50. package/build/src/database/drivers/base-foreign-key.d.ts.map +1 -1
  51. package/build/src/database/drivers/base-foreign-key.js +11 -11
  52. package/build/src/database/drivers/base-table.d.ts +15 -15
  53. package/build/src/database/drivers/base-table.d.ts.map +1 -1
  54. package/build/src/database/drivers/base-table.js +15 -15
  55. package/build/src/database/drivers/base.d.ts +186 -132
  56. package/build/src/database/drivers/base.d.ts.map +1 -1
  57. package/build/src/database/drivers/base.js +143 -144
  58. package/build/src/database/drivers/mssql/column.d.ts +5 -4
  59. package/build/src/database/drivers/mssql/column.d.ts.map +1 -1
  60. package/build/src/database/drivers/mssql/column.js +3 -3
  61. package/build/src/database/drivers/mssql/connect-connection.d.ts +6 -1
  62. package/build/src/database/drivers/mssql/connect-connection.d.ts.map +1 -1
  63. package/build/src/database/drivers/mssql/connect-connection.js +6 -2
  64. package/build/src/database/drivers/mssql/index.d.ts +5 -15
  65. package/build/src/database/drivers/mssql/index.d.ts.map +1 -1
  66. package/build/src/database/drivers/mssql/index.js +57 -57
  67. package/build/src/database/drivers/mssql/options.d.ts +2 -2
  68. package/build/src/database/drivers/mssql/options.js +13 -13
  69. package/build/src/database/drivers/mssql/sql/create-database.js +5 -5
  70. package/build/src/database/drivers/mssql/structure-sql.d.ts +6 -6
  71. package/build/src/database/drivers/mssql/structure-sql.d.ts.map +1 -1
  72. package/build/src/database/drivers/mssql/structure-sql.js +23 -15
  73. package/build/src/database/drivers/mssql/table.d.ts +4 -5
  74. package/build/src/database/drivers/mssql/table.d.ts.map +1 -1
  75. package/build/src/database/drivers/mssql/table.js +7 -6
  76. package/build/src/database/drivers/mysql/column.d.ts +5 -4
  77. package/build/src/database/drivers/mysql/column.d.ts.map +1 -1
  78. package/build/src/database/drivers/mysql/column.js +3 -3
  79. package/build/src/database/drivers/mysql/index.d.ts +8 -8
  80. package/build/src/database/drivers/mysql/index.d.ts.map +1 -1
  81. package/build/src/database/drivers/mysql/index.js +45 -45
  82. package/build/src/database/drivers/mysql/options.d.ts +2 -2
  83. package/build/src/database/drivers/mysql/options.js +5 -5
  84. package/build/src/database/drivers/mysql/query.d.ts +4 -4
  85. package/build/src/database/drivers/mysql/query.d.ts.map +1 -1
  86. package/build/src/database/drivers/mysql/query.js +5 -5
  87. package/build/src/database/drivers/mysql/structure-sql.d.ts +7 -7
  88. package/build/src/database/drivers/mysql/structure-sql.d.ts.map +1 -1
  89. package/build/src/database/drivers/mysql/structure-sql.js +12 -10
  90. package/build/src/database/drivers/mysql/table.d.ts +4 -5
  91. package/build/src/database/drivers/mysql/table.d.ts.map +1 -1
  92. package/build/src/database/drivers/mysql/table.js +5 -4
  93. package/build/src/database/drivers/pgsql/column.d.ts +5 -4
  94. package/build/src/database/drivers/pgsql/column.d.ts.map +1 -1
  95. package/build/src/database/drivers/pgsql/column.js +3 -3
  96. package/build/src/database/drivers/pgsql/index.d.ts +1 -6
  97. package/build/src/database/drivers/pgsql/index.d.ts.map +1 -1
  98. package/build/src/database/drivers/pgsql/index.js +31 -31
  99. package/build/src/database/drivers/pgsql/options.d.ts +3 -3
  100. package/build/src/database/drivers/pgsql/options.js +4 -4
  101. package/build/src/database/drivers/pgsql/structure-sql.d.ts +6 -6
  102. package/build/src/database/drivers/pgsql/structure-sql.d.ts.map +1 -1
  103. package/build/src/database/drivers/pgsql/structure-sql.js +21 -14
  104. package/build/src/database/drivers/pgsql/table.d.ts +4 -5
  105. package/build/src/database/drivers/pgsql/table.d.ts.map +1 -1
  106. package/build/src/database/drivers/pgsql/table.js +4 -3
  107. package/build/src/database/drivers/sqlite/base.d.ts +22 -20
  108. package/build/src/database/drivers/sqlite/base.d.ts.map +1 -1
  109. package/build/src/database/drivers/sqlite/base.js +55 -55
  110. package/build/src/database/drivers/sqlite/column.d.ts +7 -6
  111. package/build/src/database/drivers/sqlite/column.d.ts.map +1 -1
  112. package/build/src/database/drivers/sqlite/column.js +5 -5
  113. package/build/src/database/drivers/sqlite/connection-sql-js.d.ts +5 -5
  114. package/build/src/database/drivers/sqlite/connection-sql-js.d.ts.map +1 -1
  115. package/build/src/database/drivers/sqlite/connection-sql-js.js +5 -5
  116. package/build/src/database/drivers/sqlite/foreign-key.d.ts +4 -4
  117. package/build/src/database/drivers/sqlite/foreign-key.d.ts.map +1 -1
  118. package/build/src/database/drivers/sqlite/foreign-key.js +4 -4
  119. package/build/src/database/drivers/sqlite/index.js +3 -3
  120. package/build/src/database/drivers/sqlite/index.web.d.ts +9 -2
  121. package/build/src/database/drivers/sqlite/index.web.d.ts.map +1 -1
  122. package/build/src/database/drivers/sqlite/index.web.js +8 -5
  123. package/build/src/database/drivers/sqlite/options.d.ts +3 -3
  124. package/build/src/database/drivers/sqlite/options.js +4 -4
  125. package/build/src/database/drivers/sqlite/query.d.ts +4 -4
  126. package/build/src/database/drivers/sqlite/query.d.ts.map +1 -1
  127. package/build/src/database/drivers/sqlite/query.js +5 -5
  128. package/build/src/database/drivers/sqlite/query.native.d.ts +9 -1
  129. package/build/src/database/drivers/sqlite/query.native.d.ts.map +1 -1
  130. package/build/src/database/drivers/sqlite/query.native.js +7 -1
  131. package/build/src/database/drivers/sqlite/query.web.d.ts +4 -4
  132. package/build/src/database/drivers/sqlite/query.web.d.ts.map +1 -1
  133. package/build/src/database/drivers/sqlite/query.web.js +5 -5
  134. package/build/src/database/drivers/sqlite/sql/alter-table.js +5 -5
  135. package/build/src/database/drivers/sqlite/structure-sql.d.ts +3 -3
  136. package/build/src/database/drivers/sqlite/structure-sql.js +5 -5
  137. package/build/src/database/drivers/sqlite/table.d.ts +7 -8
  138. package/build/src/database/drivers/sqlite/table.d.ts.map +1 -1
  139. package/build/src/database/drivers/sqlite/table.js +10 -9
  140. package/build/src/database/drivers/structure-sql/utils.d.ts +8 -8
  141. package/build/src/database/drivers/structure-sql/utils.js +9 -9
  142. package/build/src/database/handler.d.ts +1 -1
  143. package/build/src/database/handler.js +2 -2
  144. package/build/src/database/initializer-from-require-context.d.ts +5 -5
  145. package/build/src/database/initializer-from-require-context.js +6 -6
  146. package/build/src/database/migration/index.d.ts +98 -62
  147. package/build/src/database/migration/index.d.ts.map +1 -1
  148. package/build/src/database/migration/index.js +74 -74
  149. package/build/src/database/migrator/files-finder.d.ts +3 -3
  150. package/build/src/database/migrator/files-finder.js +4 -4
  151. package/build/src/database/migrator/types.d.ts +12 -0
  152. package/build/src/database/migrator/types.d.ts.map +1 -1
  153. package/build/src/database/migrator/types.js +1 -1
  154. package/build/src/database/migrator.d.ts +24 -24
  155. package/build/src/database/migrator.d.ts.map +1 -1
  156. package/build/src/database/migrator.js +25 -25
  157. package/build/src/database/pool/async-tracked-multi-connection.d.ts +8 -8
  158. package/build/src/database/pool/async-tracked-multi-connection.js +18 -18
  159. package/build/src/database/pool/base-methods-forward.d.ts +2 -2
  160. package/build/src/database/pool/base-methods-forward.js +3 -3
  161. package/build/src/database/pool/base.d.ts +19 -19
  162. package/build/src/database/pool/base.js +20 -20
  163. package/build/src/database/pool/single-multi-use.js +6 -6
  164. package/build/src/database/query/alter-table-base.d.ts +3 -3
  165. package/build/src/database/query/alter-table-base.js +5 -5
  166. package/build/src/database/query/base.d.ts +5 -5
  167. package/build/src/database/query/base.d.ts.map +1 -1
  168. package/build/src/database/query/base.js +6 -6
  169. package/build/src/database/query/create-database-base.d.ts +11 -2
  170. package/build/src/database/query/create-database-base.d.ts.map +1 -1
  171. package/build/src/database/query/create-database-base.js +6 -6
  172. package/build/src/database/query/create-index-base.d.ts +25 -7
  173. package/build/src/database/query/create-index-base.d.ts.map +1 -1
  174. package/build/src/database/query/create-index-base.js +9 -9
  175. package/build/src/database/query/create-table-base.d.ts +6 -6
  176. package/build/src/database/query/create-table-base.js +7 -7
  177. package/build/src/database/query/delete-base.d.ts +6 -6
  178. package/build/src/database/query/delete-base.d.ts.map +1 -1
  179. package/build/src/database/query/delete-base.js +5 -5
  180. package/build/src/database/query/drop-table-base.d.ts +5 -5
  181. package/build/src/database/query/drop-table-base.js +7 -7
  182. package/build/src/database/query/from-base.d.ts +4 -4
  183. package/build/src/database/query/from-base.js +5 -5
  184. package/build/src/database/query/from-plain.d.ts +1 -1
  185. package/build/src/database/query/from-plain.js +2 -2
  186. package/build/src/database/query/from-table.d.ts +1 -1
  187. package/build/src/database/query/from-table.js +2 -2
  188. package/build/src/database/query/index.d.ts +88 -48
  189. package/build/src/database/query/index.d.ts.map +1 -1
  190. package/build/src/database/query/index.js +46 -46
  191. package/build/src/database/query/insert-base.d.ts +16 -16
  192. package/build/src/database/query/insert-base.d.ts.map +1 -1
  193. package/build/src/database/query/insert-base.js +12 -12
  194. package/build/src/database/query/join-base.d.ts +4 -4
  195. package/build/src/database/query/join-base.js +5 -5
  196. package/build/src/database/query/join-object.d.ts +6 -6
  197. package/build/src/database/query/join-object.js +7 -7
  198. package/build/src/database/query/join-plain.d.ts +1 -1
  199. package/build/src/database/query/join-plain.js +2 -2
  200. package/build/src/database/query/model-class-query.d.ts +28 -28
  201. package/build/src/database/query/model-class-query.d.ts.map +1 -1
  202. package/build/src/database/query/model-class-query.js +25 -25
  203. package/build/src/database/query/order-base.d.ts +4 -4
  204. package/build/src/database/query/order-base.js +5 -5
  205. package/build/src/database/query/order-plain.d.ts +2 -2
  206. package/build/src/database/query/order-plain.js +3 -3
  207. package/build/src/database/query/preloader/belongs-to.d.ts +3 -3
  208. package/build/src/database/query/preloader/belongs-to.d.ts.map +1 -1
  209. package/build/src/database/query/preloader/belongs-to.js +15 -13
  210. package/build/src/database/query/preloader/has-many.d.ts +3 -3
  211. package/build/src/database/query/preloader/has-many.js +7 -7
  212. package/build/src/database/query/preloader/has-one.d.ts +3 -3
  213. package/build/src/database/query/preloader/has-one.js +7 -7
  214. package/build/src/database/query/preloader.d.ts +6 -6
  215. package/build/src/database/query/preloader.d.ts.map +1 -1
  216. package/build/src/database/query/preloader.js +5 -5
  217. package/build/src/database/query/select-base.d.ts +3 -3
  218. package/build/src/database/query/select-base.js +4 -4
  219. package/build/src/database/query/select-plain.d.ts +1 -1
  220. package/build/src/database/query/select-plain.js +2 -2
  221. package/build/src/database/query/select-table-and-column.d.ts +2 -2
  222. package/build/src/database/query/select-table-and-column.js +3 -3
  223. package/build/src/database/query/update-base.d.ts +10 -10
  224. package/build/src/database/query/update-base.d.ts.map +1 -1
  225. package/build/src/database/query/update-base.js +7 -7
  226. package/build/src/database/query/where-base.d.ts +4 -4
  227. package/build/src/database/query/where-base.js +5 -5
  228. package/build/src/database/query/where-hash.d.ts +8 -8
  229. package/build/src/database/query/where-hash.d.ts.map +1 -1
  230. package/build/src/database/query/where-hash.js +9 -9
  231. package/build/src/database/query/where-plain.d.ts +2 -2
  232. package/build/src/database/query/where-plain.js +3 -3
  233. package/build/src/database/query-parser/base-query-parser.d.ts +3 -3
  234. package/build/src/database/query-parser/base-query-parser.js +4 -4
  235. package/build/src/database/query-parser/from-parser.d.ts +4 -4
  236. package/build/src/database/query-parser/from-parser.d.ts.map +1 -1
  237. package/build/src/database/query-parser/from-parser.js +5 -5
  238. package/build/src/database/query-parser/group-parser.d.ts +4 -4
  239. package/build/src/database/query-parser/group-parser.js +5 -5
  240. package/build/src/database/query-parser/joins-parser.d.ts +3 -3
  241. package/build/src/database/query-parser/joins-parser.js +4 -4
  242. package/build/src/database/query-parser/limit-parser.d.ts +3 -3
  243. package/build/src/database/query-parser/limit-parser.js +4 -4
  244. package/build/src/database/query-parser/options.d.ts +35 -20
  245. package/build/src/database/query-parser/options.d.ts.map +1 -1
  246. package/build/src/database/query-parser/options.js +19 -19
  247. package/build/src/database/query-parser/order-parser.d.ts +3 -3
  248. package/build/src/database/query-parser/order-parser.js +4 -4
  249. package/build/src/database/query-parser/select-parser.d.ts +3 -3
  250. package/build/src/database/query-parser/select-parser.js +4 -4
  251. package/build/src/database/query-parser/where-parser.d.ts +3 -3
  252. package/build/src/database/query-parser/where-parser.js +4 -4
  253. package/build/src/database/record/index.d.ts +197 -186
  254. package/build/src/database/record/index.d.ts.map +1 -1
  255. package/build/src/database/record/index.js +190 -169
  256. package/build/src/database/record/instance-relationships/base.d.ts +21 -15
  257. package/build/src/database/record/instance-relationships/base.d.ts.map +1 -1
  258. package/build/src/database/record/instance-relationships/base.js +15 -15
  259. package/build/src/database/record/instance-relationships/belongs-to.d.ts +3 -3
  260. package/build/src/database/record/instance-relationships/belongs-to.d.ts.map +1 -1
  261. package/build/src/database/record/instance-relationships/belongs-to.js +4 -4
  262. package/build/src/database/record/instance-relationships/has-many.d.ts +21 -15
  263. package/build/src/database/record/instance-relationships/has-many.d.ts.map +1 -1
  264. package/build/src/database/record/instance-relationships/has-many.js +23 -17
  265. package/build/src/database/record/instance-relationships/has-one.d.ts +4 -4
  266. package/build/src/database/record/instance-relationships/has-one.d.ts.map +1 -1
  267. package/build/src/database/record/instance-relationships/has-one.js +7 -7
  268. package/build/src/database/record/relationships/base.d.ts +48 -15
  269. package/build/src/database/record/relationships/base.d.ts.map +1 -1
  270. package/build/src/database/record/relationships/base.js +16 -16
  271. package/build/src/database/record/relationships/belongs-to.js +3 -3
  272. package/build/src/database/record/relationships/has-many.js +3 -3
  273. package/build/src/database/record/relationships/has-one.js +3 -3
  274. package/build/src/database/record/user-module.d.ts +3 -3
  275. package/build/src/database/record/user-module.js +4 -4
  276. package/build/src/database/record/validators/base.d.ts +9 -9
  277. package/build/src/database/record/validators/base.d.ts.map +1 -1
  278. package/build/src/database/record/validators/base.js +8 -8
  279. package/build/src/database/record/validators/presence.d.ts.map +1 -1
  280. package/build/src/database/record/validators/presence.js +6 -5
  281. package/build/src/database/record/validators/uniqueness.js +7 -7
  282. package/build/src/database/table-data/index.d.ts +53 -50
  283. package/build/src/database/table-data/index.d.ts.map +1 -1
  284. package/build/src/database/table-data/index.js +51 -51
  285. package/build/src/database/table-data/table-column.d.ts +84 -51
  286. package/build/src/database/table-data/table-column.d.ts.map +1 -1
  287. package/build/src/database/table-data/table-column.js +57 -56
  288. package/build/src/database/table-data/table-foreign-key.d.ts +15 -15
  289. package/build/src/database/table-data/table-foreign-key.js +16 -16
  290. package/build/src/database/table-data/table-index.d.ts +13 -7
  291. package/build/src/database/table-data/table-index.d.ts.map +1 -1
  292. package/build/src/database/table-data/table-index.js +8 -8
  293. package/build/src/database/table-data/table-reference.d.ts +2 -2
  294. package/build/src/database/table-data/table-reference.js +3 -3
  295. package/build/src/database/use-database.d.ts +3 -3
  296. package/build/src/database/use-database.js +4 -4
  297. package/build/src/environment-handlers/base.d.ts +84 -66
  298. package/build/src/environment-handlers/base.d.ts.map +1 -1
  299. package/build/src/environment-handlers/base.js +58 -58
  300. package/build/src/environment-handlers/browser.d.ts +9 -9
  301. package/build/src/environment-handlers/browser.d.ts.map +1 -1
  302. package/build/src/environment-handlers/browser.js +18 -18
  303. package/build/src/environment-handlers/node/cli/commands/destroy/migration.d.ts +1 -1
  304. package/build/src/environment-handlers/node/cli/commands/destroy/migration.js +2 -2
  305. package/build/src/environment-handlers/node/cli/commands/generate/base-models.d.ts +4 -4
  306. package/build/src/environment-handlers/node/cli/commands/generate/base-models.js +11 -11
  307. package/build/src/environment-handlers/node/cli/commands/generate/migration.d.ts +1 -1
  308. package/build/src/environment-handlers/node/cli/commands/generate/migration.js +2 -2
  309. package/build/src/environment-handlers/node/cli/commands/generate/model.d.ts +1 -1
  310. package/build/src/environment-handlers/node/cli/commands/generate/model.js +2 -2
  311. package/build/src/environment-handlers/node/cli/commands/init.d.ts +1 -1
  312. package/build/src/environment-handlers/node/cli/commands/init.js +2 -2
  313. package/build/src/environment-handlers/node/cli/commands/routes.d.ts +5 -5
  314. package/build/src/environment-handlers/node/cli/commands/routes.js +6 -6
  315. package/build/src/environment-handlers/node/cli/commands/server.js +3 -3
  316. package/build/src/environment-handlers/node.d.ts +5 -40
  317. package/build/src/environment-handlers/node.d.ts.map +1 -1
  318. package/build/src/environment-handlers/node.js +46 -46
  319. package/build/src/error-logger.d.ts +3 -3
  320. package/build/src/error-logger.d.ts.map +1 -1
  321. package/build/src/error-logger.js +5 -5
  322. package/build/src/http-client/header.d.ts +2 -2
  323. package/build/src/http-client/header.js +3 -3
  324. package/build/src/http-client/index.d.ts +10 -10
  325. package/build/src/http-client/index.d.ts.map +1 -1
  326. package/build/src/http-client/index.js +11 -11
  327. package/build/src/http-client/request.d.ts +14 -14
  328. package/build/src/http-client/request.js +15 -15
  329. package/build/src/http-client/response.d.ts +7 -7
  330. package/build/src/http-client/response.d.ts.map +1 -1
  331. package/build/src/http-client/response.js +8 -8
  332. package/build/src/http-client/websocket-client.d.ts +28 -28
  333. package/build/src/http-client/websocket-client.d.ts.map +1 -1
  334. package/build/src/http-client/websocket-client.js +26 -26
  335. package/build/src/http-server/client/index.d.ts +13 -13
  336. package/build/src/http-server/client/index.d.ts.map +1 -1
  337. package/build/src/http-server/client/index.js +14 -14
  338. package/build/src/http-server/client/params-to-object.d.ts +15 -15
  339. package/build/src/http-server/client/params-to-object.d.ts.map +1 -1
  340. package/build/src/http-server/client/params-to-object.js +17 -13
  341. package/build/src/http-server/client/request-buffer/form-data-part.d.ts +7 -7
  342. package/build/src/http-server/client/request-buffer/form-data-part.js +8 -8
  343. package/build/src/http-server/client/request-buffer/header.d.ts +2 -2
  344. package/build/src/http-server/client/request-buffer/header.js +3 -3
  345. package/build/src/http-server/client/request-buffer/index.d.ts +20 -20
  346. package/build/src/http-server/client/request-buffer/index.js +22 -22
  347. package/build/src/http-server/client/request-parser.d.ts +21 -20
  348. package/build/src/http-server/client/request-parser.d.ts.map +1 -1
  349. package/build/src/http-server/client/request-parser.js +22 -21
  350. package/build/src/http-server/client/request-runner.d.ts +6 -6
  351. package/build/src/http-server/client/request-runner.d.ts.map +1 -1
  352. package/build/src/http-server/client/request-runner.js +17 -4
  353. package/build/src/http-server/client/request.d.ts +9 -8
  354. package/build/src/http-server/client/request.d.ts.map +1 -1
  355. package/build/src/http-server/client/request.js +9 -8
  356. package/build/src/http-server/client/response.d.ts +17 -17
  357. package/build/src/http-server/client/response.js +18 -18
  358. package/build/src/http-server/client/uploaded-file/memory-uploaded-file.d.ts +6 -6
  359. package/build/src/http-server/client/uploaded-file/memory-uploaded-file.js +9 -9
  360. package/build/src/http-server/client/uploaded-file/temporary-uploaded-file.d.ts +6 -6
  361. package/build/src/http-server/client/uploaded-file/temporary-uploaded-file.js +9 -9
  362. package/build/src/http-server/client/uploaded-file/uploaded-file.d.ts +7 -7
  363. package/build/src/http-server/client/uploaded-file/uploaded-file.js +8 -8
  364. package/build/src/http-server/client/websocket-request.d.ts +17 -13
  365. package/build/src/http-server/client/websocket-request.d.ts.map +1 -1
  366. package/build/src/http-server/client/websocket-request.js +10 -10
  367. package/build/src/http-server/client/websocket-session.d.ts +26 -26
  368. package/build/src/http-server/client/websocket-session.d.ts.map +1 -1
  369. package/build/src/http-server/client/websocket-session.js +27 -27
  370. package/build/src/http-server/index.d.ts +19 -19
  371. package/build/src/http-server/index.d.ts.map +1 -1
  372. package/build/src/http-server/index.js +20 -20
  373. package/build/src/http-server/server-client.d.ts +13 -13
  374. package/build/src/http-server/server-client.d.ts.map +1 -1
  375. package/build/src/http-server/server-client.js +14 -14
  376. package/build/src/http-server/websocket-events-host.d.ts +7 -7
  377. package/build/src/http-server/websocket-events-host.d.ts.map +1 -1
  378. package/build/src/http-server/websocket-events-host.js +7 -7
  379. package/build/src/http-server/websocket-events.d.ts +7 -7
  380. package/build/src/http-server/websocket-events.d.ts.map +1 -1
  381. package/build/src/http-server/websocket-events.js +7 -7
  382. package/build/src/http-server/worker-handler/index.d.ts +22 -22
  383. package/build/src/http-server/worker-handler/index.d.ts.map +1 -1
  384. package/build/src/http-server/worker-handler/index.js +20 -20
  385. package/build/src/http-server/worker-handler/worker-thread.d.ts +17 -17
  386. package/build/src/http-server/worker-handler/worker-thread.d.ts.map +1 -1
  387. package/build/src/http-server/worker-handler/worker-thread.js +16 -16
  388. package/build/src/initializer.d.ts +6 -6
  389. package/build/src/initializer.js +7 -7
  390. package/build/src/logger.d.ts +38 -34
  391. package/build/src/logger.d.ts.map +1 -1
  392. package/build/src/logger.js +53 -47
  393. package/build/src/routes/app-routes.d.ts +2 -2
  394. package/build/src/routes/app-routes.js +3 -3
  395. package/build/src/routes/base-route.d.ts +22 -22
  396. package/build/src/routes/base-route.d.ts.map +1 -1
  397. package/build/src/routes/base-route.js +21 -21
  398. package/build/src/routes/basic-route.d.ts +3 -3
  399. package/build/src/routes/basic-route.js +15 -15
  400. package/build/src/routes/get-route.d.ts +2 -2
  401. package/build/src/routes/get-route.js +8 -8
  402. package/build/src/routes/index.d.ts +2 -2
  403. package/build/src/routes/index.js +3 -3
  404. package/build/src/routes/namespace-route.d.ts +2 -2
  405. package/build/src/routes/namespace-route.js +8 -8
  406. package/build/src/routes/post-route.d.ts +2 -2
  407. package/build/src/routes/post-route.js +8 -8
  408. package/build/src/routes/resolver.d.ts +21 -19
  409. package/build/src/routes/resolver.d.ts.map +1 -1
  410. package/build/src/routes/resolver.js +48 -26
  411. package/build/src/routes/resource-route.d.ts +6 -6
  412. package/build/src/routes/resource-route.js +12 -12
  413. package/build/src/testing/format-value.d.ts +6 -6
  414. package/build/src/testing/format-value.d.ts.map +1 -1
  415. package/build/src/testing/format-value.js +11 -11
  416. package/build/src/testing/request-client.d.ts +10 -10
  417. package/build/src/testing/request-client.d.ts.map +1 -1
  418. package/build/src/testing/request-client.js +11 -11
  419. package/build/src/testing/test-files-finder.d.ts +16 -16
  420. package/build/src/testing/test-files-finder.js +17 -17
  421. package/build/src/testing/test-runner.d.ts +78 -39
  422. package/build/src/testing/test-runner.d.ts.map +1 -1
  423. package/build/src/testing/test-runner.js +40 -40
  424. package/build/src/testing/test.d.ts +61 -61
  425. package/build/src/testing/test.d.ts.map +1 -1
  426. package/build/src/testing/test.js +77 -56
  427. package/build/src/utils/backtrace-cleaner.d.ts +4 -4
  428. package/build/src/utils/backtrace-cleaner.js +5 -5
  429. package/build/src/utils/ensure-error.d.ts +3 -3
  430. package/build/src/utils/ensure-error.d.ts.map +1 -1
  431. package/build/src/utils/ensure-error.js +3 -3
  432. package/build/src/utils/file-exists.d.ts +2 -2
  433. package/build/src/utils/file-exists.js +3 -3
  434. package/build/src/utils/nest-callbacks.d.ts +3 -3
  435. package/build/src/utils/nest-callbacks.js +4 -4
  436. package/build/src/utils/rest-args-error.d.ts +2 -2
  437. package/build/src/utils/rest-args-error.js +3 -3
  438. package/build/src/utils/singularize-model-name.d.ts +2 -2
  439. package/build/src/utils/singularize-model-name.js +3 -3
  440. package/build/src/utils/with-tracked-stack-async-hooks.d.ts +4 -4
  441. package/build/src/utils/with-tracked-stack-async-hooks.d.ts.map +1 -1
  442. package/build/src/utils/with-tracked-stack-async-hooks.js +5 -5
  443. package/build/src/utils/with-tracked-stack.d.ts +5 -4
  444. package/build/src/utils/with-tracked-stack.d.ts.map +1 -1
  445. package/build/src/utils/with-tracked-stack.js +12 -18
  446. package/package.json +1 -1
@@ -1,10 +1,11 @@
1
1
  export default class VelociousDatabaseDriversMssqlColumn extends BaseColumn {
2
2
  /**
3
- * @param {import("../base-table.js").default} table
4
- * @param {Record<string, any>} data
3
+ * @param {import("../base-table.js").default} table - Table.
4
+ * @param {Record<string, unknown>} data - Data payload.
5
5
  */
6
- constructor(table: import("../base-table.js").default, data: Record<string, any>);
7
- data: Record<string, any>;
6
+ constructor(table: import("../base-table.js").default, data: Record<string, unknown>);
7
+ data: Record<string, unknown>;
8
+ getDefault(): any;
8
9
  getMaxLength(): any;
9
10
  getName(): any;
10
11
  getType(): any;
@@ -1 +1 @@
1
- {"version":3,"file":"column.d.ts","sourceRoot":"","sources":["../../../../../src/database/drivers/mssql/column.js"],"names":[],"mappings":"AAMA;IACE;;;OAGG;IACH,mBAHW,OAAO,kBAAkB,EAAE,OAAO,QAClC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAM7B;IAFC,0BAAgB;IA2ClB,oBAAwE;IACxE,eAAsD;IAatD,eAAoD;CACrD;uBArEsB,mBAAmB"}
1
+ {"version":3,"file":"column.d.ts","sourceRoot":"","sources":["../../../../../src/database/drivers/mssql/column.js"],"names":[],"mappings":"AAMA;IACE;;;OAGG;IACH,mBAHW,OAAO,kBAAkB,EAAE,OAAO,QAClC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAMjC;IAFC,8BAAgB;IA0ClB,kBAA4D;IAC5D,oBAAwE;IACxE,eAAsD;IAatD,eAAoD;CACrD;uBArEsB,mBAAmB"}
@@ -4,8 +4,8 @@ import ColumnsIndex from "./columns-index.js";
4
4
  import { digg } from "diggerize";
5
5
  export default class VelociousDatabaseDriversMssqlColumn extends BaseColumn {
6
6
  /**
7
- * @param {import("../base-table.js").default} table
8
- * @param {Record<string, any>} data
7
+ * @param {import("../base-table.js").default} table - Table.
8
+ * @param {Record<string, unknown>} data - Data payload.
9
9
  */
10
10
  constructor(table, data) {
11
11
  super();
@@ -59,4 +59,4 @@ export default class VelociousDatabaseDriversMssqlColumn extends BaseColumn {
59
59
  getPrimaryKey() { return digg(this, "data", "isIdentity") === 1; }
60
60
  getType() { return digg(this, "data", "DATA_TYPE"); }
61
61
  }
62
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sdW1uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2RhdGFiYXNlL2RyaXZlcnMvbXNzcWwvY29sdW1uLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWixPQUFPLFVBQVUsTUFBTSxtQkFBbUIsQ0FBQTtBQUMxQyxPQUFPLFlBQVksTUFBTSxvQkFBb0IsQ0FBQTtBQUM3QyxPQUFPLEVBQUMsSUFBSSxFQUFDLE1BQU0sV0FBVyxDQUFBO0FBRTlCLE1BQU0sQ0FBQyxPQUFPLE9BQU8sbUNBQW9DLFNBQVEsVUFBVTtJQUN6RTs7O09BR0c7SUFDSCxZQUFZLEtBQUssRUFBRSxJQUFJO1FBQ3JCLEtBQUssRUFBRSxDQUFBO1FBQ1AsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUE7UUFDaEIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUE7SUFDcEIsQ0FBQztJQUVELGdCQUFnQixLQUFLLE9BQU8sSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFBLENBQUMsQ0FBQztJQUVwRSxLQUFLLENBQUMsVUFBVTtRQUNkLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQTtRQUNqQyxNQUFNLEdBQUcsR0FBRzs7Ozs7Ozs7Ozs7Ozs7OzRCQWVZLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDOzZCQUN2QyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQzs7OztLQUlyRCxDQUFBO1FBRUQsTUFBTSxJQUFJLEdBQUcsTUFBTSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFBO1FBQzlDLE1BQU0sT0FBTyxHQUFHLEVBQUUsQ0FBQTtRQUVsQixLQUFLLE1BQU0sR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ3ZCLE1BQU0sS0FBSyxHQUFHLElBQUksWUFBWSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQTtZQUVwRCxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBQ3JCLENBQUM7UUFFRCxPQUFPLE9BQU8sQ0FBQTtJQUNoQixDQUFDO0lBRUQsVUFBVSxLQUFLLE9BQU8sSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQSxDQUFDLENBQUM7SUFDNUQsWUFBWSxLQUFLLE9BQU8sSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsMEJBQTBCLENBQUMsQ0FBQSxDQUFDLENBQUM7SUFDeEUsT0FBTyxLQUFLLE9BQU8sSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsYUFBYSxDQUFDLENBQUEsQ0FBQyxDQUFDO0lBRXRELE9BQU87UUFDTCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxhQUFhLENBQUMsQ0FBQTtRQUVuRCxJQUFJLFNBQVMsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUN0QixPQUFPLEtBQUssQ0FBQTtRQUNkLENBQUM7YUFBTSxDQUFDO1lBQ04sT0FBTyxJQUFJLENBQUE7UUFDYixDQUFDO0lBQ0gsQ0FBQztJQUVELGFBQWEsS0FBSyxPQUFPLElBQUksQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQSxDQUFDLENBQUM7SUFDakUsT0FBTyxLQUFLLE9BQU8sSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsV0FBVyxDQUFDLENBQUEsQ0FBQyxDQUFDO0NBQ3JEIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbmltcG9ydCBCYXNlQ29sdW1uIGZyb20gXCIuLi9iYXNlLWNvbHVtbi5qc1wiXG5pbXBvcnQgQ29sdW1uc0luZGV4IGZyb20gXCIuL2NvbHVtbnMtaW5kZXguanNcIlxuaW1wb3J0IHtkaWdnfSBmcm9tIFwiZGlnZ2VyaXplXCJcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVmVsb2Npb3VzRGF0YWJhc2VEcml2ZXJzTXNzcWxDb2x1bW4gZXh0ZW5kcyBCYXNlQ29sdW1uIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vYmFzZS10YWJsZS5qc1wiKS5kZWZhdWx0fSB0YWJsZVxuICAgKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIGFueT59IGRhdGFcbiAgICovXG4gIGNvbnN0cnVjdG9yKHRhYmxlLCBkYXRhKSB7XG4gICAgc3VwZXIoKVxuICAgIHRoaXMuZGF0YSA9IGRhdGFcbiAgICB0aGlzLnRhYmxlID0gdGFibGVcbiAgfVxuXG4gIGdldEF1dG9JbmNyZW1lbnQoKSB7IHJldHVybiBkaWdnKHRoaXMsIFwiZGF0YVwiLCBcImlzSWRlbnRpdHlcIikgPT09IDEgfVxuXG4gIGFzeW5jIGdldEluZGV4ZXMoKSB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMuZ2V0T3B0aW9ucygpXG4gICAgY29uc3Qgc3FsID0gYFxuICAgICAgU0VMRUNUXG4gICAgICAgIHN5cy50YWJsZXMubmFtZSBBUyBUYWJsZU5hbWUsXG4gICAgICAgIHN5cy5jb2x1bW5zLm5hbWUgQVMgQ29sdW1uTmFtZSxcbiAgICAgICAgc3lzLmluZGV4ZXMubmFtZSBBUyBpbmRleF9uYW1lLFxuICAgICAgICBzeXMuaW5kZXhlcy50eXBlX2Rlc2MgQVMgSW5kZXhUeXBlLFxuICAgICAgICBzeXMuaW5kZXhfY29sdW1ucy5pc19pbmNsdWRlZF9jb2x1bW4gQVMgSXNJbmNsdWRlZENvbHVtbixcbiAgICAgICAgc3lzLmluZGV4ZXMuaXNfdW5pcXVlLFxuICAgICAgICBzeXMuaW5kZXhlcy5pc19wcmltYXJ5X2tleSxcbiAgICAgICAgc3lzLmluZGV4ZXMuaXNfdW5pcXVlX2NvbnN0cmFpbnRcbiAgICAgIEZST00gc3lzLmluZGV4ZXNcbiAgICAgIElOTkVSIEpPSU4gc3lzLmluZGV4X2NvbHVtbnMgT04gc3lzLmluZGV4ZXMub2JqZWN0X2lkID0gc3lzLmluZGV4X2NvbHVtbnMub2JqZWN0X2lkIEFORCBzeXMuaW5kZXhlcy5pbmRleF9pZCA9IHN5cy5pbmRleF9jb2x1bW5zLmluZGV4X2lkXG4gICAgICBJTk5FUiBKT0lOIHN5cy5jb2x1bW5zIE9OIHN5cy5pbmRleF9jb2x1bW5zLm9iamVjdF9pZCA9IHN5cy5jb2x1bW5zLm9iamVjdF9pZCBBTkQgc3lzLmluZGV4X2NvbHVtbnMuY29sdW1uX2lkID0gc3lzLmNvbHVtbnMuY29sdW1uX2lkXG4gICAgICBJTk5FUiBKT0lOIHN5cy50YWJsZXMgT04gc3lzLmluZGV4ZXMub2JqZWN0X2lkID0gc3lzLnRhYmxlcy5vYmplY3RfaWRcbiAgICAgIFdIRVJFXG4gICAgICAgIHN5cy50YWJsZXMubmFtZSA9ICR7b3B0aW9ucy5xdW90ZSh0aGlzLmdldFRhYmxlKCkuZ2V0TmFtZSgpKX0gQU5EXG4gICAgICAgIHN5cy5jb2x1bW5zLm5hbWUgPSAke29wdGlvbnMucXVvdGUodGhpcy5nZXROYW1lKCkpfVxuICAgICAgT1JERVIgQllcbiAgICAgICAgc3lzLmluZGV4ZXMubmFtZSxcbiAgICAgICAgc3lzLmluZGV4X2NvbHVtbnMua2V5X29yZGluYWxcbiAgICBgXG5cbiAgICBjb25zdCByb3dzID0gYXdhaXQgdGhpcy5nZXREcml2ZXIoKS5xdWVyeShzcWwpXG4gICAgY29uc3QgaW5kZXhlcyA9IFtdXG5cbiAgICBmb3IgKGNvbnN0IHJvdyBvZiByb3dzKSB7XG4gICAgICBjb25zdCBpbmRleCA9IG5ldyBDb2x1bW5zSW5kZXgodGhpcy5nZXRUYWJsZSgpLCByb3cpXG5cbiAgICAgIGluZGV4ZXMucHVzaChpbmRleClcbiAgICB9XG5cbiAgICByZXR1cm4gaW5kZXhlc1xuICB9XG5cbiAgZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIGRpZ2codGhpcywgXCJkYXRhXCIsIFwiQ09MVU1OX0RFRkFVTFRcIikgfVxuICBnZXRNYXhMZW5ndGgoKSB7IHJldHVybiBkaWdnKHRoaXMsIFwiZGF0YVwiLCBcIkNIQVJBQ1RFUl9NQVhJTVVNX0xFTkdUSFwiKSB9XG4gIGdldE5hbWUoKSB7IHJldHVybiBkaWdnKHRoaXMsIFwiZGF0YVwiLCBcIkNPTFVNTl9OQU1FXCIpIH1cblxuICBnZXROdWxsKCkge1xuICAgIGNvbnN0IG51bGxWYWx1ZSA9IGRpZ2codGhpcywgXCJkYXRhXCIsIFwiSVNfTlVMTEFCTEVcIilcblxuICAgIGlmIChudWxsVmFsdWUgPT0gXCJOT1wiKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG4gIH1cblxuICBnZXRQcmltYXJ5S2V5KCkgeyByZXR1cm4gZGlnZyh0aGlzLCBcImRhdGFcIiwgXCJpc0lkZW50aXR5XCIpID09PSAxIH1cbiAgZ2V0VHlwZSgpIHsgcmV0dXJuIGRpZ2codGhpcywgXCJkYXRhXCIsIFwiREFUQV9UWVBFXCIpIH1cbn1cbiJdfQ==
62
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sdW1uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2RhdGFiYXNlL2RyaXZlcnMvbXNzcWwvY29sdW1uLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWixPQUFPLFVBQVUsTUFBTSxtQkFBbUIsQ0FBQTtBQUMxQyxPQUFPLFlBQVksTUFBTSxvQkFBb0IsQ0FBQTtBQUM3QyxPQUFPLEVBQUMsSUFBSSxFQUFDLE1BQU0sV0FBVyxDQUFBO0FBRTlCLE1BQU0sQ0FBQyxPQUFPLE9BQU8sbUNBQW9DLFNBQVEsVUFBVTtJQUN6RTs7O09BR0c7SUFDSCxZQUFZLEtBQUssRUFBRSxJQUFJO1FBQ3JCLEtBQUssRUFBRSxDQUFBO1FBQ1AsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUE7UUFDaEIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUE7SUFDcEIsQ0FBQztJQUVELGdCQUFnQixLQUFLLE9BQU8sSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFBLENBQUMsQ0FBQztJQUVwRSxLQUFLLENBQUMsVUFBVTtRQUNkLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQTtRQUNqQyxNQUFNLEdBQUcsR0FBRzs7Ozs7Ozs7Ozs7Ozs7OzRCQWVZLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDOzZCQUN2QyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQzs7OztLQUlyRCxDQUFBO1FBRUQsTUFBTSxJQUFJLEdBQUcsTUFBTSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFBO1FBQzlDLE1BQU0sT0FBTyxHQUFHLEVBQUUsQ0FBQTtRQUVsQixLQUFLLE1BQU0sR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ3ZCLE1BQU0sS0FBSyxHQUFHLElBQUksWUFBWSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQTtZQUVwRCxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBQ3JCLENBQUM7UUFFRCxPQUFPLE9BQU8sQ0FBQTtJQUNoQixDQUFDO0lBRUQsVUFBVSxLQUFLLE9BQU8sSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQSxDQUFDLENBQUM7SUFDNUQsWUFBWSxLQUFLLE9BQU8sSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsMEJBQTBCLENBQUMsQ0FBQSxDQUFDLENBQUM7SUFDeEUsT0FBTyxLQUFLLE9BQU8sSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsYUFBYSxDQUFDLENBQUEsQ0FBQyxDQUFDO0lBRXRELE9BQU87UUFDTCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxhQUFhLENBQUMsQ0FBQTtRQUVuRCxJQUFJLFNBQVMsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUN0QixPQUFPLEtBQUssQ0FBQTtRQUNkLENBQUM7YUFBTSxDQUFDO1lBQ04sT0FBTyxJQUFJLENBQUE7UUFDYixDQUFDO0lBQ0gsQ0FBQztJQUVELGFBQWEsS0FBSyxPQUFPLElBQUksQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQSxDQUFDLENBQUM7SUFDakUsT0FBTyxLQUFLLE9BQU8sSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsV0FBVyxDQUFDLENBQUEsQ0FBQyxDQUFDO0NBQ3JEIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbmltcG9ydCBCYXNlQ29sdW1uIGZyb20gXCIuLi9iYXNlLWNvbHVtbi5qc1wiXG5pbXBvcnQgQ29sdW1uc0luZGV4IGZyb20gXCIuL2NvbHVtbnMtaW5kZXguanNcIlxuaW1wb3J0IHtkaWdnfSBmcm9tIFwiZGlnZ2VyaXplXCJcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVmVsb2Npb3VzRGF0YWJhc2VEcml2ZXJzTXNzcWxDb2x1bW4gZXh0ZW5kcyBCYXNlQ29sdW1uIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vYmFzZS10YWJsZS5qc1wiKS5kZWZhdWx0fSB0YWJsZSAtIFRhYmxlLlxuICAgKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIHVua25vd24+fSBkYXRhIC0gRGF0YSBwYXlsb2FkLlxuICAgKi9cbiAgY29uc3RydWN0b3IodGFibGUsIGRhdGEpIHtcbiAgICBzdXBlcigpXG4gICAgdGhpcy5kYXRhID0gZGF0YVxuICAgIHRoaXMudGFibGUgPSB0YWJsZVxuICB9XG5cbiAgZ2V0QXV0b0luY3JlbWVudCgpIHsgcmV0dXJuIGRpZ2codGhpcywgXCJkYXRhXCIsIFwiaXNJZGVudGl0eVwiKSA9PT0gMSB9XG5cbiAgYXN5bmMgZ2V0SW5kZXhlcygpIHtcbiAgICBjb25zdCBvcHRpb25zID0gdGhpcy5nZXRPcHRpb25zKClcbiAgICBjb25zdCBzcWwgPSBgXG4gICAgICBTRUxFQ1RcbiAgICAgICAgc3lzLnRhYmxlcy5uYW1lIEFTIFRhYmxlTmFtZSxcbiAgICAgICAgc3lzLmNvbHVtbnMubmFtZSBBUyBDb2x1bW5OYW1lLFxuICAgICAgICBzeXMuaW5kZXhlcy5uYW1lIEFTIGluZGV4X25hbWUsXG4gICAgICAgIHN5cy5pbmRleGVzLnR5cGVfZGVzYyBBUyBJbmRleFR5cGUsXG4gICAgICAgIHN5cy5pbmRleF9jb2x1bW5zLmlzX2luY2x1ZGVkX2NvbHVtbiBBUyBJc0luY2x1ZGVkQ29sdW1uLFxuICAgICAgICBzeXMuaW5kZXhlcy5pc191bmlxdWUsXG4gICAgICAgIHN5cy5pbmRleGVzLmlzX3ByaW1hcnlfa2V5LFxuICAgICAgICBzeXMuaW5kZXhlcy5pc191bmlxdWVfY29uc3RyYWludFxuICAgICAgRlJPTSBzeXMuaW5kZXhlc1xuICAgICAgSU5ORVIgSk9JTiBzeXMuaW5kZXhfY29sdW1ucyBPTiBzeXMuaW5kZXhlcy5vYmplY3RfaWQgPSBzeXMuaW5kZXhfY29sdW1ucy5vYmplY3RfaWQgQU5EIHN5cy5pbmRleGVzLmluZGV4X2lkID0gc3lzLmluZGV4X2NvbHVtbnMuaW5kZXhfaWRcbiAgICAgIElOTkVSIEpPSU4gc3lzLmNvbHVtbnMgT04gc3lzLmluZGV4X2NvbHVtbnMub2JqZWN0X2lkID0gc3lzLmNvbHVtbnMub2JqZWN0X2lkIEFORCBzeXMuaW5kZXhfY29sdW1ucy5jb2x1bW5faWQgPSBzeXMuY29sdW1ucy5jb2x1bW5faWRcbiAgICAgIElOTkVSIEpPSU4gc3lzLnRhYmxlcyBPTiBzeXMuaW5kZXhlcy5vYmplY3RfaWQgPSBzeXMudGFibGVzLm9iamVjdF9pZFxuICAgICAgV0hFUkVcbiAgICAgICAgc3lzLnRhYmxlcy5uYW1lID0gJHtvcHRpb25zLnF1b3RlKHRoaXMuZ2V0VGFibGUoKS5nZXROYW1lKCkpfSBBTkRcbiAgICAgICAgc3lzLmNvbHVtbnMubmFtZSA9ICR7b3B0aW9ucy5xdW90ZSh0aGlzLmdldE5hbWUoKSl9XG4gICAgICBPUkRFUiBCWVxuICAgICAgICBzeXMuaW5kZXhlcy5uYW1lLFxuICAgICAgICBzeXMuaW5kZXhfY29sdW1ucy5rZXlfb3JkaW5hbFxuICAgIGBcblxuICAgIGNvbnN0IHJvd3MgPSBhd2FpdCB0aGlzLmdldERyaXZlcigpLnF1ZXJ5KHNxbClcbiAgICBjb25zdCBpbmRleGVzID0gW11cblxuICAgIGZvciAoY29uc3Qgcm93IG9mIHJvd3MpIHtcbiAgICAgIGNvbnN0IGluZGV4ID0gbmV3IENvbHVtbnNJbmRleCh0aGlzLmdldFRhYmxlKCksIHJvdylcblxuICAgICAgaW5kZXhlcy5wdXNoKGluZGV4KVxuICAgIH1cblxuICAgIHJldHVybiBpbmRleGVzXG4gIH1cblxuICBnZXREZWZhdWx0KCkgeyByZXR1cm4gZGlnZyh0aGlzLCBcImRhdGFcIiwgXCJDT0xVTU5fREVGQVVMVFwiKSB9XG4gIGdldE1heExlbmd0aCgpIHsgcmV0dXJuIGRpZ2codGhpcywgXCJkYXRhXCIsIFwiQ0hBUkFDVEVSX01BWElNVU1fTEVOR1RIXCIpIH1cbiAgZ2V0TmFtZSgpIHsgcmV0dXJuIGRpZ2codGhpcywgXCJkYXRhXCIsIFwiQ09MVU1OX05BTUVcIikgfVxuXG4gIGdldE51bGwoKSB7XG4gICAgY29uc3QgbnVsbFZhbHVlID0gZGlnZyh0aGlzLCBcImRhdGFcIiwgXCJJU19OVUxMQUJMRVwiKVxuXG4gICAgaWYgKG51bGxWYWx1ZSA9PSBcIk5PXCIpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgfVxuXG4gIGdldFByaW1hcnlLZXkoKSB7IHJldHVybiBkaWdnKHRoaXMsIFwiZGF0YVwiLCBcImlzSWRlbnRpdHlcIikgPT09IDEgfVxuICBnZXRUeXBlKCkgeyByZXR1cm4gZGlnZyh0aGlzLCBcImRhdGFcIiwgXCJEQVRBX1RZUEVcIikgfVxufVxuIl19
@@ -1,2 +1,7 @@
1
- export default function connectConnection(connection: any): Promise<any>;
1
+ /**
2
+ * Connect a MSSQL connection instance.
3
+ * @param {import("mssql").Connection} connection - MSSQL connection instance.
4
+ * @returns {Promise<void>} - Resolves when the connection is established.
5
+ */
6
+ export default function connectConnection(connection: any): Promise<void>;
2
7
  //# sourceMappingURL=connect-connection.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"connect-connection.d.ts","sourceRoot":"","sources":["../../../../../src/database/drivers/mssql/connect-connection.js"],"names":[],"mappings":"AACA,yEAUC"}
1
+ {"version":3,"file":"connect-connection.d.ts","sourceRoot":"","sources":["../../../../../src/database/drivers/mssql/connect-connection.js"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,4DAFa,OAAO,CAAC,IAAI,CAAC,CAYzB"}
@@ -1,4 +1,8 @@
1
- // Async function to connect a MS-SQL connection
1
+ /**
2
+ * Connect a MSSQL connection instance.
3
+ * @param {import("mssql").Connection} connection - MSSQL connection instance.
4
+ * @returns {Promise<void>} - Resolves when the connection is established.
5
+ */
2
6
  export default function connectConnection(connection) {
3
7
  return new Promise((resolve, reject) => {
4
8
  connection.connect((error) => {
@@ -11,4 +15,4 @@ export default function connectConnection(connection) {
11
15
  });
12
16
  });
13
17
  }
14
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29ubmVjdC1jb25uZWN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2RhdGFiYXNlL2RyaXZlcnMvbXNzcWwvY29ubmVjdC1jb25uZWN0aW9uLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGdEQUFnRDtBQUNoRCxNQUFNLENBQUMsT0FBTyxVQUFVLGlCQUFpQixDQUFDLFVBQVU7SUFDbEQsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtRQUNyQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDM0IsSUFBSSxLQUFLLEVBQUUsQ0FBQztnQkFDVixNQUFNLENBQUMsS0FBSyxDQUFDLENBQUE7WUFDZixDQUFDO2lCQUFNLENBQUM7Z0JBQ04sT0FBTyxFQUFFLENBQUE7WUFDWCxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUE7SUFDSixDQUFDLENBQUMsQ0FBQTtBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBBc3luYyBmdW5jdGlvbiB0byBjb25uZWN0IGEgTVMtU1FMIGNvbm5lY3Rpb25cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNvbm5lY3RDb25uZWN0aW9uKGNvbm5lY3Rpb24pIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25uZWN0aW9uLmNvbm5lY3QoKGVycm9yKSA9PiB7XG4gICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgcmVqZWN0KGVycm9yKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzb2x2ZSgpXG4gICAgICB9XG4gICAgfSlcbiAgfSlcbn1cbiJdfQ==
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29ubmVjdC1jb25uZWN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2RhdGFiYXNlL2RyaXZlcnMvbXNzcWwvY29ubmVjdC1jb25uZWN0aW9uLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7O0dBSUc7QUFDSCxNQUFNLENBQUMsT0FBTyxVQUFVLGlCQUFpQixDQUFDLFVBQVU7SUFDbEQsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtRQUNyQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDM0IsSUFBSSxLQUFLLEVBQUUsQ0FBQztnQkFDVixNQUFNLENBQUMsS0FBSyxDQUFDLENBQUE7WUFDZixDQUFDO2lCQUFNLENBQUM7Z0JBQ04sT0FBTyxFQUFFLENBQUE7WUFDWCxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUE7SUFDSixDQUFDLENBQUMsQ0FBQTtBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvbm5lY3QgYSBNU1NRTCBjb25uZWN0aW9uIGluc3RhbmNlLlxuICogQHBhcmFtIHtpbXBvcnQoXCJtc3NxbFwiKS5Db25uZWN0aW9ufSBjb25uZWN0aW9uIC0gTVNTUUwgY29ubmVjdGlvbiBpbnN0YW5jZS5cbiAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fSAtIFJlc29sdmVzIHdoZW4gdGhlIGNvbm5lY3Rpb24gaXMgZXN0YWJsaXNoZWQuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNvbm5lY3RDb25uZWN0aW9uKGNvbm5lY3Rpb24pIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25uZWN0aW9uLmNvbm5lY3QoKGVycm9yKSA9PiB7XG4gICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgcmVqZWN0KGVycm9yKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzb2x2ZSgpXG4gICAgICB9XG4gICAgfSlcbiAgfSlcbn1cbiJdfQ==
@@ -2,28 +2,18 @@ export default class VelociousDatabaseDriversMssql extends Base {
2
2
  connection: any;
3
3
  close(): Promise<void>;
4
4
  /**
5
- * @returns {Promise<string>} - Result.
5
+ * @returns {Promise<string>} - Resolves with the current database.
6
6
  */
7
7
  currentDatabase(): Promise<string>;
8
8
  /**
9
- * @returns {string} - Result.
9
+ * @returns {string} - The primary key type.
10
10
  */
11
11
  primaryKeyType(): string;
12
12
  /**
13
- * @param {*} value
14
- * @returns {string} - Result.
13
+ * @param {unknown} value - Value to use.
14
+ * @returns {string} - The escape.
15
15
  */
16
- escape(value: any): string;
17
- /**
18
- * @param {*} value
19
- * @returns {string} - Result.
20
- */
21
- quote(value: any): string;
22
- /**
23
- * @param {*} string
24
- * @returns {string} - Result.
25
- */
26
- quoteColumn(string: any): string;
16
+ escape(value: unknown): string;
27
17
  lastInsertID(): Promise<any>;
28
18
  _options: Options;
29
19
  _currentTransaction: any;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/database/drivers/mssql/index.js"],"names":[],"mappings":"AAoBA;IAMM,gBAAqD;IAYzD,uBAGC;IAgDD;;OAEG;IACH,mBAFa,OAAO,CAAC,MAAM,CAAC,CAM3B;IA2BD;;OAEG;IACH,kBAFa,MAAM,CAEiB;IAgDpC;;;OAGG;IACH,cAHW,GAAC,GACC,MAAM,CAalB;IAED;;;OAGG;IACH,aAHW,GAAC,GACC,MAAM,CAWlB;IAED;;;OAGG;IACH,oBAHW,GAAC,GACC,MAAM,CAEkD;IA6ErE,6BAOC;IAIqB,kBAA2C;IAS/D,yBAAiE;CAgEpE;iBAhXgB,YAAY;oBAST,cAAc"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/database/drivers/mssql/index.js"],"names":[],"mappings":"AAoBA;IAMM,gBAAqD;IAYzD,uBAGC;IAgDD;;OAEG;IACH,mBAFa,OAAO,CAAC,MAAM,CAAC,CAM3B;IA2BD;;OAEG;IACH,kBAFa,MAAM,CAEiB;IAgDpC;;;OAGG;IACH,cAHW,OAAO,GACL,MAAM,CAalB;IAkGD,6BAOC;IAIqB,kBAA2C;IAS/D,yBAAiE;CAgEpE;iBAhXgB,YAAY;oBAST,cAAc"}
@@ -39,8 +39,8 @@ export default class VelociousDatabaseDriversMssql extends Base {
39
39
  this.connection = undefined;
40
40
  }
41
41
  /**
42
- * @param {import("../../table-data/index.js").default} tableData
43
- * @returns {Promise<string[]>} - Result.
42
+ * @param {import("../../table-data/index.js").default} tableData - Table data.
43
+ * @returns {Promise<string[]>} - Resolves with SQL statements.
44
44
  */
45
45
  async alterTableSQLs(tableData) {
46
46
  const alterArgs = { tableData, driver: this };
@@ -48,10 +48,10 @@ export default class VelociousDatabaseDriversMssql extends Base {
48
48
  return await alterTable.toSQLs();
49
49
  }
50
50
  /**
51
- * @param {string} databaseName
52
- * @param {object} [args]
53
- * @param {boolean} [args.ifNotExists]
54
- * @returns {string[]} - Result.
51
+ * @param {string} databaseName - Database name.
52
+ * @param {object} [args] - Options object.
53
+ * @param {boolean} [args.ifNotExists] - Whether if not exists.
54
+ * @returns {string[]} - SQL statements.
55
55
  */
56
56
  createDatabaseSql(databaseName, args) {
57
57
  const createArgs = Object.assign({ databaseName, driver: this }, args);
@@ -59,8 +59,8 @@ export default class VelociousDatabaseDriversMssql extends Base {
59
59
  return createDatabase.toSql();
60
60
  }
61
61
  /**
62
- * @param {import("../base.js").CreateIndexSqlArgs} indexData
63
- * @returns {Promise<string[]>} - Result.
62
+ * @param {import("../base.js").CreateIndexSqlArgs} indexData - Index data.
63
+ * @returns {Promise<string[]>} - Resolves with SQL statements.
64
64
  */
65
65
  async createIndexSQLs(indexData) {
66
66
  const createArgs = Object.assign({ driver: this }, indexData);
@@ -68,8 +68,8 @@ export default class VelociousDatabaseDriversMssql extends Base {
68
68
  return await createIndex.toSQLs();
69
69
  }
70
70
  /**
71
- * @param {import("../../table-data/index.js").default} tableData
72
- * @returns {Promise<string[]>} - Result.
71
+ * @param {import("../../table-data/index.js").default} tableData - Table data.
72
+ * @returns {Promise<string[]>} - Resolves with SQL statements.
73
73
  */
74
74
  async createTableSql(tableData) {
75
75
  const createArgs = { tableData, driver: this, indexInCreateTable: false };
@@ -77,7 +77,7 @@ export default class VelociousDatabaseDriversMssql extends Base {
77
77
  return await createTable.toSql();
78
78
  }
79
79
  /**
80
- * @returns {Promise<string>} - Result.
80
+ * @returns {Promise<string>} - Resolves with the current database.
81
81
  */
82
82
  async currentDatabase() {
83
83
  const rows = await this.query("SELECT DB_NAME() AS db_name");
@@ -90,9 +90,9 @@ export default class VelociousDatabaseDriversMssql extends Base {
90
90
  await this.query("EXEC sp_MSforeachtable @command1=\"print '?'\", @command2=\"ALTER TABLE ? WITH CHECK CHECK CONSTRAINT all\"");
91
91
  }
92
92
  /**
93
- * @param {string} tableName
94
- * @param {import("../base.js").DropTableSqlArgsType} [args]
95
- * @returns {Promise<string[]>} - Result.
93
+ * @param {string} tableName - Table name.
94
+ * @param {import("../base.js").DropTableSqlArgsType} [args] - Options object.
95
+ * @returns {Promise<string[]>} - Resolves with SQL statements.
96
96
  */
97
97
  async dropTableSQLs(tableName, args = {}) {
98
98
  const dropArgs = Object.assign({ tableName, driver: this }, args);
@@ -100,16 +100,16 @@ export default class VelociousDatabaseDriversMssql extends Base {
100
100
  return await dropTable.toSQLs();
101
101
  }
102
102
  /**
103
- * @returns {string} - Result.
103
+ * @returns {string} - The type.
104
104
  */
105
105
  getType() { return "mssql"; }
106
106
  /**
107
- * @returns {string} - Result.
107
+ * @returns {string} - The primary key type.
108
108
  */
109
109
  primaryKeyType() { return "bigint"; }
110
110
  /**
111
- * @param {string} sql
112
- * @returns {Promise<import("../base.js").QueryResultType>} - Result.
111
+ * @param {string} sql - SQL string.
112
+ * @returns {Promise<import("../base.js").QueryResultType>} - Resolves with the query actual.
113
113
  */
114
114
  async _queryActual(sql) {
115
115
  let result;
@@ -144,15 +144,15 @@ export default class VelociousDatabaseDriversMssql extends Base {
144
144
  return result.recordsets[0];
145
145
  }
146
146
  /**
147
- * @param {import("../../query/index.js").default} query
148
- * @returns {string} - Result.
147
+ * @param {import("../../query/index.js").default} query - Query instance.
148
+ * @returns {string} - SQL string.
149
149
  */
150
150
  queryToSql(query) { return new QueryParser({ query }).toSql(); }
151
151
  shouldSetAutoIncrementWhenPrimaryKey() { return true; }
152
152
  supportsDefaultPrimaryKeyUUID() { return true; }
153
153
  /**
154
- * @param {*} value
155
- * @returns {string} - Result.
154
+ * @param {unknown} value - Value to use.
155
+ * @returns {string} - The escape.
156
156
  */
157
157
  escape(value) {
158
158
  value = this._convertValue(value);
@@ -164,40 +164,40 @@ export default class VelociousDatabaseDriversMssql extends Base {
164
164
  return result;
165
165
  }
166
166
  /**
167
- * @param {*} value
168
- * @returns {string} - Result.
167
+ * @param {unknown} value - Value to use.
168
+ * @returns {string | number} - The quoted value.
169
169
  */
170
170
  quote(value) {
171
171
  value = this._convertValue(value);
172
172
  const type = typeof value;
173
173
  if (type == "number")
174
- return value;
174
+ return /** @type {number} */ (value);
175
175
  if (type != "string")
176
- value = `${value}`;
176
+ value = String(value);
177
177
  return escapeString(value, null);
178
178
  }
179
179
  /**
180
- * @param {*} string
181
- * @returns {string} - Result.
180
+ * @param {string} columnName - Column name.
181
+ * @returns {string} - The quote column.
182
182
  */
183
- quoteColumn(string) { return this.options().quoteColumnName(string); }
183
+ quoteColumn(columnName) { return this.options().quoteColumnName(columnName); }
184
184
  /**
185
- * @param {string} string
186
- * @returns {string} - Result.
185
+ * @param {string} string - String.
186
+ * @returns {string} - The quote table.
187
187
  */
188
188
  quoteTable(string) { return this.options().quoteTableName(string); }
189
189
  /**
190
- * @param {string} tableName
191
- * @param {string} oldColumnName
192
- * @param {string} newColumnName
193
- * @returns {Promise<void>} - Result.
190
+ * @param {string} tableName - Table name.
191
+ * @param {string} oldColumnName - Previous column name.
192
+ * @param {string} newColumnName - New column name.
193
+ * @returns {Promise<void>} - Resolves when complete.
194
194
  */
195
195
  async renameColumn(tableName, oldColumnName, newColumnName) {
196
196
  await this.query(`EXEC sp_rename ${this.quote(`${tableName}.${oldColumnName}`)}, ${this.quote(newColumnName)}, 'COLUMN'`);
197
197
  }
198
198
  /**
199
- * @param {import("../base.js").DeleteSqlArgsType} args
200
- * @returns {string} - Result.
199
+ * @param {import("../base.js").DeleteSqlArgsType} args - Options object.
200
+ * @returns {string} - SQL string.
201
201
  */
202
202
  deleteSql({ tableName, conditions }) {
203
203
  const deleteInstruction = new Delete({ conditions, driver: this, tableName });
@@ -205,8 +205,8 @@ export default class VelociousDatabaseDriversMssql extends Base {
205
205
  }
206
206
  /**
207
207
  * @abstract
208
- * @param {import("../base.js").InsertSqlArgsType} args
209
- * @returns {string} - Result.
208
+ * @param {import("../base.js").InsertSqlArgsType} args - Options object.
209
+ * @returns {string} - SQL string.
210
210
  */
211
211
  insertSql(args) {
212
212
  const insertArgs = Object.assign({ driver: this }, args);
@@ -214,27 +214,27 @@ export default class VelociousDatabaseDriversMssql extends Base {
214
214
  return insert.toSql();
215
215
  }
216
216
  /**
217
- * @returns {Promise<Array<import("../base-table.js").default>>} - Result.
217
+ * @returns {Promise<Array<import("../base-table.js").default>>} - Resolves with the tables.
218
218
  */
219
219
  async getTables() {
220
220
  const result = await this.query(`SELECT [TABLE_NAME] FROM [INFORMATION_SCHEMA].[TABLES] WHERE [TABLE_CATALOG] = DB_NAME() AND [TABLE_SCHEMA] = 'dbo'`);
221
221
  const tables = [];
222
222
  for (const row of result) {
223
- const table = new Table(this, row);
223
+ const table = new Table(this, /** @type {Record<string, string>} */ (row));
224
224
  tables.push(table);
225
225
  }
226
226
  return tables;
227
227
  }
228
228
  /**
229
- * @param {string} name
230
- * @param {object} [args]
231
- * @param {boolean} args.throwError
232
- * @returns {Promise<import("../base-table.js").default | undefined>} - Result.
229
+ * @param {string} name - Name.
230
+ * @param {object} [args] - Options object.
231
+ * @param {boolean} args.throwError - Whether throw error.
232
+ * @returns {Promise<import("../base-table.js").default | undefined>} - Resolves with the table by name.
233
233
  */
234
234
  async getTableByName(name, args) {
235
235
  const result = await this.query(`SELECT [TABLE_NAME] FROM [INFORMATION_SCHEMA].[TABLES] WHERE [TABLE_CATALOG] = DB_NAME() AND [TABLE_SCHEMA] = 'dbo' AND [TABLE_NAME] = ${this.quote(name)}`);
236
236
  if (result[0]) {
237
- return new Table(this, result[0]);
237
+ return new Table(this, /** @type {Record<string, string>} */ (result[0]));
238
238
  }
239
239
  if (args?.throwError !== false) {
240
240
  const tables = await this.getTables();
@@ -249,7 +249,7 @@ export default class VelociousDatabaseDriversMssql extends Base {
249
249
  throw new Error("Couldn't get the last inserted ID");
250
250
  return lastInsertID;
251
251
  }
252
- /** @returns {Options} - Result. */
252
+ /** @returns {Options} - The options options. */
253
253
  options() {
254
254
  if (!this._options)
255
255
  this._options = new Options({ driver: this });
@@ -276,22 +276,22 @@ export default class VelociousDatabaseDriversMssql extends Base {
276
276
  this._currentTransaction = null;
277
277
  }
278
278
  /**
279
- * @param {string} savePointName
280
- * @returns {Promise<void>} - Result.
279
+ * @param {string} savePointName - Save point name.
280
+ * @returns {Promise<void>} - Resolves when complete.
281
281
  */
282
282
  async _startSavePointAction(savePointName) {
283
283
  await this.query(`SAVE TRANSACTION [${savePointName}]`);
284
284
  }
285
285
  /**
286
- * @param {string} savePointName
287
- * @returns {Promise<void>} - Result.
286
+ * @param {string} savePointName - Save point name.
287
+ * @returns {Promise<void>} - Resolves when complete.
288
288
  */
289
289
  async _releaseSavePointAction(savePointName) {
290
290
  // Do nothing in MS-SQL.
291
291
  }
292
292
  /**
293
- * @param {string} savePointName
294
- * @returns {Promise<void>} - Result.
293
+ * @param {string} savePointName - Save point name.
294
+ * @returns {Promise<void>} - Resolves when complete.
295
295
  */
296
296
  async _rollbackSavePointAction(savePointName) {
297
297
  await this.query(`ROLLBACK TRANSACTION [${savePointName}]`);
@@ -300,18 +300,18 @@ export default class VelociousDatabaseDriversMssql extends Base {
300
300
  return `sp${new UUID(4).format().replaceAll("-", "")}`.substring(0, 32);
301
301
  }
302
302
  /**
303
- * @param {import("../base.js").UpdateSqlArgsType} args
304
- * @returns {string} - Result.
303
+ * @param {import("../base.js").UpdateSqlArgsType} args - Options object.
304
+ * @returns {string} - SQL string.
305
305
  */
306
306
  updateSql({ conditions, data, tableName }) {
307
307
  const update = new Update({ conditions, data, driver: this, tableName });
308
308
  return update.toSql();
309
309
  }
310
310
  /**
311
- * @returns {Promise<string | null>} - Result.
311
+ * @returns {Promise<string | null>} - Resolves with SQL string.
312
312
  */
313
313
  async structureSql() {
314
314
  return await new StructureSql({ driver: this }).toSql();
315
315
  }
316
316
  }
317
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvZGF0YWJhc2UvZHJpdmVycy9tc3NxbC9pbmRleC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVosT0FBTyxVQUFVLE1BQU0sc0JBQXNCLENBQUE7QUFDN0MsT0FBTyxJQUFJLE1BQU0sWUFBWSxDQUFBO0FBQzdCLE9BQU8sY0FBYyxNQUFNLDBCQUEwQixDQUFBO0FBQ3JELE9BQU8sV0FBVyxNQUFNLHVCQUF1QixDQUFBO0FBQy9DLE9BQU8sV0FBVyxNQUFNLHVCQUF1QixDQUFBO0FBQy9DLE9BQU8sTUFBTSxNQUFNLGlCQUFpQixDQUFBO0FBQ3BDLE9BQU8sU0FBUyxNQUFNLHFCQUFxQixDQUFBO0FBQzNDLE9BQU8sRUFBQyxJQUFJLEVBQUMsTUFBTSxXQUFXLENBQUE7QUFDOUIsT0FBTyxZQUFZLE1BQU0sbUJBQW1CLENBQUE7QUFDNUMsT0FBTyxNQUFNLE1BQU0saUJBQWlCLENBQUE7QUFDcEMsT0FBTyxPQUFPLE1BQU0sY0FBYyxDQUFBO0FBQ2xDLE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQTtBQUN6QixPQUFPLFdBQVcsTUFBTSxtQkFBbUIsQ0FBQTtBQUMzQyxPQUFPLEtBQUssTUFBTSxZQUFZLENBQUE7QUFDOUIsT0FBTyxZQUFZLE1BQU0sb0JBQW9CLENBQUE7QUFDN0MsT0FBTyxNQUFNLE1BQU0saUJBQWlCLENBQUE7QUFDcEMsT0FBTyxJQUFJLE1BQU0sV0FBVyxDQUFBO0FBRTVCLE1BQU0sQ0FBQyxPQUFPLE9BQU8sNkJBQThCLFNBQVEsSUFBSTtJQUM3RCxLQUFLLENBQUMsT0FBTztRQUNYLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQTtRQUMzQixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxDQUFBO1FBRXpDLElBQUksQ0FBQztZQUNILElBQUksQ0FBQyxV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TUFBTSxHQUFHLElBQUksTUFBTSxDQUFDLEVBQUMsVUFBVSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBQyxDQUFDLENBQUE7UUFFdEUsT0FBTyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUE7SUFDdkIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSyxDQUFDLFlBQVk7UUFDaEIsT0FBTyxNQUFNLElBQUksWUFBWSxDQUFDLEVBQUMsTUFBTSxFQUFFLElBQUksRUFBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUE7SUFDdkQsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbmltcG9ydCBBbHRlclRhYmxlIGZyb20gXCIuL3NxbC9hbHRlci10YWJsZS5qc1wiXG5pbXBvcnQgQmFzZSBmcm9tIFwiLi4vYmFzZS5qc1wiXG5pbXBvcnQgQ3JlYXRlRGF0YWJhc2UgZnJvbSBcIi4vc3FsL2NyZWF0ZS1kYXRhYmFzZS5qc1wiXG5pbXBvcnQgQ3JlYXRlSW5kZXggZnJvbSBcIi4vc3FsL2NyZWF0ZS1pbmRleC5qc1wiXG5pbXBvcnQgQ3JlYXRlVGFibGUgZnJvbSBcIi4vc3FsL2NyZWF0ZS10YWJsZS5qc1wiXG5pbXBvcnQgRGVsZXRlIGZyb20gXCIuL3NxbC9kZWxldGUuanNcIlxuaW1wb3J0IERyb3BUYWJsZSBmcm9tIFwiLi9zcWwvZHJvcC10YWJsZS5qc1wiXG5pbXBvcnQge2RpZ2d9IGZyb20gXCJkaWdnZXJpemVcIlxuaW1wb3J0IGVzY2FwZVN0cmluZyBmcm9tIFwic3FsLWVzY2FwZS1zdHJpbmdcIlxuaW1wb3J0IEluc2VydCBmcm9tIFwiLi9zcWwvaW5zZXJ0LmpzXCJcbmltcG9ydCBPcHRpb25zIGZyb20gXCIuL29wdGlvbnMuanNcIlxuaW1wb3J0IG1zc3FsIGZyb20gXCJtc3NxbFwiXG5pbXBvcnQgUXVlcnlQYXJzZXIgZnJvbSBcIi4vcXVlcnktcGFyc2VyLmpzXCJcbmltcG9ydCBUYWJsZSBmcm9tIFwiLi90YWJsZS5qc1wiXG5pbXBvcnQgU3RydWN0dXJlU3FsIGZyb20gXCIuL3N0cnVjdHVyZS1zcWwuanNcIlxuaW1wb3J0IFVwZGF0ZSBmcm9tIFwiLi9zcWwvdXBkYXRlLmpzXCJcbmltcG9ydCBVVUlEIGZyb20gXCJwdXJlLXV1aWRcIlxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWZWxvY2lvdXNEYXRhYmFzZURyaXZlcnNNc3NxbCBleHRlbmRzIEJhc2V7XG4gIGFzeW5jIGNvbm5lY3QoKSB7XG4gICAgY29uc3QgYXJncyA9IHRoaXMuZ2V0QXJncygpXG4gICAgY29uc3Qgc3FsQ29uZmlnID0gZGlnZyhhcmdzLCBcInNxbENvbmZpZ1wiKVxuXG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuY29ubmVjdGlvbiA9IG5ldyBtc3NxbC5Db25uZWN0aW9uUG9vbChzcWxDb25maWcpXG4gICAgICBhd2FpdCB0aGlzLmNvbm5lY3Rpb24uY29ubmVjdCgpXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIFJlLXRocm93IHRvIGZpeCB1bnVzZWFibGUgc3RhY2sgdHJhY2UuXG4gICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkbid0IGNvbm5lY3QgdG8gZGF0YWJhc2U6ICR7ZXJyb3IubWVzc2FnZX1gKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb3VsZG4ndCBjb25uZWN0IHRvIGRhdGFiYXNlOiAke2Vycm9yfWApXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgY2xvc2UoKSB7XG4gICAgYXdhaXQgdGhpcy5jb25uZWN0aW9uPy5jbG9zZSgpXG4gICAgdGhpcy5jb25uZWN0aW9uID0gdW5kZWZpbmVkXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuLi8uLi90YWJsZS1kYXRhL2luZGV4LmpzXCIpLmRlZmF1bHR9IHRhYmxlRGF0YVxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxzdHJpbmdbXT59IC0gUmVzdWx0LlxuICAgKi9cbiAgYXN5bmMgYWx0ZXJUYWJsZVNRTHModGFibGVEYXRhKSB7XG4gICAgY29uc3QgYWx0ZXJBcmdzID0ge3RhYmxlRGF0YSwgZHJpdmVyOiB0aGlzfVxuICAgIGNvbnN0IGFsdGVyVGFibGUgPSBuZXcgQWx0ZXJUYWJsZShhbHRlckFyZ3MpXG5cbiAgICByZXR1cm4gYXdhaXQgYWx0ZXJUYWJsZS50b1NRTHMoKVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBkYXRhYmFzZU5hbWVcbiAgICogQHBhcmFtIHtvYmplY3R9IFthcmdzXVxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFthcmdzLmlmTm90RXhpc3RzXVxuICAgKiBAcmV0dXJucyB7c3RyaW5nW119IC0gUmVzdWx0LlxuICAgKi9cbiAgY3JlYXRlRGF0YWJhc2VTcWwoZGF0YWJhc2VOYW1lLCBhcmdzKSB7XG4gICAgY29uc3QgY3JlYXRlQXJncyA9IE9iamVjdC5hc3NpZ24oe2RhdGFiYXNlTmFtZSwgZHJpdmVyOiB0aGlzfSwgYXJncylcbiAgICBjb25zdCBjcmVhdGVEYXRhYmFzZSA9IG5ldyBDcmVhdGVEYXRhYmFzZShjcmVhdGVBcmdzKVxuXG4gICAgcmV0dXJuIGNyZWF0ZURhdGFiYXNlLnRvU3FsKClcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uL2Jhc2UuanNcIikuQ3JlYXRlSW5kZXhTcWxBcmdzfSBpbmRleERhdGFcbiAgICogQHJldHVybnMge1Byb21pc2U8c3RyaW5nW10+fSAtIFJlc3VsdC5cbiAgICovXG4gIGFzeW5jIGNyZWF0ZUluZGV4U1FMcyhpbmRleERhdGEpIHtcbiAgICBjb25zdCBjcmVhdGVBcmdzID0gT2JqZWN0LmFzc2lnbih7ZHJpdmVyOiB0aGlzfSwgaW5kZXhEYXRhKVxuICAgIGNvbnN0IGNyZWF0ZUluZGV4ID0gbmV3IENyZWF0ZUluZGV4KGNyZWF0ZUFyZ3MpXG5cbiAgICByZXR1cm4gYXdhaXQgY3JlYXRlSW5kZXgudG9TUUxzKClcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uLy4uL3RhYmxlLWRhdGEvaW5kZXguanNcIikuZGVmYXVsdH0gdGFibGVEYXRhXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHN0cmluZ1tdPn0gLSBSZXN1bHQuXG4gICAqL1xuICBhc3luYyBjcmVhdGVUYWJsZVNxbCh0YWJsZURhdGEpIHtcbiAgICBjb25zdCBjcmVhdGVBcmdzID0ge3RhYmxlRGF0YSwgZHJpdmVyOiB0aGlzLCBpbmRleEluQ3JlYXRlVGFibGU6IGZhbHNlfVxuICAgIGNvbnN0IGNyZWF0ZVRhYmxlID0gbmV3IENyZWF0ZVRhYmxlKGNyZWF0ZUFyZ3MpXG5cbiAgICByZXR1cm4gYXdhaXQgY3JlYXRlVGFibGUudG9TcWwoKVxuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHN0cmluZz59IC0gUmVzdWx0LlxuICAgKi9cbiAgYXN5bmMgY3VycmVudERhdGFiYXNlKCkge1xuICAgIGNvbnN0IHJvd3MgPSBhd2FpdCB0aGlzLnF1ZXJ5KFwiU0VMRUNUIERCX05BTUUoKSBBUyBkYl9uYW1lXCIpXG5cbiAgICByZXR1cm4gZGlnZyhyb3dzLCAwLCBcImRiX25hbWVcIilcbiAgfVxuXG4gIGFzeW5jIGRpc2FibGVGb3JlaWduS2V5cygpIHtcbiAgICBhd2FpdCB0aGlzLnF1ZXJ5KFwiRVhFQyBzcF9NU2ZvcmVhY2h0YWJsZSBcXFwiQUxURVIgVEFCTEUgPyBOT0NIRUNLIENPTlNUUkFJTlQgYWxsXFxcIlwiKVxuICB9XG5cbiAgYXN5bmMgZW5hYmxlRm9yZWlnbktleXMoKSB7XG4gICAgYXdhaXQgdGhpcy5xdWVyeShcIkVYRUMgc3BfTVNmb3JlYWNodGFibGUgQGNvbW1hbmQxPVxcXCJwcmludCAnPydcXFwiLCBAY29tbWFuZDI9XFxcIkFMVEVSIFRBQkxFID8gV0lUSCBDSEVDSyBDSEVDSyBDT05TVFJBSU5UIGFsbFxcXCJcIilcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGFibGVOYW1lXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vYmFzZS5qc1wiKS5Ecm9wVGFibGVTcWxBcmdzVHlwZX0gW2FyZ3NdXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHN0cmluZ1tdPn0gLSBSZXN1bHQuXG4gICAqL1xuICBhc3luYyBkcm9wVGFibGVTUUxzKHRhYmxlTmFtZSwgYXJncyA9IHt9KSB7XG4gICAgY29uc3QgZHJvcEFyZ3MgPSBPYmplY3QuYXNzaWduKHt0YWJsZU5hbWUsIGRyaXZlcjogdGhpc30sIGFyZ3MpXG4gICAgY29uc3QgZHJvcFRhYmxlID0gbmV3IERyb3BUYWJsZShkcm9wQXJncylcblxuICAgIHJldHVybiBhd2FpdCBkcm9wVGFibGUudG9TUUxzKClcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSAtIFJlc3VsdC5cbiAgICovXG4gIGdldFR5cGUoKSB7IHJldHVybiBcIm1zc3FsXCIgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSAtIFJlc3VsdC5cbiAgICovXG4gIHByaW1hcnlLZXlUeXBlKCkgeyByZXR1cm4gXCJiaWdpbnRcIiB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzcWxcbiAgICogQHJldHVybnMge1Byb21pc2U8aW1wb3J0KFwiLi4vYmFzZS5qc1wiKS5RdWVyeVJlc3VsdFR5cGU+fSAtIFJlc3VsdC5cbiAgICovXG4gIGFzeW5jIF9xdWVyeUFjdHVhbChzcWwpIHtcbiAgICBsZXQgcmVzdWx0XG4gICAgbGV0IHJlcXVlc3QsIHRyaWVzID0gMFxuXG4gICAgaWYgKHRoaXMuX2N1cnJlbnRUcmFuc2FjdGlvbikge1xuICAgICAgcmVxdWVzdCA9IG5ldyBtc3NxbC5SZXF1ZXN0KHRoaXMuX2N1cnJlbnRUcmFuc2FjdGlvbilcbiAgICB9IGVsc2Uge1xuICAgICAgcmVxdWVzdCA9IG5ldyBtc3NxbC5SZXF1ZXN0KHRoaXMuY29ubmVjdGlvbilcbiAgICB9XG5cbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgdHJpZXMrK1xuXG4gICAgICB0cnkge1xuICAgICAgICByZXN1bHQgPSBhd2FpdCByZXF1ZXN0LnF1ZXJ5KHNxbClcbiAgICAgICAgYnJlYWtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yICYmIGVycm9yLm1lc3NhZ2UgPT0gXCJObyBjb25uZWN0aW9uIGlzIHNwZWNpZmllZCBmb3IgdGhhdCByZXF1ZXN0LlwiICYmIHRyaWVzIDw9IDMpIHtcbiAgICAgICAgICB0aGlzLmxvZ2dlci53YXJuKFwiUmVjb25uZWN0aW5nIHRvIGRhdGFiYXNlXCIpXG4gICAgICAgICAgYXdhaXQgdGhpcy5jb25uZWN0KClcbiAgICAgICAgICAvLyBSZXRyeVxuICAgICAgICB9IGVsc2UgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICAvLyBSZS10aHJvdyBlcnJvciBiZWNhdXNlIHRoZSBzdGFjay10cmFjZSBpcyBicm9rZW4gYW5kIGNhbid0IGJlIHVzZWQgZm9yIGFwcC1kZXZlbG9wbWVudC5cbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFF1ZXJ5IGZhaWxlZCAnJHtlcnJvci5tZXNzYWdlfSc6ICR7c3FsfWApXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBRdWVyeSBmYWlsZWQgJyR7ZXJyb3J9JzogJHtzcWx9YClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQucmVjb3Jkc2V0c1swXVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vLi4vcXVlcnkvaW5kZXguanNcIikuZGVmYXVsdH0gcXVlcnlcbiAgICogQHJldHVybnMge3N0cmluZ30gLSBSZXN1bHQuXG4gICAqL1xuICBxdWVyeVRvU3FsKHF1ZXJ5KSB7IHJldHVybiBuZXcgUXVlcnlQYXJzZXIoe3F1ZXJ5fSkudG9TcWwoKSB9XG5cbiAgc2hvdWxkU2V0QXV0b0luY3JlbWVudFdoZW5QcmltYXJ5S2V5KCkgeyByZXR1cm4gdHJ1ZSB9XG4gIHN1cHBvcnRzRGVmYXVsdFByaW1hcnlLZXlVVUlEKCkgeyByZXR1cm4gdHJ1ZSB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAgICogQHJldHVybnMge3N0cmluZ30gLSBSZXN1bHQuXG4gICAqL1xuICBlc2NhcGUodmFsdWUpIHtcbiAgICB2YWx1ZSA9IHRoaXMuX2NvbnZlcnRWYWx1ZSh2YWx1ZSlcblxuICAgIGNvbnN0IHR5cGUgPSB0eXBlb2YgdmFsdWVcblxuICAgIGlmICh0eXBlICE9IFwic3RyaW5nXCIpIHZhbHVlID0gYCR7dmFsdWV9YFxuXG4gICAgY29uc3QgcmVzdWx0V2l0aFF1b3RlcyA9IGVzY2FwZVN0cmluZyh2YWx1ZSwgbnVsbClcbiAgICBjb25zdCByZXN1bHQgPSByZXN1bHRXaXRoUXVvdGVzLnN1YnN0cmluZygxLCByZXN1bHRXaXRoUXVvdGVzLmxlbmd0aCAtIDEpXG5cbiAgICByZXR1cm4gcmVzdWx0XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHsqfSB2YWx1ZVxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSAtIFJlc3VsdC5cbiAgICovXG4gIHF1b3RlKHZhbHVlKSB7XG4gICAgdmFsdWUgPSB0aGlzLl9jb252ZXJ0VmFsdWUodmFsdWUpXG5cbiAgICBjb25zdCB0eXBlID0gdHlwZW9mIHZhbHVlXG5cbiAgICBpZiAodHlwZSA9PSBcIm51bWJlclwiKSByZXR1cm4gdmFsdWVcbiAgICBpZiAodHlwZSAhPSBcInN0cmluZ1wiKSB2YWx1ZSA9IGAke3ZhbHVlfWBcblxuICAgIHJldHVybiBlc2NhcGVTdHJpbmcodmFsdWUsIG51bGwpXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHsqfSBzdHJpbmdcbiAgICogQHJldHVybnMge3N0cmluZ30gLSBSZXN1bHQuXG4gICAqL1xuICBxdW90ZUNvbHVtbihzdHJpbmcpIHsgcmV0dXJuIHRoaXMub3B0aW9ucygpLnF1b3RlQ29sdW1uTmFtZShzdHJpbmcpIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZ1xuICAgKiBAcmV0dXJucyB7c3RyaW5nfSAtIFJlc3VsdC5cbiAgICovXG4gIHF1b3RlVGFibGUoc3RyaW5nKSB7IHJldHVybiB0aGlzLm9wdGlvbnMoKS5xdW90ZVRhYmxlTmFtZShzdHJpbmcpIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRhYmxlTmFtZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gb2xkQ29sdW1uTmFtZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmV3Q29sdW1uTmFtZVxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gLSBSZXN1bHQuXG4gICAqL1xuICBhc3luYyByZW5hbWVDb2x1bW4odGFibGVOYW1lLCBvbGRDb2x1bW5OYW1lLCBuZXdDb2x1bW5OYW1lKSB7XG4gICAgYXdhaXQgdGhpcy5xdWVyeShgRVhFQyBzcF9yZW5hbWUgJHt0aGlzLnF1b3RlKGAke3RhYmxlTmFtZX0uJHtvbGRDb2x1bW5OYW1lfWApfSwgJHt0aGlzLnF1b3RlKG5ld0NvbHVtbk5hbWUpfSwgJ0NPTFVNTidgKVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vYmFzZS5qc1wiKS5EZWxldGVTcWxBcmdzVHlwZX0gYXJnc1xuICAgKiBAcmV0dXJucyB7c3RyaW5nfSAtIFJlc3VsdC5cbiAgICovXG4gIGRlbGV0ZVNxbCh7dGFibGVOYW1lLCBjb25kaXRpb25zfSkge1xuICAgIGNvbnN0IGRlbGV0ZUluc3RydWN0aW9uID0gbmV3IERlbGV0ZSh7Y29uZGl0aW9ucywgZHJpdmVyOiB0aGlzLCB0YWJsZU5hbWV9KVxuXG4gICAgcmV0dXJuIGRlbGV0ZUluc3RydWN0aW9uLnRvU3FsKClcbiAgfVxuXG4gIC8qKlxuICAgKiBAYWJzdHJhY3RcbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuLi9iYXNlLmpzXCIpLkluc2VydFNxbEFyZ3NUeXBlfSBhcmdzXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IC0gUmVzdWx0LlxuICAgKi9cbiAgaW5zZXJ0U3FsKGFyZ3MpIHtcbiAgICBjb25zdCBpbnNlcnRBcmdzID0gT2JqZWN0LmFzc2lnbih7ZHJpdmVyOiB0aGlzfSwgYXJncylcbiAgICBjb25zdCBpbnNlcnQgPSBuZXcgSW5zZXJ0KGluc2VydEFyZ3MpXG5cbiAgICByZXR1cm4gaW5zZXJ0LnRvU3FsKClcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxBcnJheTxpbXBvcnQoXCIuLi9iYXNlLXRhYmxlLmpzXCIpLmRlZmF1bHQ+Pn0gLSBSZXN1bHQuXG4gICAqL1xuICBhc3luYyBnZXRUYWJsZXMoKSB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5xdWVyeShgU0VMRUNUIFtUQUJMRV9OQU1FXSBGUk9NIFtJTkZPUk1BVElPTl9TQ0hFTUFdLltUQUJMRVNdIFdIRVJFIFtUQUJMRV9DQVRBTE9HXSA9IERCX05BTUUoKSBBTkQgW1RBQkxFX1NDSEVNQV0gPSAnZGJvJ2ApXG4gICAgY29uc3QgdGFibGVzID0gW11cblxuICAgIGZvciAoY29uc3Qgcm93IG9mIHJlc3VsdCkge1xuICAgICAgY29uc3QgdGFibGUgPSBuZXcgVGFibGUodGhpcywgcm93KVxuXG4gICAgICB0YWJsZXMucHVzaCh0YWJsZSlcbiAgICB9XG5cbiAgICByZXR1cm4gdGFibGVzXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAgICogQHBhcmFtIHtvYmplY3R9IFthcmdzXVxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGFyZ3MudGhyb3dFcnJvclxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxpbXBvcnQoXCIuLi9iYXNlLXRhYmxlLmpzXCIpLmRlZmF1bHQgfCB1bmRlZmluZWQ+fSAtIFJlc3VsdC5cbiAgICovXG4gIGFzeW5jIGdldFRhYmxlQnlOYW1lKG5hbWUsIGFyZ3MpIHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnF1ZXJ5KGBTRUxFQ1QgW1RBQkxFX05BTUVdIEZST00gW0lORk9STUFUSU9OX1NDSEVNQV0uW1RBQkxFU10gV0hFUkUgW1RBQkxFX0NBVEFMT0ddID0gREJfTkFNRSgpIEFORCBbVEFCTEVfU0NIRU1BXSA9ICdkYm8nIEFORCBbVEFCTEVfTkFNRV0gPSAke3RoaXMucXVvdGUobmFtZSl9YClcblxuICAgIGlmIChyZXN1bHRbMF0pIHtcbiAgICAgIHJldHVybiBuZXcgVGFibGUodGhpcywgcmVzdWx0WzBdKVxuICAgIH1cblxuICAgIGlmIChhcmdzPy50aHJvd0Vycm9yICE9PSBmYWxzZSkge1xuICAgICAgY29uc3QgdGFibGVzID0gYXdhaXQgdGhpcy5nZXRUYWJsZXMoKVxuICAgICAgY29uc3QgdGFibGVOYW1lcyA9IHRhYmxlcy5tYXAoKHRhYmxlKSA9PiB0YWJsZS5nZXROYW1lKCkpXG5cbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ291bGRuJ3QgZmluZCBhIHRhYmxlIGJ5IHRoYXQgbmFtZSBcIiR7bmFtZX1cIiBpbjogJHt0YWJsZU5hbWVzLmpvaW4oXCIsIFwiKX1gKVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGxhc3RJbnNlcnRJRCgpIHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnF1ZXJ5KFwiU0VMRUNUIFNDT1BFX0lERU5USVRZKCkgQVMgbGFzdF9pbnNlcnRfaWRcIilcbiAgICBjb25zdCBsYXN0SW5zZXJ0SUQgPSBkaWdnKHJlc3VsdCwgMCwgXCJsYXN0X2luc2VydF9pZFwiKVxuXG4gICAgaWYgKGxhc3RJbnNlcnRJRCA9PT0gbnVsbCkgdGhyb3cgbmV3IEVycm9yKFwiQ291bGRuJ3QgZ2V0IHRoZSBsYXN0IGluc2VydGVkIElEXCIpXG5cbiAgICByZXR1cm4gbGFzdEluc2VydElEXG4gIH1cblxuICAvKiogQHJldHVybnMge09wdGlvbnN9IC0gUmVzdWx0LiAgKi9cbiAgb3B0aW9ucygpIHtcbiAgICBpZiAoIXRoaXMuX29wdGlvbnMpIHRoaXMuX29wdGlvbnMgPSBuZXcgT3B0aW9ucyh7ZHJpdmVyOiB0aGlzfSlcblxuICAgIHJldHVybiB0aGlzLl9vcHRpb25zXG4gIH1cblxuICBhc3luYyBfc3RhcnRUcmFuc2FjdGlvbkFjdGlvbigpIHtcbiAgICBpZiAoIXRoaXMuY29ubmVjdGlvbikgdGhyb3cgbmV3IEVycm9yKFwiTm8gY29ubmVjdGlvblwiKVxuICAgIGlmICh0aGlzLl9jdXJyZW50VHJhbnNhY3Rpb24pIHRocm93IG5ldyBFcnJvcihcIkEgdHJhbnNhY3Rpb24gaXMgYWxyZWFkeSBydW5uaW5nXCIpXG5cbiAgICB0aGlzLl9jdXJyZW50VHJhbnNhY3Rpb24gPSBuZXcgbXNzcWwuVHJhbnNhY3Rpb24odGhpcy5jb25uZWN0aW9uKVxuXG4gICAgYXdhaXQgdGhpcy5fY3VycmVudFRyYW5zYWN0aW9uLmJlZ2luKClcbiAgfVxuXG4gIGFzeW5jIF9jb21taXRUcmFuc2FjdGlvbkFjdGlvbigpIHtcbiAgICBpZiAoIXRoaXMuX2N1cnJlbnRUcmFuc2FjdGlvbikgdGhyb3cgbmV3IEVycm9yKFwiQSB0cmFuc2FjdGlvbiBpc24ndCBydW5uaW5nXCIpXG5cbiAgICBhd2FpdCB0aGlzLl9jdXJyZW50VHJhbnNhY3Rpb24uY29tbWl0KClcbiAgICB0aGlzLl9jdXJyZW50VHJhbnNhY3Rpb24gPSBudWxsXG4gIH1cblxuICBhc3luYyBfcm9sbGJhY2tUcmFuc2FjdGlvbkFjdGlvbigpIHtcbiAgICBpZiAoIXRoaXMuX2N1cnJlbnRUcmFuc2FjdGlvbikgdGhyb3cgbmV3IEVycm9yKFwiQSB0cmFuc2FjdGlvbiBpc24ndCBydW5uaW5nXCIpXG5cbiAgICBhd2FpdCB0aGlzLl9jdXJyZW50VHJhbnNhY3Rpb24ucm9sbGJhY2soKVxuXG4gICAgdGhpcy5fY3VycmVudFRyYW5zYWN0aW9uID0gbnVsbFxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzYXZlUG9pbnROYW1lXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fSAtIFJlc3VsdC5cbiAgICovXG4gIGFzeW5jIF9zdGFydFNhdmVQb2ludEFjdGlvbihzYXZlUG9pbnROYW1lKSB7XG4gICAgYXdhaXQgdGhpcy5xdWVyeShgU0FWRSBUUkFOU0FDVElPTiBbJHtzYXZlUG9pbnROYW1lfV1gKVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzYXZlUG9pbnROYW1lXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fSAtIFJlc3VsdC5cbiAgICovXG4gIGFzeW5jIF9yZWxlYXNlU2F2ZVBvaW50QWN0aW9uKHNhdmVQb2ludE5hbWUpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICAgIC8vIERvIG5vdGhpbmcgaW4gTVMtU1FMLlxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzYXZlUG9pbnROYW1lXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fSAtIFJlc3VsdC5cbiAgICovXG4gIGFzeW5jIF9yb2xsYmFja1NhdmVQb2ludEFjdGlvbihzYXZlUG9pbnROYW1lKSB7XG4gICAgYXdhaXQgdGhpcy5xdWVyeShgUk9MTEJBQ0sgVFJBTlNBQ1RJT04gWyR7c2F2ZVBvaW50TmFtZX1dYClcbiAgfVxuXG4gIGdlbmVyYXRlU2F2ZVBvaW50TmFtZSgpIHtcbiAgICByZXR1cm4gYHNwJHtuZXcgVVVJRCg0KS5mb3JtYXQoKS5yZXBsYWNlQWxsKFwiLVwiLCBcIlwiKX1gLnN1YnN0cmluZygwLCAzMilcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uL2Jhc2UuanNcIikuVXBkYXRlU3FsQXJnc1R5cGV9IGFyZ3NcbiAgICogQHJldHVybnMge3N0cmluZ30gLSBSZXN1bHQuXG4gICAqL1xuICB1cGRhdGVTcWwoe2NvbmRpdGlvbnMsIGRhdGEsIHRhYmxlTmFtZX0pIHtcbiAgICBjb25zdCB1cGRhdGUgPSBuZXcgVXBkYXRlKHtjb25kaXRpb25zLCBkYXRhLCBkcml2ZXI6IHRoaXMsIHRhYmxlTmFtZX0pXG5cbiAgICByZXR1cm4gdXBkYXRlLnRvU3FsKClcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxzdHJpbmcgfCBudWxsPn0gLSBSZXN1bHQuXG4gICAqL1xuICBhc3luYyBzdHJ1Y3R1cmVTcWwoKSB7XG4gICAgcmV0dXJuIGF3YWl0IG5ldyBTdHJ1Y3R1cmVTcWwoe2RyaXZlcjogdGhpc30pLnRvU3FsKClcbiAgfVxufVxuIl19
317
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvZGF0YWJhc2UvZHJpdmVycy9tc3NxbC9pbmRleC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVosT0FBTyxVQUFVLE1BQU0sc0JBQXNCLENBQUE7QUFDN0MsT0FBTyxJQUFJLE1BQU0sWUFBWSxDQUFBO0FBQzdCLE9BQU8sY0FBYyxNQUFNLDBCQUEwQixDQUFBO0FBQ3JELE9BQU8sV0FBVyxNQUFNLHVCQUF1QixDQUFBO0FBQy9DLE9BQU8sV0FBVyxNQUFNLHVCQUF1QixDQUFBO0FBQy9DLE9BQU8sTUFBTSxNQUFNLGlCQUFpQixDQUFBO0FBQ3BDLE9BQU8sU0FBUyxNQUFNLHFCQUFxQixDQUFBO0FBQzNDLE9BQU8sRUFBQyxJQUFJLEVBQUMsTUFBTSxXQUFXLENBQUE7QUFDOUIsT0FBTyxZQUFZLE1BQU0sbUJBQW1CLENBQUE7QUFDNUMsT0FBTyxNQUFNLE1BQU0saUJBQWlCLENBQUE7QUFDcEMsT0FBTyxPQUFPLE1BQU0sY0FBYyxDQUFBO0FBQ2xDLE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQTtBQUN6QixPQUFPLFdBQVcsTUFBTSxtQkFBbUIsQ0FBQTtBQUMzQyxPQUFPLEtBQUssTUFBTSxZQUFZLENBQUE7QUFDOUIsT0FBTyxZQUFZLE1BQU0sb0JBQW9CLENBQUE7QUFDN0MsT0FBTyxNQUFNLE1BQU0saUJBQWlCLENBQUE7QUFDcEMsT0FBTyxJQUFJLE1BQU0sV0FBVyxDQUFBO0FBRTVCLE1BQU0sQ0FBQyxPQUFPLE9BQU8sNkJBQThCLFNBQVEsSUFBSTtJQUM3RCxLQUFLLENBQUMsT0FBTztRQUNYLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQTtRQUMzQixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxDQUFBO1FBRXpDLElBQUksQ0FBQztZQUNILElBQUksQ0FBQyxV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RUQ7OztPQUdHO0lBQ0gsU0FBUyxDQUFDLEVBQUMsVUFBVSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUM7UUFDckMsTUFBTSxNQUFNLEdBQUcsSUFBSSxNQUFNLENBQUMsRUFBQyxVQUFVLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFDLENBQUMsQ0FBQTtRQUV0RSxPQUFPLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQTtJQUN2QixDQUFDO0lBRUQ7O09BRUc7SUFDSCxLQUFLLENBQUMsWUFBWTtRQUNoQixPQUFPLE1BQU0sSUFBSSxZQUFZLENBQUMsRUFBQyxNQUFNLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQTtJQUN2RCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuaW1wb3J0IEFsdGVyVGFibGUgZnJvbSBcIi4vc3FsL2FsdGVyLXRhYmxlLmpzXCJcbmltcG9ydCBCYXNlIGZyb20gXCIuLi9iYXNlLmpzXCJcbmltcG9ydCBDcmVhdGVEYXRhYmFzZSBmcm9tIFwiLi9zcWwvY3JlYXRlLWRhdGFiYXNlLmpzXCJcbmltcG9ydCBDcmVhdGVJbmRleCBmcm9tIFwiLi9zcWwvY3JlYXRlLWluZGV4LmpzXCJcbmltcG9ydCBDcmVhdGVUYWJsZSBmcm9tIFwiLi9zcWwvY3JlYXRlLXRhYmxlLmpzXCJcbmltcG9ydCBEZWxldGUgZnJvbSBcIi4vc3FsL2RlbGV0ZS5qc1wiXG5pbXBvcnQgRHJvcFRhYmxlIGZyb20gXCIuL3NxbC9kcm9wLXRhYmxlLmpzXCJcbmltcG9ydCB7ZGlnZ30gZnJvbSBcImRpZ2dlcml6ZVwiXG5pbXBvcnQgZXNjYXBlU3RyaW5nIGZyb20gXCJzcWwtZXNjYXBlLXN0cmluZ1wiXG5pbXBvcnQgSW5zZXJ0IGZyb20gXCIuL3NxbC9pbnNlcnQuanNcIlxuaW1wb3J0IE9wdGlvbnMgZnJvbSBcIi4vb3B0aW9ucy5qc1wiXG5pbXBvcnQgbXNzcWwgZnJvbSBcIm1zc3FsXCJcbmltcG9ydCBRdWVyeVBhcnNlciBmcm9tIFwiLi9xdWVyeS1wYXJzZXIuanNcIlxuaW1wb3J0IFRhYmxlIGZyb20gXCIuL3RhYmxlLmpzXCJcbmltcG9ydCBTdHJ1Y3R1cmVTcWwgZnJvbSBcIi4vc3RydWN0dXJlLXNxbC5qc1wiXG5pbXBvcnQgVXBkYXRlIGZyb20gXCIuL3NxbC91cGRhdGUuanNcIlxuaW1wb3J0IFVVSUQgZnJvbSBcInB1cmUtdXVpZFwiXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFZlbG9jaW91c0RhdGFiYXNlRHJpdmVyc01zc3FsIGV4dGVuZHMgQmFzZXtcbiAgYXN5bmMgY29ubmVjdCgpIHtcbiAgICBjb25zdCBhcmdzID0gdGhpcy5nZXRBcmdzKClcbiAgICBjb25zdCBzcWxDb25maWcgPSBkaWdnKGFyZ3MsIFwic3FsQ29uZmlnXCIpXG5cbiAgICB0cnkge1xuICAgICAgdGhpcy5jb25uZWN0aW9uID0gbmV3IG1zc3FsLkNvbm5lY3Rpb25Qb29sKHNxbENvbmZpZylcbiAgICAgIGF3YWl0IHRoaXMuY29ubmVjdGlvbi5jb25uZWN0KClcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgLy8gUmUtdGhyb3cgdG8gZml4IHVudXNlYWJsZSBzdGFjayB0cmFjZS5cbiAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQ291bGRuJ3QgY29ubmVjdCB0byBkYXRhYmFzZTogJHtlcnJvci5tZXNzYWdlfWApXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkbid0IGNvbm5lY3QgdG8gZGF0YWJhc2U6ICR7ZXJyb3J9YClcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBhc3luYyBjbG9zZSgpIHtcbiAgICBhd2FpdCB0aGlzLmNvbm5lY3Rpb24/LmNsb3NlKClcbiAgICB0aGlzLmNvbm5lY3Rpb24gPSB1bmRlZmluZWRcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uLy4uL3RhYmxlLWRhdGEvaW5kZXguanNcIikuZGVmYXVsdH0gdGFibGVEYXRhIC0gVGFibGUgZGF0YS5cbiAgICogQHJldHVybnMge1Byb21pc2U8c3RyaW5nW10+fSAtIFJlc29sdmVzIHdpdGggU1FMIHN0YXRlbWVudHMuXG4gICAqL1xuICBhc3luYyBhbHRlclRhYmxlU1FMcyh0YWJsZURhdGEpIHtcbiAgICBjb25zdCBhbHRlckFyZ3MgPSB7dGFibGVEYXRhLCBkcml2ZXI6IHRoaXN9XG4gICAgY29uc3QgYWx0ZXJUYWJsZSA9IG5ldyBBbHRlclRhYmxlKGFsdGVyQXJncylcblxuICAgIHJldHVybiBhd2FpdCBhbHRlclRhYmxlLnRvU1FMcygpXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IGRhdGFiYXNlTmFtZSAtIERhdGFiYXNlIG5hbWUuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBbYXJnc10gLSBPcHRpb25zIG9iamVjdC5cbiAgICogQHBhcmFtIHtib29sZWFufSBbYXJncy5pZk5vdEV4aXN0c10gLSBXaGV0aGVyIGlmIG5vdCBleGlzdHMuXG4gICAqIEByZXR1cm5zIHtzdHJpbmdbXX0gLSBTUUwgc3RhdGVtZW50cy5cbiAgICovXG4gIGNyZWF0ZURhdGFiYXNlU3FsKGRhdGFiYXNlTmFtZSwgYXJncykge1xuICAgIGNvbnN0IGNyZWF0ZUFyZ3MgPSBPYmplY3QuYXNzaWduKHtkYXRhYmFzZU5hbWUsIGRyaXZlcjogdGhpc30sIGFyZ3MpXG4gICAgY29uc3QgY3JlYXRlRGF0YWJhc2UgPSBuZXcgQ3JlYXRlRGF0YWJhc2UoY3JlYXRlQXJncylcblxuICAgIHJldHVybiBjcmVhdGVEYXRhYmFzZS50b1NxbCgpXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuLi9iYXNlLmpzXCIpLkNyZWF0ZUluZGV4U3FsQXJnc30gaW5kZXhEYXRhIC0gSW5kZXggZGF0YS5cbiAgICogQHJldHVybnMge1Byb21pc2U8c3RyaW5nW10+fSAtIFJlc29sdmVzIHdpdGggU1FMIHN0YXRlbWVudHMuXG4gICAqL1xuICBhc3luYyBjcmVhdGVJbmRleFNRTHMoaW5kZXhEYXRhKSB7XG4gICAgY29uc3QgY3JlYXRlQXJncyA9IE9iamVjdC5hc3NpZ24oe2RyaXZlcjogdGhpc30sIGluZGV4RGF0YSlcbiAgICBjb25zdCBjcmVhdGVJbmRleCA9IG5ldyBDcmVhdGVJbmRleChjcmVhdGVBcmdzKVxuXG4gICAgcmV0dXJuIGF3YWl0IGNyZWF0ZUluZGV4LnRvU1FMcygpXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuLi8uLi90YWJsZS1kYXRhL2luZGV4LmpzXCIpLmRlZmF1bHR9IHRhYmxlRGF0YSAtIFRhYmxlIGRhdGEuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHN0cmluZ1tdPn0gLSBSZXNvbHZlcyB3aXRoIFNRTCBzdGF0ZW1lbnRzLlxuICAgKi9cbiAgYXN5bmMgY3JlYXRlVGFibGVTcWwodGFibGVEYXRhKSB7XG4gICAgY29uc3QgY3JlYXRlQXJncyA9IHt0YWJsZURhdGEsIGRyaXZlcjogdGhpcywgaW5kZXhJbkNyZWF0ZVRhYmxlOiBmYWxzZX1cbiAgICBjb25zdCBjcmVhdGVUYWJsZSA9IG5ldyBDcmVhdGVUYWJsZShjcmVhdGVBcmdzKVxuXG4gICAgcmV0dXJuIGF3YWl0IGNyZWF0ZVRhYmxlLnRvU3FsKClcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxzdHJpbmc+fSAtIFJlc29sdmVzIHdpdGggdGhlIGN1cnJlbnQgZGF0YWJhc2UuXG4gICAqL1xuICBhc3luYyBjdXJyZW50RGF0YWJhc2UoKSB7XG4gICAgY29uc3Qgcm93cyA9IGF3YWl0IHRoaXMucXVlcnkoXCJTRUxFQ1QgREJfTkFNRSgpIEFTIGRiX25hbWVcIilcblxuICAgIHJldHVybiBkaWdnKHJvd3MsIDAsIFwiZGJfbmFtZVwiKVxuICB9XG5cbiAgYXN5bmMgZGlzYWJsZUZvcmVpZ25LZXlzKCkge1xuICAgIGF3YWl0IHRoaXMucXVlcnkoXCJFWEVDIHNwX01TZm9yZWFjaHRhYmxlIFxcXCJBTFRFUiBUQUJMRSA/IE5PQ0hFQ0sgQ09OU1RSQUlOVCBhbGxcXFwiXCIpXG4gIH1cblxuICBhc3luYyBlbmFibGVGb3JlaWduS2V5cygpIHtcbiAgICBhd2FpdCB0aGlzLnF1ZXJ5KFwiRVhFQyBzcF9NU2ZvcmVhY2h0YWJsZSBAY29tbWFuZDE9XFxcInByaW50ICc/J1xcXCIsIEBjb21tYW5kMj1cXFwiQUxURVIgVEFCTEUgPyBXSVRIIENIRUNLIENIRUNLIENPTlNUUkFJTlQgYWxsXFxcIlwiKVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0YWJsZU5hbWUgLSBUYWJsZSBuYW1lLlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uL2Jhc2UuanNcIikuRHJvcFRhYmxlU3FsQXJnc1R5cGV9IFthcmdzXSAtIE9wdGlvbnMgb2JqZWN0LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxzdHJpbmdbXT59IC0gUmVzb2x2ZXMgd2l0aCBTUUwgc3RhdGVtZW50cy5cbiAgICovXG4gIGFzeW5jIGRyb3BUYWJsZVNRTHModGFibGVOYW1lLCBhcmdzID0ge30pIHtcbiAgICBjb25zdCBkcm9wQXJncyA9IE9iamVjdC5hc3NpZ24oe3RhYmxlTmFtZSwgZHJpdmVyOiB0aGlzfSwgYXJncylcbiAgICBjb25zdCBkcm9wVGFibGUgPSBuZXcgRHJvcFRhYmxlKGRyb3BBcmdzKVxuXG4gICAgcmV0dXJuIGF3YWl0IGRyb3BUYWJsZS50b1NRTHMoKVxuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IC0gVGhlIHR5cGUuXG4gICAqL1xuICBnZXRUeXBlKCkgeyByZXR1cm4gXCJtc3NxbFwiIH1cblxuICAvKipcbiAgICogQHJldHVybnMge3N0cmluZ30gLSBUaGUgcHJpbWFyeSBrZXkgdHlwZS5cbiAgICovXG4gIHByaW1hcnlLZXlUeXBlKCkgeyByZXR1cm4gXCJiaWdpbnRcIiB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzcWwgLSBTUUwgc3RyaW5nLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxpbXBvcnQoXCIuLi9iYXNlLmpzXCIpLlF1ZXJ5UmVzdWx0VHlwZT59IC0gUmVzb2x2ZXMgd2l0aCB0aGUgcXVlcnkgYWN0dWFsLlxuICAgKi9cbiAgYXN5bmMgX3F1ZXJ5QWN0dWFsKHNxbCkge1xuICAgIGxldCByZXN1bHRcbiAgICBsZXQgcmVxdWVzdCwgdHJpZXMgPSAwXG5cbiAgICBpZiAodGhpcy5fY3VycmVudFRyYW5zYWN0aW9uKSB7XG4gICAgICByZXF1ZXN0ID0gbmV3IG1zc3FsLlJlcXVlc3QodGhpcy5fY3VycmVudFRyYW5zYWN0aW9uKVxuICAgIH0gZWxzZSB7XG4gICAgICByZXF1ZXN0ID0gbmV3IG1zc3FsLlJlcXVlc3QodGhpcy5jb25uZWN0aW9uKVxuICAgIH1cblxuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICB0cmllcysrXG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJlc3VsdCA9IGF3YWl0IHJlcXVlc3QucXVlcnkoc3FsKVxuICAgICAgICBicmVha1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IgJiYgZXJyb3IubWVzc2FnZSA9PSBcIk5vIGNvbm5lY3Rpb24gaXMgc3BlY2lmaWVkIGZvciB0aGF0IHJlcXVlc3QuXCIgJiYgdHJpZXMgPD0gMykge1xuICAgICAgICAgIHRoaXMubG9nZ2VyLndhcm4oXCJSZWNvbm5lY3RpbmcgdG8gZGF0YWJhc2VcIilcbiAgICAgICAgICBhd2FpdCB0aGlzLmNvbm5lY3QoKVxuICAgICAgICAgIC8vIFJldHJ5XG4gICAgICAgIH0gZWxzZSBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgIC8vIFJlLXRocm93IGVycm9yIGJlY2F1c2UgdGhlIHN0YWNrLXRyYWNlIGlzIGJyb2tlbiBhbmQgY2FuJ3QgYmUgdXNlZCBmb3IgYXBwLWRldmVsb3BtZW50LlxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgUXVlcnkgZmFpbGVkICcke2Vycm9yLm1lc3NhZ2V9JzogJHtzcWx9YClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFF1ZXJ5IGZhaWxlZCAnJHtlcnJvcn0nOiAke3NxbH1gKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdC5yZWNvcmRzZXRzWzBdXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuLi8uLi9xdWVyeS9pbmRleC5qc1wiKS5kZWZhdWx0fSBxdWVyeSAtIFF1ZXJ5IGluc3RhbmNlLlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSAtIFNRTCBzdHJpbmcuXG4gICAqL1xuICBxdWVyeVRvU3FsKHF1ZXJ5KSB7IHJldHVybiBuZXcgUXVlcnlQYXJzZXIoe3F1ZXJ5fSkudG9TcWwoKSB9XG5cbiAgc2hvdWxkU2V0QXV0b0luY3JlbWVudFdoZW5QcmltYXJ5S2V5KCkgeyByZXR1cm4gdHJ1ZSB9XG4gIHN1cHBvcnRzRGVmYXVsdFByaW1hcnlLZXlVVUlEKCkgeyByZXR1cm4gdHJ1ZSB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7dW5rbm93bn0gdmFsdWUgLSBWYWx1ZSB0byB1c2UuXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IC0gVGhlIGVzY2FwZS5cbiAgICovXG4gIGVzY2FwZSh2YWx1ZSkge1xuICAgIHZhbHVlID0gdGhpcy5fY29udmVydFZhbHVlKHZhbHVlKVxuXG4gICAgY29uc3QgdHlwZSA9IHR5cGVvZiB2YWx1ZVxuXG4gICAgaWYgKHR5cGUgIT0gXCJzdHJpbmdcIikgdmFsdWUgPSBgJHt2YWx1ZX1gXG5cbiAgICBjb25zdCByZXN1bHRXaXRoUXVvdGVzID0gZXNjYXBlU3RyaW5nKHZhbHVlLCBudWxsKVxuICAgIGNvbnN0IHJlc3VsdCA9IHJlc3VsdFdpdGhRdW90ZXMuc3Vic3RyaW5nKDEsIHJlc3VsdFdpdGhRdW90ZXMubGVuZ3RoIC0gMSlcblxuICAgIHJldHVybiByZXN1bHRcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3Vua25vd259IHZhbHVlIC0gVmFsdWUgdG8gdXNlLlxuICAgKiBAcmV0dXJucyB7c3RyaW5nIHwgbnVtYmVyfSAtIFRoZSBxdW90ZWQgdmFsdWUuXG4gICAqL1xuICBxdW90ZSh2YWx1ZSkge1xuICAgIHZhbHVlID0gdGhpcy5fY29udmVydFZhbHVlKHZhbHVlKVxuXG4gICAgY29uc3QgdHlwZSA9IHR5cGVvZiB2YWx1ZVxuXG4gICAgaWYgKHR5cGUgPT0gXCJudW1iZXJcIikgcmV0dXJuIC8qKiBAdHlwZSB7bnVtYmVyfSAqLyAodmFsdWUpXG4gICAgaWYgKHR5cGUgIT0gXCJzdHJpbmdcIikgdmFsdWUgPSBTdHJpbmcodmFsdWUpXG5cbiAgICByZXR1cm4gZXNjYXBlU3RyaW5nKHZhbHVlLCBudWxsKVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjb2x1bW5OYW1lIC0gQ29sdW1uIG5hbWUuXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IC0gVGhlIHF1b3RlIGNvbHVtbi5cbiAgICovXG4gIHF1b3RlQ29sdW1uKGNvbHVtbk5hbWUpIHsgcmV0dXJuIHRoaXMub3B0aW9ucygpLnF1b3RlQ29sdW1uTmFtZShjb2x1bW5OYW1lKSB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmcgLSBTdHJpbmcuXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IC0gVGhlIHF1b3RlIHRhYmxlLlxuICAgKi9cbiAgcXVvdGVUYWJsZShzdHJpbmcpIHsgcmV0dXJuIHRoaXMub3B0aW9ucygpLnF1b3RlVGFibGVOYW1lKHN0cmluZykgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGFibGVOYW1lIC0gVGFibGUgbmFtZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IG9sZENvbHVtbk5hbWUgLSBQcmV2aW91cyBjb2x1bW4gbmFtZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IG5ld0NvbHVtbk5hbWUgLSBOZXcgY29sdW1uIG5hbWUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fSAtIFJlc29sdmVzIHdoZW4gY29tcGxldGUuXG4gICAqL1xuICBhc3luYyByZW5hbWVDb2x1bW4odGFibGVOYW1lLCBvbGRDb2x1bW5OYW1lLCBuZXdDb2x1bW5OYW1lKSB7XG4gICAgYXdhaXQgdGhpcy5xdWVyeShgRVhFQyBzcF9yZW5hbWUgJHt0aGlzLnF1b3RlKGAke3RhYmxlTmFtZX0uJHtvbGRDb2x1bW5OYW1lfWApfSwgJHt0aGlzLnF1b3RlKG5ld0NvbHVtbk5hbWUpfSwgJ0NPTFVNTidgKVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vYmFzZS5qc1wiKS5EZWxldGVTcWxBcmdzVHlwZX0gYXJncyAtIE9wdGlvbnMgb2JqZWN0LlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSAtIFNRTCBzdHJpbmcuXG4gICAqL1xuICBkZWxldGVTcWwoe3RhYmxlTmFtZSwgY29uZGl0aW9uc30pIHtcbiAgICBjb25zdCBkZWxldGVJbnN0cnVjdGlvbiA9IG5ldyBEZWxldGUoe2NvbmRpdGlvbnMsIGRyaXZlcjogdGhpcywgdGFibGVOYW1lfSlcblxuICAgIHJldHVybiBkZWxldGVJbnN0cnVjdGlvbi50b1NxbCgpXG4gIH1cblxuICAvKipcbiAgICogQGFic3RyYWN0XG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vYmFzZS5qc1wiKS5JbnNlcnRTcWxBcmdzVHlwZX0gYXJncyAtIE9wdGlvbnMgb2JqZWN0LlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSAtIFNRTCBzdHJpbmcuXG4gICAqL1xuICBpbnNlcnRTcWwoYXJncykge1xuICAgIGNvbnN0IGluc2VydEFyZ3MgPSBPYmplY3QuYXNzaWduKHtkcml2ZXI6IHRoaXN9LCBhcmdzKVxuICAgIGNvbnN0IGluc2VydCA9IG5ldyBJbnNlcnQoaW5zZXJ0QXJncylcblxuICAgIHJldHVybiBpbnNlcnQudG9TcWwoKVxuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPEFycmF5PGltcG9ydChcIi4uL2Jhc2UtdGFibGUuanNcIikuZGVmYXVsdD4+fSAtIFJlc29sdmVzIHdpdGggdGhlIHRhYmxlcy5cbiAgICovXG4gIGFzeW5jIGdldFRhYmxlcygpIHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnF1ZXJ5KGBTRUxFQ1QgW1RBQkxFX05BTUVdIEZST00gW0lORk9STUFUSU9OX1NDSEVNQV0uW1RBQkxFU10gV0hFUkUgW1RBQkxFX0NBVEFMT0ddID0gREJfTkFNRSgpIEFORCBbVEFCTEVfU0NIRU1BXSA9ICdkYm8nYClcbiAgICBjb25zdCB0YWJsZXMgPSBbXVxuXG4gICAgZm9yIChjb25zdCByb3cgb2YgcmVzdWx0KSB7XG4gICAgICBjb25zdCB0YWJsZSA9IG5ldyBUYWJsZSh0aGlzLCAvKiogQHR5cGUge1JlY29yZDxzdHJpbmcsIHN0cmluZz59ICovIChyb3cpKVxuXG4gICAgICB0YWJsZXMucHVzaCh0YWJsZSlcbiAgICB9XG5cbiAgICByZXR1cm4gdGFibGVzXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBOYW1lLlxuICAgKiBAcGFyYW0ge29iamVjdH0gW2FyZ3NdIC0gT3B0aW9ucyBvYmplY3QuXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gYXJncy50aHJvd0Vycm9yIC0gV2hldGhlciB0aHJvdyBlcnJvci5cbiAgICogQHJldHVybnMge1Byb21pc2U8aW1wb3J0KFwiLi4vYmFzZS10YWJsZS5qc1wiKS5kZWZhdWx0IHwgdW5kZWZpbmVkPn0gLSBSZXNvbHZlcyB3aXRoIHRoZSB0YWJsZSBieSBuYW1lLlxuICAgKi9cbiAgYXN5bmMgZ2V0VGFibGVCeU5hbWUobmFtZSwgYXJncykge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMucXVlcnkoYFNFTEVDVCBbVEFCTEVfTkFNRV0gRlJPTSBbSU5GT1JNQVRJT05fU0NIRU1BXS5bVEFCTEVTXSBXSEVSRSBbVEFCTEVfQ0FUQUxPR10gPSBEQl9OQU1FKCkgQU5EIFtUQUJMRV9TQ0hFTUFdID0gJ2RibycgQU5EIFtUQUJMRV9OQU1FXSA9ICR7dGhpcy5xdW90ZShuYW1lKX1gKVxuXG4gICAgaWYgKHJlc3VsdFswXSkge1xuICAgICAgcmV0dXJuIG5ldyBUYWJsZSh0aGlzLCAvKiogQHR5cGUge1JlY29yZDxzdHJpbmcsIHN0cmluZz59ICovIChyZXN1bHRbMF0pKVxuICAgIH1cblxuICAgIGlmIChhcmdzPy50aHJvd0Vycm9yICE9PSBmYWxzZSkge1xuICAgICAgY29uc3QgdGFibGVzID0gYXdhaXQgdGhpcy5nZXRUYWJsZXMoKVxuICAgICAgY29uc3QgdGFibGVOYW1lcyA9IHRhYmxlcy5tYXAoKHRhYmxlKSA9PiB0YWJsZS5nZXROYW1lKCkpXG5cbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ291bGRuJ3QgZmluZCBhIHRhYmxlIGJ5IHRoYXQgbmFtZSBcIiR7bmFtZX1cIiBpbjogJHt0YWJsZU5hbWVzLmpvaW4oXCIsIFwiKX1gKVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGxhc3RJbnNlcnRJRCgpIHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnF1ZXJ5KFwiU0VMRUNUIFNDT1BFX0lERU5USVRZKCkgQVMgbGFzdF9pbnNlcnRfaWRcIilcbiAgICBjb25zdCBsYXN0SW5zZXJ0SUQgPSBkaWdnKHJlc3VsdCwgMCwgXCJsYXN0X2luc2VydF9pZFwiKVxuXG4gICAgaWYgKGxhc3RJbnNlcnRJRCA9PT0gbnVsbCkgdGhyb3cgbmV3IEVycm9yKFwiQ291bGRuJ3QgZ2V0IHRoZSBsYXN0IGluc2VydGVkIElEXCIpXG5cbiAgICByZXR1cm4gbGFzdEluc2VydElEXG4gIH1cblxuICAvKiogQHJldHVybnMge09wdGlvbnN9IC0gVGhlIG9wdGlvbnMgb3B0aW9ucy4gICovXG4gIG9wdGlvbnMoKSB7XG4gICAgaWYgKCF0aGlzLl9vcHRpb25zKSB0aGlzLl9vcHRpb25zID0gbmV3IE9wdGlvbnMoe2RyaXZlcjogdGhpc30pXG5cbiAgICByZXR1cm4gdGhpcy5fb3B0aW9uc1xuICB9XG5cbiAgYXN5bmMgX3N0YXJ0VHJhbnNhY3Rpb25BY3Rpb24oKSB7XG4gICAgaWYgKCF0aGlzLmNvbm5lY3Rpb24pIHRocm93IG5ldyBFcnJvcihcIk5vIGNvbm5lY3Rpb25cIilcbiAgICBpZiAodGhpcy5fY3VycmVudFRyYW5zYWN0aW9uKSB0aHJvdyBuZXcgRXJyb3IoXCJBIHRyYW5zYWN0aW9uIGlzIGFscmVhZHkgcnVubmluZ1wiKVxuXG4gICAgdGhpcy5fY3VycmVudFRyYW5zYWN0aW9uID0gbmV3IG1zc3FsLlRyYW5zYWN0aW9uKHRoaXMuY29ubmVjdGlvbilcblxuICAgIGF3YWl0IHRoaXMuX2N1cnJlbnRUcmFuc2FjdGlvbi5iZWdpbigpXG4gIH1cblxuICBhc3luYyBfY29tbWl0VHJhbnNhY3Rpb25BY3Rpb24oKSB7XG4gICAgaWYgKCF0aGlzLl9jdXJyZW50VHJhbnNhY3Rpb24pIHRocm93IG5ldyBFcnJvcihcIkEgdHJhbnNhY3Rpb24gaXNuJ3QgcnVubmluZ1wiKVxuXG4gICAgYXdhaXQgdGhpcy5fY3VycmVudFRyYW5zYWN0aW9uLmNvbW1pdCgpXG4gICAgdGhpcy5fY3VycmVudFRyYW5zYWN0aW9uID0gbnVsbFxuICB9XG5cbiAgYXN5bmMgX3JvbGxiYWNrVHJhbnNhY3Rpb25BY3Rpb24oKSB7XG4gICAgaWYgKCF0aGlzLl9jdXJyZW50VHJhbnNhY3Rpb24pIHRocm93IG5ldyBFcnJvcihcIkEgdHJhbnNhY3Rpb24gaXNuJ3QgcnVubmluZ1wiKVxuXG4gICAgYXdhaXQgdGhpcy5fY3VycmVudFRyYW5zYWN0aW9uLnJvbGxiYWNrKClcblxuICAgIHRoaXMuX2N1cnJlbnRUcmFuc2FjdGlvbiA9IG51bGxcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc2F2ZVBvaW50TmFtZSAtIFNhdmUgcG9pbnQgbmFtZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59IC0gUmVzb2x2ZXMgd2hlbiBjb21wbGV0ZS5cbiAgICovXG4gIGFzeW5jIF9zdGFydFNhdmVQb2ludEFjdGlvbihzYXZlUG9pbnROYW1lKSB7XG4gICAgYXdhaXQgdGhpcy5xdWVyeShgU0FWRSBUUkFOU0FDVElPTiBbJHtzYXZlUG9pbnROYW1lfV1gKVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzYXZlUG9pbnROYW1lIC0gU2F2ZSBwb2ludCBuYW1lLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gLSBSZXNvbHZlcyB3aGVuIGNvbXBsZXRlLlxuICAgKi9cbiAgYXN5bmMgX3JlbGVhc2VTYXZlUG9pbnRBY3Rpb24oc2F2ZVBvaW50TmFtZSkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgLy8gRG8gbm90aGluZyBpbiBNUy1TUUwuXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IHNhdmVQb2ludE5hbWUgLSBTYXZlIHBvaW50IG5hbWUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fSAtIFJlc29sdmVzIHdoZW4gY29tcGxldGUuXG4gICAqL1xuICBhc3luYyBfcm9sbGJhY2tTYXZlUG9pbnRBY3Rpb24oc2F2ZVBvaW50TmFtZSkge1xuICAgIGF3YWl0IHRoaXMucXVlcnkoYFJPTExCQUNLIFRSQU5TQUNUSU9OIFske3NhdmVQb2ludE5hbWV9XWApXG4gIH1cblxuICBnZW5lcmF0ZVNhdmVQb2ludE5hbWUoKSB7XG4gICAgcmV0dXJuIGBzcCR7bmV3IFVVSUQoNCkuZm9ybWF0KCkucmVwbGFjZUFsbChcIi1cIiwgXCJcIil9YC5zdWJzdHJpbmcoMCwgMzIpXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuLi9iYXNlLmpzXCIpLlVwZGF0ZVNxbEFyZ3NUeXBlfSBhcmdzIC0gT3B0aW9ucyBvYmplY3QuXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IC0gU1FMIHN0cmluZy5cbiAgICovXG4gIHVwZGF0ZVNxbCh7Y29uZGl0aW9ucywgZGF0YSwgdGFibGVOYW1lfSkge1xuICAgIGNvbnN0IHVwZGF0ZSA9IG5ldyBVcGRhdGUoe2NvbmRpdGlvbnMsIGRhdGEsIGRyaXZlcjogdGhpcywgdGFibGVOYW1lfSlcblxuICAgIHJldHVybiB1cGRhdGUudG9TcWwoKVxuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHN0cmluZyB8IG51bGw+fSAtIFJlc29sdmVzIHdpdGggU1FMIHN0cmluZy5cbiAgICovXG4gIGFzeW5jIHN0cnVjdHVyZVNxbCgpIHtcbiAgICByZXR1cm4gYXdhaXQgbmV3IFN0cnVjdHVyZVNxbCh7ZHJpdmVyOiB0aGlzfSkudG9TcWwoKVxuICB9XG59XG4iXX0=
@@ -1,7 +1,7 @@
1
1
  export default class VelociousDatabaseDriversMssqlOptions extends QueryParserOptions {
2
2
  /**
3
- * @param {object} args
4
- * @param {import("../base.js").default} args.driver
3
+ * @param {object} args - Options object.
4
+ * @param {import("../base.js").default} args.driver - Database driver instance.
5
5
  */
6
6
  constructor({ driver }: {
7
7
  driver: import("../base.js").default;
@@ -2,8 +2,8 @@
2
2
  import QueryParserOptions from "../../query-parser/options.js";
3
3
  export default class VelociousDatabaseDriversMssqlOptions extends QueryParserOptions {
4
4
  /**
5
- * @param {object} args
6
- * @param {import("../base.js").default} args.driver
5
+ * @param {object} args - Options object.
6
+ * @param {import("../base.js").default} args.driver - Database driver instance.
7
7
  */
8
8
  constructor({ driver }) {
9
9
  const options = {
@@ -16,8 +16,8 @@ export default class VelociousDatabaseDriversMssqlOptions extends QueryParserOpt
16
16
  super(options);
17
17
  }
18
18
  /**
19
- * @param {any} string
20
- * @returns {number | string} - Result.
19
+ * @param {unknown} string - String.
20
+ * @returns {number | string} - The quote.
21
21
  */
22
22
  quote(string) {
23
23
  if (!this.driver)
@@ -25,8 +25,8 @@ export default class VelociousDatabaseDriversMssqlOptions extends QueryParserOpt
25
25
  return this.driver.quote(string);
26
26
  }
27
27
  /**
28
- * @param {string} string
29
- * @returns {string} - Result.
28
+ * @param {string} string - String.
29
+ * @returns {string} - The quote column name.
30
30
  */
31
31
  quoteColumnName(string) {
32
32
  if (string.includes("[") || string.includes("]"))
@@ -34,8 +34,8 @@ export default class VelociousDatabaseDriversMssqlOptions extends QueryParserOpt
34
34
  return `[${string}]`;
35
35
  }
36
36
  /**
37
- * @param {string} databaseName
38
- * @returns {string} - Result.
37
+ * @param {string} databaseName - Database name.
38
+ * @returns {string} - The quote database name.
39
39
  */
40
40
  quoteDatabaseName(databaseName) {
41
41
  if (typeof databaseName != "string")
@@ -45,8 +45,8 @@ export default class VelociousDatabaseDriversMssqlOptions extends QueryParserOpt
45
45
  return `[${databaseName}]`;
46
46
  }
47
47
  /**
48
- * @param {string} string
49
- * @returns {string} - Result.
48
+ * @param {string} string - String.
49
+ * @returns {string} - The quote index name.
50
50
  */
51
51
  quoteIndexName(string) {
52
52
  if (string.includes("[") || string.includes("]"))
@@ -54,8 +54,8 @@ export default class VelociousDatabaseDriversMssqlOptions extends QueryParserOpt
54
54
  return `[${string}]`;
55
55
  }
56
56
  /**
57
- * @param {string} string
58
- * @returns {string} - Result.
57
+ * @param {string} string - String.
58
+ * @returns {string} - The quote table name.
59
59
  */
60
60
  quoteTableName(string) {
61
61
  if (string.includes("[") || string.includes("]"))
@@ -63,4 +63,4 @@ export default class VelociousDatabaseDriversMssqlOptions extends QueryParserOpt
63
63
  return `[${string}]`;
64
64
  }
65
65
  }
66
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3B0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9kYXRhYmFzZS9kcml2ZXJzL21zc3FsL29wdGlvbnMuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaLE9BQU8sa0JBQWtCLE1BQU0sK0JBQStCLENBQUE7QUFFOUQsTUFBTSxDQUFDLE9BQU8sT0FBTyxvQ0FBcUMsU0FBUSxrQkFBa0I7SUFDbEY7OztPQUdHO0lBQ0gsWUFBWSxFQUFDLE1BQU0sRUFBQztRQUNsQixNQUFNLE9BQU8sR0FBRztZQUNkLE1BQU07WUFDTixXQUFXLEVBQUUsSUFBSTtZQUNqQixVQUFVLEVBQUUsSUFBSTtZQUNoQixXQUFXLEVBQUUsR0FBRztZQUNoQixVQUFVLEVBQUUsSUFBSTtTQUNqQixDQUFBO1FBRUQsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFBO0lBQ2hCLENBQUM7SUFFRDs7O09BR0c7SUFDSCxLQUFLLENBQUMsTUFBTTtRQUNWLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTTtZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsZ0JBQWdCLENBQUMsQ0FBQTtRQUVuRCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFBO0lBQ2xDLENBQUM7SUFFRDs7O09BR0c7SUFDSCxlQUFlLENBQUMsTUFBTTtRQUNwQixJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUM7WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLDBDQUEwQyxNQUFNLEVBQUUsQ0FBQyxDQUFBO1FBRXJILE9BQU8sSUFBSSxNQUFNLEdBQUcsQ0FBQTtJQUN0QixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsaUJBQWlCLENBQUMsWUFBWTtRQUM1QixJQUFJLE9BQU8sWUFBWSxJQUFJLFFBQVE7WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLGdDQUFnQyxZQUFZLEVBQUUsQ0FBQyxDQUFBO1FBQ3BHLElBQUksWUFBWSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxZQUFZLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQztZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsNENBQTRDLFlBQVksRUFBRSxDQUFDLENBQUE7UUFFekksT0FBTyxJQUFJLFlBQVksR0FBRyxDQUFBO0lBQzVCLENBQUM7SUFFRDs7O09BR0c7SUFDSCxjQUFjLENBQUMsTUFBTTtRQUNuQixJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUM7WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLHlDQUF5QyxNQUFNLEVBQUUsQ0FBQyxDQUFBO1FBRXBILE9BQU8sSUFBSSxNQUFNLEdBQUcsQ0FBQTtJQUN0QixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsY0FBYyxDQUFDLE1BQU07UUFDbkIsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyx5Q0FBeUMsTUFBTSxFQUFFLENBQUMsQ0FBQTtRQUVwSCxPQUFPLElBQUksTUFBTSxHQUFHLENBQUE7SUFDdEIsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbmltcG9ydCBRdWVyeVBhcnNlck9wdGlvbnMgZnJvbSBcIi4uLy4uL3F1ZXJ5LXBhcnNlci9vcHRpb25zLmpzXCJcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVmVsb2Npb3VzRGF0YWJhc2VEcml2ZXJzTXNzcWxPcHRpb25zIGV4dGVuZHMgUXVlcnlQYXJzZXJPcHRpb25zIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vYmFzZS5qc1wiKS5kZWZhdWx0fSBhcmdzLmRyaXZlclxuICAgKi9cbiAgY29uc3RydWN0b3Ioe2RyaXZlcn0pIHtcbiAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgZHJpdmVyLFxuICAgICAgY29sdW1uUXVvdGU6IFwiXFxcIlwiLFxuICAgICAgaW5kZXhRdW90ZTogXCJcXFwiXCIsXG4gICAgICBzdHJpbmdRdW90ZTogXCInXCIsXG4gICAgICB0YWJsZVF1b3RlOiBcIlxcXCJcIlxuICAgIH1cblxuICAgIHN1cGVyKG9wdGlvbnMpXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHthbnl9IHN0cmluZ1xuICAgKiBAcmV0dXJucyB7bnVtYmVyIHwgc3RyaW5nfSAtIFJlc3VsdC5cbiAgICovXG4gIHF1b3RlKHN0cmluZykge1xuICAgIGlmICghdGhpcy5kcml2ZXIpIHRocm93IG5ldyBFcnJvcihcIkRyaXZlciBub3Qgc2V0XCIpXG5cbiAgICByZXR1cm4gdGhpcy5kcml2ZXIucXVvdGUoc3RyaW5nKVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmdcbiAgICogQHJldHVybnMge3N0cmluZ30gLSBSZXN1bHQuXG4gICAqL1xuICBxdW90ZUNvbHVtbk5hbWUoc3RyaW5nKSB7XG4gICAgaWYgKHN0cmluZy5pbmNsdWRlcyhcIltcIikgfHwgc3RyaW5nLmluY2x1ZGVzKFwiXVwiKSkgdGhyb3cgbmV3IEVycm9yKGBQb3NzaWJsZSBTUUwgaW5qZWN0aW9uIGluIGNvbHVtbiBuYW1lOiAke3N0cmluZ31gKVxuXG4gICAgcmV0dXJuIGBbJHtzdHJpbmd9XWBcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZGF0YWJhc2VOYW1lXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IC0gUmVzdWx0LlxuICAgKi9cbiAgcXVvdGVEYXRhYmFzZU5hbWUoZGF0YWJhc2VOYW1lKSB7XG4gICAgaWYgKHR5cGVvZiBkYXRhYmFzZU5hbWUgIT0gXCJzdHJpbmdcIikgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGRhdGFiYXNlIG5hbWUgZ2l2ZW46ICR7ZGF0YWJhc2VOYW1lfWApXG4gICAgaWYgKGRhdGFiYXNlTmFtZS5pbmNsdWRlcyhcIltcIikgfHwgZGF0YWJhc2VOYW1lLmluY2x1ZGVzKFwiXVwiKSkgdGhyb3cgbmV3IEVycm9yKGBQb3NzaWJsZSBTUUwgaW5qZWN0aW9uIGluIGRhdGFiYXNlIG5hbWU6ICR7ZGF0YWJhc2VOYW1lfWApXG5cbiAgICByZXR1cm4gYFske2RhdGFiYXNlTmFtZX1dYFxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmdcbiAgICogQHJldHVybnMge3N0cmluZ30gLSBSZXN1bHQuXG4gICAqL1xuICBxdW90ZUluZGV4TmFtZShzdHJpbmcpIHtcbiAgICBpZiAoc3RyaW5nLmluY2x1ZGVzKFwiW1wiKSB8fCBzdHJpbmcuaW5jbHVkZXMoXCJdXCIpKSB0aHJvdyBuZXcgRXJyb3IoYFBvc3NpYmxlIFNRTCBpbmplY3Rpb24gaW4gaW5kZXggbmFtZTogJHtzdHJpbmd9YClcblxuICAgIHJldHVybiBgWyR7c3RyaW5nfV1gXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZ1xuICAgKiBAcmV0dXJucyB7c3RyaW5nfSAtIFJlc3VsdC5cbiAgICovXG4gIHF1b3RlVGFibGVOYW1lKHN0cmluZykge1xuICAgIGlmIChzdHJpbmcuaW5jbHVkZXMoXCJbXCIpIHx8IHN0cmluZy5pbmNsdWRlcyhcIl1cIikpIHRocm93IG5ldyBFcnJvcihgUG9zc2libGUgU1FMIGluamVjdGlvbiBpbiB0YWJsZSBuYW1lOiAke3N0cmluZ31gKVxuXG4gICAgcmV0dXJuIGBbJHtzdHJpbmd9XWBcbiAgfVxufVxuIl19
66
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3B0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9kYXRhYmFzZS9kcml2ZXJzL21zc3FsL29wdGlvbnMuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaLE9BQU8sa0JBQWtCLE1BQU0sK0JBQStCLENBQUE7QUFFOUQsTUFBTSxDQUFDLE9BQU8sT0FBTyxvQ0FBcUMsU0FBUSxrQkFBa0I7SUFDbEY7OztPQUdHO0lBQ0gsWUFBWSxFQUFDLE1BQU0sRUFBQztRQUNsQixNQUFNLE9BQU8sR0FBRztZQUNkLE1BQU07WUFDTixXQUFXLEVBQUUsSUFBSTtZQUNqQixVQUFVLEVBQUUsSUFBSTtZQUNoQixXQUFXLEVBQUUsR0FBRztZQUNoQixVQUFVLEVBQUUsSUFBSTtTQUNqQixDQUFBO1FBRUQsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFBO0lBQ2hCLENBQUM7SUFFRDs7O09BR0c7SUFDSCxLQUFLLENBQUMsTUFBTTtRQUNWLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTTtZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsZ0JBQWdCLENBQUMsQ0FBQTtRQUVuRCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFBO0lBQ2xDLENBQUM7SUFFRDs7O09BR0c7SUFDSCxlQUFlLENBQUMsTUFBTTtRQUNwQixJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUM7WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLDBDQUEwQyxNQUFNLEVBQUUsQ0FBQyxDQUFBO1FBRXJILE9BQU8sSUFBSSxNQUFNLEdBQUcsQ0FBQTtJQUN0QixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsaUJBQWlCLENBQUMsWUFBWTtRQUM1QixJQUFJLE9BQU8sWUFBWSxJQUFJLFFBQVE7WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLGdDQUFnQyxZQUFZLEVBQUUsQ0FBQyxDQUFBO1FBQ3BHLElBQUksWUFBWSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxZQUFZLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQztZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsNENBQTRDLFlBQVksRUFBRSxDQUFDLENBQUE7UUFFekksT0FBTyxJQUFJLFlBQVksR0FBRyxDQUFBO0lBQzVCLENBQUM7SUFFRDs7O09BR0c7SUFDSCxjQUFjLENBQUMsTUFBTTtRQUNuQixJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUM7WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLHlDQUF5QyxNQUFNLEVBQUUsQ0FBQyxDQUFBO1FBRXBILE9BQU8sSUFBSSxNQUFNLEdBQUcsQ0FBQTtJQUN0QixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsY0FBYyxDQUFDLE1BQU07UUFDbkIsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyx5Q0FBeUMsTUFBTSxFQUFFLENBQUMsQ0FBQTtRQUVwSCxPQUFPLElBQUksTUFBTSxHQUFHLENBQUE7SUFDdEIsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbmltcG9ydCBRdWVyeVBhcnNlck9wdGlvbnMgZnJvbSBcIi4uLy4uL3F1ZXJ5LXBhcnNlci9vcHRpb25zLmpzXCJcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVmVsb2Npb3VzRGF0YWJhc2VEcml2ZXJzTXNzcWxPcHRpb25zIGV4dGVuZHMgUXVlcnlQYXJzZXJPcHRpb25zIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gT3B0aW9ucyBvYmplY3QuXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vYmFzZS5qc1wiKS5kZWZhdWx0fSBhcmdzLmRyaXZlciAtIERhdGFiYXNlIGRyaXZlciBpbnN0YW5jZS5cbiAgICovXG4gIGNvbnN0cnVjdG9yKHtkcml2ZXJ9KSB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgIGRyaXZlcixcbiAgICAgIGNvbHVtblF1b3RlOiBcIlxcXCJcIixcbiAgICAgIGluZGV4UXVvdGU6IFwiXFxcIlwiLFxuICAgICAgc3RyaW5nUXVvdGU6IFwiJ1wiLFxuICAgICAgdGFibGVRdW90ZTogXCJcXFwiXCJcbiAgICB9XG5cbiAgICBzdXBlcihvcHRpb25zKVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7dW5rbm93bn0gc3RyaW5nIC0gU3RyaW5nLlxuICAgKiBAcmV0dXJucyB7bnVtYmVyIHwgc3RyaW5nfSAtIFRoZSBxdW90ZS5cbiAgICovXG4gIHF1b3RlKHN0cmluZykge1xuICAgIGlmICghdGhpcy5kcml2ZXIpIHRocm93IG5ldyBFcnJvcihcIkRyaXZlciBub3Qgc2V0XCIpXG5cbiAgICByZXR1cm4gdGhpcy5kcml2ZXIucXVvdGUoc3RyaW5nKVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmcgLSBTdHJpbmcuXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IC0gVGhlIHF1b3RlIGNvbHVtbiBuYW1lLlxuICAgKi9cbiAgcXVvdGVDb2x1bW5OYW1lKHN0cmluZykge1xuICAgIGlmIChzdHJpbmcuaW5jbHVkZXMoXCJbXCIpIHx8IHN0cmluZy5pbmNsdWRlcyhcIl1cIikpIHRocm93IG5ldyBFcnJvcihgUG9zc2libGUgU1FMIGluamVjdGlvbiBpbiBjb2x1bW4gbmFtZTogJHtzdHJpbmd9YClcblxuICAgIHJldHVybiBgWyR7c3RyaW5nfV1gXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IGRhdGFiYXNlTmFtZSAtIERhdGFiYXNlIG5hbWUuXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IC0gVGhlIHF1b3RlIGRhdGFiYXNlIG5hbWUuXG4gICAqL1xuICBxdW90ZURhdGFiYXNlTmFtZShkYXRhYmFzZU5hbWUpIHtcbiAgICBpZiAodHlwZW9mIGRhdGFiYXNlTmFtZSAhPSBcInN0cmluZ1wiKSB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgZGF0YWJhc2UgbmFtZSBnaXZlbjogJHtkYXRhYmFzZU5hbWV9YClcbiAgICBpZiAoZGF0YWJhc2VOYW1lLmluY2x1ZGVzKFwiW1wiKSB8fCBkYXRhYmFzZU5hbWUuaW5jbHVkZXMoXCJdXCIpKSB0aHJvdyBuZXcgRXJyb3IoYFBvc3NpYmxlIFNRTCBpbmplY3Rpb24gaW4gZGF0YWJhc2UgbmFtZTogJHtkYXRhYmFzZU5hbWV9YClcblxuICAgIHJldHVybiBgWyR7ZGF0YWJhc2VOYW1lfV1gXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyAtIFN0cmluZy5cbiAgICogQHJldHVybnMge3N0cmluZ30gLSBUaGUgcXVvdGUgaW5kZXggbmFtZS5cbiAgICovXG4gIHF1b3RlSW5kZXhOYW1lKHN0cmluZykge1xuICAgIGlmIChzdHJpbmcuaW5jbHVkZXMoXCJbXCIpIHx8IHN0cmluZy5pbmNsdWRlcyhcIl1cIikpIHRocm93IG5ldyBFcnJvcihgUG9zc2libGUgU1FMIGluamVjdGlvbiBpbiBpbmRleCBuYW1lOiAke3N0cmluZ31gKVxuXG4gICAgcmV0dXJuIGBbJHtzdHJpbmd9XWBcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nIC0gU3RyaW5nLlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSAtIFRoZSBxdW90ZSB0YWJsZSBuYW1lLlxuICAgKi9cbiAgcXVvdGVUYWJsZU5hbWUoc3RyaW5nKSB7XG4gICAgaWYgKHN0cmluZy5pbmNsdWRlcyhcIltcIikgfHwgc3RyaW5nLmluY2x1ZGVzKFwiXVwiKSkgdGhyb3cgbmV3IEVycm9yKGBQb3NzaWJsZSBTUUwgaW5qZWN0aW9uIGluIHRhYmxlIG5hbWU6ICR7c3RyaW5nfWApXG5cbiAgICByZXR1cm4gYFske3N0cmluZ31dYFxuICB9XG59XG4iXX0=