@firestitch/common 8.0.12 → 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 +71 -71
  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 +22 -22
  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 +78 -78
  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 +22 -22
  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,430 +1,430 @@
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 const KEY_CANCEL = 3;
9
- /** @type {?} */
10
- export const KEY_HELP = 6;
11
- /** @type {?} */
12
- export const KEY_BACKSPACE = 8;
13
- /** @type {?} */
14
- export const KEY_TAB = 9;
15
- /** @type {?} */
16
- export const KEY_CLEAR = 12;
17
- /** @type {?} */
18
- export const KEY_RETURN = 13;
19
- /** @type {?} */
20
- export const KEY_ENTER = 14;
21
- /** @type {?} */
22
- export const KEY_SHIFT = 16;
23
- /** @type {?} */
24
- export const KEY_CONTROL = 17;
25
- /** @type {?} */
26
- export const KEY_ALT = 18;
27
- /** @type {?} */
28
- export const KEY_PAUSE = 19;
29
- /** @type {?} */
30
- export const KEY_CAPS_LOCK = 20;
31
- /** @type {?} */
32
- export const KEY_ESCAPE = 27;
33
- /** @type {?} */
34
- export const KEY_SPACE = 32;
35
- /** @type {?} */
36
- export const KEY_PAGE_UP = 33;
37
- /** @type {?} */
38
- export const KEY_PAGE_DOWN = 34;
39
- /** @type {?} */
40
- export const KEY_END = 35;
41
- /** @type {?} */
42
- export const KEY_HOME = 36;
43
- /** @type {?} */
44
- export const KEY_LEFT = 37;
45
- /** @type {?} */
46
- export const KEY_UP = 38;
47
- /** @type {?} */
48
- export const KEY_RIGHT = 39;
49
- /** @type {?} */
50
- export const KEY_DOWN = 40;
51
- /** @type {?} */
52
- export const KEY_PRINTSCREEN = 44;
53
- /** @type {?} */
54
- export const KEY_INSERT = 45;
55
- /** @type {?} */
56
- export const KEY_DELETE = 46;
57
- /** @type {?} */
58
- export const KEY_0 = 48;
59
- /** @type {?} */
60
- export const KEY_1 = 49;
61
- /** @type {?} */
62
- export const KEY_2 = 50;
63
- /** @type {?} */
64
- export const KEY_3 = 51;
65
- /** @type {?} */
66
- export const KEY_4 = 52;
67
- /** @type {?} */
68
- export const KEY_5 = 53;
69
- /** @type {?} */
70
- export const KEY_6 = 54;
71
- /** @type {?} */
72
- export const KEY_7 = 55;
73
- /** @type {?} */
74
- export const KEY_8 = 56;
75
- /** @type {?} */
76
- export const KEY_9 = 57;
77
- /** @type {?} */
78
- export const KEY_SEMICOLON = 59;
79
- /** @type {?} */
80
- export const 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
- export class FsUtil {
86
- constructor() {
87
- this.intervals = {};
88
- }
89
- /**
90
- * @deprecated use \@firestitch/common/util/guid instead
91
- * @param {?=} pattern
92
- * @return {?}
93
- */
94
- guid(pattern) {
95
- console.warn('@deprecated use @firestitch/common/util/guid instead');
96
- pattern = pattern || 'xxxxxx';
97
- return pattern.replace(/[xy]/g, (/**
98
- * @param {?} c
99
- * @return {?}
100
- */
101
- function (c) {
102
- /** @type {?} */
103
- var r = Math.random() * 16 | 0;
104
- /** @type {?} */
105
- var v = c == 'x' ? r : (r & 0x3 | 0x8);
106
- return v.toString(16);
107
- }));
108
- }
109
- /**
110
- * @deprecated use import { uuid } from \@firestitch/common/util; instead
111
- * @return {?}
112
- */
113
- uuid() {
114
- console.warn('@deprecated use @firestitch/common/util/uuid instead');
115
- return this.guid('xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx');
116
- }
117
- /**
118
- * @deprecated use import { resolve } from \@firestitch/common/util; instead
119
- * @param {?} promise
120
- * @param {?=} defaults
121
- * @return {?}
122
- */
123
- resolve(promise, defaults = []) {
124
- console.warn('@deprecated use @firestitch/common/util/resolve instead');
125
- /** @type {?} */
126
- const result = defaults;
127
- return new Promise((/**
128
- * @param {?} resolve
129
- * @return {?}
130
- */
131
- resolve => {
132
- promise.then((/**
133
- * @param {?} data
134
- * @return {?}
135
- */
136
- function (data) {
137
- Object.keys(data).forEach((/**
138
- * @param {?} key
139
- * @return {?}
140
- */
141
- key => result[key] = data[key]));
142
- resolve(result);
143
- }));
144
- }));
145
- }
146
- /**
147
- * @deprecated use _.toInteger() instead
148
- * @param {?} value
149
- * @return {?}
150
- */
151
- int(value) {
152
- console.warn('@deprecated use _.toInteger() instead');
153
- value = parseInt(value);
154
- if (isNaN(value)) {
155
- value = 0;
156
- }
157
- return value;
158
- }
159
- /**
160
- * @deprecated use _.toFinite() instead
161
- * @param {?} value
162
- * @return {?}
163
- */
164
- float(value) {
165
- console.warn('@deprecated use _.toFinite() instead');
166
- value = parseFloat(value);
167
- if (isNaN(value)) {
168
- value = 0;
169
- }
170
- return value;
171
- }
172
- /**
173
- * @deprecated use _.toString() instead
174
- * @param {?} string
175
- * @return {?}
176
- */
177
- string(string) {
178
- console.warn('@deprecated use _.toString() instead');
179
- if (string === null || string === undefined) {
180
- string = '';
181
- }
182
- return (string).toString();
183
- }
184
- /**
185
- * @deprecated use import { isEmpty } from \@firestitch/common/util; instead
186
- * @param {?} value
187
- * @param {?=} options
188
- * @return {?}
189
- */
190
- isEmpty(value, options) {
191
- console.warn('@deprecated use import { isEmpty } from @firestitch/common/util; instead');
192
- options = options || {};
193
- return value === undefined ||
194
- value === null ||
195
- value === false ||
196
- value === '' ||
197
- !this.string(value).length ||
198
- (this.isObject(value) &&
199
- (value.constructor.name === 'Object' && !Object.keys(value).length)) ||
200
- (!options.zero && (value === 0 || value === '0'));
201
- }
202
- /**
203
- * @deprecated use _.isInteger() instead
204
- * @param {?} value
205
- * @param {?=} type
206
- * @return {?}
207
- */
208
- isInt(value, type) {
209
- console.warn('@deprecated use _.isInteger() instead');
210
- /** @type {?} */
211
- const int = !!this.string(value).match(/^\d+$/);
212
- if (!int) {
213
- return false;
214
- }
215
- if (type) {
216
- return Number.isInteger(value);
217
- }
218
- return true;
219
- }
220
- /**
221
- * @deprecated use _.each() instead {\@link https://lodash.com/docs/4.17.5#forEach}
222
- * @param {?} object
223
- * @param {?} func
224
- * @return {?}
225
- */
226
- each(object, func) {
227
- console.warn('@deprecated use _.each() instead {@link https://lodash.com/docs/4.17.5#forEach}');
228
- if (!this.isArray(object) && !this.isObject(object)) {
229
- return;
230
- }
231
- Object.keys(object).forEach((/**
232
- * @param {?} key
233
- * @return {?}
234
- */
235
- function (key) {
236
- func(object[key], key);
237
- }));
238
- }
239
- /**
240
- * @deprecated use _.isArrayLikeObject() {\@link https://lodash.com/docs/4.17.5#isArrayLikeObject}
241
- * or _.isObject() {\@link https://lodash.com/docs/4.17.5#isObject} instead
242
- * @param {?} value
243
- * @return {?}
244
- */
245
- isObject(value) {
246
- 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');
247
- return value !== null && typeof value === 'object' && !this.isArray(value);
248
- }
249
- /**
250
- * @deprecated use _.isString() instead {\@link https://lodash.com/docs/4.17.5#isString}
251
- * @param {?} value
252
- * @return {?}
253
- */
254
- isString(value) {
255
- console.warn('@deprecated use _.isString() instead {@link https://lodash.com/docs/4.17.5#isString}');
256
- return typeof value === 'string' || value instanceof String;
257
- }
258
- /**
259
- * @deprecated use _.isArray() instead {\@link https://lodash.com/docs/4.17.5#isArray}
260
- * @param {?} value
261
- * @return {?}
262
- */
263
- isArray(value) {
264
- console.warn('@deprecated use _.isArray() instead {@link https://lodash.com/docs/4.17.5#isArray}');
265
- return value instanceof Array;
266
- }
267
- /**
268
- * @deprecated use import { isNumeric } from \@firestitch/common/util; instead
269
- * @param {?} value
270
- * @return {?}
271
- */
272
- isNumeric(value) {
273
- console.warn('@deprecated use import { isNumeric } from @firestitch/common/util; instead');
274
- return this.string(value).length && !!this.string(value).match(/^-?\d*\.?\d*$/);
275
- }
276
- /**
277
- * @deprecated use import { isClass } from \@firestitch/common/util; instead
278
- * @param {?} value
279
- * @param {?} cls
280
- * @return {?}
281
- */
282
- isClass(value, cls) {
283
- console.warn('@deprecated use import { isClass } from @firestitch/common/util; instead');
284
- if (this.isObject(value)) {
285
- if (this.isString(cls)) {
286
- if (value.constructor) {
287
- if (value.constructor.name === cls) {
288
- return true;
289
- }
290
- }
291
- }
292
- else {
293
- if (value instanceof cls) {
294
- return true;
295
- }
296
- }
297
- }
298
- return false;
299
- }
300
- /**
301
- * @deprecated use _.isBoolean() instead {\@link https://lodash.com/docs/4.17.5#isBoolean}
302
- * @param {?} value
303
- * @return {?}
304
- */
305
- isBoolean(value) {
306
- console.warn('@deprecated use _.isBoolean() instead {@link https://lodash.com/docs/4.17.5#isBoolean}');
307
- return value === true || value === false;
308
- }
309
- /**
310
- * @deprecated use import { value } from \@firestitch/common/util; instead
311
- * @param {?} object
312
- * @param {?} key
313
- * @param {?} def
314
- * @return {?}
315
- */
316
- value(object, key, def) {
317
- console.warn('@deprecated use import { value } from @firestitch/common/util; instead');
318
- if (this.isObject(object) || this.isArray(object)) {
319
- if (object.hasOwnProperty(key)) {
320
- return object[key];
321
- }
322
- }
323
- return def;
324
- }
325
- /**
326
- * @param {?} func
327
- * @param {?} wait
328
- * @return {?}
329
- */
330
- throttle(func, wait) {
331
- console.warn('@deprecated use import { throttle } from @firestitch/common/util; instead');
332
- /** @type {?} */
333
- let waiting = false;
334
- return (/**
335
- * @return {?}
336
- */
337
- function () {
338
- if (!waiting) { // If we're not waiting
339
- func.apply(null, arguments); // Execute users function
340
- waiting = true; // Prevent future invocations
341
- setTimeout((/**
342
- * @return {?}
343
- */
344
- function () {
345
- waiting = false; // And allow future invocations
346
- }), wait);
347
- }
348
- });
349
- }
350
- /**
351
- * @deprecated use import { debounce } from \@firestitch/common/util; instead
352
- * @param {?} func
353
- * @param {?} wait
354
- * @param {?} immediate
355
- * @return {?}
356
- */
357
- debounce(func, wait, immediate) {
358
- console.warn('@deprecated use import { debounce } from @firestitch/common/util; instead');
359
- /** @type {?} */
360
- var timeout;
361
- return (/**
362
- * @return {?}
363
- */
364
- function () {
365
- /** @type {?} */
366
- var context = this;
367
- /** @type {?} */
368
- var args = arguments;
369
- /** @type {?} */
370
- var later = (/**
371
- * @return {?}
372
- */
373
- function () {
374
- timeout = null;
375
- if (!immediate)
376
- func.apply(context, args);
377
- });
378
- /** @type {?} */
379
- var callNow = immediate && !timeout;
380
- clearTimeout(timeout);
381
- timeout = setTimeout(later, wait);
382
- if (callNow)
383
- func.apply(context, args);
384
- });
385
- }
386
- /**
387
- * @deprecated use import { length } from \@firestitch/common/util; instead
388
- * @param {?} object
389
- * @return {?}
390
- */
391
- length(object) {
392
- console.warn('@deprecated use import { length } from @firestitch/common/util; instead');
393
- if (this.isObject(object)) {
394
- return Object.keys(object).length;
395
- }
396
- if (this.isArray(object)) {
397
- return object.length;
398
- }
399
- return 0;
400
- }
401
- /**
402
- * @deprecated use import { boolean } from \@firestitch/common/util; instead
403
- * @param {?} value
404
- * @return {?}
405
- */
406
- boolean(value) {
407
- console.warn('@deprecated use import { boolean } from @firestitch/common/util; instead');
408
- return this.string(value).toLowerCase() !== 'false' && !!value;
409
- }
410
- /**
411
- * @deprecated use import { stringify } from \@firestitch/common/util; instead
412
- * @param {?} value
413
- * @return {?}
414
- */
415
- stringify(value) {
416
- console.warn('@deprecated use import { stringify } from @firestitch/common/util; instead');
417
- return JSON.stringify(value);
418
- }
419
- }
420
- FsUtil.decorators = [
421
- { type: Injectable }
422
- ];
423
- if (false) {
424
- /**
425
- * @type {?}
426
- * @private
427
- */
428
- FsUtil.prototype.intervals;
429
- }
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 const KEY_CANCEL = 3;
9
+ /** @type {?} */
10
+ export const KEY_HELP = 6;
11
+ /** @type {?} */
12
+ export const KEY_BACKSPACE = 8;
13
+ /** @type {?} */
14
+ export const KEY_TAB = 9;
15
+ /** @type {?} */
16
+ export const KEY_CLEAR = 12;
17
+ /** @type {?} */
18
+ export const KEY_RETURN = 13;
19
+ /** @type {?} */
20
+ export const KEY_ENTER = 14;
21
+ /** @type {?} */
22
+ export const KEY_SHIFT = 16;
23
+ /** @type {?} */
24
+ export const KEY_CONTROL = 17;
25
+ /** @type {?} */
26
+ export const KEY_ALT = 18;
27
+ /** @type {?} */
28
+ export const KEY_PAUSE = 19;
29
+ /** @type {?} */
30
+ export const KEY_CAPS_LOCK = 20;
31
+ /** @type {?} */
32
+ export const KEY_ESCAPE = 27;
33
+ /** @type {?} */
34
+ export const KEY_SPACE = 32;
35
+ /** @type {?} */
36
+ export const KEY_PAGE_UP = 33;
37
+ /** @type {?} */
38
+ export const KEY_PAGE_DOWN = 34;
39
+ /** @type {?} */
40
+ export const KEY_END = 35;
41
+ /** @type {?} */
42
+ export const KEY_HOME = 36;
43
+ /** @type {?} */
44
+ export const KEY_LEFT = 37;
45
+ /** @type {?} */
46
+ export const KEY_UP = 38;
47
+ /** @type {?} */
48
+ export const KEY_RIGHT = 39;
49
+ /** @type {?} */
50
+ export const KEY_DOWN = 40;
51
+ /** @type {?} */
52
+ export const KEY_PRINTSCREEN = 44;
53
+ /** @type {?} */
54
+ export const KEY_INSERT = 45;
55
+ /** @type {?} */
56
+ export const KEY_DELETE = 46;
57
+ /** @type {?} */
58
+ export const KEY_0 = 48;
59
+ /** @type {?} */
60
+ export const KEY_1 = 49;
61
+ /** @type {?} */
62
+ export const KEY_2 = 50;
63
+ /** @type {?} */
64
+ export const KEY_3 = 51;
65
+ /** @type {?} */
66
+ export const KEY_4 = 52;
67
+ /** @type {?} */
68
+ export const KEY_5 = 53;
69
+ /** @type {?} */
70
+ export const KEY_6 = 54;
71
+ /** @type {?} */
72
+ export const KEY_7 = 55;
73
+ /** @type {?} */
74
+ export const KEY_8 = 56;
75
+ /** @type {?} */
76
+ export const KEY_9 = 57;
77
+ /** @type {?} */
78
+ export const KEY_SEMICOLON = 59;
79
+ /** @type {?} */
80
+ export const 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
+ export class FsUtil {
86
+ constructor() {
87
+ this.intervals = {};
88
+ }
89
+ /**
90
+ * @deprecated use \@firestitch/common/util/guid instead
91
+ * @param {?=} pattern
92
+ * @return {?}
93
+ */
94
+ guid(pattern) {
95
+ console.warn('@deprecated use @firestitch/common/util/guid instead');
96
+ pattern = pattern || 'xxxxxx';
97
+ return pattern.replace(/[xy]/g, (/**
98
+ * @param {?} c
99
+ * @return {?}
100
+ */
101
+ function (c) {
102
+ /** @type {?} */
103
+ var r = Math.random() * 16 | 0;
104
+ /** @type {?} */
105
+ var v = c == 'x' ? r : (r & 0x3 | 0x8);
106
+ return v.toString(16);
107
+ }));
108
+ }
109
+ /**
110
+ * @deprecated use import { uuid } from \@firestitch/common/util; instead
111
+ * @return {?}
112
+ */
113
+ uuid() {
114
+ console.warn('@deprecated use @firestitch/common/util/uuid instead');
115
+ return this.guid('xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx');
116
+ }
117
+ /**
118
+ * @deprecated use import { resolve } from \@firestitch/common/util; instead
119
+ * @param {?} promise
120
+ * @param {?=} defaults
121
+ * @return {?}
122
+ */
123
+ resolve(promise, defaults = []) {
124
+ console.warn('@deprecated use @firestitch/common/util/resolve instead');
125
+ /** @type {?} */
126
+ const result = defaults;
127
+ return new Promise((/**
128
+ * @param {?} resolve
129
+ * @return {?}
130
+ */
131
+ resolve => {
132
+ promise.then((/**
133
+ * @param {?} data
134
+ * @return {?}
135
+ */
136
+ function (data) {
137
+ Object.keys(data).forEach((/**
138
+ * @param {?} key
139
+ * @return {?}
140
+ */
141
+ key => result[key] = data[key]));
142
+ resolve(result);
143
+ }));
144
+ }));
145
+ }
146
+ /**
147
+ * @deprecated use _.toInteger() instead
148
+ * @param {?} value
149
+ * @return {?}
150
+ */
151
+ int(value) {
152
+ console.warn('@deprecated use _.toInteger() instead');
153
+ value = parseInt(value);
154
+ if (isNaN(value)) {
155
+ value = 0;
156
+ }
157
+ return value;
158
+ }
159
+ /**
160
+ * @deprecated use _.toFinite() instead
161
+ * @param {?} value
162
+ * @return {?}
163
+ */
164
+ float(value) {
165
+ console.warn('@deprecated use _.toFinite() instead');
166
+ value = parseFloat(value);
167
+ if (isNaN(value)) {
168
+ value = 0;
169
+ }
170
+ return value;
171
+ }
172
+ /**
173
+ * @deprecated use _.toString() instead
174
+ * @param {?} string
175
+ * @return {?}
176
+ */
177
+ string(string) {
178
+ console.warn('@deprecated use _.toString() instead');
179
+ if (string === null || string === undefined) {
180
+ string = '';
181
+ }
182
+ return (string).toString();
183
+ }
184
+ /**
185
+ * @deprecated use import { isEmpty } from \@firestitch/common/util; instead
186
+ * @param {?} value
187
+ * @param {?=} options
188
+ * @return {?}
189
+ */
190
+ isEmpty(value, options) {
191
+ console.warn('@deprecated use import { isEmpty } from @firestitch/common/util; instead');
192
+ options = options || {};
193
+ return value === undefined ||
194
+ value === null ||
195
+ value === false ||
196
+ value === '' ||
197
+ !this.string(value).length ||
198
+ (this.isObject(value) &&
199
+ (value.constructor.name === 'Object' && !Object.keys(value).length)) ||
200
+ (!options.zero && (value === 0 || value === '0'));
201
+ }
202
+ /**
203
+ * @deprecated use _.isInteger() instead
204
+ * @param {?} value
205
+ * @param {?=} type
206
+ * @return {?}
207
+ */
208
+ isInt(value, type) {
209
+ console.warn('@deprecated use _.isInteger() instead');
210
+ /** @type {?} */
211
+ const int = !!this.string(value).match(/^\d+$/);
212
+ if (!int) {
213
+ return false;
214
+ }
215
+ if (type) {
216
+ return Number.isInteger(value);
217
+ }
218
+ return true;
219
+ }
220
+ /**
221
+ * @deprecated use _.each() instead {\@link https://lodash.com/docs/4.17.5#forEach}
222
+ * @param {?} object
223
+ * @param {?} func
224
+ * @return {?}
225
+ */
226
+ each(object, func) {
227
+ console.warn('@deprecated use _.each() instead {@link https://lodash.com/docs/4.17.5#forEach}');
228
+ if (!this.isArray(object) && !this.isObject(object)) {
229
+ return;
230
+ }
231
+ Object.keys(object).forEach((/**
232
+ * @param {?} key
233
+ * @return {?}
234
+ */
235
+ function (key) {
236
+ func(object[key], key);
237
+ }));
238
+ }
239
+ /**
240
+ * @deprecated use _.isArrayLikeObject() {\@link https://lodash.com/docs/4.17.5#isArrayLikeObject}
241
+ * or _.isObject() {\@link https://lodash.com/docs/4.17.5#isObject} instead
242
+ * @param {?} value
243
+ * @return {?}
244
+ */
245
+ isObject(value) {
246
+ 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');
247
+ return value !== null && typeof value === 'object' && !this.isArray(value);
248
+ }
249
+ /**
250
+ * @deprecated use _.isString() instead {\@link https://lodash.com/docs/4.17.5#isString}
251
+ * @param {?} value
252
+ * @return {?}
253
+ */
254
+ isString(value) {
255
+ console.warn('@deprecated use _.isString() instead {@link https://lodash.com/docs/4.17.5#isString}');
256
+ return typeof value === 'string' || value instanceof String;
257
+ }
258
+ /**
259
+ * @deprecated use _.isArray() instead {\@link https://lodash.com/docs/4.17.5#isArray}
260
+ * @param {?} value
261
+ * @return {?}
262
+ */
263
+ isArray(value) {
264
+ console.warn('@deprecated use _.isArray() instead {@link https://lodash.com/docs/4.17.5#isArray}');
265
+ return value instanceof Array;
266
+ }
267
+ /**
268
+ * @deprecated use import { isNumeric } from \@firestitch/common/util; instead
269
+ * @param {?} value
270
+ * @return {?}
271
+ */
272
+ isNumeric(value) {
273
+ console.warn('@deprecated use import { isNumeric } from @firestitch/common/util; instead');
274
+ return this.string(value).length && !!this.string(value).match(/^-?\d*\.?\d*$/);
275
+ }
276
+ /**
277
+ * @deprecated use import { isClass } from \@firestitch/common/util; instead
278
+ * @param {?} value
279
+ * @param {?} cls
280
+ * @return {?}
281
+ */
282
+ isClass(value, cls) {
283
+ console.warn('@deprecated use import { isClass } from @firestitch/common/util; instead');
284
+ if (this.isObject(value)) {
285
+ if (this.isString(cls)) {
286
+ if (value.constructor) {
287
+ if (value.constructor.name === cls) {
288
+ return true;
289
+ }
290
+ }
291
+ }
292
+ else {
293
+ if (value instanceof cls) {
294
+ return true;
295
+ }
296
+ }
297
+ }
298
+ return false;
299
+ }
300
+ /**
301
+ * @deprecated use _.isBoolean() instead {\@link https://lodash.com/docs/4.17.5#isBoolean}
302
+ * @param {?} value
303
+ * @return {?}
304
+ */
305
+ isBoolean(value) {
306
+ console.warn('@deprecated use _.isBoolean() instead {@link https://lodash.com/docs/4.17.5#isBoolean}');
307
+ return value === true || value === false;
308
+ }
309
+ /**
310
+ * @deprecated use import { value } from \@firestitch/common/util; instead
311
+ * @param {?} object
312
+ * @param {?} key
313
+ * @param {?} def
314
+ * @return {?}
315
+ */
316
+ value(object, key, def) {
317
+ console.warn('@deprecated use import { value } from @firestitch/common/util; instead');
318
+ if (this.isObject(object) || this.isArray(object)) {
319
+ if (object.hasOwnProperty(key)) {
320
+ return object[key];
321
+ }
322
+ }
323
+ return def;
324
+ }
325
+ /**
326
+ * @param {?} func
327
+ * @param {?} wait
328
+ * @return {?}
329
+ */
330
+ throttle(func, wait) {
331
+ console.warn('@deprecated use import { throttle } from @firestitch/common/util; instead');
332
+ /** @type {?} */
333
+ let waiting = false;
334
+ return (/**
335
+ * @return {?}
336
+ */
337
+ function () {
338
+ if (!waiting) { // If we're not waiting
339
+ func.apply(null, arguments); // Execute users function
340
+ waiting = true; // Prevent future invocations
341
+ setTimeout((/**
342
+ * @return {?}
343
+ */
344
+ function () {
345
+ waiting = false; // And allow future invocations
346
+ }), wait);
347
+ }
348
+ });
349
+ }
350
+ /**
351
+ * @deprecated use import { debounce } from \@firestitch/common/util; instead
352
+ * @param {?} func
353
+ * @param {?} wait
354
+ * @param {?} immediate
355
+ * @return {?}
356
+ */
357
+ debounce(func, wait, immediate) {
358
+ console.warn('@deprecated use import { debounce } from @firestitch/common/util; instead');
359
+ /** @type {?} */
360
+ var timeout;
361
+ return (/**
362
+ * @return {?}
363
+ */
364
+ function () {
365
+ /** @type {?} */
366
+ var context = this;
367
+ /** @type {?} */
368
+ var args = arguments;
369
+ /** @type {?} */
370
+ var later = (/**
371
+ * @return {?}
372
+ */
373
+ function () {
374
+ timeout = null;
375
+ if (!immediate)
376
+ func.apply(context, args);
377
+ });
378
+ /** @type {?} */
379
+ var callNow = immediate && !timeout;
380
+ clearTimeout(timeout);
381
+ timeout = setTimeout(later, wait);
382
+ if (callNow)
383
+ func.apply(context, args);
384
+ });
385
+ }
386
+ /**
387
+ * @deprecated use import { length } from \@firestitch/common/util; instead
388
+ * @param {?} object
389
+ * @return {?}
390
+ */
391
+ length(object) {
392
+ console.warn('@deprecated use import { length } from @firestitch/common/util; instead');
393
+ if (this.isObject(object)) {
394
+ return Object.keys(object).length;
395
+ }
396
+ if (this.isArray(object)) {
397
+ return object.length;
398
+ }
399
+ return 0;
400
+ }
401
+ /**
402
+ * @deprecated use import { boolean } from \@firestitch/common/util; instead
403
+ * @param {?} value
404
+ * @return {?}
405
+ */
406
+ boolean(value) {
407
+ console.warn('@deprecated use import { boolean } from @firestitch/common/util; instead');
408
+ return this.string(value).toLowerCase() !== 'false' && !!value;
409
+ }
410
+ /**
411
+ * @deprecated use import { stringify } from \@firestitch/common/util; instead
412
+ * @param {?} value
413
+ * @return {?}
414
+ */
415
+ stringify(value) {
416
+ console.warn('@deprecated use import { stringify } from @firestitch/common/util; instead');
417
+ return JSON.stringify(value);
418
+ }
419
+ }
420
+ FsUtil.decorators = [
421
+ { type: Injectable }
422
+ ];
423
+ if (false) {
424
+ /**
425
+ * @type {?}
426
+ * @private
427
+ */
428
+ FsUtil.prototype.intervals;
429
+ }
430
430
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGZpcmVzdGl0Y2gvY29tbW9uLyIsInNvdXJjZXMiOlsiYXBwL3NlcnZpY2VzL3V0aWwuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBRTNDLE1BQU0sT0FBTyxVQUFVLEdBQUcsQ0FBQzs7QUFBM0IsTUFBTSxPQUNGLFFBQVEsR0FBRyxDQUFDOztBQURoQixNQUFNLE9BRUYsYUFBYSxHQUFHLENBQUM7O0FBRnJCLE1BQU0sT0FHRixPQUFPLEdBQUcsQ0FBQzs7QUFIZixNQUFNLE9BSUYsU0FBUyxHQUFHLEVBQUU7O0FBSmxCLE1BQU0sT0FLRixVQUFVLEdBQUcsRUFBRTs7QUFMbkIsTUFBTSxPQU1GLFNBQVMsR0FBRyxFQUFFOztBQU5sQixNQUFNLE9BT0YsU0FBUyxHQUFHLEVBQUU7O0FBUGxCLE1BQU0sT0FRRixXQUFXLEdBQUcsRUFBRTs7QUFScEIsTUFBTSxPQVNGLE9BQU8sR0FBRyxFQUFFOztBQVRoQixNQUFNLE9BVUYsU0FBUyxHQUFHLEVBQUU7O0FBVmxCLE1BQU0sT0FXRixhQUFhLEdBQUcsRUFBRTs7QUFYdEIsTUFBTSxPQVlGLFVBQVUsR0FBRyxFQUFFOztBQVpuQixNQUFNLE9BYUYsU0FBUyxHQUFHLEVBQUU7O0FBYmxCLE1BQU0sT0FjRixXQUFXLEdBQUcsRUFBRTs7QUFkcEIsTUFBTSxPQWVGLGFBQWEsR0FBRyxFQUFFOztBQWZ0QixNQUFNLE9BZ0JGLE9BQU8sR0FBRyxFQUFFOztBQWhCaEIsTUFBTSxPQWlCRixRQUFRLEdBQUcsRUFBRTs7QUFqQmpCLE1BQU0sT0FrQkYsUUFBUSxHQUFHLEVBQUU7O0FBbEJqQixNQUFNLE9BbUJGLE1BQU0sR0FBRyxFQUFFOztBQW5CZixNQUFNLE9Bb0JGLFNBQVMsR0FBRyxFQUFFOztBQXBCbEIsTUFBTSxPQXFCRixRQUFRLEdBQUcsRUFB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LElBQUksQ0FBQyxPQUFPO1lBQ25DLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUN0QixPQUFPLEdBQUcsVUFBVSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztZQUNsQyxJQUFJLE9BQU87Z0JBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDM0MsQ0FBQyxFQUFDO0lBQ04sQ0FBQzs7Ozs7O0lBS00sTUFBTSxDQUFDLE1BQU07UUFDbEIsT0FBTyxDQUFDLElBQUksQ0FBQyx5RUFBeUUsQ0FBQyxDQUFDO1FBQ3hGLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUNyQixPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDO1NBQ3JDO1FBRUQsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ3RCLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQztTQUN4QjtRQUVELE9BQU8sQ0FBQyxDQUFDO0lBQ2IsQ0FBQzs7Ozs7O0lBS00sT0FBTyxDQUFDLEtBQUs7UUFDbEIsT0FBTyxDQUFDLElBQUksQ0FBQywwRUFBMEUsQ0FBQyxDQUFDO1FBQ3pGLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxXQUFXLEVBQUUsS0FBSyxPQUFPLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQztJQUNqRSxDQUFDOzs7Ozs7SUFLTSxTQUFTLENBQUMsS0FBSztRQUNwQixPQUFPLENBQUMsSUFBSSxDQUFDLDRFQUE0RSxDQUFDLENBQUM7UUFDM0YsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQy9CLENBQUM7OztZQTlRSixVQUFVOzs7Ozs7O0lBR1AsMkJBQXVCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5leHBvcnQgY29uc3QgS0VZX0NBTkNFTCA9IDMsXG4gICAgS0VZX0hFTFAgPSA2LFxuICAgIEtFWV9CQUNLU1BBQ0UgPSA4LFxuICAgIEtFWV9UQUIgPSA5LFxuICAgIEtFWV9DTEVBUiA9IDEyLFxuICAgIEtFWV9SRVRVUk4gPSAxMyxcbiAgICBLRVlfRU5URVIgPSAxNCxcbiAgICBLRVlfU0hJRlQgPSAxNixcbiAgICBLRVlfQ09OVFJPTCA9IDE3LFxuICAgIEtFWV9BTFQgPSAxOCxcbiAgICBLRVlfUEFVU0UgPSAxOSxcbiAgICBLRVlfQ0FQU19MT0NLID0gMjAsXG4gICAgS0VZX0VTQ0FQRSA9IDI3LFxuICAgIEtFWV9TUEFDRSA9IDMyLFxuICAgIEtFWV9QQUdFX1VQID0gMzMsXG4gICAgS0VZX1BBR0VfRE9XTiA9IDM0LFxuICAgIEtFWV9FTkQgPSAzNSxcbiAgICBLRVlfSE9NRSA9IDM2LFxuICAgIEtFWV9MRUZUID0gMzcsXG4gICAgS0VZX1VQID0gMzgsXG4gICAgS0VZX1JJR0hUID0gMzksXG4gICAgS0VZX0RPV04gPSA0MCxcbiAgICBLRVlfUFJJTlRTQ1JFRU4gPSA0NCxcbiAgICBLRVlfSU5TRVJUID0gNDUsXG4gICAgS0VZX0RFTEVURSA9IDQ2LFxuICAgIEtFWV8wID0gNDgsXG4gICAgS0VZXzEgPSA0OSxcbiAgICBLRVlfMiA9IDUwLFxuICAgIEtFWV8zID0gNTEsXG4gICAgS0VZXzQgPSA1MixcbiAgICBLRVlfNSA9IDUzLFxuICAgIEtFWV82ID0gNTQsXG4gICAgS0VZXzcgPSA1NSxcbiAgICBLRVlfOCA9IDU2LFxuICAgIEtFWV85ID0gNTcsXG4gICAgS0VZX1NFTUlDT0xPTiA9IDU5LFxuICAgIEtFWV9FUVVBTFMgPSA2MTtcblxuLypcbiAgICBCYXNpY2FsbHksIGp1c3QgY29weS1wYXN0ZWQgZnVuY3Rpb25hbGl0eSBmcm9tIGZzLWJvaWxlcnBsYXRlIHYxLngsIHdpdGggc29tZSBzbWFsbCBjaGFuZ2VzIChsaWtlIHdlIGRvbnQgaGF2ZSBhbmd1bGFyLmJpbmQgYW55bW9yZSwgaGFkIHRvIGdvIHdpdGggYSB3b3JrYXJvdW5kKVxuICAgIFRoZXJlIG1pZ2h0IGJlIGEgYmV0dGVyIHdheSB0byBvcmdhbmlzZSBjb25zdGF0bnMgYnV0IEkgbmVlZCB0byBrbm93IHVzZS1jYXNlc1xuKi9cblxuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgRnNVdGlsIHtcblxuICAgIHByaXZhdGUgaW50ZXJ2YWxzID0ge307XG5cbiAgICAvKipcbiAgICAqIEBkZXByZWNhdGVkIHVzZSBAZmlyZXN0aXRjaC9jb21tb24vdXRpbC9ndWlkIGluc3RlYWRcbiAgICAqL1xuICAgIHB1YmxpYyBndWlkKHBhdHRlcm4/OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgY29uc29sZS53YXJuKCdAZGVwcmVjYXRlZCB1c2UgQGZpcmVzdGl0Y2gvY29tbW9uL3V0aWwvZ3VpZCBpbnN0ZWFkJyk7XG4gICAgICBwYXR0ZXJuID0gcGF0dGVybiB8fCAneHh4eHh4JztcbiAgICAgIHJldHVybiBwYXR0ZXJuLnJlcGxhY2UoL1t4eV0vZywgZnVuY3Rpb24oYykge1xuICAgICAgICB2YXIgciA9IE1hdGgucmFuZG9tKCkgKiAxNiB8IDAsIHYgPSBjID09ICd4JyA/IHIgOiAociAmIDB4MyB8IDB4OCk7XG4gICAgICAgIHJldHVybiB2LnRvU3RyaW5nKDE2KTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBkZXByZWNhdGVkIHVzZSBpbXBvcnQgeyB1dWlkIH0gZnJvbSBAZmlyZXN0aXRjaC9jb21tb24vdXRpbDsgaW5zdGVhZFxuICAgICovXG4gICAgcHVibGljIHV1aWQoKTogc3RyaW5nIHtcbiAgICAgIGNvbnNvbGUud2FybignQGRlcHJlY2F0ZWQgdXNlIEBmaXJlc3RpdGNoL2NvbW1vbi91dGlsL3V1aWQgaW5zdGVhZCcpO1xuICAgICAgcmV0dXJuIHRoaXMuZ3VpZCgneHh4eHh4eHgteHh4eC14eHh4LXh4eHgteHh4eHh4eHh4eHh4Jyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWQgdXNlIGltcG9ydCB7IHJlc29sdmUgfSBmcm9tIEBmaXJlc3RpdGNoL2NvbW1vbi91dGlsOyBpbnN0ZWFkXG4gICAgKi9cbiAgICBwdWJsaWMgcmVzb2x2ZShwcm9taXNlOiBQcm9taXNlPG9iamVjdD4sIGRlZmF1bHRzID0gW10pOiBQcm9taXNlPG9iamVjdD4ge1xuICAgICAgY29uc29sZS53YXJuKCdAZGVwcmVjYXRlZCB1c2UgQGZpcmVzdGl0Y2gvY29tbW9uL3V0aWwvcmVzb2x2ZSBpbnN0ZWFkJyk7XG4gICAgICBjb25zdCByZXN1bHQgPSBkZWZhdWx0cztcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgICAgICAgIHByb21pc2UudGhlbihmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICAgICAgICAgIE9iamVjdC5rZXlzKGRhdGEpLmZvckVhY2goa2V5ID0+IHJlc3VsdFtrZXldID0gZGF0YVtrZXldKVxuICAgICAgICAgICAgICAgIHJlc29sdmUocmVzdWx0KVxuICAgICAgICAgICAgfSk7XG4gICAgICAgfSlcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAZGVwcmVjYXRlZCB1c2UgXy50b0ludGVnZXIoKSBpbnN0ZWFkXG4gICAgKi9cbiAgICBwdWJsaWMgaW50KHZhbHVlOiBhbnkpOiBudW1iZXIge1xuICAgICAgICBjb25zb2xlLndhcm4oJ0BkZXByZWNhdGVkIHVzZSBfLnRvSW50ZWdlcigpIGluc3RlYWQnKTtcbiAgICAgICAgdmFsdWUgPSBwYXJzZUludCh2YWx1ZSk7XG4gICAgICAgIGlmIChpc05hTih2YWx1ZSkpIHtcbiAgICAgICAgICAgIHZhbHVlID0gMDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWQgdXNlIF8udG9GaW5pdGUoKSBpbnN0ZWFkXG4gICAgKi9cbiAgICBwdWJsaWMgZmxvYXQodmFsdWUpOiBudW1iZXIge1xuICAgICAgY29uc29sZS53YXJuKCdAZGVwcmVjYXRlZCB1c2UgXy50b0Zpbml0ZSgpIGluc3RlYWQnKTtcbiAgICAgIHZhbHVlID0gcGFyc2VGbG9hdCh2YWx1ZSk7XG4gICAgICBpZiAoaXNOYU4odmFsdWUpKSB7XG4gICAgICAgICAgdmFsdWUgPSAwO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBkZXByZWNhdGVkIHVzZSBfLnRvU3RyaW5nKCkgaW5zdGVhZFxuICAgICovXG4gICAgcHVibGljIHN0cmluZyhzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgY29uc29sZS53YXJuKCdAZGVwcmVjYXRlZCB1c2UgXy50b1N0cmluZygpIGluc3RlYWQnKTtcbiAgICAgICAgaWYgKHN0cmluZyA9PT0gbnVsbCB8fCBzdHJpbmcgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgc3RyaW5nID0gJyc7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gKHN0cmluZykudG9TdHJpbmcoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAZGVwcmVjYXRlZCB1c2UgaW1wb3J0IHsgaXNFbXB0eSB9IGZyb20gQGZpcmVzdGl0Y2gvY29tbW9uL3V0aWw7IGluc3RlYWRcbiAgICAqL1xuICAgIHB1YmxpYyBpc0VtcHR5KHZhbHVlLCBvcHRpb25zPyk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zb2xlLndhcm4oJ0BkZXByZWNhdGVkIHVzZSBpbXBvcnQgeyBpc0VtcHR5IH0gZnJvbSBAZmlyZXN0aXRjaC9jb21tb24vdXRpbDsgaW5zdGVhZCcpO1xuICAgICAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgICAgICAgcmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQgfHxcbiAgICAgICAgICAgIHZhbHVlID09PSBudWxsIHx8XG4gICAgICAgICAgICB2YWx1ZSA9PT0gZmFsc2UgfHxcbiAgICAgICAgICAgIHZhbHVlID09PSAnJyB8fFxuICAgICAgICAgICAgIXRoaXMuc3RyaW5nKHZhbHVlKS5sZW5ndGggfHxcbiAgICAgICAgICAgIChcbiAgICAgICAgICAgICAgICB0aGlzLmlzT2JqZWN0KHZhbHVlKSAmJlxuICAgICAgICAgICAgICAgICh2YWx1ZS5jb25zdHJ1Y3Rvci5uYW1lID09PSAnT2JqZWN0JyAmJiAhT2JqZWN0LmtleXModmFsdWUpLmxlbmd0aCkpIHx8XG4gICAgICAgICAgICAgICAgKCFvcHRpb25zLnplcm8gJiYgKHZhbHVlID09PSAwIHx8IHZhbHVlID09PSAnMCcpXG4gICAgICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBkZXByZWNhdGVkIHVzZSBfLmlzSW50ZWdlcigpIGluc3RlYWRcbiAgICAqL1xuICAgIHB1YmxpYyBpc0ludCh2YWx1ZSwgdHlwZT8pIHtcbiAgICAgICAgY29uc29sZS53YXJuKCdAZGVwcmVjYXRlZCB1c2UgXy5pc0ludGVnZXIoKSBpbnN0ZWFkJyk7XG4gICAgICAgIGNvbnN0IGludCA9ICEhdGhpcy5zdHJpbmcodmFsdWUpLm1hdGNoKC9eXFxkKyQvKTtcblxuICAgICAgICBpZiAoIWludCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGUpIHtcbiAgICAgICAgICAgIHJldHVybiBOdW1iZXIuaXNJbnRlZ2VyKHZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBkZXByZWNhdGVkIHVzZSBfLmVhY2goKSBpbnN0ZWFkIHtAbGluayBodHRwczovL2xvZGFzaC5jb20vZG9jcy80LjE3LjUjZm9yRWFjaH1cbiAgICAqL1xuICAgIHB1YmxpYyBlYWNoKG9iamVjdCwgZnVuYykge1xuICAgICAgY29uc29sZS53YXJuKCdAZGVwcmVjYXRlZCB1c2UgXy5lYWNoKCkgaW5zdGVhZCB7QGxpbmsgaHR0cHM6Ly9sb2Rhc2guY29tL2RvY3MvNC4xNy41I2ZvckVhY2h9Jyk7XG4gICAgICBpZiAoIXRoaXMuaXNBcnJheShvYmplY3QpICYmICF0aGlzLmlzT2JqZWN0KG9iamVjdCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBPYmplY3Qua2V5cyhvYmplY3QpLmZvckVhY2goZnVuY3Rpb24oa2V5KSB7XG4gICAgICAgIGZ1bmMob2JqZWN0W2tleV0sa2V5KTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBkZXByZWNhdGVkIHVzZSBfLmlzQXJyYXlMaWtlT2JqZWN0KCkge0BsaW5rIGh0dHBzOi8vbG9kYXNoLmNvbS9kb2NzLzQuMTcuNSNpc0FycmF5TGlrZU9iamVjdH1cbiAgICAgKiBvciBfLmlzT2JqZWN0KCkge0BsaW5rIGh0dHBzOi8vbG9kYXNoLmNvbS9kb2NzLzQuMTcuNSNpc09iamVjdH0gaW5zdGVhZFxuICAgICovXG4gICAgcHVibGljIGlzT2JqZWN0KHZhbHVlKTogYm9vbGVhbiB7XG4gICAgICBjb25zb2xlLndhcm4oJ0BkZXByZWNhdGVkIHVzZSBfLmlzQXJyYXlMaWtlT2JqZWN0KCkge0BsaW5rIGh0dHBzOi8vbG9kYXNoLmNvbS9kb2NzLzQuMTcuNSNpc0FycmF5TGlrZU9iamVjdH0gb3IgXy5pc09iamVjdCgpIHtAbGluayBodHRwczovL2xvZGFzaC5jb20vZG9jcy80LjE3LjUjaXNPYmplY3R9IGluc3RlYWQnKTtcbiAgICAgIHJldHVybiB2YWx1ZSAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmICF0aGlzLmlzQXJyYXkodmFsdWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAgKiBAZGVwcmVjYXRlZCB1c2UgXy5pc1N0cmluZygpIGluc3RlYWQge0BsaW5rIGh0dHBzOi8vbG9kYXNoLmNvbS9kb2NzLzQuMTcuNSNpc1N0cmluZ31cbiAgICAqL1xuICAgIHB1YmxpYyBpc1N0cmluZyh2YWx1ZSk6IGJvb2xlYW4ge1xuICAgICAgY29uc29sZS53YXJuKCdAZGVwcmVjYXRlZCB1c2UgXy5pc1N0cmluZygpIGluc3RlYWQge0BsaW5rIGh0dHBzOi8vbG9kYXNoLmNvbS9kb2NzLzQuMTcuNSNpc1N0cmluZ30nKTtcbiAgICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnIHx8IHZhbHVlIGluc3RhbmNlb2YgU3RyaW5nO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBkZXByZWNhdGVkIHVzZSBfLmlzQXJyYXkoKSBpbnN0ZWFkIHtAbGluayBodHRwczovL2xvZGFzaC5jb20vZG9jcy80LjE3LjUjaXNBcnJheX1cbiAgICAqL1xuICAgIHB1YmxpYyBpc0FycmF5KHZhbHVlKTogYm9vbGVhbiB7XG4gICAgICBjb25zb2xlLndhcm4oJ0BkZXByZWNhdGVkIHVzZSBfLmlzQXJyYXkoKSBpbnN0ZWFkIHtAbGluayBodHRwczovL2xvZGFzaC5jb20vZG9jcy80LjE3LjUjaXNBcnJheX0nKTtcbiAgICAgIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIEFycmF5O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBkZXByZWNhdGVkIHVzZSBpbXBvcnQgeyBpc051bWVyaWMgfSBmcm9tIEBmaXJlc3RpdGNoL2NvbW1vbi91dGlsOyBpbnN0ZWFkXG4gICAgKi9cbiAgICBwdWJsaWMgaXNOdW1lcmljKHZhbHVlKTogYm9vbGVhbiB7XG4gICAgICBjb25zb2xlLndhcm4oJ0BkZXByZWNhdGVkIHVzZSBpbXBvcnQgeyBpc051bWVyaWMgfSBmcm9tIEBmaXJlc3RpdGNoL2NvbW1vbi91dGlsOyBpbnN0ZWFkJyk7XG4gICAgICByZXR1cm4gdGhpcy5zdHJpbmcodmFsdWUpLmxlbmd0aCAmJiAhIXRoaXMuc3RyaW5nKHZhbHVlKS5tYXRjaCgvXi0/XFxkKlxcLj9cXGQqJC8pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBkZXByZWNhdGVkIHVzZSBpbXBvcnQgeyBpc0NsYXNzIH0gZnJvbSBAZmlyZXN0aXRjaC9jb21tb24vdXRpbDsgaW5zdGVhZFxuICAgICovXG4gICAgcHVibGljIGlzQ2xhc3ModmFsdWUsIGNscykge1xuICAgICAgICBjb25zb2xlLndhcm4oJ0BkZXByZWNhdGVkIHVzZSBpbXBvcnQgeyBpc0NsYXNzIH0gZnJvbSBAZmlyZXN0aXRjaC9jb21tb24vdXRpbDsgaW5zdGVhZCcpO1xuICAgICAgICBpZiAodGhpcy5pc09iamVjdCh2YWx1ZSkpIHtcblxuICAgICAgICAgICAgaWYgKHRoaXMuaXNTdHJpbmcoY2xzKSkge1xuXG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlLmNvbnN0cnVjdG9yKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5jb25zdHJ1Y3Rvci5uYW1lID09PSBjbHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB9IGVsc2Uge1xuXG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgY2xzKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgICogQGRlcHJlY2F0ZWQgdXNlIF8uaXNCb29sZWFuKCkgaW5zdGVhZCB7QGxpbmsgaHR0cHM6Ly9sb2Rhc2guY29tL2RvY3MvNC4xNy41I2lzQm9vbGVhbn1cbiAgICAqL1xuICAgIHB1YmxpYyBpc0Jvb2xlYW4odmFsdWUpOiBib29sZWFuIHtcbiAgICAgIGNvbnNvbGUud2FybignQGRlcHJlY2F0ZWQgdXNlIF8uaXNCb29sZWFuKCkgaW5zdGVhZCB7QGxpbmsgaHR0cHM6Ly9sb2Rhc2guY29tL2RvY3MvNC4xNy41I2lzQm9vbGVhbn0nKTtcbiAgICAgIHJldHVybiB2YWx1ZSA9PT0gdHJ1ZSB8fCB2YWx1ZSA9PT0gZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWQgdXNlIGltcG9ydCB7IHZhbHVlIH0gZnJvbSBAZmlyZXN0aXRjaC9jb21tb24vdXRpbDsgaW5zdGVhZFxuICAgICovXG4gICAgcHVibGljIHZhbHVlKG9iamVjdCwga2V5LCBkZWYpOiBhbnkge1xuICAgICAgY29uc29sZS53YXJuKCdAZGVwcmVjYXRlZCB1c2UgaW1wb3J0IHsgdmFsdWUgfSBmcm9tIEBmaXJlc3RpdGNoL2NvbW1vbi91dGlsOyBpbnN0ZWFkJyk7XG4gICAgICAgIGlmICh0aGlzLmlzT2JqZWN0KG9iamVjdCkgfHwgdGhpcy5pc0FycmF5KG9iamVjdCkpIHtcblxuICAgICAgICAgICAgaWYgKG9iamVjdC5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9iamVjdFtrZXldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGRlZjtcbiAgICB9XG5cbiAgICBwdWJsaWMgdGhyb3R0bGUoZnVuYywgd2FpdCkge1xuICAgICAgY29uc29sZS53YXJuKCdAZGVwcmVjYXRlZCB1c2UgaW1wb3J0IHsgdGhyb3R0bGUgfSBmcm9tIEBmaXJlc3RpdGNoL2NvbW1vbi91dGlsOyBpbnN0ZWFkJyk7XG4gICAgICBsZXQgd2FpdGluZyA9IGZhbHNlOyAgICAgICAgICAgICAgICAgIFx0Ly8gSW5pdGlhbGx5LCB3ZSdyZSBub3Qgd2FpdGluZ1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkgeyAgICAgICAgICAgICAgIFx0XHQvLyBXZSByZXR1cm4gYSB0aHJvdHRsZWQgZnVuY3Rpb25cbiAgICAgICAgICAgIGlmICghd2FpdGluZykgeyAgICAgICAgICAgICAgICAgICBcdC8vIElmIHdlJ3JlIG5vdCB3YWl0aW5nXG4gICAgICAgICAgICAgICAgZnVuYy5hcHBseShudWxsLCBhcmd1bWVudHMpOyAgICAgLy8gRXhlY3V0ZSB1c2VycyBmdW5jdGlvblxuICAgICAgICAgICAgICAgIHdhaXRpbmcgPSB0cnVlOyAgICAgICAgICAgICAgIFx0Ly8gUHJldmVudCBmdXR1cmUgaW52b2NhdGlvbnNcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsgICBcdFx0Ly8gQWZ0ZXIgYSBwZXJpb2Qgb2YgdGltZVxuICAgICAgICAgICAgICAgICAgICB3YWl0aW5nID0gZmFsc2U7ICAgICAgICAgIFx0Ly8gQW5kIGFsbG93IGZ1dHVyZSBpbnZvY2F0aW9uc1xuICAgICAgICAgICAgICAgIH0sIHdhaXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWQgdXNlIGltcG9ydCB7IGRlYm91bmNlIH0gZnJvbSBAZmlyZXN0aXRjaC9jb21tb24vdXRpbDsgaW5zdGVhZFxuICAgICovXG4gICAgcHVibGljIGRlYm91bmNlKGZ1bmMsIHdhaXQsIGltbWVkaWF0ZSkge1xuICAgICAgY29uc29sZS53YXJuKCdAZGVwcmVjYXRlZCB1c2UgaW1wb3J0IHsgZGVib3VuY2UgfSBmcm9tIEBmaXJlc3RpdGNoL2NvbW1vbi91dGlsOyBpbnN0ZWFkJyk7XG4gICAgICB2YXIgdGltZW91dDtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBjb250ZXh0ID0gdGhpcywgYXJncyA9IGFyZ3VtZW50cztcbiAgICAgICAgICAgIHZhciBsYXRlciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB0aW1lb3V0ID0gbnVsbDtcbiAgICAgICAgICAgICAgICBpZiAoIWltbWVkaWF0ZSkgZnVuYy5hcHBseShjb250ZXh0LCBhcmdzKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB2YXIgY2FsbE5vdyA9IGltbWVkaWF0ZSAmJiAhdGltZW91dDtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgICAgICAgIHRpbWVvdXQgPSBzZXRUaW1lb3V0KGxhdGVyLCB3YWl0KTtcbiAgICAgICAgICAgIGlmIChjYWxsTm93KSBmdW5jLmFwcGx5KGNvbnRleHQsIGFyZ3MpO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBkZXByZWNhdGVkIHVzZSBpbXBvcnQgeyBsZW5ndGggfSBmcm9tIEBmaXJlc3RpdGNoL2NvbW1vbi91dGlsOyBpbnN0ZWFkXG4gICAgKi9cbiAgICBwdWJsaWMgbGVuZ3RoKG9iamVjdCk6IG51bWJlciB7XG4gICAgICBjb25zb2xlLndhcm4oJ0BkZXByZWNhdGVkIHVzZSBpbXBvcnQgeyBsZW5ndGggfSBmcm9tIEBmaXJlc3RpdGNoL2NvbW1vbi91dGlsOyBpbnN0ZWFkJyk7XG4gICAgICBpZiAodGhpcy5pc09iamVjdChvYmplY3QpKSB7XG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMob2JqZWN0KS5sZW5ndGg7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5pc0FycmF5KG9iamVjdCkpIHtcbiAgICAgICAgICAgIHJldHVybiBvYmplY3QubGVuZ3RoO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIDA7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWQgdXNlIGltcG9ydCB7IGJvb2xlYW4gfSBmcm9tIEBmaXJlc3RpdGNoL2NvbW1vbi91dGlsOyBpbnN0ZWFkXG4gICAgKi9cbiAgICBwdWJsaWMgYm9vbGVhbih2YWx1ZSkge1xuICAgICAgY29uc29sZS53YXJuKCdAZGVwcmVjYXRlZCB1c2UgaW1wb3J0IHsgYm9vbGVhbiB9IGZyb20gQGZpcmVzdGl0Y2gvY29tbW9uL3V0aWw7IGluc3RlYWQnKTtcbiAgICAgIHJldHVybiB0aGlzLnN0cmluZyh2YWx1ZSkudG9Mb3dlckNhc2UoKSAhPT0gJ2ZhbHNlJyAmJiAhIXZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBkZXByZWNhdGVkIHVzZSBpbXBvcnQgeyBzdHJpbmdpZnkgfSBmcm9tIEBmaXJlc3RpdGNoL2NvbW1vbi91dGlsOyBpbnN0ZWFkXG4gICAgKi9cbiAgICBwdWJsaWMgc3RyaW5naWZ5KHZhbHVlKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ0BkZXByZWNhdGVkIHVzZSBpbXBvcnQgeyBzdHJpbmdpZnkgfSBmcm9tIEBmaXJlc3RpdGNoL2NvbW1vbi91dGlsOyBpbnN0ZWFkJyk7XG4gICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodmFsdWUpO1xuICAgIH1cbn1cbiJdfQ==