@bitblit/ratchet-common 4.0.419-alpha → 4.0.421-alpha

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 (312) hide show
  1. package/lib/2d/index.d.ts +5 -0
  2. package/lib/2d/index.js +6 -0
  3. package/lib/2d/index.js.map +1 -0
  4. package/lib/2d/line-2d.d.ts +5 -0
  5. package/lib/2d/line-2d.js +2 -0
  6. package/lib/2d/line-2d.js.map +1 -0
  7. package/lib/2d/plane-2d.d.ts +6 -0
  8. package/lib/2d/plane-2d.js +2 -0
  9. package/lib/2d/plane-2d.js.map +1 -0
  10. package/lib/2d/point-2d.d.ts +4 -0
  11. package/lib/2d/point-2d.js +2 -0
  12. package/lib/2d/point-2d.js.map +1 -0
  13. package/lib/2d/poly-line-2d.d.ts +4 -0
  14. package/lib/2d/poly-line-2d.js +2 -0
  15. package/lib/2d/poly-line-2d.js.map +1 -0
  16. package/lib/2d/ratchet-2d.d.ts +37 -0
  17. package/lib/2d/ratchet-2d.js +246 -0
  18. package/lib/2d/ratchet-2d.js.map +1 -0
  19. package/lib/build/build-information.d.ts +8 -0
  20. package/lib/build/build-information.js +2 -0
  21. package/lib/build/build-information.js.map +1 -0
  22. package/lib/build/index.d.ts +2 -0
  23. package/lib/build/index.js +3 -0
  24. package/lib/build/index.js.map +1 -0
  25. package/lib/build/ratchet-common-info.d.ts +5 -0
  26. package/lib/build/ratchet-common-info.js +15 -0
  27. package/lib/build/ratchet-common-info.js.map +1 -0
  28. package/lib/histogram/histogram-entry.d.ts +4 -0
  29. package/lib/histogram/histogram-entry.js +2 -0
  30. package/lib/histogram/histogram-entry.js.map +1 -0
  31. package/lib/histogram/histogram.d.ts +12 -0
  32. package/lib/histogram/histogram.js +49 -0
  33. package/lib/histogram/histogram.js.map +1 -0
  34. package/lib/histogram/index.d.ts +2 -0
  35. package/lib/histogram/index.js +3 -0
  36. package/lib/histogram/index.js.map +1 -0
  37. package/lib/jwt/common-jwt-token.d.ts +6 -0
  38. package/lib/jwt/common-jwt-token.js +2 -0
  39. package/lib/jwt/common-jwt-token.js.map +1 -0
  40. package/lib/jwt/expired-jwt-handling.d.ts +5 -0
  41. package/lib/jwt/expired-jwt-handling.js +7 -0
  42. package/lib/jwt/expired-jwt-handling.js.map +1 -0
  43. package/lib/jwt/index.d.ts +6 -0
  44. package/lib/jwt/index.js +7 -0
  45. package/lib/jwt/index.js.map +1 -0
  46. package/lib/jwt/jwt-ratchet-config.d.ts +8 -0
  47. package/lib/jwt/jwt-ratchet-config.js +2 -0
  48. package/lib/jwt/jwt-ratchet-config.js.map +1 -0
  49. package/lib/jwt/jwt-ratchet-like.d.ts +15 -0
  50. package/lib/jwt/jwt-ratchet-like.js +2 -0
  51. package/lib/jwt/jwt-ratchet-like.js.map +1 -0
  52. package/lib/jwt/jwt-ratchet.d.ts +28 -0
  53. package/lib/jwt/jwt-ratchet.js +171 -0
  54. package/lib/jwt/jwt-ratchet.js.map +1 -0
  55. package/lib/jwt/jwt-token-base.d.ts +9 -0
  56. package/lib/jwt/jwt-token-base.js +2 -0
  57. package/lib/jwt/jwt-token-base.js.map +1 -0
  58. package/lib/lang/array-ratchet.d.ts +12 -0
  59. package/lib/lang/array-ratchet.js +84 -0
  60. package/lib/lang/array-ratchet.js.map +1 -0
  61. package/lib/lang/base64-ratchet.d.ts +20 -0
  62. package/lib/lang/base64-ratchet.js +209 -0
  63. package/lib/lang/base64-ratchet.js.map +1 -0
  64. package/lib/lang/boolean-ratchet.d.ts +7 -0
  65. package/lib/lang/boolean-ratchet.js +46 -0
  66. package/lib/lang/boolean-ratchet.js.map +1 -0
  67. package/lib/lang/composite-last-success-provider.d.ts +7 -0
  68. package/lib/lang/composite-last-success-provider.js +27 -0
  69. package/lib/lang/composite-last-success-provider.js.map +1 -0
  70. package/lib/lang/date-ratchet.d.ts +11 -0
  71. package/lib/lang/date-ratchet.js +30 -0
  72. package/lib/lang/date-ratchet.js.map +1 -0
  73. package/lib/lang/duration-ratchet.d.ts +7 -0
  74. package/lib/lang/duration-ratchet.js +43 -0
  75. package/lib/lang/duration-ratchet.js.map +1 -0
  76. package/lib/lang/enum-ratchet.d.ts +5 -0
  77. package/lib/lang/enum-ratchet.js +31 -0
  78. package/lib/lang/enum-ratchet.js.map +1 -0
  79. package/lib/lang/error-ratchet.d.ts +6 -0
  80. package/lib/lang/error-ratchet.js +45 -0
  81. package/lib/lang/error-ratchet.js.map +1 -0
  82. package/lib/lang/esm-ratchet.d.ts +7 -0
  83. package/lib/lang/esm-ratchet.js +65 -0
  84. package/lib/lang/esm-ratchet.js.map +1 -0
  85. package/lib/lang/expiring-object.d.ts +20 -0
  86. package/lib/lang/expiring-object.js +73 -0
  87. package/lib/lang/expiring-object.js.map +1 -0
  88. package/lib/lang/geolocation-ratchet.d.ts +40 -0
  89. package/lib/lang/geolocation-ratchet.js +264 -0
  90. package/lib/lang/geolocation-ratchet.js.map +1 -0
  91. package/lib/lang/global-ratchet.d.ts +6 -0
  92. package/lib/lang/global-ratchet.js +44 -0
  93. package/lib/lang/global-ratchet.js.map +1 -0
  94. package/lib/lang/index.d.ts +27 -0
  95. package/lib/lang/index.js +28 -0
  96. package/lib/lang/index.js.map +1 -0
  97. package/lib/lang/key-value.d.ts +4 -0
  98. package/lib/lang/key-value.js +5 -0
  99. package/lib/lang/key-value.js.map +1 -0
  100. package/lib/lang/last-success-provider.d.ts +3 -0
  101. package/lib/lang/last-success-provider.js +2 -0
  102. package/lib/lang/last-success-provider.js.map +1 -0
  103. package/lib/lang/map-ratchet.d.ts +15 -0
  104. package/lib/lang/map-ratchet.js +173 -0
  105. package/lib/lang/map-ratchet.js.map +1 -0
  106. package/lib/lang/no.d.ts +3 -0
  107. package/lib/lang/no.js +5 -0
  108. package/lib/lang/no.js.map +1 -0
  109. package/lib/lang/number-ratchet.d.ts +28 -0
  110. package/lib/lang/number-ratchet.js +186 -0
  111. package/lib/lang/number-ratchet.js.map +1 -0
  112. package/lib/lang/parsed-url.d.ts +10 -0
  113. package/lib/lang/parsed-url.js +2 -0
  114. package/lib/lang/parsed-url.js.map +1 -0
  115. package/lib/lang/promise-ratchet.d.ts +18 -0
  116. package/lib/lang/promise-ratchet.js +130 -0
  117. package/lib/lang/promise-ratchet.js.map +1 -0
  118. package/lib/lang/require-ratchet.d.ts +11 -0
  119. package/lib/lang/require-ratchet.js +56 -0
  120. package/lib/lang/require-ratchet.js.map +1 -0
  121. package/lib/lang/sort-ratchet.d.ts +7 -0
  122. package/lib/lang/sort-ratchet.js +33 -0
  123. package/lib/lang/sort-ratchet.js.map +1 -0
  124. package/lib/lang/stop-watch.d.ts +27 -0
  125. package/lib/lang/stop-watch.js +170 -0
  126. package/lib/lang/stop-watch.js.map +1 -0
  127. package/lib/lang/string-ratchet.d.ts +40 -0
  128. package/lib/lang/string-ratchet.js +280 -0
  129. package/lib/lang/string-ratchet.js.map +1 -0
  130. package/lib/lang/time-zone-ratchet.d.ts +20 -0
  131. package/lib/lang/time-zone-ratchet.js +81 -0
  132. package/lib/lang/time-zone-ratchet.js.map +1 -0
  133. package/lib/lang/timeout-token.d.ts +9 -0
  134. package/lib/lang/timeout-token.js +19 -0
  135. package/lib/lang/timeout-token.js.map +1 -0
  136. package/lib/lang/uint-8-array-ratchet.d.ts +5 -0
  137. package/lib/lang/uint-8-array-ratchet.js +31 -0
  138. package/lib/lang/uint-8-array-ratchet.js.map +1 -0
  139. package/lib/lang/web-stream-ratchet.d.ts +6 -0
  140. package/lib/lang/web-stream-ratchet.js +47 -0
  141. package/lib/lang/web-stream-ratchet.js.map +1 -0
  142. package/lib/logger/classic-single-line-log-message-formatter.d.ts +6 -0
  143. package/lib/logger/classic-single-line-log-message-formatter.js +14 -0
  144. package/lib/logger/classic-single-line-log-message-formatter.js.map +1 -0
  145. package/lib/logger/index.d.ts +17 -0
  146. package/lib/logger/index.js +18 -0
  147. package/lib/logger/index.js.map +1 -0
  148. package/lib/logger/log-message-builder.d.ts +14 -0
  149. package/lib/logger/log-message-builder.js +49 -0
  150. package/lib/logger/log-message-builder.js.map +1 -0
  151. package/lib/logger/log-message-format-type.d.ts +6 -0
  152. package/lib/logger/log-message-format-type.js +6 -0
  153. package/lib/logger/log-message-format-type.js.map +1 -0
  154. package/lib/logger/log-message-formatter.d.ts +5 -0
  155. package/lib/logger/log-message-formatter.js +2 -0
  156. package/lib/logger/log-message-formatter.js.map +1 -0
  157. package/lib/logger/log-message-processor.d.ts +5 -0
  158. package/lib/logger/log-message-processor.js +2 -0
  159. package/lib/logger/log-message-processor.js.map +1 -0
  160. package/lib/logger/log-message.d.ts +8 -0
  161. package/lib/logger/log-message.js +2 -0
  162. package/lib/logger/log-message.js.map +1 -0
  163. package/lib/logger/log-snapshot.d.ts +5 -0
  164. package/lib/logger/log-snapshot.js +2 -0
  165. package/lib/logger/log-snapshot.js.map +1 -0
  166. package/lib/logger/logger-instance.d.ts +49 -0
  167. package/lib/logger/logger-instance.js +216 -0
  168. package/lib/logger/logger-instance.js.map +1 -0
  169. package/lib/logger/logger-level-name.d.ts +9 -0
  170. package/lib/logger/logger-level-name.js +9 -0
  171. package/lib/logger/logger-level-name.js.map +1 -0
  172. package/lib/logger/logger-meta.d.ts +6 -0
  173. package/lib/logger/logger-meta.js +2 -0
  174. package/lib/logger/logger-meta.js.map +1 -0
  175. package/lib/logger/logger-options.d.ts +13 -0
  176. package/lib/logger/logger-options.js +2 -0
  177. package/lib/logger/logger-options.js.map +1 -0
  178. package/lib/logger/logger-output-function.d.ts +6 -0
  179. package/lib/logger/logger-output-function.js +6 -0
  180. package/lib/logger/logger-output-function.js.map +1 -0
  181. package/lib/logger/logger-ring-buffer.d.ts +18 -0
  182. package/lib/logger/logger-ring-buffer.js +72 -0
  183. package/lib/logger/logger-ring-buffer.js.map +1 -0
  184. package/lib/logger/logger-util.d.ts +8 -0
  185. package/lib/logger/logger-util.js +45 -0
  186. package/lib/logger/logger-util.js.map +1 -0
  187. package/lib/logger/logger.d.ts +46 -0
  188. package/lib/logger/logger.js +150 -0
  189. package/lib/logger/logger.js.map +1 -0
  190. package/lib/logger/none-log-message-formatter.d.ts +6 -0
  191. package/lib/logger/none-log-message-formatter.js +6 -0
  192. package/lib/logger/none-log-message-formatter.js.map +1 -0
  193. package/lib/logger/structured-json-log-message-formatter.d.ts +6 -0
  194. package/lib/logger/structured-json-log-message-formatter.js +20 -0
  195. package/lib/logger/structured-json-log-message-formatter.js.map +1 -0
  196. package/lib/mail/archive-email-result.d.ts +5 -0
  197. package/lib/mail/archive-email-result.js +2 -0
  198. package/lib/mail/archive-email-result.js.map +1 -0
  199. package/lib/mail/email-attachment.d.ts +5 -0
  200. package/lib/mail/email-attachment.js +2 -0
  201. package/lib/mail/email-attachment.js.map +1 -0
  202. package/lib/mail/index.d.ts +11 -0
  203. package/lib/mail/index.js +12 -0
  204. package/lib/mail/index.js.map +1 -0
  205. package/lib/mail/mail-sending-provider.d.ts +5 -0
  206. package/lib/mail/mail-sending-provider.js +2 -0
  207. package/lib/mail/mail-sending-provider.js.map +1 -0
  208. package/lib/mail/mailer-config.d.ts +11 -0
  209. package/lib/mail/mailer-config.js +2 -0
  210. package/lib/mail/mailer-config.js.map +1 -0
  211. package/lib/mail/mailer-like.d.ts +11 -0
  212. package/lib/mail/mailer-like.js +2 -0
  213. package/lib/mail/mailer-like.js.map +1 -0
  214. package/lib/mail/mailer-util.d.ts +7 -0
  215. package/lib/mail/mailer-util.js +49 -0
  216. package/lib/mail/mailer-util.js.map +1 -0
  217. package/lib/mail/mailer.d.ts +17 -0
  218. package/lib/mail/mailer.js +174 -0
  219. package/lib/mail/mailer.js.map +1 -0
  220. package/lib/mail/ready-to-send-email.d.ts +13 -0
  221. package/lib/mail/ready-to-send-email.js +2 -0
  222. package/lib/mail/ready-to-send-email.js.map +1 -0
  223. package/lib/mail/resolved-ready-to-send-email.d.ts +5 -0
  224. package/lib/mail/resolved-ready-to-send-email.js +2 -0
  225. package/lib/mail/resolved-ready-to-send-email.js.map +1 -0
  226. package/lib/mail/send-email-result.d.ts +12 -0
  227. package/lib/mail/send-email-result.js +2 -0
  228. package/lib/mail/send-email-result.js.map +1 -0
  229. package/lib/mail/test-mail-sending-provider.d.ts +8 -0
  230. package/lib/mail/test-mail-sending-provider.js +31 -0
  231. package/lib/mail/test-mail-sending-provider.js.map +1 -0
  232. package/lib/network/browser-local-ip-provider.d.ts +7 -0
  233. package/lib/network/browser-local-ip-provider.js +22 -0
  234. package/lib/network/browser-local-ip-provider.js.map +1 -0
  235. package/lib/network/fixed-local-ip-provider.d.ts +6 -0
  236. package/lib/network/fixed-local-ip-provider.js +10 -0
  237. package/lib/network/fixed-local-ip-provider.js.map +1 -0
  238. package/lib/network/index.d.ts +9 -0
  239. package/lib/network/index.js +10 -0
  240. package/lib/network/index.js.map +1 -0
  241. package/lib/network/local-ip-provider.d.ts +3 -0
  242. package/lib/network/local-ip-provider.js +2 -0
  243. package/lib/network/local-ip-provider.js.map +1 -0
  244. package/lib/network/network-ratchet.d.ts +10 -0
  245. package/lib/network/network-ratchet.js +102 -0
  246. package/lib/network/network-ratchet.js.map +1 -0
  247. package/lib/network/remote-file-sync/backup-result.d.ts +5 -0
  248. package/lib/network/remote-file-sync/backup-result.js +7 -0
  249. package/lib/network/remote-file-sync/backup-result.js.map +1 -0
  250. package/lib/network/remote-file-sync/file-transfer-result.d.ts +5 -0
  251. package/lib/network/remote-file-sync/file-transfer-result.js +7 -0
  252. package/lib/network/remote-file-sync/file-transfer-result.js.map +1 -0
  253. package/lib/network/remote-file-sync/remote-file-sync-like.d.ts +16 -0
  254. package/lib/network/remote-file-sync/remote-file-sync-like.js +2 -0
  255. package/lib/network/remote-file-sync/remote-file-sync-like.js.map +1 -0
  256. package/lib/network/remote-file-sync/remote-status-data.d.ts +6 -0
  257. package/lib/network/remote-file-sync/remote-status-data.js +2 -0
  258. package/lib/network/remote-file-sync/remote-status-data.js.map +1 -0
  259. package/lib/network/restful-api-http-error.d.ts +41 -0
  260. package/lib/network/restful-api-http-error.js +134 -0
  261. package/lib/network/restful-api-http-error.js.map +1 -0
  262. package/lib/template/index.d.ts +1 -0
  263. package/lib/template/index.js +2 -0
  264. package/lib/template/index.js.map +1 -0
  265. package/lib/template/ratchet-template-renderer.d.ts +4 -0
  266. package/lib/template/ratchet-template-renderer.js +2 -0
  267. package/lib/template/ratchet-template-renderer.js.map +1 -0
  268. package/lib/third-party/google/google-recaptcha-ratchet.d.ts +4 -0
  269. package/lib/third-party/google/google-recaptcha-ratchet.js +27 -0
  270. package/lib/third-party/google/google-recaptcha-ratchet.js.map +1 -0
  271. package/lib/third-party/index.d.ts +3 -0
  272. package/lib/third-party/index.js +4 -0
  273. package/lib/third-party/index.js.map +1 -0
  274. package/lib/third-party/twilio/twilio-ratchet.d.ts +11 -0
  275. package/lib/third-party/twilio/twilio-ratchet.js +70 -0
  276. package/lib/third-party/twilio/twilio-ratchet.js.map +1 -0
  277. package/lib/third-party/twilio/twilio-verify-ratchet.d.ts +23 -0
  278. package/lib/third-party/twilio/twilio-verify-ratchet.js +60 -0
  279. package/lib/third-party/twilio/twilio-verify-ratchet.js.map +1 -0
  280. package/lib/transform/built-in-transforms.d.ts +18 -0
  281. package/lib/transform/built-in-transforms.js +192 -0
  282. package/lib/transform/built-in-transforms.js.map +1 -0
  283. package/lib/transform/index.d.ts +3 -0
  284. package/lib/transform/index.js +4 -0
  285. package/lib/transform/index.js.map +1 -0
  286. package/lib/transform/transform-ratchet.d.ts +7 -0
  287. package/lib/transform/transform-ratchet.js +67 -0
  288. package/lib/transform/transform-ratchet.js.map +1 -0
  289. package/lib/transform/transform-rule.d.ts +3 -0
  290. package/lib/transform/transform-rule.js +2 -0
  291. package/lib/transform/transform-rule.js.map +1 -0
  292. package/lib/tx/index.d.ts +5 -0
  293. package/lib/tx/index.js +6 -0
  294. package/lib/tx/index.js.map +1 -0
  295. package/lib/tx/transaction-configuration.d.ts +7 -0
  296. package/lib/tx/transaction-configuration.js +2 -0
  297. package/lib/tx/transaction-configuration.js.map +1 -0
  298. package/lib/tx/transaction-final-state.d.ts +6 -0
  299. package/lib/tx/transaction-final-state.js +6 -0
  300. package/lib/tx/transaction-final-state.js.map +1 -0
  301. package/lib/tx/transaction-ratchet.d.ts +6 -0
  302. package/lib/tx/transaction-ratchet.js +77 -0
  303. package/lib/tx/transaction-ratchet.js.map +1 -0
  304. package/lib/tx/transaction-result.d.ts +9 -0
  305. package/lib/tx/transaction-result.js +2 -0
  306. package/lib/tx/transaction-result.js.map +1 -0
  307. package/lib/tx/transaction-step.d.ts +5 -0
  308. package/lib/tx/transaction-step.js +2 -0
  309. package/lib/tx/transaction-step.js.map +1 -0
  310. package/package.json +6 -12
  311. package/lib/index.mjs +0 -2
  312. package/lib/types.d.ts +0 -1024
