@firestitch/common 8.0.10 → 8.0.13

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 (303) hide show
  1. package/app/directives/autofocus.directive.d.ts +6 -6
  2. package/app/directives/prevent-default.directive.d.ts +3 -3
  3. package/app/directives/stop-propagation.directive.d.ts +3 -3
  4. package/app/fs-common.module.d.ts +4 -4
  5. package/app/pipes/bytes.pipe.d.ts +4 -4
  6. package/app/pipes/currency.pipe.d.ts +6 -6
  7. package/app/pipes/number.pipe.d.ts +4 -4
  8. package/app/pipes/ordinal-number.pipe.d.ts +4 -4
  9. package/app/pipes/truncate.pipe.d.ts +5 -5
  10. package/app/pipes/util.pipe.d.ts +15 -15
  11. package/app/services/array.service.d.ts +58 -58
  12. package/app/services/math.service.d.ts +6 -6
  13. package/app/services/util.service.d.ts +86 -86
  14. package/app/services/vaildate.service.d.ts +13 -13
  15. package/bundles/firestitch-common.umd.js +3144 -3143
  16. package/bundles/firestitch-common.umd.js.map +1 -1
  17. package/bundles/firestitch-common.umd.min.js +1 -1
  18. package/bundles/firestitch-common.umd.min.js.map +1 -1
  19. package/esm2015/app/directives/autofocus.directive.js +41 -41
  20. package/esm2015/app/directives/prevent-default.directive.js +23 -23
  21. package/esm2015/app/directives/stop-propagation.directive.js +23 -23
  22. package/esm2015/app/fs-common.module.js +72 -72
  23. package/esm2015/app/pipes/bytes.pipe.js +21 -21
  24. package/esm2015/app/pipes/currency.pipe.js +37 -37
  25. package/esm2015/app/pipes/number.pipe.js +22 -22
  26. package/esm2015/app/pipes/ordinal-number.pipe.js +21 -21
  27. package/esm2015/app/pipes/truncate.pipe.js +27 -27
  28. package/esm2015/app/pipes/util.pipe.js +70 -70
  29. package/esm2015/app/services/array.service.js +351 -351
  30. package/esm2015/app/services/math.service.js +28 -28
  31. package/esm2015/app/services/util.service.js +429 -429
  32. package/esm2015/app/services/vaildate.service.js +47 -47
  33. package/esm2015/firestitch-common.js +18 -18
  34. package/esm2015/libs/array/compare/compare.js +18 -18
  35. package/esm2015/libs/array/compare/index.js +6 -6
  36. package/esm2015/libs/array/filter/filter.js +52 -52
  37. package/esm2015/libs/array/filter/index.js +6 -6
  38. package/esm2015/libs/array/find/find.js +16 -16
  39. package/esm2015/libs/array/find/index.js +6 -6
  40. package/esm2015/libs/array/inArray/inArray.js +21 -21
  41. package/esm2015/libs/array/inArray/index.js +6 -6
  42. package/esm2015/libs/array/index/index.js +24 -24
  43. package/esm2015/libs/array/index.js +18 -18
  44. package/esm2015/libs/array/indexOf/index.js +6 -6
  45. package/esm2015/libs/array/indexOf/indexOf.js +30 -30
  46. package/esm2015/libs/array/keyExists/index.js +6 -6
  47. package/esm2015/libs/array/keyExists/keyExists.js +13 -13
  48. package/esm2015/libs/array/ksort/index.js +6 -6
  49. package/esm2015/libs/array/ksort/ksort.js +21 -21
  50. package/esm2015/libs/array/list/index.js +6 -6
  51. package/esm2015/libs/array/list/list.js +29 -29
  52. package/esm2015/libs/array/nameValue/index.js +6 -6
  53. package/esm2015/libs/array/nameValue/nameValue.js +51 -51
  54. package/esm2015/libs/array/remove/index.js +6 -6
  55. package/esm2015/libs/array/remove/remove.js +19 -19
  56. package/esm2015/libs/array/rsort/index.js +6 -6
  57. package/esm2015/libs/array/rsort/rsort.js +14 -14
  58. package/esm2015/libs/array/sort/index.js +6 -6
  59. package/esm2015/libs/array/sort/sort.js +43 -43
  60. package/esm2015/libs/format/acronym/acronym.js +33 -33
  61. package/esm2015/libs/format/acronym/index.js +6 -6
  62. package/esm2015/libs/format/bytes/bytes.js +22 -22
  63. package/esm2015/libs/format/bytes/index.js +6 -6
  64. package/esm2015/libs/format/currency/currency.js +19 -19
  65. package/esm2015/libs/format/currency/index.js +6 -6
  66. package/esm2015/libs/format/index.js +10 -10
  67. package/esm2015/libs/format/number/index.js +6 -6
  68. package/esm2015/libs/format/number/number.js +13 -13
  69. package/esm2015/libs/format/truncate/index.js +6 -6
  70. package/esm2015/libs/format/truncate/truncate.js +24 -24
  71. package/esm2015/libs/index.js +10 -10
  72. package/esm2015/libs/rxjs/delayedRetry.js +57 -57
  73. package/esm2015/libs/util/boolean/boolean.js +13 -13
  74. package/esm2015/libs/util/boolean/index.js +6 -6
  75. package/esm2015/libs/util/debounce/debounce.js +39 -39
  76. package/esm2015/libs/util/debounce/index.js +6 -6
  77. package/esm2015/libs/util/get-normalized-path/get-normalized-path.js +15 -15
  78. package/esm2015/libs/util/get-normalized-path/index.js +6 -6
  79. package/esm2015/libs/util/guid/guid.js +35 -35
  80. package/esm2015/libs/util/guid/index.js +6 -6
  81. package/esm2015/libs/util/index.js +22 -22
  82. package/esm2015/libs/util/isClass/index.js +6 -6
  83. package/esm2015/libs/util/isClass/isClass.js +27 -27
  84. package/esm2015/libs/util/isEmpty/index.js +6 -6
  85. package/esm2015/libs/util/isEmpty/isEmpty.js +22 -22
  86. package/esm2015/libs/util/isNumeric/index.js +6 -6
  87. package/esm2015/libs/util/isNumeric/isNumeric.js +15 -15
  88. package/esm2015/libs/util/keys/index.js +6 -6
  89. package/esm2015/libs/util/keys/keys.js +79 -79
  90. package/esm2015/libs/util/length/index.js +6 -6
  91. package/esm2015/libs/util/length/length.js +19 -19
  92. package/esm2015/libs/util/ordinal-number/ordinal-number.js +19 -19
  93. package/esm2015/libs/util/queue/index.js +7 -7
  94. package/esm2015/libs/util/queue/operation.js +31 -31
  95. package/esm2015/libs/util/queue/queue.enum.js +11 -11
  96. package/esm2015/libs/util/queue/queue.js +290 -290
  97. package/esm2015/libs/util/remove-query-params/index.js +6 -6
  98. package/esm2015/libs/util/remove-query-params/remove-query-params.js +12 -12
  99. package/esm2015/libs/util/resolve/index.js +6 -6
  100. package/esm2015/libs/util/resolve/resolve.js +32 -32
  101. package/esm2015/libs/util/stringify/index.js +6 -6
  102. package/esm2015/libs/util/stringify/stringify.js +12 -12
  103. package/esm2015/libs/util/throttle/index.js +6 -6
  104. package/esm2015/libs/util/throttle/throttle.js +29 -29
  105. package/esm2015/libs/util/uuid/index.js +6 -6
  106. package/esm2015/libs/util/uuid/uuid.js +12 -12
  107. package/esm2015/libs/util/value/index.js +6 -6
  108. package/esm2015/libs/util/value/value.js +19 -19
  109. package/esm2015/libs/validate/email/email.js +12 -12
  110. package/esm2015/libs/validate/email/index.js +6 -6
  111. package/esm2015/libs/validate/index.js +8 -8
  112. package/esm2015/libs/validate/phone/index.js +6 -6
  113. package/esm2015/libs/validate/phone/phone.js +14 -14
  114. package/esm2015/libs/validate/url/index.js +6 -6
  115. package/esm2015/libs/validate/url/url.js +23 -23
  116. package/esm2015/public_api.js +16 -16
  117. package/esm5/app/directives/autofocus.directive.js +44 -44
  118. package/esm5/app/directives/prevent-default.directive.js +31 -31
  119. package/esm5/app/directives/stop-propagation.directive.js +31 -31
  120. package/esm5/app/fs-common.module.js +79 -79
  121. package/esm5/app/pipes/bytes.pipe.js +29 -29
  122. package/esm5/app/pipes/currency.pipe.js +42 -42
  123. package/esm5/app/pipes/number.pipe.js +31 -31
  124. package/esm5/app/pipes/ordinal-number.pipe.js +29 -29
  125. package/esm5/app/pipes/truncate.pipe.js +37 -37
  126. package/esm5/app/pipes/util.pipe.js +99 -99
  127. package/esm5/app/services/array.service.js +490 -490
  128. package/esm5/app/services/math.service.js +41 -41
  129. package/esm5/app/services/util.service.js +607 -607
  130. package/esm5/app/services/vaildate.service.js +62 -62
  131. package/esm5/firestitch-common.js +18 -18
  132. package/esm5/libs/array/compare/compare.js +18 -18
  133. package/esm5/libs/array/compare/index.js +6 -6
  134. package/esm5/libs/array/filter/filter.js +52 -52
  135. package/esm5/libs/array/filter/index.js +6 -6
  136. package/esm5/libs/array/find/find.js +16 -16
  137. package/esm5/libs/array/find/index.js +6 -6
  138. package/esm5/libs/array/inArray/inArray.js +21 -21
  139. package/esm5/libs/array/inArray/index.js +6 -6
  140. package/esm5/libs/array/index/index.js +25 -24
  141. package/esm5/libs/array/index.js +18 -18
  142. package/esm5/libs/array/indexOf/index.js +6 -6
  143. package/esm5/libs/array/indexOf/indexOf.js +30 -30
  144. package/esm5/libs/array/keyExists/index.js +6 -6
  145. package/esm5/libs/array/keyExists/keyExists.js +13 -13
  146. package/esm5/libs/array/ksort/index.js +6 -6
  147. package/esm5/libs/array/ksort/ksort.js +21 -21
  148. package/esm5/libs/array/list/index.js +6 -6
  149. package/esm5/libs/array/list/list.js +30 -30
  150. package/esm5/libs/array/nameValue/index.js +6 -6
  151. package/esm5/libs/array/nameValue/nameValue.js +51 -51
  152. package/esm5/libs/array/remove/index.js +6 -6
  153. package/esm5/libs/array/remove/remove.js +19 -19
  154. package/esm5/libs/array/rsort/index.js +6 -6
  155. package/esm5/libs/array/rsort/rsort.js +14 -14
  156. package/esm5/libs/array/sort/index.js +6 -6
  157. package/esm5/libs/array/sort/sort.js +44 -44
  158. package/esm5/libs/format/acronym/acronym.js +34 -34
  159. package/esm5/libs/format/acronym/index.js +6 -6
  160. package/esm5/libs/format/bytes/bytes.js +22 -22
  161. package/esm5/libs/format/bytes/index.js +6 -6
  162. package/esm5/libs/format/currency/currency.js +22 -22
  163. package/esm5/libs/format/currency/index.js +6 -6
  164. package/esm5/libs/format/index.js +10 -10
  165. package/esm5/libs/format/number/index.js +6 -6
  166. package/esm5/libs/format/number/number.js +13 -13
  167. package/esm5/libs/format/truncate/index.js +6 -6
  168. package/esm5/libs/format/truncate/truncate.js +27 -27
  169. package/esm5/libs/index.js +10 -10
  170. package/esm5/libs/rxjs/delayedRetry.js +64 -64
  171. package/esm5/libs/util/boolean/boolean.js +13 -13
  172. package/esm5/libs/util/boolean/index.js +6 -6
  173. package/esm5/libs/util/debounce/debounce.js +39 -39
  174. package/esm5/libs/util/debounce/index.js +6 -6
  175. package/esm5/libs/util/get-normalized-path/get-normalized-path.js +15 -15
  176. package/esm5/libs/util/get-normalized-path/index.js +6 -6
  177. package/esm5/libs/util/guid/guid.js +36 -36
  178. package/esm5/libs/util/guid/index.js +6 -6
  179. package/esm5/libs/util/index.js +22 -22
  180. package/esm5/libs/util/isClass/index.js +6 -6
  181. package/esm5/libs/util/isClass/isClass.js +27 -27
  182. package/esm5/libs/util/isEmpty/index.js +6 -6
  183. package/esm5/libs/util/isEmpty/isEmpty.js +22 -22
  184. package/esm5/libs/util/isNumeric/index.js +6 -6
  185. package/esm5/libs/util/isNumeric/isNumeric.js +15 -15
  186. package/esm5/libs/util/keys/index.js +6 -6
  187. package/esm5/libs/util/keys/keys.js +79 -79
  188. package/esm5/libs/util/length/index.js +6 -6
  189. package/esm5/libs/util/length/length.js +19 -19
  190. package/esm5/libs/util/ordinal-number/ordinal-number.js +21 -21
  191. package/esm5/libs/util/queue/index.js +7 -7
  192. package/esm5/libs/util/queue/operation.js +29 -29
  193. package/esm5/libs/util/queue/queue.enum.js +11 -11
  194. package/esm5/libs/util/queue/queue.js +366 -366
  195. package/esm5/libs/util/remove-query-params/index.js +6 -6
  196. package/esm5/libs/util/remove-query-params/remove-query-params.js +12 -12
  197. package/esm5/libs/util/resolve/index.js +6 -6
  198. package/esm5/libs/util/resolve/resolve.js +33 -33
  199. package/esm5/libs/util/stringify/index.js +6 -6
  200. package/esm5/libs/util/stringify/stringify.js +12 -12
  201. package/esm5/libs/util/throttle/index.js +6 -6
  202. package/esm5/libs/util/throttle/throttle.js +29 -29
  203. package/esm5/libs/util/uuid/index.js +6 -6
  204. package/esm5/libs/util/uuid/uuid.js +12 -12
  205. package/esm5/libs/util/value/index.js +6 -6
  206. package/esm5/libs/util/value/value.js +19 -19
  207. package/esm5/libs/validate/email/email.js +12 -12
  208. package/esm5/libs/validate/email/index.js +6 -6
  209. package/esm5/libs/validate/index.js +8 -8
  210. package/esm5/libs/validate/phone/index.js +6 -6
  211. package/esm5/libs/validate/phone/phone.js +14 -14
  212. package/esm5/libs/validate/url/index.js +6 -6
  213. package/esm5/libs/validate/url/url.js +23 -23
  214. package/esm5/public_api.js +16 -16
  215. package/fesm2015/firestitch-common.js +2641 -2641
  216. package/fesm2015/firestitch-common.js.map +1 -1
  217. package/fesm5/firestitch-common.js +3156 -3155
  218. package/fesm5/firestitch-common.js.map +1 -1
  219. package/firestitch-common.d.ts +13 -13
  220. package/libs/array/compare/compare.d.ts +1 -1
  221. package/libs/array/compare/index.d.ts +1 -1
  222. package/libs/array/filter/filter.d.ts +1 -1
  223. package/libs/array/filter/index.d.ts +1 -1
  224. package/libs/array/find/find.d.ts +1 -1
  225. package/libs/array/find/index.d.ts +1 -1
  226. package/libs/array/inArray/inArray.d.ts +1 -1
  227. package/libs/array/inArray/index.d.ts +1 -1
  228. package/libs/array/index/index.d.ts +1 -1
  229. package/libs/array/index.d.ts +13 -13
  230. package/libs/array/indexOf/index.d.ts +1 -1
  231. package/libs/array/indexOf/indexOf.d.ts +1 -1
  232. package/libs/array/keyExists/index.d.ts +1 -1
  233. package/libs/array/keyExists/keyExists.d.ts +1 -1
  234. package/libs/array/ksort/index.d.ts +1 -1
  235. package/libs/array/ksort/ksort.d.ts +1 -1
  236. package/libs/array/list/index.d.ts +1 -1
  237. package/libs/array/list/list.d.ts +1 -1
  238. package/libs/array/nameValue/index.d.ts +1 -1
  239. package/libs/array/nameValue/nameValue.d.ts +1 -1
  240. package/libs/array/remove/index.d.ts +1 -1
  241. package/libs/array/remove/remove.d.ts +1 -1
  242. package/libs/array/rsort/index.d.ts +1 -1
  243. package/libs/array/rsort/rsort.d.ts +1 -1
  244. package/libs/array/sort/index.d.ts +1 -1
  245. package/libs/array/sort/sort.d.ts +1 -1
  246. package/libs/format/acronym/acronym.d.ts +1 -1
  247. package/libs/format/acronym/index.d.ts +1 -1
  248. package/libs/format/bytes/bytes.d.ts +1 -1
  249. package/libs/format/bytes/index.d.ts +1 -1
  250. package/libs/format/currency/currency.d.ts +1 -1
  251. package/libs/format/currency/index.d.ts +1 -1
  252. package/libs/format/index.d.ts +5 -5
  253. package/libs/format/number/index.d.ts +1 -1
  254. package/libs/format/number/number.d.ts +1 -1
  255. package/libs/format/truncate/index.d.ts +1 -1
  256. package/libs/format/truncate/truncate.d.ts +1 -1
  257. package/libs/index.d.ts +5 -5
  258. package/libs/rxjs/delayedRetry.d.ts +2 -2
  259. package/libs/util/boolean/boolean.d.ts +1 -1
  260. package/libs/util/boolean/index.d.ts +1 -1
  261. package/libs/util/debounce/debounce.d.ts +1 -1
  262. package/libs/util/debounce/index.d.ts +1 -1
  263. package/libs/util/get-normalized-path/get-normalized-path.d.ts +2 -2
  264. package/libs/util/get-normalized-path/index.d.ts +1 -1
  265. package/libs/util/guid/guid.d.ts +1 -1
  266. package/libs/util/guid/index.d.ts +1 -1
  267. package/libs/util/index.d.ts +17 -17
  268. package/libs/util/isClass/index.d.ts +1 -1
  269. package/libs/util/isClass/isClass.d.ts +1 -1
  270. package/libs/util/isEmpty/index.d.ts +1 -1
  271. package/libs/util/isEmpty/isEmpty.d.ts +1 -1
  272. package/libs/util/isNumeric/index.d.ts +1 -1
  273. package/libs/util/isNumeric/isNumeric.d.ts +1 -1
  274. package/libs/util/keys/index.d.ts +1 -1
  275. package/libs/util/keys/keys.d.ts +37 -37
  276. package/libs/util/length/index.d.ts +1 -1
  277. package/libs/util/length/length.d.ts +1 -1
  278. package/libs/util/ordinal-number/ordinal-number.d.ts +1 -1
  279. package/libs/util/queue/index.d.ts +2 -2
  280. package/libs/util/queue/operation.d.ts +7 -7
  281. package/libs/util/queue/queue.d.ts +32 -32
  282. package/libs/util/queue/queue.enum.d.ts +4 -4
  283. package/libs/util/remove-query-params/index.d.ts +1 -1
  284. package/libs/util/remove-query-params/remove-query-params.d.ts +1 -1
  285. package/libs/util/resolve/index.d.ts +1 -1
  286. package/libs/util/resolve/resolve.d.ts +1 -1
  287. package/libs/util/stringify/index.d.ts +1 -1
  288. package/libs/util/stringify/stringify.d.ts +1 -1
  289. package/libs/util/throttle/index.d.ts +1 -1
  290. package/libs/util/throttle/throttle.d.ts +1 -1
  291. package/libs/util/uuid/index.d.ts +1 -1
  292. package/libs/util/uuid/uuid.d.ts +1 -1
  293. package/libs/util/value/index.d.ts +1 -1
  294. package/libs/util/value/value.d.ts +1 -1
  295. package/libs/validate/email/email.d.ts +1 -1
  296. package/libs/validate/email/index.d.ts +1 -1
  297. package/libs/validate/index.d.ts +3 -3
  298. package/libs/validate/phone/index.d.ts +1 -1
  299. package/libs/validate/phone/phone.d.ts +1 -1
  300. package/libs/validate/url/index.d.ts +1 -1
  301. package/libs/validate/url/url.d.ts +7 -7
  302. package/package.json +1 -1
  303. package/public_api.d.ts +6 -6
@@ -1,608 +1,608 @@
1
- /**
2
- * @fileoverview added by tsickle
3
- * Generated from: app/services/util.service.ts
4
- * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
5
- */
6
- import { Injectable } from '@angular/core';
7
- /** @type {?} */
8
- export var KEY_CANCEL = 3;
9
- /** @type {?} */
10
- export var KEY_HELP = 6;
11
- /** @type {?} */
12
- export var KEY_BACKSPACE = 8;
13
- /** @type {?} */
14
- export var KEY_TAB = 9;
15
- /** @type {?} */
16
- export var KEY_CLEAR = 12;
17
- /** @type {?} */
18
- export var KEY_RETURN = 13;
19
- /** @type {?} */
20
- export var KEY_ENTER = 14;
21
- /** @type {?} */
22
- export var KEY_SHIFT = 16;
23
- /** @type {?} */
24
- export var KEY_CONTROL = 17;
25
- /** @type {?} */
26
- export var KEY_ALT = 18;
27
- /** @type {?} */
28
- export var KEY_PAUSE = 19;
29
- /** @type {?} */
30
- export var KEY_CAPS_LOCK = 20;
31
- /** @type {?} */
32
- export var KEY_ESCAPE = 27;
33
- /** @type {?} */
34
- export var KEY_SPACE = 32;
35
- /** @type {?} */
36
- export var KEY_PAGE_UP = 33;
37
- /** @type {?} */
38
- export var KEY_PAGE_DOWN = 34;
39
- /** @type {?} */
40
- export var KEY_END = 35;
41
- /** @type {?} */
42
- export var KEY_HOME = 36;
43
- /** @type {?} */
44
- export var KEY_LEFT = 37;
45
- /** @type {?} */
46
- export var KEY_UP = 38;
47
- /** @type {?} */
48
- export var KEY_RIGHT = 39;
49
- /** @type {?} */
50
- export var KEY_DOWN = 40;
51
- /** @type {?} */
52
- export var KEY_PRINTSCREEN = 44;
53
- /** @type {?} */
54
- export var KEY_INSERT = 45;
55
- /** @type {?} */
56
- export var KEY_DELETE = 46;
57
- /** @type {?} */
58
- export var KEY_0 = 48;
59
- /** @type {?} */
60
- export var KEY_1 = 49;
61
- /** @type {?} */
62
- export var KEY_2 = 50;
63
- /** @type {?} */
64
- export var KEY_3 = 51;
65
- /** @type {?} */
66
- export var KEY_4 = 52;
67
- /** @type {?} */
68
- export var KEY_5 = 53;
69
- /** @type {?} */
70
- export var KEY_6 = 54;
71
- /** @type {?} */
72
- export var KEY_7 = 55;
73
- /** @type {?} */
74
- export var KEY_8 = 56;
75
- /** @type {?} */
76
- export var KEY_9 = 57;
77
- /** @type {?} */
78
- export var KEY_SEMICOLON = 59;
79
- /** @type {?} */
80
- export var KEY_EQUALS = 61;
81
- /*
82
- Basically, just copy-pasted functionality from fs-boilerplate v1.x, with some small changes (like we dont have angular.bind anymore, had to go with a workaround)
83
- There might be a better way to organise constatns but I need to know use-cases
84
- */
85
- var FsUtil = /** @class */ (function () {
86
- function FsUtil() {
87
- this.intervals = {};
88
- }
89
- /**
90
- * @deprecated use @firestitch/common/util/guid instead
91
- */
92
- /**
93
- * @deprecated use \@firestitch/common/util/guid instead
94
- * @param {?=} pattern
95
- * @return {?}
96
- */
97
- FsUtil.prototype.guid = /**
98
- * @deprecated use \@firestitch/common/util/guid instead
99
- * @param {?=} pattern
100
- * @return {?}
101
- */
102
- function (pattern) {
103
- console.warn('@deprecated use @firestitch/common/util/guid instead');
104
- pattern = pattern || 'xxxxxx';
105
- return pattern.replace(/[xy]/g, (/**
106
- * @param {?} c
107
- * @return {?}
108
- */
109
- function (c) {
110
- /** @type {?} */
111
- var r = Math.random() * 16 | 0;
112
- /** @type {?} */
113
- var v = c == 'x' ? r : (r & 0x3 | 0x8);
114
- return v.toString(16);
115
- }));
116
- };
117
- /**
118
- * @deprecated use import { uuid } from @firestitch/common/util; instead
119
- */
120
- /**
121
- * @deprecated use import { uuid } from \@firestitch/common/util; instead
122
- * @return {?}
123
- */
124
- FsUtil.prototype.uuid = /**
125
- * @deprecated use import { uuid } from \@firestitch/common/util; instead
126
- * @return {?}
127
- */
128
- function () {
129
- console.warn('@deprecated use @firestitch/common/util/uuid instead');
130
- return this.guid('xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx');
131
- };
132
- /**
133
- * @deprecated use import { resolve } from @firestitch/common/util; instead
134
- */
135
- /**
136
- * @deprecated use import { resolve } from \@firestitch/common/util; instead
137
- * @param {?} promise
138
- * @param {?=} defaults
139
- * @return {?}
140
- */
141
- FsUtil.prototype.resolve = /**
142
- * @deprecated use import { resolve } from \@firestitch/common/util; instead
143
- * @param {?} promise
144
- * @param {?=} defaults
145
- * @return {?}
146
- */
147
- function (promise, defaults) {
148
- if (defaults === void 0) { defaults = []; }
149
- console.warn('@deprecated use @firestitch/common/util/resolve instead');
150
- /** @type {?} */
151
- var result = defaults;
152
- return new Promise((/**
153
- * @param {?} resolve
154
- * @return {?}
155
- */
156
- function (resolve) {
157
- promise.then((/**
158
- * @param {?} data
159
- * @return {?}
160
- */
161
- function (data) {
162
- Object.keys(data).forEach((/**
163
- * @param {?} key
164
- * @return {?}
165
- */
166
- function (key) { return result[key] = data[key]; }));
167
- resolve(result);
168
- }));
169
- }));
170
- };
171
- /**
172
- * @deprecated use _.toInteger() instead
173
- */
174
- /**
175
- * @deprecated use _.toInteger() instead
176
- * @param {?} value
177
- * @return {?}
178
- */
179
- FsUtil.prototype.int = /**
180
- * @deprecated use _.toInteger() instead
181
- * @param {?} value
182
- * @return {?}
183
- */
184
- function (value) {
185
- console.warn('@deprecated use _.toInteger() instead');
186
- value = parseInt(value);
187
- if (isNaN(value)) {
188
- value = 0;
189
- }
190
- return value;
191
- };
192
- /**
193
- * @deprecated use _.toFinite() instead
194
- */
195
- /**
196
- * @deprecated use _.toFinite() instead
197
- * @param {?} value
198
- * @return {?}
199
- */
200
- FsUtil.prototype.float = /**
201
- * @deprecated use _.toFinite() instead
202
- * @param {?} value
203
- * @return {?}
204
- */
205
- function (value) {
206
- console.warn('@deprecated use _.toFinite() instead');
207
- value = parseFloat(value);
208
- if (isNaN(value)) {
209
- value = 0;
210
- }
211
- return value;
212
- };
213
- /**
214
- * @deprecated use _.toString() instead
215
- */
216
- /**
217
- * @deprecated use _.toString() instead
218
- * @param {?} string
219
- * @return {?}
220
- */
221
- FsUtil.prototype.string = /**
222
- * @deprecated use _.toString() instead
223
- * @param {?} string
224
- * @return {?}
225
- */
226
- function (string) {
227
- console.warn('@deprecated use _.toString() instead');
228
- if (string === null || string === undefined) {
229
- string = '';
230
- }
231
- return (string).toString();
232
- };
233
- /**
234
- * @deprecated use import { isEmpty } from @firestitch/common/util; instead
235
- */
236
- /**
237
- * @deprecated use import { isEmpty } from \@firestitch/common/util; instead
238
- * @param {?} value
239
- * @param {?=} options
240
- * @return {?}
241
- */
242
- FsUtil.prototype.isEmpty = /**
243
- * @deprecated use import { isEmpty } from \@firestitch/common/util; instead
244
- * @param {?} value
245
- * @param {?=} options
246
- * @return {?}
247
- */
248
- function (value, options) {
249
- console.warn('@deprecated use import { isEmpty } from @firestitch/common/util; instead');
250
- options = options || {};
251
- return value === undefined ||
252
- value === null ||
253
- value === false ||
254
- value === '' ||
255
- !this.string(value).length ||
256
- (this.isObject(value) &&
257
- (value.constructor.name === 'Object' && !Object.keys(value).length)) ||
258
- (!options.zero && (value === 0 || value === '0'));
259
- };
260
- /**
261
- * @deprecated use _.isInteger() instead
262
- */
263
- /**
264
- * @deprecated use _.isInteger() instead
265
- * @param {?} value
266
- * @param {?=} type
267
- * @return {?}
268
- */
269
- FsUtil.prototype.isInt = /**
270
- * @deprecated use _.isInteger() instead
271
- * @param {?} value
272
- * @param {?=} type
273
- * @return {?}
274
- */
275
- function (value, type) {
276
- console.warn('@deprecated use _.isInteger() instead');
277
- /** @type {?} */
278
- var int = !!this.string(value).match(/^\d+$/);
279
- if (!int) {
280
- return false;
281
- }
282
- if (type) {
283
- return Number.isInteger(value);
284
- }
285
- return true;
286
- };
287
- /**
288
- * @deprecated use _.each() instead {@link https://lodash.com/docs/4.17.5#forEach}
289
- */
290
- /**
291
- * @deprecated use _.each() instead {\@link https://lodash.com/docs/4.17.5#forEach}
292
- * @param {?} object
293
- * @param {?} func
294
- * @return {?}
295
- */
296
- FsUtil.prototype.each = /**
297
- * @deprecated use _.each() instead {\@link https://lodash.com/docs/4.17.5#forEach}
298
- * @param {?} object
299
- * @param {?} func
300
- * @return {?}
301
- */
302
- function (object, func) {
303
- console.warn('@deprecated use _.each() instead {@link https://lodash.com/docs/4.17.5#forEach}');
304
- if (!this.isArray(object) && !this.isObject(object)) {
305
- return;
306
- }
307
- Object.keys(object).forEach((/**
308
- * @param {?} key
309
- * @return {?}
310
- */
311
- function (key) {
312
- func(object[key], key);
313
- }));
314
- };
315
- /**
316
- * @deprecated use _.isArrayLikeObject() {@link https://lodash.com/docs/4.17.5#isArrayLikeObject}
317
- * or _.isObject() {@link https://lodash.com/docs/4.17.5#isObject} instead
318
- */
319
- /**
320
- * @deprecated use _.isArrayLikeObject() {\@link https://lodash.com/docs/4.17.5#isArrayLikeObject}
321
- * or _.isObject() {\@link https://lodash.com/docs/4.17.5#isObject} instead
322
- * @param {?} value
323
- * @return {?}
324
- */
325
- FsUtil.prototype.isObject = /**
326
- * @deprecated use _.isArrayLikeObject() {\@link https://lodash.com/docs/4.17.5#isArrayLikeObject}
327
- * or _.isObject() {\@link https://lodash.com/docs/4.17.5#isObject} instead
328
- * @param {?} value
329
- * @return {?}
330
- */
331
- function (value) {
332
- console.warn('@deprecated use _.isArrayLikeObject() {@link https://lodash.com/docs/4.17.5#isArrayLikeObject} or _.isObject() {@link https://lodash.com/docs/4.17.5#isObject} instead');
333
- return value !== null && typeof value === 'object' && !this.isArray(value);
334
- };
335
- /**
336
- * @deprecated use _.isString() instead {@link https://lodash.com/docs/4.17.5#isString}
337
- */
338
- /**
339
- * @deprecated use _.isString() instead {\@link https://lodash.com/docs/4.17.5#isString}
340
- * @param {?} value
341
- * @return {?}
342
- */
343
- FsUtil.prototype.isString = /**
344
- * @deprecated use _.isString() instead {\@link https://lodash.com/docs/4.17.5#isString}
345
- * @param {?} value
346
- * @return {?}
347
- */
348
- function (value) {
349
- console.warn('@deprecated use _.isString() instead {@link https://lodash.com/docs/4.17.5#isString}');
350
- return typeof value === 'string' || value instanceof String;
351
- };
352
- /**
353
- * @deprecated use _.isArray() instead {@link https://lodash.com/docs/4.17.5#isArray}
354
- */
355
- /**
356
- * @deprecated use _.isArray() instead {\@link https://lodash.com/docs/4.17.5#isArray}
357
- * @param {?} value
358
- * @return {?}
359
- */
360
- FsUtil.prototype.isArray = /**
361
- * @deprecated use _.isArray() instead {\@link https://lodash.com/docs/4.17.5#isArray}
362
- * @param {?} value
363
- * @return {?}
364
- */
365
- function (value) {
366
- console.warn('@deprecated use _.isArray() instead {@link https://lodash.com/docs/4.17.5#isArray}');
367
- return value instanceof Array;
368
- };
369
- /**
370
- * @deprecated use import { isNumeric } from @firestitch/common/util; instead
371
- */
372
- /**
373
- * @deprecated use import { isNumeric } from \@firestitch/common/util; instead
374
- * @param {?} value
375
- * @return {?}
376
- */
377
- FsUtil.prototype.isNumeric = /**
378
- * @deprecated use import { isNumeric } from \@firestitch/common/util; instead
379
- * @param {?} value
380
- * @return {?}
381
- */
382
- function (value) {
383
- console.warn('@deprecated use import { isNumeric } from @firestitch/common/util; instead');
384
- return this.string(value).length && !!this.string(value).match(/^-?\d*\.?\d*$/);
385
- };
386
- /**
387
- * @deprecated use import { isClass } from @firestitch/common/util; instead
388
- */
389
- /**
390
- * @deprecated use import { isClass } from \@firestitch/common/util; instead
391
- * @param {?} value
392
- * @param {?} cls
393
- * @return {?}
394
- */
395
- FsUtil.prototype.isClass = /**
396
- * @deprecated use import { isClass } from \@firestitch/common/util; instead
397
- * @param {?} value
398
- * @param {?} cls
399
- * @return {?}
400
- */
401
- function (value, cls) {
402
- console.warn('@deprecated use import { isClass } from @firestitch/common/util; instead');
403
- if (this.isObject(value)) {
404
- if (this.isString(cls)) {
405
- if (value.constructor) {
406
- if (value.constructor.name === cls) {
407
- return true;
408
- }
409
- }
410
- }
411
- else {
412
- if (value instanceof cls) {
413
- return true;
414
- }
415
- }
416
- }
417
- return false;
418
- };
419
- /**
420
- * @deprecated use _.isBoolean() instead {@link https://lodash.com/docs/4.17.5#isBoolean}
421
- */
422
- /**
423
- * @deprecated use _.isBoolean() instead {\@link https://lodash.com/docs/4.17.5#isBoolean}
424
- * @param {?} value
425
- * @return {?}
426
- */
427
- FsUtil.prototype.isBoolean = /**
428
- * @deprecated use _.isBoolean() instead {\@link https://lodash.com/docs/4.17.5#isBoolean}
429
- * @param {?} value
430
- * @return {?}
431
- */
432
- function (value) {
433
- console.warn('@deprecated use _.isBoolean() instead {@link https://lodash.com/docs/4.17.5#isBoolean}');
434
- return value === true || value === false;
435
- };
436
- /**
437
- * @deprecated use import { value } from @firestitch/common/util; instead
438
- */
439
- /**
440
- * @deprecated use import { value } from \@firestitch/common/util; instead
441
- * @param {?} object
442
- * @param {?} key
443
- * @param {?} def
444
- * @return {?}
445
- */
446
- FsUtil.prototype.value = /**
447
- * @deprecated use import { value } from \@firestitch/common/util; instead
448
- * @param {?} object
449
- * @param {?} key
450
- * @param {?} def
451
- * @return {?}
452
- */
453
- function (object, key, def) {
454
- console.warn('@deprecated use import { value } from @firestitch/common/util; instead');
455
- if (this.isObject(object) || this.isArray(object)) {
456
- if (object.hasOwnProperty(key)) {
457
- return object[key];
458
- }
459
- }
460
- return def;
461
- };
462
- /**
463
- * @param {?} func
464
- * @param {?} wait
465
- * @return {?}
466
- */
467
- FsUtil.prototype.throttle = /**
468
- * @param {?} func
469
- * @param {?} wait
470
- * @return {?}
471
- */
472
- function (func, wait) {
473
- console.warn('@deprecated use import { throttle } from @firestitch/common/util; instead');
474
- /** @type {?} */
475
- var waiting = false;
476
- return (/**
477
- * @return {?}
478
- */
479
- function () {
480
- if (!waiting) { // If we're not waiting
481
- func.apply(null, arguments); // Execute users function
482
- waiting = true; // Prevent future invocations
483
- setTimeout((/**
484
- * @return {?}
485
- */
486
- function () {
487
- waiting = false; // And allow future invocations
488
- }), wait);
489
- }
490
- });
491
- };
492
- /**
493
- * @deprecated use import { debounce } from @firestitch/common/util; instead
494
- */
495
- /**
496
- * @deprecated use import { debounce } from \@firestitch/common/util; instead
497
- * @param {?} func
498
- * @param {?} wait
499
- * @param {?} immediate
500
- * @return {?}
501
- */
502
- FsUtil.prototype.debounce = /**
503
- * @deprecated use import { debounce } from \@firestitch/common/util; instead
504
- * @param {?} func
505
- * @param {?} wait
506
- * @param {?} immediate
507
- * @return {?}
508
- */
509
- function (func, wait, immediate) {
510
- console.warn('@deprecated use import { debounce } from @firestitch/common/util; instead');
511
- /** @type {?} */
512
- var timeout;
513
- return (/**
514
- * @return {?}
515
- */
516
- function () {
517
- /** @type {?} */
518
- var context = this;
519
- /** @type {?} */
520
- var args = arguments;
521
- /** @type {?} */
522
- var later = (/**
523
- * @return {?}
524
- */
525
- function () {
526
- timeout = null;
527
- if (!immediate)
528
- func.apply(context, args);
529
- });
530
- /** @type {?} */
531
- var callNow = immediate && !timeout;
532
- clearTimeout(timeout);
533
- timeout = setTimeout(later, wait);
534
- if (callNow)
535
- func.apply(context, args);
536
- });
537
- };
538
- /**
539
- * @deprecated use import { length } from @firestitch/common/util; instead
540
- */
541
- /**
542
- * @deprecated use import { length } from \@firestitch/common/util; instead
543
- * @param {?} object
544
- * @return {?}
545
- */
546
- FsUtil.prototype.length = /**
547
- * @deprecated use import { length } from \@firestitch/common/util; instead
548
- * @param {?} object
549
- * @return {?}
550
- */
551
- function (object) {
552
- console.warn('@deprecated use import { length } from @firestitch/common/util; instead');
553
- if (this.isObject(object)) {
554
- return Object.keys(object).length;
555
- }
556
- if (this.isArray(object)) {
557
- return object.length;
558
- }
559
- return 0;
560
- };
561
- /**
562
- * @deprecated use import { boolean } from @firestitch/common/util; instead
563
- */
564
- /**
565
- * @deprecated use import { boolean } from \@firestitch/common/util; instead
566
- * @param {?} value
567
- * @return {?}
568
- */
569
- FsUtil.prototype.boolean = /**
570
- * @deprecated use import { boolean } from \@firestitch/common/util; instead
571
- * @param {?} value
572
- * @return {?}
573
- */
574
- function (value) {
575
- console.warn('@deprecated use import { boolean } from @firestitch/common/util; instead');
576
- return this.string(value).toLowerCase() !== 'false' && !!value;
577
- };
578
- /**
579
- * @deprecated use import { stringify } from @firestitch/common/util; instead
580
- */
581
- /**
582
- * @deprecated use import { stringify } from \@firestitch/common/util; instead
583
- * @param {?} value
584
- * @return {?}
585
- */
586
- FsUtil.prototype.stringify = /**
587
- * @deprecated use import { stringify } from \@firestitch/common/util; instead
588
- * @param {?} value
589
- * @return {?}
590
- */
591
- function (value) {
592
- console.warn('@deprecated use import { stringify } from @firestitch/common/util; instead');
593
- return JSON.stringify(value);
594
- };
595
- FsUtil.decorators = [
596
- { type: Injectable }
597
- ];
598
- return FsUtil;
599
- }());
600
- export { FsUtil };
601
- if (false) {
602
- /**
603
- * @type {?}
604
- * @private
605
- */
606
- FsUtil.prototype.intervals;
607
- }
1
+ /**
2
+ * @fileoverview added by tsickle
3
+ * Generated from: app/services/util.service.ts
4
+ * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
5
+ */
6
+ import { Injectable } from '@angular/core';
7
+ /** @type {?} */
8
+ export var KEY_CANCEL = 3;
9
+ /** @type {?} */
10
+ export var KEY_HELP = 6;
11
+ /** @type {?} */
12
+ export var KEY_BACKSPACE = 8;
13
+ /** @type {?} */
14
+ export var KEY_TAB = 9;
15
+ /** @type {?} */
16
+ export var KEY_CLEAR = 12;
17
+ /** @type {?} */
18
+ export var KEY_RETURN = 13;
19
+ /** @type {?} */
20
+ export var KEY_ENTER = 14;
21
+ /** @type {?} */
22
+ export var KEY_SHIFT = 16;
23
+ /** @type {?} */
24
+ export var KEY_CONTROL = 17;
25
+ /** @type {?} */
26
+ export var KEY_ALT = 18;
27
+ /** @type {?} */
28
+ export var KEY_PAUSE = 19;
29
+ /** @type {?} */
30
+ export var KEY_CAPS_LOCK = 20;
31
+ /** @type {?} */
32
+ export var KEY_ESCAPE = 27;
33
+ /** @type {?} */
34
+ export var KEY_SPACE = 32;
35
+ /** @type {?} */
36
+ export var KEY_PAGE_UP = 33;
37
+ /** @type {?} */
38
+ export var KEY_PAGE_DOWN = 34;
39
+ /** @type {?} */
40
+ export var KEY_END = 35;
41
+ /** @type {?} */
42
+ export var KEY_HOME = 36;
43
+ /** @type {?} */
44
+ export var KEY_LEFT = 37;
45
+ /** @type {?} */
46
+ export var KEY_UP = 38;
47
+ /** @type {?} */
48
+ export var KEY_RIGHT = 39;
49
+ /** @type {?} */
50
+ export var KEY_DOWN = 40;
51
+ /** @type {?} */
52
+ export var KEY_PRINTSCREEN = 44;
53
+ /** @type {?} */
54
+ export var KEY_INSERT = 45;
55
+ /** @type {?} */
56
+ export var KEY_DELETE = 46;
57
+ /** @type {?} */
58
+ export var KEY_0 = 48;
59
+ /** @type {?} */
60
+ export var KEY_1 = 49;
61
+ /** @type {?} */
62
+ export var KEY_2 = 50;
63
+ /** @type {?} */
64
+ export var KEY_3 = 51;
65
+ /** @type {?} */
66
+ export var KEY_4 = 52;
67
+ /** @type {?} */
68
+ export var KEY_5 = 53;
69
+ /** @type {?} */
70
+ export var KEY_6 = 54;
71
+ /** @type {?} */
72
+ export var KEY_7 = 55;
73
+ /** @type {?} */
74
+ export var KEY_8 = 56;
75
+ /** @type {?} */
76
+ export var KEY_9 = 57;
77
+ /** @type {?} */
78
+ export var KEY_SEMICOLON = 59;
79
+ /** @type {?} */
80
+ export var KEY_EQUALS = 61;
81
+ /*
82
+ Basically, just copy-pasted functionality from fs-boilerplate v1.x, with some small changes (like we dont have angular.bind anymore, had to go with a workaround)
83
+ There might be a better way to organise constatns but I need to know use-cases
84
+ */
85
+ var FsUtil = /** @class */ (function () {
86
+ function FsUtil() {
87
+ this.intervals = {};
88
+ }
89
+ /**
90
+ * @deprecated use @firestitch/common/util/guid instead
91
+ */
92
+ /**
93
+ * @deprecated use \@firestitch/common/util/guid instead
94
+ * @param {?=} pattern
95
+ * @return {?}
96
+ */
97
+ FsUtil.prototype.guid = /**
98
+ * @deprecated use \@firestitch/common/util/guid instead
99
+ * @param {?=} pattern
100
+ * @return {?}
101
+ */
102
+ function (pattern) {
103
+ console.warn('@deprecated use @firestitch/common/util/guid instead');
104
+ pattern = pattern || 'xxxxxx';
105
+ return pattern.replace(/[xy]/g, (/**
106
+ * @param {?} c
107
+ * @return {?}
108
+ */
109
+ function (c) {
110
+ /** @type {?} */
111
+ var r = Math.random() * 16 | 0;
112
+ /** @type {?} */
113
+ var v = c == 'x' ? r : (r & 0x3 | 0x8);
114
+ return v.toString(16);
115
+ }));
116
+ };
117
+ /**
118
+ * @deprecated use import { uuid } from @firestitch/common/util; instead
119
+ */
120
+ /**
121
+ * @deprecated use import { uuid } from \@firestitch/common/util; instead
122
+ * @return {?}
123
+ */
124
+ FsUtil.prototype.uuid = /**
125
+ * @deprecated use import { uuid } from \@firestitch/common/util; instead
126
+ * @return {?}
127
+ */
128
+ function () {
129
+ console.warn('@deprecated use @firestitch/common/util/uuid instead');
130
+ return this.guid('xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx');
131
+ };
132
+ /**
133
+ * @deprecated use import { resolve } from @firestitch/common/util; instead
134
+ */
135
+ /**
136
+ * @deprecated use import { resolve } from \@firestitch/common/util; instead
137
+ * @param {?} promise
138
+ * @param {?=} defaults
139
+ * @return {?}
140
+ */
141
+ FsUtil.prototype.resolve = /**
142
+ * @deprecated use import { resolve } from \@firestitch/common/util; instead
143
+ * @param {?} promise
144
+ * @param {?=} defaults
145
+ * @return {?}
146
+ */
147
+ function (promise, defaults) {
148
+ if (defaults === void 0) { defaults = []; }
149
+ console.warn('@deprecated use @firestitch/common/util/resolve instead');
150
+ /** @type {?} */
151
+ var result = defaults;
152
+ return new Promise((/**
153
+ * @param {?} resolve
154
+ * @return {?}
155
+ */
156
+ function (resolve) {
157
+ promise.then((/**
158
+ * @param {?} data
159
+ * @return {?}
160
+ */
161
+ function (data) {
162
+ Object.keys(data).forEach((/**
163
+ * @param {?} key
164
+ * @return {?}
165
+ */
166
+ function (key) { return result[key] = data[key]; }));
167
+ resolve(result);
168
+ }));
169
+ }));
170
+ };
171
+ /**
172
+ * @deprecated use _.toInteger() instead
173
+ */
174
+ /**
175
+ * @deprecated use _.toInteger() instead
176
+ * @param {?} value
177
+ * @return {?}
178
+ */
179
+ FsUtil.prototype.int = /**
180
+ * @deprecated use _.toInteger() instead
181
+ * @param {?} value
182
+ * @return {?}
183
+ */
184
+ function (value) {
185
+ console.warn('@deprecated use _.toInteger() instead');
186
+ value = parseInt(value);
187
+ if (isNaN(value)) {
188
+ value = 0;
189
+ }
190
+ return value;
191
+ };
192
+ /**
193
+ * @deprecated use _.toFinite() instead
194
+ */
195
+ /**
196
+ * @deprecated use _.toFinite() instead
197
+ * @param {?} value
198
+ * @return {?}
199
+ */
200
+ FsUtil.prototype.float = /**
201
+ * @deprecated use _.toFinite() instead
202
+ * @param {?} value
203
+ * @return {?}
204
+ */
205
+ function (value) {
206
+ console.warn('@deprecated use _.toFinite() instead');
207
+ value = parseFloat(value);
208
+ if (isNaN(value)) {
209
+ value = 0;
210
+ }
211
+ return value;
212
+ };
213
+ /**
214
+ * @deprecated use _.toString() instead
215
+ */
216
+ /**
217
+ * @deprecated use _.toString() instead
218
+ * @param {?} string
219
+ * @return {?}
220
+ */
221
+ FsUtil.prototype.string = /**
222
+ * @deprecated use _.toString() instead
223
+ * @param {?} string
224
+ * @return {?}
225
+ */
226
+ function (string) {
227
+ console.warn('@deprecated use _.toString() instead');
228
+ if (string === null || string === undefined) {
229
+ string = '';
230
+ }
231
+ return (string).toString();
232
+ };
233
+ /**
234
+ * @deprecated use import { isEmpty } from @firestitch/common/util; instead
235
+ */
236
+ /**
237
+ * @deprecated use import { isEmpty } from \@firestitch/common/util; instead
238
+ * @param {?} value
239
+ * @param {?=} options
240
+ * @return {?}
241
+ */
242
+ FsUtil.prototype.isEmpty = /**
243
+ * @deprecated use import { isEmpty } from \@firestitch/common/util; instead
244
+ * @param {?} value
245
+ * @param {?=} options
246
+ * @return {?}
247
+ */
248
+ function (value, options) {
249
+ console.warn('@deprecated use import { isEmpty } from @firestitch/common/util; instead');
250
+ options = options || {};
251
+ return value === undefined ||
252
+ value === null ||
253
+ value === false ||
254
+ value === '' ||
255
+ !this.string(value).length ||
256
+ (this.isObject(value) &&
257
+ (value.constructor.name === 'Object' && !Object.keys(value).length)) ||
258
+ (!options.zero && (value === 0 || value === '0'));
259
+ };
260
+ /**
261
+ * @deprecated use _.isInteger() instead
262
+ */
263
+ /**
264
+ * @deprecated use _.isInteger() instead
265
+ * @param {?} value
266
+ * @param {?=} type
267
+ * @return {?}
268
+ */
269
+ FsUtil.prototype.isInt = /**
270
+ * @deprecated use _.isInteger() instead
271
+ * @param {?} value
272
+ * @param {?=} type
273
+ * @return {?}
274
+ */
275
+ function (value, type) {
276
+ console.warn('@deprecated use _.isInteger() instead');
277
+ /** @type {?} */
278
+ var int = !!this.string(value).match(/^\d+$/);
279
+ if (!int) {
280
+ return false;
281
+ }
282
+ if (type) {
283
+ return Number.isInteger(value);
284
+ }
285
+ return true;
286
+ };
287
+ /**
288
+ * @deprecated use _.each() instead {@link https://lodash.com/docs/4.17.5#forEach}
289
+ */
290
+ /**
291
+ * @deprecated use _.each() instead {\@link https://lodash.com/docs/4.17.5#forEach}
292
+ * @param {?} object
293
+ * @param {?} func
294
+ * @return {?}
295
+ */
296
+ FsUtil.prototype.each = /**
297
+ * @deprecated use _.each() instead {\@link https://lodash.com/docs/4.17.5#forEach}
298
+ * @param {?} object
299
+ * @param {?} func
300
+ * @return {?}
301
+ */
302
+ function (object, func) {
303
+ console.warn('@deprecated use _.each() instead {@link https://lodash.com/docs/4.17.5#forEach}');
304
+ if (!this.isArray(object) && !this.isObject(object)) {
305
+ return;
306
+ }
307
+ Object.keys(object).forEach((/**
308
+ * @param {?} key
309
+ * @return {?}
310
+ */
311
+ function (key) {
312
+ func(object[key], key);
313
+ }));
314
+ };
315
+ /**
316
+ * @deprecated use _.isArrayLikeObject() {@link https://lodash.com/docs/4.17.5#isArrayLikeObject}
317
+ * or _.isObject() {@link https://lodash.com/docs/4.17.5#isObject} instead
318
+ */
319
+ /**
320
+ * @deprecated use _.isArrayLikeObject() {\@link https://lodash.com/docs/4.17.5#isArrayLikeObject}
321
+ * or _.isObject() {\@link https://lodash.com/docs/4.17.5#isObject} instead
322
+ * @param {?} value
323
+ * @return {?}
324
+ */
325
+ FsUtil.prototype.isObject = /**
326
+ * @deprecated use _.isArrayLikeObject() {\@link https://lodash.com/docs/4.17.5#isArrayLikeObject}
327
+ * or _.isObject() {\@link https://lodash.com/docs/4.17.5#isObject} instead
328
+ * @param {?} value
329
+ * @return {?}
330
+ */
331
+ function (value) {
332
+ console.warn('@deprecated use _.isArrayLikeObject() {@link https://lodash.com/docs/4.17.5#isArrayLikeObject} or _.isObject() {@link https://lodash.com/docs/4.17.5#isObject} instead');
333
+ return value !== null && typeof value === 'object' && !this.isArray(value);
334
+ };
335
+ /**
336
+ * @deprecated use _.isString() instead {@link https://lodash.com/docs/4.17.5#isString}
337
+ */
338
+ /**
339
+ * @deprecated use _.isString() instead {\@link https://lodash.com/docs/4.17.5#isString}
340
+ * @param {?} value
341
+ * @return {?}
342
+ */
343
+ FsUtil.prototype.isString = /**
344
+ * @deprecated use _.isString() instead {\@link https://lodash.com/docs/4.17.5#isString}
345
+ * @param {?} value
346
+ * @return {?}
347
+ */
348
+ function (value) {
349
+ console.warn('@deprecated use _.isString() instead {@link https://lodash.com/docs/4.17.5#isString}');
350
+ return typeof value === 'string' || value instanceof String;
351
+ };
352
+ /**
353
+ * @deprecated use _.isArray() instead {@link https://lodash.com/docs/4.17.5#isArray}
354
+ */
355
+ /**
356
+ * @deprecated use _.isArray() instead {\@link https://lodash.com/docs/4.17.5#isArray}
357
+ * @param {?} value
358
+ * @return {?}
359
+ */
360
+ FsUtil.prototype.isArray = /**
361
+ * @deprecated use _.isArray() instead {\@link https://lodash.com/docs/4.17.5#isArray}
362
+ * @param {?} value
363
+ * @return {?}
364
+ */
365
+ function (value) {
366
+ console.warn('@deprecated use _.isArray() instead {@link https://lodash.com/docs/4.17.5#isArray}');
367
+ return value instanceof Array;
368
+ };
369
+ /**
370
+ * @deprecated use import { isNumeric } from @firestitch/common/util; instead
371
+ */
372
+ /**
373
+ * @deprecated use import { isNumeric } from \@firestitch/common/util; instead
374
+ * @param {?} value
375
+ * @return {?}
376
+ */
377
+ FsUtil.prototype.isNumeric = /**
378
+ * @deprecated use import { isNumeric } from \@firestitch/common/util; instead
379
+ * @param {?} value
380
+ * @return {?}
381
+ */
382
+ function (value) {
383
+ console.warn('@deprecated use import { isNumeric } from @firestitch/common/util; instead');
384
+ return this.string(value).length && !!this.string(value).match(/^-?\d*\.?\d*$/);
385
+ };
386
+ /**
387
+ * @deprecated use import { isClass } from @firestitch/common/util; instead
388
+ */
389
+ /**
390
+ * @deprecated use import { isClass } from \@firestitch/common/util; instead
391
+ * @param {?} value
392
+ * @param {?} cls
393
+ * @return {?}
394
+ */
395
+ FsUtil.prototype.isClass = /**
396
+ * @deprecated use import { isClass } from \@firestitch/common/util; instead
397
+ * @param {?} value
398
+ * @param {?} cls
399
+ * @return {?}
400
+ */
401
+ function (value, cls) {
402
+ console.warn('@deprecated use import { isClass } from @firestitch/common/util; instead');
403
+ if (this.isObject(value)) {
404
+ if (this.isString(cls)) {
405
+ if (value.constructor) {
406
+ if (value.constructor.name === cls) {
407
+ return true;
408
+ }
409
+ }
410
+ }
411
+ else {
412
+ if (value instanceof cls) {
413
+ return true;
414
+ }
415
+ }
416
+ }
417
+ return false;
418
+ };
419
+ /**
420
+ * @deprecated use _.isBoolean() instead {@link https://lodash.com/docs/4.17.5#isBoolean}
421
+ */
422
+ /**
423
+ * @deprecated use _.isBoolean() instead {\@link https://lodash.com/docs/4.17.5#isBoolean}
424
+ * @param {?} value
425
+ * @return {?}
426
+ */
427
+ FsUtil.prototype.isBoolean = /**
428
+ * @deprecated use _.isBoolean() instead {\@link https://lodash.com/docs/4.17.5#isBoolean}
429
+ * @param {?} value
430
+ * @return {?}
431
+ */
432
+ function (value) {
433
+ console.warn('@deprecated use _.isBoolean() instead {@link https://lodash.com/docs/4.17.5#isBoolean}');
434
+ return value === true || value === false;
435
+ };
436
+ /**
437
+ * @deprecated use import { value } from @firestitch/common/util; instead
438
+ */
439
+ /**
440
+ * @deprecated use import { value } from \@firestitch/common/util; instead
441
+ * @param {?} object
442
+ * @param {?} key
443
+ * @param {?} def
444
+ * @return {?}
445
+ */
446
+ FsUtil.prototype.value = /**
447
+ * @deprecated use import { value } from \@firestitch/common/util; instead
448
+ * @param {?} object
449
+ * @param {?} key
450
+ * @param {?} def
451
+ * @return {?}
452
+ */
453
+ function (object, key, def) {
454
+ console.warn('@deprecated use import { value } from @firestitch/common/util; instead');
455
+ if (this.isObject(object) || this.isArray(object)) {
456
+ if (object.hasOwnProperty(key)) {
457
+ return object[key];
458
+ }
459
+ }
460
+ return def;
461
+ };
462
+ /**
463
+ * @param {?} func
464
+ * @param {?} wait
465
+ * @return {?}
466
+ */
467
+ FsUtil.prototype.throttle = /**
468
+ * @param {?} func
469
+ * @param {?} wait
470
+ * @return {?}
471
+ */
472
+ function (func, wait) {
473
+ console.warn('@deprecated use import { throttle } from @firestitch/common/util; instead');
474
+ /** @type {?} */
475
+ var waiting = false;
476
+ return (/**
477
+ * @return {?}
478
+ */
479
+ function () {
480
+ if (!waiting) { // If we're not waiting
481
+ func.apply(null, arguments); // Execute users function
482
+ waiting = true; // Prevent future invocations
483
+ setTimeout((/**
484
+ * @return {?}
485
+ */
486
+ function () {
487
+ waiting = false; // And allow future invocations
488
+ }), wait);
489
+ }
490
+ });
491
+ };
492
+ /**
493
+ * @deprecated use import { debounce } from @firestitch/common/util; instead
494
+ */
495
+ /**
496
+ * @deprecated use import { debounce } from \@firestitch/common/util; instead
497
+ * @param {?} func
498
+ * @param {?} wait
499
+ * @param {?} immediate
500
+ * @return {?}
501
+ */
502
+ FsUtil.prototype.debounce = /**
503
+ * @deprecated use import { debounce } from \@firestitch/common/util; instead
504
+ * @param {?} func
505
+ * @param {?} wait
506
+ * @param {?} immediate
507
+ * @return {?}
508
+ */
509
+ function (func, wait, immediate) {
510
+ console.warn('@deprecated use import { debounce } from @firestitch/common/util; instead');
511
+ /** @type {?} */
512
+ var timeout;
513
+ return (/**
514
+ * @return {?}
515
+ */
516
+ function () {
517
+ /** @type {?} */
518
+ var context = this;
519
+ /** @type {?} */
520
+ var args = arguments;
521
+ /** @type {?} */
522
+ var later = (/**
523
+ * @return {?}
524
+ */
525
+ function () {
526
+ timeout = null;
527
+ if (!immediate)
528
+ func.apply(context, args);
529
+ });
530
+ /** @type {?} */
531
+ var callNow = immediate && !timeout;
532
+ clearTimeout(timeout);
533
+ timeout = setTimeout(later, wait);
534
+ if (callNow)
535
+ func.apply(context, args);
536
+ });
537
+ };
538
+ /**
539
+ * @deprecated use import { length } from @firestitch/common/util; instead
540
+ */
541
+ /**
542
+ * @deprecated use import { length } from \@firestitch/common/util; instead
543
+ * @param {?} object
544
+ * @return {?}
545
+ */
546
+ FsUtil.prototype.length = /**
547
+ * @deprecated use import { length } from \@firestitch/common/util; instead
548
+ * @param {?} object
549
+ * @return {?}
550
+ */
551
+ function (object) {
552
+ console.warn('@deprecated use import { length } from @firestitch/common/util; instead');
553
+ if (this.isObject(object)) {
554
+ return Object.keys(object).length;
555
+ }
556
+ if (this.isArray(object)) {
557
+ return object.length;
558
+ }
559
+ return 0;
560
+ };
561
+ /**
562
+ * @deprecated use import { boolean } from @firestitch/common/util; instead
563
+ */
564
+ /**
565
+ * @deprecated use import { boolean } from \@firestitch/common/util; instead
566
+ * @param {?} value
567
+ * @return {?}
568
+ */
569
+ FsUtil.prototype.boolean = /**
570
+ * @deprecated use import { boolean } from \@firestitch/common/util; instead
571
+ * @param {?} value
572
+ * @return {?}
573
+ */
574
+ function (value) {
575
+ console.warn('@deprecated use import { boolean } from @firestitch/common/util; instead');
576
+ return this.string(value).toLowerCase() !== 'false' && !!value;
577
+ };
578
+ /**
579
+ * @deprecated use import { stringify } from @firestitch/common/util; instead
580
+ */
581
+ /**
582
+ * @deprecated use import { stringify } from \@firestitch/common/util; instead
583
+ * @param {?} value
584
+ * @return {?}
585
+ */
586
+ FsUtil.prototype.stringify = /**
587
+ * @deprecated use import { stringify } from \@firestitch/common/util; instead
588
+ * @param {?} value
589
+ * @return {?}
590
+ */
591
+ function (value) {
592
+ console.warn('@deprecated use import { stringify } from @firestitch/common/util; instead');
593
+ return JSON.stringify(value);
594
+ };
595
+ FsUtil.decorators = [
596
+ { type: Injectable }
597
+ ];
598
+ return FsUtil;
599
+ }());
600
+ export { FsUtil };
601
+ if (false) {
602
+ /**
603
+ * @type {?}
604
+ * @private
605
+ */
606
+ FsUtil.prototype.intervals;
607
+ }
608
608
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGZpcmVzdGl0Y2gvY29tbW9uLyIsInNvdXJjZXMiOlsiYXBwL3NlcnZpY2VzL3V0aWwuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBRTNDLE1BQU0sS0FBTyxVQUFVLEdBQUcsQ0FBQzs7QUFBM0IsTUFBTSxLQUNGLFFBQVEsR0FBRyxDQUFDOztBQURoQixNQUFNLEtBRUYsYUFBYSxHQUFHLENBQUM7O0FBRnJCLE1BQU0sS0FHRixPQUFPLEdBQUcsQ0FBQzs7QUFIZixNQUFNLEtBSUYsU0FBUyxHQUFHLEVBQUU7O0FBSmxCLE1BQU0sS0FLRixVQUFVLEdBQUcsRUFBRTs7QUFMbkIsTUFBTSxLQU1GLFNBQVMsR0FBRyxFQUFFOztBQU5sQixNQUFNLEtBT0YsU0FBUyxHQUFHLEVBQUU7O0FBUGxCLE1BQU0sS0FRRixXQUFXLEdBQUcsRUFBRTs7QUFScEIsTUFBTSxLQVNGLE9BQU8sR0FBRyxFQUFFOztBQVRoQixNQUFNLEtBVUYsU0FBUyxHQUFHLEVBQUU7O0FBVmxCLE1BQU0sS0FXRixhQUFhLEdBQUcsRUFBRTs7QUFYdEIsTUFBTSxLQVlGLFVBQVUsR0FBRyxFQUFFOztBQVpuQixNQUFNLEtBYUYsU0FBUyxHQUFHLEVBQUU7O0FBYmxCLE1BQU0sS0FjRixXQUFXLEdBQUcsRUFBRTs7QUFkcEIsTUFBTSxLQWVGLGFBQWEsR0FBRyxFQUFFOztBQWZ0QixNQUFNLEtBZ0JGLE9BQU8sR0FBRyxFQUFFOztBQWhCaEIsTUFBTSxLQWlCRixRQUFRLEdBQUcsRUFBRTs7QUFqQmpCLE1BQU0sS0FrQkYsUUFBUSxHQUFHLEVBQUU7O0FBbEJqQixNQUFNLEtBbUJGLE1BQU0sR0FBRyxFQUFFOztBQW5CZixNQUFNLEtBb0JGLFNBQVMsR0FBRyxFQUFFOztBQXBCbEIsTUFBTSxLQXFCRixRQUFRLEdBQUcsRUFB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Ozs7SUFDSyx3QkFBTzs7Ozs7SUFBZCxVQUFlLEtBQUs7UUFDbEIsT0FBTyxDQUFDLElBQUksQ0FBQywwRUFBMEUsQ0FBQyxDQUFDO1FBQ3pGLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxXQUFXLEVBQUUsS0FBSyxPQUFPLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQztJQUNqRSxDQUFDO0lBRUQ7O01BRUU7Ozs7OztJQUNLLDBCQUFTOzs7OztJQUFoQixVQUFpQixLQUFLO1FBQ3BCLE9BQU8sQ0FBQyxJQUFJLENBQUMsNEVBQTRFLENBQUMsQ0FBQztRQUMzRixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDL0IsQ0FBQzs7Z0JBOVFKLFVBQVU7O0lBK1FYLGFBQUM7Q0FBQSxBQS9RRCxJQStRQztTQTlRWSxNQUFNOzs7Ozs7SUFFZiwyQkFBdUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmV4cG9ydCBjb25zdCBLRVlfQ0FOQ0VMID0gMyxcbiAgICBLRVlfSEVMUCA9IDYsXG4gICAgS0VZX0JBQ0tTUEFDRSA9IDgsXG4gICAgS0VZX1RBQiA9IDksXG4gICAgS0VZX0NMRUFSID0gMTIsXG4gICAgS0VZX1JFVFVSTiA9IDEzLFxuICAgIEtFWV9FTlRFUiA9IDE0LFxuICAgIEtFWV9TSElGVCA9IDE2LFxuICAgIEtFWV9DT05UUk9MID0gMTcsXG4gICAgS0VZX0FMVCA9IDE4LFxuICAgIEtFWV9QQVVTRSA9IDE5LFxuICAgIEtFWV9DQVBTX0xPQ0sgPSAyMCxcbiAgICBLRVlfRVNDQVBFID0gMjcsXG4gICAgS0VZX1NQQUNFID0gMzIsXG4gICAgS0VZX1BBR0VfVVAgPSAzMyxcbiAgICBLRVlfUEFHRV9ET1dOID0gMzQsXG4gICAgS0VZX0VORCA9IDM1LFxuICAgIEtFWV9IT01FID0gMzYsXG4gICAgS0VZX0xFRlQgPSAzNyxcbiAgICBLRVlfVVAgPSAzOCxcbiAgICBLRVlfUklHSFQgPSAzOSxcbiAgICBLRVlfRE9XTiA9IDQwLFxuICAgIEtFWV9QUklOVFNDUkVFTiA9IDQ0LFxuICAgIEtFWV9JTlNFUlQgPSA0NSxcbiAgICBLRVlfREVMRVRFID0gNDYsXG4gICAgS0VZXzAgPSA0OCxcbiAgICBLRVlfMSA9IDQ5LFxuICAgIEtFWV8yID0gNTAsXG4gICAgS0VZXzMgPSA1MSxcbiAgICBLRVlfNCA9IDUyLFxuICAgIEtFWV81ID0gNTMsXG4gICAgS0VZXzYgPSA1NCxcbiAgICBLRVlfNyA9IDU1LFxuICAgIEtFWV84ID0gNTYsXG4gICAgS0VZXzkgPSA1NyxcbiAgICBLRVlfU0VNSUNPTE9OID0gNTksXG4gICAgS0VZX0VRVUFMUyA9IDYxO1xuXG4vKlxuICAgIEJhc2ljYWxseSwganVzdCBjb3B5LXBhc3RlZCBmdW5jdGlvbmFsaXR5IGZyb20gZnMtYm9pbGVycGxhdGUgdjEueCwgd2l0aCBzb21lIHNtYWxsIGNoYW5nZXMgKGxpa2Ugd2UgZG9udCBoYXZlIGFuZ3VsYXIuYmluZCBhbnltb3JlLCBoYWQgdG8gZ28gd2l0aCBhIHdvcmthcm91bmQpXG4gICAgVGhlcmUgbWlnaHQgYmUgYSBiZXR0ZXIgd2F5IHRvIG9yZ2FuaXNlIGNvbnN0YXRucyBidXQgSSBuZWVkIHRvIGtub3cgdXNlLWNhc2VzXG4qL1xuXG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBGc1V0aWwge1xuXG4gICAgcHJpdmF0ZSBpbnRlcnZhbHMgPSB7fTtcblxuICAgIC8qKlxuICAgICogQGRlcHJlY2F0ZWQgdXNlIEBmaXJlc3RpdGNoL2NvbW1vbi91dGlsL2d1aWQgaW5zdGVhZFxuICAgICovXG4gICAgcHVibGljIGd1aWQocGF0dGVybj86IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICBjb25zb2xlLndhcm4oJ0BkZXByZWNhdGVkIHVzZSBAZmlyZXN0aXRjaC9jb21tb24vdXRpbC9ndWlkIGluc3RlYWQnKTtcbiAgICAgIHBhdHRlcm4gPSBwYXR0ZXJuIHx8ICd4eHh4eHgnO1xuICAgICAgcmV0dXJuIHBhdHRlcm4ucmVwbGFjZSgvW3h5XS9nLCBmdW5jdGlvbihjKSB7XG4gICAgICAgIHZhciByID0gTWF0aC5yYW5kb20oKSAqIDE2IHwgMCwgdiA9IGMgPT0gJ3gnID8gciA6IChyICYgMHgzIHwgMHg4KTtcbiAgICAgICAgcmV0dXJuIHYudG9TdHJpbmcoMTYpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWQgdXNlIGltcG9ydCB7IHV1aWQgfSBmcm9tIEBmaXJlc3RpdGNoL2NvbW1vbi91dGlsOyBpbnN0ZWFkXG4gICAgKi9cbiAgICBwdWJsaWMgdXVpZCgpOiBzdHJpbmcge1xuICAgICAgY29uc29sZS53YXJuKCdAZGVwcmVjYXRlZCB1c2UgQGZpcmVzdGl0Y2gvY29tbW9uL3V0aWwvdXVpZCBpbnN0ZWFkJyk7XG4gICAgICByZXR1cm4gdGhpcy5ndWlkKCd4eHh4eHh4eC14eHh4LXh4eHgteHh4eC14eHh4eHh4eHh4eHgnKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAZGVwcmVjYXRlZCB1c2UgaW1wb3J0IHsgcmVzb2x2ZSB9IGZyb20gQGZpcmVzdGl0Y2gvY29tbW9uL3V0aWw7IGluc3RlYWRcbiAgICAqL1xuICAgIHB1YmxpYyByZXNvbHZlKHByb21pc2U6IFByb21pc2U8b2JqZWN0PiwgZGVmYXVsdHMgPSBbXSk6IFByb21pc2U8b2JqZWN0PiB7XG4gICAgICBjb25zb2xlLndhcm4oJ0BkZXByZWNhdGVkIHVzZSBAZmlyZXN0aXRjaC9jb21tb24vdXRpbC9yZXNvbHZlIGluc3RlYWQnKTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGRlZmF1bHRzO1xuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgICAgICAgcHJvbWlzZS50aGVuKGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgICAgICAgICAgT2JqZWN0LmtleXMoZGF0YSkuZm9yRWFjaChrZXkgPT4gcmVzdWx0W2tleV0gPSBkYXRhW2tleV0pXG4gICAgICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHQpXG4gICAgICAgICAgICB9KTtcbiAgICAgICB9KVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBkZXByZWNhdGVkIHVzZSBfLnRvSW50ZWdlcigpIGluc3RlYWRcbiAgICAqL1xuICAgIHB1YmxpYyBpbnQodmFsdWU6IGFueSk6IG51bWJlciB7XG4gICAgICAgIGNvbnNvbGUud2FybignQGRlcHJlY2F0ZWQgdXNlIF8udG9JbnRlZ2VyKCkgaW5zdGVhZCcpO1xuICAgICAgICB2YWx1ZSA9IHBhcnNlSW50KHZhbHVlKTtcbiAgICAgICAgaWYgKGlzTmFOKHZhbHVlKSkge1xuICAgICAgICAgICAgdmFsdWUgPSAwO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAZGVwcmVjYXRlZCB1c2UgXy50b0Zpbml0ZSgpIGluc3RlYWRcbiAgICAqL1xuICAgIHB1YmxpYyBmbG9hdCh2YWx1ZSk6IG51bWJlciB7XG4gICAgICBjb25zb2xlLndhcm4oJ0BkZXByZWNhdGVkIHVzZSBfLnRvRmluaXRlKCkgaW5zdGVhZCcpO1xuICAgICAgdmFsdWUgPSBwYXJzZUZsb2F0KHZhbHVlKTtcbiAgICAgIGlmIChpc05hTih2YWx1ZSkpIHtcbiAgICAgICAgICB2YWx1ZSA9IDA7XG4gICAgICB9XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWQgdXNlIF8udG9TdHJpbmcoKSBpbnN0ZWFkXG4gICAgKi9cbiAgICBwdWJsaWMgc3RyaW5nKHN0cmluZyk6IHN0cmluZyB7XG4gICAgICBjb25zb2xlLndhcm4oJ0BkZXByZWNhdGVkIHVzZSBfLnRvU3RyaW5nKCkgaW5zdGVhZCcpO1xuICAgICAgICBpZiAoc3RyaW5nID09PSBudWxsIHx8IHN0cmluZyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBzdHJpbmcgPSAnJztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAoc3RyaW5nKS50b1N0cmluZygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBkZXByZWNhdGVkIHVzZSBpbXBvcnQgeyBpc0VtcHR5IH0gZnJvbSBAZmlyZXN0aXRjaC9jb21tb24vdXRpbDsgaW5zdGVhZFxuICAgICovXG4gICAgcHVibGljIGlzRW1wdHkodmFsdWUsIG9wdGlvbnM/KTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnNvbGUud2FybignQGRlcHJlY2F0ZWQgdXNlIGltcG9ydCB7IGlzRW1wdHkgfSBmcm9tIEBmaXJlc3RpdGNoL2NvbW1vbi91dGlsOyBpbnN0ZWFkJyk7XG4gICAgICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICAgICAgICByZXR1cm4gdmFsdWUgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgICAgICAgdmFsdWUgPT09IG51bGwgfHxcbiAgICAgICAgICAgIHZhbHVlID09PSBmYWxzZSB8fFxuICAgICAgICAgICAgdmFsdWUgPT09ICcnIHx8XG4gICAgICAgICAgICAhdGhpcy5zdHJpbmcodmFsdWUpLmxlbmd0aCB8fFxuICAgICAgICAgICAgKFxuICAgICAgICAgICAgICAgIHRoaXMuaXNPYmplY3QodmFsdWUpICYmXG4gICAgICAgICAgICAgICAgKHZhbHVlLmNvbnN0cnVjdG9yLm5hbWUgPT09ICdPYmplY3QnICYmICFPYmplY3Qua2V5cyh2YWx1ZSkubGVuZ3RoKSkgfHxcbiAgICAgICAgICAgICAgICAoIW9wdGlvbnMuemVybyAmJiAodmFsdWUgPT09IDAgfHwgdmFsdWUgPT09ICcwJylcbiAgICAgICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWQgdXNlIF8uaXNJbnRlZ2VyKCkgaW5zdGVhZFxuICAgICovXG4gICAgcHVibGljIGlzSW50KHZhbHVlLCB0eXBlPykge1xuICAgICAgICBjb25zb2xlLndhcm4oJ0BkZXByZWNhdGVkIHVzZSBfLmlzSW50ZWdlcigpIGluc3RlYWQnKTtcbiAgICAgICAgY29uc3QgaW50ID0gISF0aGlzLnN0cmluZyh2YWx1ZSkubWF0Y2goL15cXGQrJC8pO1xuXG4gICAgICAgIGlmICghaW50KSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZSkge1xuICAgICAgICAgICAgcmV0dXJuIE51bWJlci5pc0ludGVnZXIodmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWQgdXNlIF8uZWFjaCgpIGluc3RlYWQge0BsaW5rIGh0dHBzOi8vbG9kYXNoLmNvbS9kb2NzLzQuMTcuNSNmb3JFYWNofVxuICAgICovXG4gICAgcHVibGljIGVhY2gob2JqZWN0LCBmdW5jKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ0BkZXByZWNhdGVkIHVzZSBfLmVhY2goKSBpbnN0ZWFkIHtAbGluayBodHRwczovL2xvZGFzaC5jb20vZG9jcy80LjE3LjUjZm9yRWFjaH0nKTtcbiAgICAgIGlmICghdGhpcy5pc0FycmF5KG9iamVjdCkgJiYgIXRoaXMuaXNPYmplY3Qob2JqZWN0KSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIE9iamVjdC5rZXlzKG9iamVjdCkuZm9yRWFjaChmdW5jdGlvbihrZXkpIHtcbiAgICAgICAgZnVuYyhvYmplY3Rba2V5XSxrZXkpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWQgdXNlIF8uaXNBcnJheUxpa2VPYmplY3QoKSB7QGxpbmsgaHR0cHM6Ly9sb2Rhc2guY29tL2RvY3MvNC4xNy41I2lzQXJyYXlMaWtlT2JqZWN0fVxuICAgICAqIG9yIF8uaXNPYmplY3QoKSB7QGxpbmsgaHR0cHM6Ly9sb2Rhc2guY29tL2RvY3MvNC4xNy41I2lzT2JqZWN0fSBpbnN0ZWFkXG4gICAgKi9cbiAgICBwdWJsaWMgaXNPYmplY3QodmFsdWUpOiBib29sZWFuIHtcbiAgICAgIGNvbnNvbGUud2FybignQGRlcHJlY2F0ZWQgdXNlIF8uaXNBcnJheUxpa2VPYmplY3QoKSB7QGxpbmsgaHR0cHM6Ly9sb2Rhc2guY29tL2RvY3MvNC4xNy41I2lzQXJyYXlMaWtlT2JqZWN0fSBvciBfLmlzT2JqZWN0KCkge0BsaW5rIGh0dHBzOi8vbG9kYXNoLmNvbS9kb2NzLzQuMTcuNSNpc09iamVjdH0gaW5zdGVhZCcpO1xuICAgICAgcmV0dXJuIHZhbHVlICE9PSBudWxsICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgIXRoaXMuaXNBcnJheSh2YWx1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICAqIEBkZXByZWNhdGVkIHVzZSBfLmlzU3RyaW5nKCkgaW5zdGVhZCB7QGxpbmsgaHR0cHM6Ly9sb2Rhc2guY29tL2RvY3MvNC4xNy41I2lzU3RyaW5nfVxuICAgICovXG4gICAgcHVibGljIGlzU3RyaW5nKHZhbHVlKTogYm9vbGVhbiB7XG4gICAgICBjb25zb2xlLndhcm4oJ0BkZXByZWNhdGVkIHVzZSBfLmlzU3RyaW5nKCkgaW5zdGVhZCB7QGxpbmsgaHR0cHM6Ly9sb2Rhc2guY29tL2RvY3MvNC4xNy41I2lzU3RyaW5nfScpO1xuICAgICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgfHwgdmFsdWUgaW5zdGFuY2VvZiBTdHJpbmc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWQgdXNlIF8uaXNBcnJheSgpIGluc3RlYWQge0BsaW5rIGh0dHBzOi8vbG9kYXNoLmNvbS9kb2NzLzQuMTcuNSNpc0FycmF5fVxuICAgICovXG4gICAgcHVibGljIGlzQXJyYXkodmFsdWUpOiBib29sZWFuIHtcbiAgICAgIGNvbnNvbGUud2FybignQGRlcHJlY2F0ZWQgdXNlIF8uaXNBcnJheSgpIGluc3RlYWQge0BsaW5rIGh0dHBzOi8vbG9kYXNoLmNvbS9kb2NzLzQuMTcuNSNpc0FycmF5fScpO1xuICAgICAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgQXJyYXk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWQgdXNlIGltcG9ydCB7IGlzTnVtZXJpYyB9IGZyb20gQGZpcmVzdGl0Y2gvY29tbW9uL3V0aWw7IGluc3RlYWRcbiAgICAqL1xuICAgIHB1YmxpYyBpc051bWVyaWModmFsdWUpOiBib29sZWFuIHtcbiAgICAgIGNvbnNvbGUud2FybignQGRlcHJlY2F0ZWQgdXNlIGltcG9ydCB7IGlzTnVtZXJpYyB9IGZyb20gQGZpcmVzdGl0Y2gvY29tbW9uL3V0aWw7IGluc3RlYWQnKTtcbiAgICAgIHJldHVybiB0aGlzLnN0cmluZyh2YWx1ZSkubGVuZ3RoICYmICEhdGhpcy5zdHJpbmcodmFsdWUpLm1hdGNoKC9eLT9cXGQqXFwuP1xcZCokLyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWQgdXNlIGltcG9ydCB7IGlzQ2xhc3MgfSBmcm9tIEBmaXJlc3RpdGNoL2NvbW1vbi91dGlsOyBpbnN0ZWFkXG4gICAgKi9cbiAgICBwdWJsaWMgaXNDbGFzcyh2YWx1ZSwgY2xzKSB7XG4gICAgICAgIGNvbnNvbGUud2FybignQGRlcHJlY2F0ZWQgdXNlIGltcG9ydCB7IGlzQ2xhc3MgfSBmcm9tIEBmaXJlc3RpdGNoL2NvbW1vbi91dGlsOyBpbnN0ZWFkJyk7XG4gICAgICAgIGlmICh0aGlzLmlzT2JqZWN0KHZhbHVlKSkge1xuXG4gICAgICAgICAgICBpZiAodGhpcy5pc1N0cmluZyhjbHMpKSB7XG5cbiAgICAgICAgICAgICAgICBpZiAodmFsdWUuY29uc3RydWN0b3IpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlLmNvbnN0cnVjdG9yLm5hbWUgPT09IGNscykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIH0gZWxzZSB7XG5cbiAgICAgICAgICAgICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBjbHMpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAgKiBAZGVwcmVjYXRlZCB1c2UgXy5pc0Jvb2xlYW4oKSBpbnN0ZWFkIHtAbGluayBodHRwczovL2xvZGFzaC5jb20vZG9jcy80LjE3LjUjaXNCb29sZWFufVxuICAgICovXG4gICAgcHVibGljIGlzQm9vbGVhbih2YWx1ZSk6IGJvb2xlYW4ge1xuICAgICAgY29uc29sZS53YXJuKCdAZGVwcmVjYXRlZCB1c2UgXy5pc0Jvb2xlYW4oKSBpbnN0ZWFkIHtAbGluayBodHRwczovL2xvZGFzaC5jb20vZG9jcy80LjE3LjUjaXNCb29sZWFufScpO1xuICAgICAgcmV0dXJuIHZhbHVlID09PSB0cnVlIHx8IHZhbHVlID09PSBmYWxzZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAZGVwcmVjYXRlZCB1c2UgaW1wb3J0IHsgdmFsdWUgfSBmcm9tIEBmaXJlc3RpdGNoL2NvbW1vbi91dGlsOyBpbnN0ZWFkXG4gICAgKi9cbiAgICBwdWJsaWMgdmFsdWUob2JqZWN0LCBrZXksIGRlZik6IGFueSB7XG4gICAgICBjb25zb2xlLndhcm4oJ0BkZXByZWNhdGVkIHVzZSBpbXBvcnQgeyB2YWx1ZSB9IGZyb20gQGZpcmVzdGl0Y2gvY29tbW9uL3V0aWw7IGluc3RlYWQnKTtcbiAgICAgICAgaWYgKHRoaXMuaXNPYmplY3Qob2JqZWN0KSB8fCB0aGlzLmlzQXJyYXkob2JqZWN0KSkge1xuXG4gICAgICAgICAgICBpZiAob2JqZWN0Lmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gb2JqZWN0W2tleV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZGVmO1xuICAgIH1cblxuICAgIHB1YmxpYyB0aHJvdHRsZShmdW5jLCB3YWl0KSB7XG4gICAgICBjb25zb2xlLndhcm4oJ0BkZXByZWNhdGVkIHVzZSBpbXBvcnQgeyB0aHJvdHRsZSB9IGZyb20gQGZpcmVzdGl0Y2gvY29tbW9uL3V0aWw7IGluc3RlYWQnKTtcbiAgICAgIGxldCB3YWl0aW5nID0gZmFsc2U7ICAgICAgICAgICAgICAgICAgXHQvLyBJbml0aWFsbHksIHdlJ3JlIG5vdCB3YWl0aW5nXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7ICAgICAgICAgICAgICAgXHRcdC8vIFdlIHJldHVybiBhIHRocm90dGxlZCBmdW5jdGlvblxuICAgICAgICAgICAgaWYgKCF3YWl0aW5nKSB7ICAgICAgICAgICAgICAgICAgIFx0Ly8gSWYgd2UncmUgbm90IHdhaXRpbmdcbiAgICAgICAgICAgICAgICBmdW5jLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7ICAgICAvLyBFeGVjdXRlIHVzZXJzIGZ1bmN0aW9uXG4gICAgICAgICAgICAgICAgd2FpdGluZyA9IHRydWU7ICAgICAgICAgICAgICAgXHQvLyBQcmV2ZW50IGZ1dHVyZSBpbnZvY2F0aW9uc1xuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgeyAgIFx0XHQvLyBBZnRlciBhIHBlcmlvZCBvZiB0aW1lXG4gICAgICAgICAgICAgICAgICAgIHdhaXRpbmcgPSBmYWxzZTsgICAgICAgICAgXHQvLyBBbmQgYWxsb3cgZnV0dXJlIGludm9jYXRpb25zXG4gICAgICAgICAgICAgICAgfSwgd2FpdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAZGVwcmVjYXRlZCB1c2UgaW1wb3J0IHsgZGVib3VuY2UgfSBmcm9tIEBmaXJlc3RpdGNoL2NvbW1vbi91dGlsOyBpbnN0ZWFkXG4gICAgKi9cbiAgICBwdWJsaWMgZGVib3VuY2UoZnVuYywgd2FpdCwgaW1tZWRpYXRlKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ0BkZXByZWNhdGVkIHVzZSBpbXBvcnQgeyBkZWJvdW5jZSB9IGZyb20gQGZpcmVzdGl0Y2gvY29tbW9uL3V0aWw7IGluc3RlYWQnKTtcbiAgICAgIHZhciB0aW1lb3V0O1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGNvbnRleHQgPSB0aGlzLCBhcmdzID0gYXJndW1lbnRzO1xuICAgICAgICAgICAgdmFyIGxhdGVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHRpbWVvdXQgPSBudWxsO1xuICAgICAgICAgICAgICAgIGlmICghaW1tZWRpYXRlKSBmdW5jLmFwcGx5KGNvbnRleHQsIGFyZ3MpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHZhciBjYWxsTm93ID0gaW1tZWRpYXRlICYmICF0aW1lb3V0O1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgICAgICAgdGltZW91dCA9IHNldFRpbWVvdXQobGF0ZXIsIHdhaXQpO1xuICAgICAgICAgICAgaWYgKGNhbGxOb3cpIGZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWQgdXNlIGltcG9ydCB7IGxlbmd0aCB9IGZyb20gQGZpcmVzdGl0Y2gvY29tbW9uL3V0aWw7IGluc3RlYWRcbiAgICAqL1xuICAgIHB1YmxpYyBsZW5ndGgob2JqZWN0KTogbnVtYmVyIHtcbiAgICAgIGNvbnNvbGUud2FybignQGRlcHJlY2F0ZWQgdXNlIGltcG9ydCB7IGxlbmd0aCB9IGZyb20gQGZpcmVzdGl0Y2gvY29tbW9uL3V0aWw7IGluc3RlYWQnKTtcbiAgICAgIGlmICh0aGlzLmlzT2JqZWN0KG9iamVjdCkpIHtcbiAgICAgICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhvYmplY3QpLmxlbmd0aDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmlzQXJyYXkob2JqZWN0KSkge1xuICAgICAgICAgICAgcmV0dXJuIG9iamVjdC5sZW5ndGg7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gMDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAZGVwcmVjYXRlZCB1c2UgaW1wb3J0IHsgYm9vbGVhbiB9IGZyb20gQGZpcmVzdGl0Y2gvY29tbW9uL3V0aWw7IGluc3RlYWRcbiAgICAqL1xuICAgIHB1YmxpYyBib29sZWFuKHZhbHVlKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ0BkZXByZWNhdGVkIHVzZSBpbXBvcnQgeyBib29sZWFuIH0gZnJvbSBAZmlyZXN0aXRjaC9jb21tb24vdXRpbDsgaW5zdGVhZCcpO1xuICAgICAgcmV0dXJuIHRoaXMuc3RyaW5nKHZhbHVlKS50b0xvd2VyQ2FzZSgpICE9PSAnZmFsc2UnICYmICEhdmFsdWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWQgdXNlIGltcG9ydCB7IHN0cmluZ2lmeSB9IGZyb20gQGZpcmVzdGl0Y2gvY29tbW9uL3V0aWw7IGluc3RlYWRcbiAgICAqL1xuICAgIHB1YmxpYyBzdHJpbmdpZnkodmFsdWUpIHtcbiAgICAgIGNvbnNvbGUud2FybignQGRlcHJlY2F0ZWQgdXNlIGltcG9ydCB7IHN0cmluZ2lmeSB9IGZyb20gQGZpcmVzdGl0Y2gvY29tbW9uL3V0aWw7IGluc3RlYWQnKTtcbiAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh2YWx1ZSk7XG4gICAgfVxufVxuIl19