@@ -0,0 +1,28 @@
1
+ export declare class NumberRatchet {
2
+ private static MAX_LEADING_ZEROS_FORMAT_LENGTH;
3
+ static readonly DEFAULT_SAFE_NUMBER_OPTIONS: SafeNumberOptions;
4
+ static toFixedDecimalNumber(input: number | string, placesAfterPoint: number): number;
5
+ static leadingZeros(val: any, size: number): string;
6
+ static between(inTest: number, inP1: number, inP2: number): boolean;
7
+ static safeNumber(input: any, ifNotNumber?: number, useDefaultForNullAndUndefined?: boolean): number;
8
+ static safeNumberOpt(input: any, optionPart?: Partial<SafeNumberOptions>): number;
9
+ static numberCSVToList(inputCSV: string): number[];
10
+ static fitToWindow(val: number, b1: number, b2: number): number;
11
+ static groupNumbersIntoContiguousRanges(inputData: number[], minRangeSize?: number): SinglesAndRanges;
12
+ static distributeItemsEvenly(items: number, buckets: number): number[];
13
+ static createRange(minInclusive: number, maxExclusive: number, step?: number): number[];
14
+ }
15
+ export interface SinglesAndRanges {
16
+ singles: number[];
17
+ ranges: NumberRange[];
18
+ }
19
+ export interface NumberRange {
20
+ min: number;
21
+ max: number;
22
+ }
23
+ export interface SafeNumberOptions {
24
+ ifNotNumber: number;
25
+ returnValueForNull: number;
26
+ returnValueForUndefined: number;
27
+ preParseCharacterMapping: Record<string, string>;
28
+ }
@@ -0,0 +1,186 @@
1
+ import { Logger } from '../logger/logger.js';
2
+ import { RequireRatchet } from './require-ratchet.js';
3
+ export class NumberRatchet {
4
+ static MAX_LEADING_ZEROS_FORMAT_LENGTH = 1000;
5
+ static DEFAULT_SAFE_NUMBER_OPTIONS = {
6
+ ifNotNumber: null,
7
+ returnValueForNull: null,
8
+ returnValueForUndefined: null,
9
+ preParseCharacterMapping: { ',': '' },
10
+ };
11
+ static toFixedDecimalNumber(input, placesAfterPoint) {
12
+ const v = NumberRatchet.safeNumber(input);
13
+ return v === null || v === undefined ? v : NumberRatchet.safeNumber(v.toFixed(placesAfterPoint));
14
+ }
15
+ static leadingZeros(val, size) {
16
+ const sVal = String(val);
17
+ if (sVal.length < size) {
18
+ let pad = '0000';
19
+ if (size > NumberRatchet.MAX_LEADING_ZEROS_FORMAT_LENGTH) {
20
+ throw 'Cannot format number that large (max length is ' + NumberRatchet.MAX_LEADING_ZEROS_FORMAT_LENGTH + ')';
21
+ }
22
+ while (pad.length < size) {
23
+ pad = pad + pad;
24
+ }
25
+ return (pad + sVal).slice(-1 * size);
26
+ }
27
+ else {
28
+ return sVal;
29
+ }
30
+ }
31
+ static between(inTest, inP1, inP2) {
32
+ const test = NumberRatchet.safeNumber(inTest);
33
+ const p1 = NumberRatchet.safeNumber(inP1);
34
+ const p2 = NumberRatchet.safeNumber(inP2);
35
+ return (test >= p1 && test <= p2) || (test >= p2 && test <= p1);
36
+ }
37
+ static safeNumber(input, ifNotNumber = null, useDefaultForNullAndUndefined) {
38
+ const opts = {
39
+ ifNotNumber: ifNotNumber,
40
+ returnValueForNull: useDefaultForNullAndUndefined ? ifNotNumber : null,
41
+ returnValueForUndefined: useDefaultForNullAndUndefined ? ifNotNumber : undefined,
42
+ };
43
+ if (useDefaultForNullAndUndefined === undefined) {
44
+ opts.returnValueForUndefined = null;
45
+ }
46
+ return NumberRatchet.safeNumberOpt(input, opts);
47
+ }
48
+ static safeNumberOpt(input, optionPart) {
49
+ let rval = undefined;
50
+ const opts = Object.assign({}, NumberRatchet.DEFAULT_SAFE_NUMBER_OPTIONS, optionPart || {});
51
+ if (input === null) {
52
+ rval = opts.returnValueForNull;
53
+ }
54
+ else if (input === undefined) {
55
+ rval = opts.returnValueForUndefined;
56
+ }
57
+ else {
58
+ const type = typeof input;
59
+ if (type == 'number') {
60
+ rval = input;
61
+ }
62
+ else if (type == 'string') {
63
+ let test = input.trim();
64
+ if (test.length === 0) {
65
+ rval = opts.ifNotNumber;
66
+ }
67
+ else {
68
+ if (opts.preParseCharacterMapping && Object.keys(opts.preParseCharacterMapping).length > 0) {
69
+ let t2 = '';
70
+ for (let i = 0; i < test.length; i++) {
71
+ const cr = test.charAt(i);
72
+ t2 += opts.preParseCharacterMapping[cr] === undefined ? cr : opts.preParseCharacterMapping[cr];
73
+ }
74
+ test = t2;
75
+ }
76
+ rval = Number.parseFloat(test);
77
+ }
78
+ }
79
+ else {
80
+ Logger.warn('Value is of type %s, returning default', type);
81
+ rval = opts.ifNotNumber;
82
+ }
83
+ if (isNaN(rval)) {
84
+ Logger.debug('Parsed string to NaN - using NaN value from param');
85
+ rval = opts.ifNotNumber;
86
+ }
87
+ }
88
+ return rval;
89
+ }
90
+ static numberCSVToList(inputCSV) {
91
+ let rval = null;
92
+ if (inputCSV) {
93
+ rval = inputCSV.split(',').map((s) => {
94
+ return NumberRatchet.safeNumber(s.trim());
95
+ });
96
+ rval = rval.filter((r) => typeof r === 'number' && !isNaN(r));
97
+ }
98
+ return rval;
99
+ }
100
+ static fitToWindow(val, b1, b2) {
101
+ let rval = val;
102
+ if (val === null || b1 === null || b2 === null || b1 < 0 || b2 < 0 || val < 0) {
103
+ throw new Error('All values must be non-null and larger than 0');
104
+ }
105
+ const low = Math.min(b1, b2);
106
+ const high = Math.max(b1, b2);
107
+ const windowSize = high - low;
108
+ if (high === low) {
109
+ rval = high;
110
+ }
111
+ else {
112
+ while (rval < low) {
113
+ rval += windowSize;
114
+ }
115
+ while (rval > high) {
116
+ rval -= windowSize;
117
+ }
118
+ }
119
+ return rval;
120
+ }
121
+ static groupNumbersIntoContiguousRanges(inputData, minRangeSize = 3) {
122
+ RequireRatchet.notNullOrUndefined(inputData);
123
+ const input = Object.assign([], inputData);
124
+ input.sort((a, b) => a - b);
125
+ const singles = [];
126
+ const ranges = [];
127
+ let start = 0;
128
+ for (let i = 1; i < input.length; i++) {
129
+ if (input[i] === input[i - 1] + 1) {
130
+ }
131
+ else {
132
+ if (start === i - 1) {
133
+ singles.push(input[i - 1]);
134
+ }
135
+ else {
136
+ const rangeSize = i - start;
137
+ if (rangeSize < minRangeSize) {
138
+ for (let j = start; j < i; j++) {
139
+ singles.push(input[j]);
140
+ }
141
+ }
142
+ else {
143
+ ranges.push({
144
+ min: input[start],
145
+ max: input[i - 1],
146
+ });
147
+ }
148
+ }
149
+ start = i;
150
+ }
151
+ }
152
+ return {
153
+ singles: singles,
154
+ ranges: ranges,
155
+ };
156
+ }
157
+ static distributeItemsEvenly(items, buckets) {
158
+ RequireRatchet.notNullOrUndefined(items, 'items');
159
+ RequireRatchet.notNullOrUndefined(buckets, 'buckets');
160
+ RequireRatchet.true(items > 0 && items === Math.floor(items), 'Items integer larger than 0');
161
+ RequireRatchet.true(buckets > 0 && buckets === Math.floor(buckets), 'Buckets integer larger than 0');
162
+ const offset = buckets / items;
163
+ const rval = [];
164
+ for (let i = 0; i < buckets; i++) {
165
+ rval.push(0);
166
+ }
167
+ let loc = 0;
168
+ let rem = items;
169
+ while (rem > 0) {
170
+ rval[Math.floor(loc) % buckets]++;
171
+ rem--;
172
+ loc += offset;
173
+ }
174
+ return rval;
175
+ }
176
+ static createRange(minInclusive, maxExclusive, step = 1) {
177
+ const rval = [];
178
+ let val = minInclusive;
179
+ while (val < maxExclusive) {
180
+ rval.push(val);
181
+ val += step;
182
+ }
183
+ return rval;
184
+ }
185
+ }
186
+ //# sourceMappingURL=number-ratchet.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"number-ratchet.js","sourceRoot":"","sources":["../../src/lang/number-ratchet.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ export interface ParsedUrl {
2
+ href: string;
3
+ protocol: string;
4
+ host: string;
5
+ hostname: string;
6
+ port: string;
7
+ pathname: string;
8
+ search: string;
9
+ hash: string;
10
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=parsed-url.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parsed-url.js","sourceRoot":"","sources":["../../src/lang/parsed-url.ts"],"names":[],"mappings":""}
@@ -0,0 +1,18 @@
1
+ import { TimeoutToken } from './timeout-token.js';
2
+ import { LoggerLevelName } from '../logger/logger-level-name.js';
3
+ export declare class PromiseRatchet {
4
+ static resolveOnEvent<T>(evtSrc: any, okEvtNames: string[], errEvtNames?: string[], rval?: T): Promise<T>;
5
+ static timeout<T>(srcPromise: Promise<T>, title: string, timeoutMS: number): Promise<T | TimeoutToken>;
6
+ static createTimeoutPromise(title: string, timeoutMS: number): Promise<TimeoutToken>;
7
+ static wait(time: number): Promise<void>;
8
+ static dumpResult(result: any): void;
9
+ static dumpError(err: any): void;
10
+ static logErrorAndReturnNull(err: any): void;
11
+ static runPromiseAndDump<T>(promise: Promise<T>): void;
12
+ static waitFor(testFunction: (n: number) => any, expectedValue: any, intervalMS: number, maxCycles: number, label?: string, count?: number): Promise<boolean>;
13
+ static runBoundedParallel<T>(promiseFn: (...args: any[]) => Promise<T>, params: any[][], context: any, maxConcurrent?: number, logLevel?: LoggerLevelName): Promise<T[]>;
14
+ static runBoundedParallelSingleParam<T>(promiseFn: (...args: any[]) => Promise<T>, params: any[], context: any, maxConcurrent?: number, logLevel?: LoggerLevelName): Promise<T[]>;
15
+ static asyncForEachSerial<T, R>(array: any[], callback: (val: T, idx: number, arr: T[]) => Promise<R>): Promise<void>;
16
+ static asyncForEachParallel<T>(array: T[], callback: (val: T, idx: number, arr: T[]) => Promise<any>): Promise<void>;
17
+ private constructor();
18
+ }
@@ -0,0 +1,130 @@
1
+ import { Logger } from '../logger/logger.js';
2
+ import { ArrayRatchet } from './array-ratchet.js';
3
+ import { TimeoutToken } from './timeout-token.js';
4
+ import { StopWatch } from './stop-watch.js';
5
+ import { LoggerLevelName } from '../logger/logger-level-name.js';
6
+ export class PromiseRatchet {
7
+ static resolveOnEvent(evtSrc, okEvtNames, errEvtNames = [], rval = null) {
8
+ if (!evtSrc || !okEvtNames || okEvtNames.length === 0 || !evtSrc['on']) {
9
+ return Promise.reject('Cannot continue - missing source object or name, or the object is not an event source');
10
+ }
11
+ return new Promise((res, rej) => {
12
+ okEvtNames.forEach((e) => {
13
+ evtSrc.on(e, () => {
14
+ res(rval);
15
+ });
16
+ });
17
+ if (errEvtNames) {
18
+ errEvtNames.forEach((e) => {
19
+ evtSrc.on(e, (err) => {
20
+ rej(err);
21
+ });
22
+ });
23
+ }
24
+ });
25
+ }
26
+ static timeout(srcPromise, title, timeoutMS) {
27
+ return Promise.race([srcPromise, PromiseRatchet.createTimeoutPromise(title, timeoutMS)]);
28
+ }
29
+ static createTimeoutPromise(title, timeoutMS) {
30
+ return new Promise((resolve, reject) => {
31
+ const id = setTimeout(() => {
32
+ clearTimeout(id);
33
+ const rval = new TimeoutToken(title, timeoutMS);
34
+ resolve(rval);
35
+ }, timeoutMS);
36
+ });
37
+ }
38
+ static async wait(time) {
39
+ await PromiseRatchet.createTimeoutPromise('Wait ' + time, time);
40
+ Logger.silly('Finished wait of %d ms', time);
41
+ }
42
+ static dumpResult(result) {
43
+ Logger.info('Success, result was : \n\n%s\n\n', JSON.stringify(result));
44
+ process.exit(0);
45
+ }
46
+ static dumpError(err) {
47
+ Logger.warn('Failure, err was : \n\n%s\n\n -- \n\n%s\n\n', JSON.stringify(err), String(err));
48
+ console.trace();
49
+ process.exit(1);
50
+ }
51
+ static logErrorAndReturnNull(err) {
52
+ Logger.warn('Failure, err was : \n\n%s\n\n -- \n\n%s\n\n', JSON.stringify(err), String(err));
53
+ return null;
54
+ }
55
+ static runPromiseAndDump(promise) {
56
+ promise.then(PromiseRatchet.dumpResult).catch(PromiseRatchet.dumpError);
57
+ }
58
+ static async waitFor(testFunction, expectedValue, intervalMS, maxCycles, label = 'waitFor', count = 0) {
59
+ if (expectedValue == null || intervalMS < 50 || maxCycles < 1 || count < 0 || typeof testFunction != 'function') {
60
+ Logger.warn('%s: Invalid configuration for waitFor - exiting immediately', label);
61
+ Logger.warn('ExpectedValue : %s ; interval: %d ; maxCycles: %d ; test : %s', expectedValue, intervalMS, maxCycles, typeof testFunction);
62
+ return false;
63
+ }
64
+ let curVal = null;
65
+ try {
66
+ curVal = testFunction(count);
67
+ }
68
+ catch (err) {
69
+ Logger.warn('%s: Caught error while waiting, giving up : %s', label, err);
70
+ return false;
71
+ }
72
+ if (curVal === null) {
73
+ Logger.debug('%s:CurVal was null - aborting', label);
74
+ return false;
75
+ }
76
+ else if (curVal == expectedValue) {
77
+ Logger.debug('%s:Found expected value', label);
78
+ return true;
79
+ }
80
+ else if (count > maxCycles) {
81
+ Logger.debug('%s:Exceeded max cycles, giving up', label);
82
+ return false;
83
+ }
84
+ else {
85
+ Logger.debug('%s : value not reached yet, waiting (count = %d of %d)', label, count, maxCycles);
86
+ await PromiseRatchet.wait(intervalMS);
87
+ return PromiseRatchet.waitFor(testFunction, expectedValue, intervalMS, maxCycles, label, count + 1);
88
+ }
89
+ }
90
+ static async runBoundedParallel(promiseFn, params, context, maxConcurrent = 1, logLevel = LoggerLevelName.debug) {
91
+ const sw = new StopWatch();
92
+ let rval = [];
93
+ let remain = params;
94
+ Logger.logByLevel(logLevel, 'Processing %d total elements %d at a time', params.length, maxConcurrent);
95
+ const ctx = context || this;
96
+ let processed = 0;
97
+ const totalCount = remain.length;
98
+ while (remain.length > 0) {
99
+ const curBatch = remain.slice(0, Math.min(remain.length, maxConcurrent));
100
+ remain = remain.slice(curBatch.length);
101
+ const proms = curBatch.map((c) => promiseFn.apply(ctx, c));
102
+ const output = await Promise.all(proms);
103
+ processed += proms.length;
104
+ rval = rval.concat(output);
105
+ const pct = processed / totalCount;
106
+ Logger.logByLevel(logLevel, '%d elements remain : %s', remain.length, sw.dumpExpected(pct));
107
+ }
108
+ sw.log();
109
+ return rval;
110
+ }
111
+ static async runBoundedParallelSingleParam(promiseFn, params, context, maxConcurrent = 1, logLevel = LoggerLevelName.debug) {
112
+ const wrappedParams = ArrayRatchet.wrapElementsInArray(params);
113
+ return PromiseRatchet.runBoundedParallel(promiseFn, wrappedParams, context, maxConcurrent, logLevel);
114
+ }
115
+ static async asyncForEachSerial(array, callback) {
116
+ for (let index = 0; index < array.length; index++) {
117
+ await callback(array[index], index, array);
118
+ }
119
+ }
120
+ static async asyncForEachParallel(array, callback) {
121
+ const proms = [];
122
+ for (let index = 0; index < array.length; index++) {
123
+ proms.push(callback(array[index], index, array));
124
+ }
125
+ await Promise.all(proms);
126
+ }
127
+ constructor() {
128
+ }
129
+ }
130
+ //# sourceMappingURL=promise-ratchet.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"promise-ratchet.js","sourceRoot":"","sources":["../../src/lang/promise-ratchet.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ export declare class RequireRatchet {
2
+ static isNullOrUndefined(ob: any): boolean;
3
+ static notNullOrUndefined(ob: any, name?: string): void;
4
+ static notNullUndefinedOrOnlyWhitespaceString(ob: string, name?: string): void;
5
+ static notNullUndefinedOrEmptyArray(ob: any[], name?: string): void;
6
+ static equal(ob1: any, ob2: any, message?: string): void;
7
+ static true(ob: boolean, message?: string): void;
8
+ static noNullOrUndefinedValuesInArray(arr: any[], expectedLength?: number, customMsg?: string): void;
9
+ static noNullOrUndefinedValuesInRestArgs(expectedLength: number, ...restArgs: any[]): void;
10
+ static constructorArgumentsMatchLengthAndAreNonNull(): void;
11
+ }
@@ -0,0 +1,56 @@
1
+ export class RequireRatchet {
2
+ static isNullOrUndefined(ob) {
3
+ return Object.is(ob, null) || Object.is(ob, undefined);
4
+ }
5
+ static notNullOrUndefined(ob, name = 'object') {
6
+ if (RequireRatchet.isNullOrUndefined(ob)) {
7
+ throw new Error(name + ' may not be null or undefined');
8
+ }
9
+ }
10
+ static notNullUndefinedOrOnlyWhitespaceString(ob, name = 'string') {
11
+ if (RequireRatchet.isNullOrUndefined(ob) || ob.trim() === '') {
12
+ throw new Error(name + ' may not be null or undefined or only whitespace string');
13
+ }
14
+ }
15
+ static notNullUndefinedOrEmptyArray(ob, name = 'string') {
16
+ if (RequireRatchet.isNullOrUndefined(ob) || ob.length === 0) {
17
+ throw new Error(name + ' may not be null or undefined or an empty array');
18
+ }
19
+ }
20
+ static equal(ob1, ob2, message = 'Values must be equal') {
21
+ if (ob1 !== ob2) {
22
+ throw new Error(message);
23
+ }
24
+ }
25
+ static true(ob, message = 'Value must be true') {
26
+ RequireRatchet.equal(ob, true, message);
27
+ }
28
+ static noNullOrUndefinedValuesInArray(arr, expectedLength = null, customMsg = null) {
29
+ RequireRatchet.notNullOrUndefined(arr, 'Source array may not be null');
30
+ if (expectedLength !== null && arr.length !== expectedLength) {
31
+ throw new Error(`Expected array of length ${expectedLength} but was ${arr.length} ${customMsg}`);
32
+ }
33
+ for (let i = 0; i < arr.length; i++) {
34
+ if (RequireRatchet.isNullOrUndefined(arr[i])) {
35
+ throw new Error(`Array index ${i} was null or undefined ${customMsg}`);
36
+ }
37
+ }
38
+ }
39
+ static noNullOrUndefinedValuesInRestArgs(expectedLength, ...restArgs) {
40
+ RequireRatchet.notNullOrUndefined(restArgs, 'Source array may not be null');
41
+ if (expectedLength !== null && restArgs.length !== expectedLength) {
42
+ throw new Error(`Expected array of length ${expectedLength} but was ${restArgs.length}`);
43
+ }
44
+ for (let i = 0; i < restArgs.length; i++) {
45
+ if (RequireRatchet.isNullOrUndefined(restArgs[i])) {
46
+ throw new Error(`Array index ${i} was null or undefined`);
47
+ }
48
+ }
49
+ }
50
+ static constructorArgumentsMatchLengthAndAreNonNull() {
51
+ const args = Array.from(arguments);
52
+ const len = this.constructor.length;
53
+ return RequireRatchet.noNullOrUndefinedValuesInArray(args, len);
54
+ }
55
+ }
56
+ //# sourceMappingURL=require-ratchet.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"require-ratchet.js","sourceRoot":"","sources":["../../src/lang/require-ratchet.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ export declare class SortRatchet {
2
+ private constructor();
3
+ static sortNullToTop<T>(a: T, b: T, bothNonNullSort: (c: T, d: T) => number): number;
4
+ static sortNullToBottom<T>(a: T, b: T, bothNonNullSort: (c: T, d: T) => number): number;
5
+ static nullSafeSort<T>(a: T, b: T, nullsOnTop: boolean, bothNonNullSort: (c: T, d: T) => number): number;
6
+ static sortNumericStringsAsNumbers(a: string | number, b: string | number, sortNonNumbersToTop?: boolean): number;
7
+ }
@@ -0,0 +1,33 @@
1
+ import { RequireRatchet } from './require-ratchet.js';
2
+ import { NumberRatchet } from './number-ratchet.js';
3
+ export class SortRatchet {
4
+ constructor() { }
5
+ static sortNullToTop(a, b, bothNonNullSort) {
6
+ return SortRatchet.nullSafeSort(a, b, true, bothNonNullSort);
7
+ }
8
+ static sortNullToBottom(a, b, bothNonNullSort) {
9
+ return SortRatchet.nullSafeSort(a, b, false, bothNonNullSort);
10
+ }
11
+ static nullSafeSort(a, b, nullsOnTop, bothNonNullSort) {
12
+ let rval;
13
+ if (RequireRatchet.isNullOrUndefined(a) && RequireRatchet.isNullOrUndefined(b)) {
14
+ rval = 0;
15
+ }
16
+ else if (RequireRatchet.isNullOrUndefined(a)) {
17
+ rval = nullsOnTop ? -Infinity : Infinity;
18
+ }
19
+ else if (RequireRatchet.isNullOrUndefined(b)) {
20
+ rval = nullsOnTop ? Infinity : -Infinity;
21
+ }
22
+ else {
23
+ rval = bothNonNullSort(a, b);
24
+ }
25
+ return rval;
26
+ }
27
+ static sortNumericStringsAsNumbers(a, b, sortNonNumbersToTop) {
28
+ const an = NumberRatchet.safeNumber(a);
29
+ const bn = NumberRatchet.safeNumber(b);
30
+ return SortRatchet.nullSafeSort(an, bn, sortNonNumbersToTop, (ax, bx) => ax - bx);
31
+ }
32
+ }
33
+ //# sourceMappingURL=sort-ratchet.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sort-ratchet.js","sourceRoot":"","sources":["../../src/lang/sort-ratchet.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD,MAAM,OAAO,WAAW;IAGtB,gBAAuB,CAAC;IAEjB,MAAM,CAAC,aAAa,CAAI,CAAI,EAAE,CAAI,EAAE,eAAuC;QAChF,OAAO,WAAW,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,eAAe,CAAC,CAAC;IAC/D,CAAC;IAEM,MAAM,CAAC,gBAAgB,CAAI,CAAI,EAAE,CAAI,EAAE,eAAuC;QACnF,OAAO,WAAW,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,eAAe,CAAC,CAAC;IAChE,CAAC;IAEM,MAAM,CAAC,YAAY,CAAI,CAAI,EAAE,CAAI,EAAE,UAAmB,EAAE,eAAuC;QACpG,IAAI,IAAY,CAAC;QAEjB,IAAI,cAAc,CAAC,iBAAiB,CAAC,CAAC,CAAC,IAAI,cAAc,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,CAAC;YAC/E,IAAI,GAAG,CAAC,CAAC;QACX,CAAC;aAAM,IAAI,cAAc,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,CAAC;YAC/C,IAAI,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC;QAC3C,CAAC;aAAM,IAAI,cAAc,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,CAAC;YAC/C,IAAI,GAAG,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;QAC3C,CAAC;aAAM,CAAC;YACN,IAAI,GAAG,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC/B,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAEM,MAAM,CAAC,2BAA2B,CAAC,CAAkB,EAAE,CAAkB,EAAE,mBAA6B;QAC7G,MAAM,EAAE,GAAW,aAAa,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QAC/C,MAAM,EAAE,GAAW,aAAa,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QAC/C,OAAO,WAAW,CAAC,YAAY,CAAS,EAAE,EAAE,EAAE,EAAE,mBAAmB,EAAE,CAAC,EAAU,EAAE,EAAU,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;IAC5G,CAAC;CACF"}
@@ -0,0 +1,27 @@
1
+ import { LoggerLevelName } from '../logger/logger-level-name.js';
2
+ export declare class StopWatch {
3
+ get createTime(): number;
4
+ private starts;
5
+ private ends;
6
+ private _createTime;
7
+ private _label;
8
+ private _labelIncludedInOutput;
9
+ withLabel(val: string): StopWatch;
10
+ withLabelIncludedInOutput(val: boolean): StopWatch;
11
+ get label(): string;
12
+ set label(value: string);
13
+ get labelIncludedInOutput(): boolean;
14
+ set labelIncludedInOutput(value: boolean);
15
+ start(name: string): number;
16
+ stop(name: string): number;
17
+ reset(name: string): void;
18
+ hasTimer(name: string): boolean;
19
+ log(name?: string, shortForm?: boolean, logLevel?: LoggerLevelName): void;
20
+ logExpected(pctComplete: number, name?: string, shortForm?: boolean, logLevel?: LoggerLevelName): void;
21
+ timerNames(): string[];
22
+ dumpAll(separator?: string, shortForm?: boolean): string;
23
+ dump(name?: string, shortForm?: boolean): string;
24
+ dumpExpected(pctComplete: number, name?: string, shortForm?: boolean): string;
25
+ expectedRemainingMS(pctComplete: number, name?: string): number;
26
+ elapsedMS(name?: string): number;
27
+ }