@bitblit/ratchet-common 4.0.129-alpha → 4.0.130-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 (218) hide show
  1. package/lib/2d/line-2d.js +2 -0
  2. package/lib/2d/line-2d.js.map +1 -0
  3. package/lib/2d/plane-2d.js +2 -0
  4. package/lib/2d/plane-2d.js.map +1 -0
  5. package/lib/2d/point-2d.js +2 -0
  6. package/lib/2d/point-2d.js.map +1 -0
  7. package/lib/2d/poly-line-2d.js +2 -0
  8. package/lib/2d/poly-line-2d.js.map +1 -0
  9. package/lib/2d/ratchet-2d.js +246 -0
  10. package/lib/2d/ratchet-2d.js.map +1 -0
  11. package/lib/2d/ratchet-2d.spec.js +118 -0
  12. package/lib/2d/ratchet-2d.spec.js.map +1 -0
  13. package/lib/build/build-information.js +2 -0
  14. package/lib/build/build-information.js.map +1 -0
  15. package/lib/build/ratchet-common-info.js +15 -0
  16. package/lib/build/ratchet-common-info.js.map +1 -0
  17. package/lib/histogram/histogram-entry.js +2 -0
  18. package/lib/histogram/histogram-entry.js.map +1 -0
  19. package/lib/histogram/histogram.js +49 -0
  20. package/lib/histogram/histogram.js.map +1 -0
  21. package/lib/histogram/histogram.spec.js +20 -0
  22. package/lib/histogram/histogram.spec.js.map +1 -0
  23. package/lib/index.js +74 -0
  24. package/lib/index.js.map +1 -0
  25. package/lib/jwt/common-jwt-token.js +2 -0
  26. package/lib/jwt/common-jwt-token.js.map +1 -0
  27. package/lib/jwt/expired-jwt-handling.js +7 -0
  28. package/lib/jwt/expired-jwt-handling.js.map +1 -0
  29. package/lib/jwt/jwt-ratchet-like.js +2 -0
  30. package/lib/jwt/jwt-ratchet-like.js.map +1 -0
  31. package/lib/jwt/jwt-ratchet.js +166 -0
  32. package/lib/jwt/jwt-ratchet.js.map +1 -0
  33. package/lib/jwt/jwt-ratchet.spec.js +50 -0
  34. package/lib/jwt/jwt-ratchet.spec.js.map +1 -0
  35. package/lib/jwt/jwt-token-base.js +2 -0
  36. package/lib/jwt/jwt-token-base.js.map +1 -0
  37. package/lib/lang/array-ratchet.js +84 -0
  38. package/lib/lang/array-ratchet.js.map +1 -0
  39. package/lib/lang/array-ratchet.spec.js +69 -0
  40. package/lib/lang/array-ratchet.spec.js.map +1 -0
  41. package/lib/lang/base64-ratchet.d.ts +1 -1
  42. package/lib/lang/base64-ratchet.js +46 -0
  43. package/lib/lang/base64-ratchet.js.map +1 -0
  44. package/lib/lang/base64-ratchet.spec.js +29 -0
  45. package/lib/lang/base64-ratchet.spec.js.map +1 -0
  46. package/lib/lang/boolean-ratchet.js +46 -0
  47. package/lib/lang/boolean-ratchet.js.map +1 -0
  48. package/lib/lang/boolean-ratchet.spec.js +82 -0
  49. package/lib/lang/boolean-ratchet.spec.js.map +1 -0
  50. package/lib/lang/composite-last-success-provider.js +27 -0
  51. package/lib/lang/composite-last-success-provider.js.map +1 -0
  52. package/lib/lang/composite-last-success-provider.spec.js +27 -0
  53. package/lib/lang/composite-last-success-provider.spec.js.map +1 -0
  54. package/lib/lang/date-ratchet.js +31 -0
  55. package/lib/lang/date-ratchet.js.map +1 -0
  56. package/lib/lang/date-ratchet.spec.js +22 -0
  57. package/lib/lang/date-ratchet.spec.js.map +1 -0
  58. package/lib/lang/duration-ratchet.js +43 -0
  59. package/lib/lang/duration-ratchet.js.map +1 -0
  60. package/lib/lang/duration-ratchet.spec.js +40 -0
  61. package/lib/lang/duration-ratchet.spec.js.map +1 -0
  62. package/lib/lang/enum-ratchet.js +31 -0
  63. package/lib/lang/enum-ratchet.js.map +1 -0
  64. package/lib/lang/enum-ratchet.spec.js +32 -0
  65. package/lib/lang/enum-ratchet.spec.js.map +1 -0
  66. package/lib/lang/error-ratchet.js +45 -0
  67. package/lib/lang/error-ratchet.js.map +1 -0
  68. package/lib/lang/error-ratchet.spec.js +21 -0
  69. package/lib/lang/error-ratchet.spec.js.map +1 -0
  70. package/lib/lang/esm-ratchet.js +18 -0
  71. package/lib/lang/esm-ratchet.js.map +1 -0
  72. package/lib/lang/expiring-object.js +73 -0
  73. package/lib/lang/expiring-object.js.map +1 -0
  74. package/lib/lang/expiring-object.spec.js +52 -0
  75. package/lib/lang/expiring-object.spec.js.map +1 -0
  76. package/lib/lang/geolocation-ratchet.js +264 -0
  77. package/lib/lang/geolocation-ratchet.js.map +1 -0
  78. package/lib/lang/geolocation-ratchet.spec.js +75 -0
  79. package/lib/lang/geolocation-ratchet.spec.js.map +1 -0
  80. package/lib/lang/global-ratchet.js +44 -0
  81. package/lib/lang/global-ratchet.js.map +1 -0
  82. package/lib/lang/global-ratchet.spec.js +15 -0
  83. package/lib/lang/global-ratchet.spec.js.map +1 -0
  84. package/lib/lang/key-value.js +5 -0
  85. package/lib/lang/key-value.js.map +1 -0
  86. package/lib/lang/last-success-provider.js +2 -0
  87. package/lib/lang/last-success-provider.js.map +1 -0
  88. package/lib/lang/map-ratchet.js +165 -0
  89. package/lib/lang/map-ratchet.js.map +1 -0
  90. package/lib/lang/map-ratchet.spec.js +91 -0
  91. package/lib/lang/map-ratchet.spec.js.map +1 -0
  92. package/lib/lang/no.js +5 -0
  93. package/lib/lang/no.js.map +1 -0
  94. package/lib/lang/no.spec.js +8 -0
  95. package/lib/lang/no.spec.js.map +1 -0
  96. package/lib/lang/number-ratchet.js +157 -0
  97. package/lib/lang/number-ratchet.js.map +1 -0
  98. package/lib/lang/number-ratchet.spec.js +119 -0
  99. package/lib/lang/number-ratchet.spec.js.map +1 -0
  100. package/lib/lang/parsed-url.js +2 -0
  101. package/lib/lang/parsed-url.js.map +1 -0
  102. package/lib/lang/promise-ratchet.js +139 -0
  103. package/lib/lang/promise-ratchet.js.map +1 -0
  104. package/lib/lang/promise-ratchet.spec.js +75 -0
  105. package/lib/lang/promise-ratchet.spec.js.map +1 -0
  106. package/lib/lang/require-ratchet.js +56 -0
  107. package/lib/lang/require-ratchet.js.map +1 -0
  108. package/lib/lang/require-ratchet.spec.js +81 -0
  109. package/lib/lang/require-ratchet.spec.js.map +1 -0
  110. package/lib/lang/stop-watch.js +115 -0
  111. package/lib/lang/stop-watch.js.map +1 -0
  112. package/lib/lang/string-ratchet.js +203 -0
  113. package/lib/lang/string-ratchet.js.map +1 -0
  114. package/lib/lang/string-ratchet.spec.js +159 -0
  115. package/lib/lang/string-ratchet.spec.js.map +1 -0
  116. package/lib/lang/time-zone-ratchet.js +79 -0
  117. package/lib/lang/time-zone-ratchet.js.map +1 -0
  118. package/lib/lang/time-zone-ratchet.spec.js +41 -0
  119. package/lib/lang/time-zone-ratchet.spec.js.map +1 -0
  120. package/lib/lang/timeout-token.js +18 -0
  121. package/lib/lang/timeout-token.js.map +1 -0
  122. package/lib/lang/timeout-token.spec.js +10 -0
  123. package/lib/lang/timeout-token.spec.js.map +1 -0
  124. package/lib/lang/transform-ratchet.js +67 -0
  125. package/lib/lang/transform-ratchet.js.map +1 -0
  126. package/lib/lang/transform-ratchet.spec.js +119 -0
  127. package/lib/lang/transform-ratchet.spec.js.map +1 -0
  128. package/lib/logger/classic-single-line-log-message-formatter.js +14 -0
  129. package/lib/logger/classic-single-line-log-message-formatter.js.map +1 -0
  130. package/lib/logger/log-message-builder.js +49 -0
  131. package/lib/logger/log-message-builder.js.map +1 -0
  132. package/lib/logger/log-message-format-type.js +7 -0
  133. package/lib/logger/log-message-format-type.js.map +1 -0
  134. package/lib/logger/log-message-formatter.js +2 -0
  135. package/lib/logger/log-message-formatter.js.map +1 -0
  136. package/lib/logger/log-message-processor.js +2 -0
  137. package/lib/logger/log-message-processor.js.map +1 -0
  138. package/lib/logger/log-message.js +2 -0
  139. package/lib/logger/log-message.js.map +1 -0
  140. package/lib/logger/log-snapshot.js +2 -0
  141. package/lib/logger/log-snapshot.js.map +1 -0
  142. package/lib/logger/logger-instance.js +209 -0
  143. package/lib/logger/logger-instance.js.map +1 -0
  144. package/lib/logger/logger-level-name.js +10 -0
  145. package/lib/logger/logger-level-name.js.map +1 -0
  146. package/lib/logger/logger-meta.js +2 -0
  147. package/lib/logger/logger-meta.js.map +1 -0
  148. package/lib/logger/logger-options.js +2 -0
  149. package/lib/logger/logger-options.js.map +1 -0
  150. package/lib/logger/logger-output-function.js +7 -0
  151. package/lib/logger/logger-output-function.js.map +1 -0
  152. package/lib/logger/logger-ring-buffer.js +72 -0
  153. package/lib/logger/logger-ring-buffer.js.map +1 -0
  154. package/lib/logger/logger-util.js +46 -0
  155. package/lib/logger/logger-util.js.map +1 -0
  156. package/lib/logger/logger-util.spec.js +10 -0
  157. package/lib/logger/logger-util.spec.js.map +1 -0
  158. package/lib/logger/logger.js +136 -0
  159. package/lib/logger/logger.js.map +1 -0
  160. package/lib/logger/logger.spec.js +135 -0
  161. package/lib/logger/logger.spec.js.map +1 -0
  162. package/lib/logger/none-log-message-formatter.js +6 -0
  163. package/lib/logger/none-log-message-formatter.js.map +1 -0
  164. package/lib/logger/structured-json-log-message-formatter.js +20 -0
  165. package/lib/logger/structured-json-log-message-formatter.js.map +1 -0
  166. package/lib/network/browser-local-ip-provider.js +22 -0
  167. package/lib/network/browser-local-ip-provider.js.map +1 -0
  168. package/lib/network/browser-local-ip-provider.spec.js +17 -0
  169. package/lib/network/browser-local-ip-provider.spec.js.map +1 -0
  170. package/lib/network/fixed-local-ip-provider.js +10 -0
  171. package/lib/network/fixed-local-ip-provider.js.map +1 -0
  172. package/lib/network/local-ip-provider.js +2 -0
  173. package/lib/network/local-ip-provider.js.map +1 -0
  174. package/lib/network/network-ratchet.js +104 -0
  175. package/lib/network/network-ratchet.js.map +1 -0
  176. package/lib/network/network-ratchet.spec.js +14 -0
  177. package/lib/network/network-ratchet.spec.js.map +1 -0
  178. package/lib/stream/buffer-writable.d.ts +2 -2
  179. package/lib/stream/buffer-writable.js +17 -0
  180. package/lib/stream/buffer-writable.js.map +1 -0
  181. package/lib/stream/multi-stream.d.ts +1 -1
  182. package/lib/stream/multi-stream.js +13 -0
  183. package/lib/stream/multi-stream.js.map +1 -0
  184. package/lib/stream/stream-ratchet.d.ts +2 -2
  185. package/lib/stream/stream-ratchet.js +69 -0
  186. package/lib/stream/stream-ratchet.js.map +1 -0
  187. package/lib/stream/stream-ratchet.spec.js +14 -0
  188. package/lib/stream/stream-ratchet.spec.js.map +1 -0
  189. package/lib/stream/string-writable.d.ts +1 -1
  190. package/lib/stream/string-writable.js +15 -0
  191. package/lib/stream/string-writable.js.map +1 -0
  192. package/lib/stream/string-writable.spec.js +13 -0
  193. package/lib/stream/string-writable.spec.js.map +1 -0
  194. package/lib/third-party/google/google-recaptcha-ratchet.js +30 -0
  195. package/lib/third-party/google/google-recaptcha-ratchet.js.map +1 -0
  196. package/lib/third-party/google/google-recaptcha-ratchet.spec.js +21 -0
  197. package/lib/third-party/google/google-recaptcha-ratchet.spec.js.map +1 -0
  198. package/lib/third-party/twilio/twilio-ratchet.js +75 -0
  199. package/lib/third-party/twilio/twilio-ratchet.js.map +1 -0
  200. package/lib/transform/built-in-transforms.js +192 -0
  201. package/lib/transform/built-in-transforms.js.map +1 -0
  202. package/lib/transform/transform-rule.js +2 -0
  203. package/lib/transform/transform-rule.js.map +1 -0
  204. package/lib/tx/transaction-configuration.js +2 -0
  205. package/lib/tx/transaction-configuration.js.map +1 -0
  206. package/lib/tx/transaction-final-state.js +7 -0
  207. package/lib/tx/transaction-final-state.js.map +1 -0
  208. package/lib/tx/transaction-ratchet.js +77 -0
  209. package/lib/tx/transaction-ratchet.js.map +1 -0
  210. package/lib/tx/transaction-ratchet.spec.js +131 -0
  211. package/lib/tx/transaction-ratchet.spec.js.map +1 -0
  212. package/lib/tx/transaction-result.js +2 -0
  213. package/lib/tx/transaction-result.js.map +1 -0
  214. package/lib/tx/transaction-step.js +2 -0
  215. package/lib/tx/transaction-step.js.map +1 -0
  216. package/package.json +3 -2
  217. package/lib/index.mjs +0 -2
  218. package/lib/index.mjs.map +0 -1
@@ -0,0 +1,91 @@
1
+ import { MapRatchet } from './map-ratchet.js';
2
+ describe('#toKeyValueList', function () {
3
+ it('should expand a maps nested keys', function () {
4
+ const test = { 'a.b': 'c', 'c.d[0].e': 2 };
5
+ const out = MapRatchet.expandNestedKeys(test);
6
+ expect(out).toBeTruthy();
7
+ expect(out.a).toBeTruthy();
8
+ expect(out.a.b).toBeTruthy();
9
+ expect(out.a.b).toEqual('c');
10
+ expect(out.c).toBeTruthy();
11
+ expect(out.c.d).toBeTruthy();
12
+ expect(out.c.d.length).toEqual(1);
13
+ expect(out.c.d[0].e).toBeTruthy();
14
+ expect(out.c.d[0].e).toEqual(2);
15
+ });
16
+ it('should convert a map to a key-value list and back', function () {
17
+ const test = { key1: 'value1', key2: 'value2' };
18
+ const kvl = MapRatchet.toKeyValueList(test);
19
+ expect(kvl.length).toEqual(2);
20
+ const back = MapRatchet.fromKeyValueList(kvl);
21
+ expect(back['key1']).toEqual('value1');
22
+ expect(back['key2']).toEqual('value2');
23
+ });
24
+ it('should remove null and empty strings but not 0', function () {
25
+ const test = {
26
+ key1: '',
27
+ key2: null,
28
+ key3: 0,
29
+ key4: 'fine',
30
+ key5: {
31
+ key6: null,
32
+ key7: 'also_fine',
33
+ },
34
+ };
35
+ const clean = MapRatchet.cleanup(test);
36
+ expect(Object.keys(clean).length).toEqual(3);
37
+ expect(Object.keys(clean).indexOf('key1')).toEqual(-1);
38
+ expect(Object.keys(clean).indexOf('key2')).toEqual(-1);
39
+ expect(Object.keys(clean).indexOf('key3')).toBeGreaterThan(-1);
40
+ expect(Object.keys(clean).indexOf('key4')).toBeGreaterThan(-1);
41
+ expect(Object.keys(clean).indexOf('key5')).toBeGreaterThan(-1);
42
+ expect(clean['key5']['key7']).toEqual('also_fine');
43
+ });
44
+ it('should extract values ignoring case', function () {
45
+ const test = {
46
+ 'this-Test': 'a',
47
+ test22: 'b',
48
+ };
49
+ expect(MapRatchet.extractValueFromMapIgnoreCase(test, 'THIS-TEST')).toEqual('a');
50
+ expect(MapRatchet.extractValueFromMapIgnoreCase(test, 'tEst22')).toEqual('b');
51
+ });
52
+ it('should group values', function () {
53
+ const test = [
54
+ {
55
+ id: 1,
56
+ type: 'a',
57
+ },
58
+ {
59
+ id: 2,
60
+ type: 'a',
61
+ },
62
+ {
63
+ id: 3,
64
+ type: 'b',
65
+ },
66
+ ];
67
+ const grouped = MapRatchet.groupByProperty(test, 'type');
68
+ expect(grouped).toBeTruthy();
69
+ const aGroup = grouped.get('a');
70
+ expect(aGroup).toBeTruthy();
71
+ expect(aGroup.length).toEqual(2);
72
+ expect(grouped.has('b')).toBeTruthy();
73
+ expect(grouped.has('c')).toBeFalsy();
74
+ });
75
+ it('should fetch a value with a case-insensitive key', function () {
76
+ const testOb = {
77
+ test1: 'a',
78
+ Test2: 'b',
79
+ test3: 'c',
80
+ Test3: 'd',
81
+ };
82
+ expect(MapRatchet.caseInsensitiveAccess(null, null)).toBeNull();
83
+ expect(MapRatchet.caseInsensitiveAccess({}, null)).toBeNull();
84
+ expect(MapRatchet.caseInsensitiveAccess(null, 'a')).toBeNull();
85
+ expect(MapRatchet.caseInsensitiveAccess(testOb, 'test1')).toEqual('a');
86
+ expect(MapRatchet.caseInsensitiveAccess(testOb, 'test2')).toEqual('b');
87
+ expect(MapRatchet.caseInsensitiveAccess(testOb, 'TEST2')).toEqual('b');
88
+ expect(MapRatchet.caseInsensitiveAccess(testOb, 'test3')).toEqual('c');
89
+ });
90
+ });
91
+ //# sourceMappingURL=map-ratchet.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"map-ratchet.spec.js","sourceRoot":"","sources":["../../src/lang/map-ratchet.spec.ts"],"names":[],"mappings":"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"}
package/lib/lang/no.js ADDED
@@ -0,0 +1,5 @@
1
+ export class No {
2
+ static op(...args) {
3
+ }
4
+ }
5
+ //# sourceMappingURL=no.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"no.js","sourceRoot":"","sources":["../../src/lang/no.ts"],"names":[],"mappings":"AACA,MAAM,OAAO,EAAE;IAEN,MAAM,CAAC,EAAE,CAAC,GAAG,IAAW;IAE/B,CAAC;CACF"}
@@ -0,0 +1,8 @@
1
+ import { PromiseRatchet } from './promise-ratchet.js';
2
+ import { No } from './no.js';
3
+ describe('#no', function () {
4
+ it('should do nothing', () => {
5
+ PromiseRatchet.wait(100).then(No.op);
6
+ });
7
+ });
8
+ //# sourceMappingURL=no.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"no.spec.js","sourceRoot":"","sources":["../../src/lang/no.spec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAE7B,QAAQ,CAAC,KAAK,EAAE;IACd,EAAE,CAAC,mBAAmB,EAAE,GAAG,EAAE;QAC3B,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,157 @@
1
+ import { Logger } from '../logger/logger.js';
2
+ import { RequireRatchet } from './require-ratchet.js';
3
+ class NumberRatchet {
4
+ static MAX_LEADING_ZEROS_FORMAT_LENGTH = 1000;
5
+ static toFixedDecimalNumber(input, placesAfterPoint) {
6
+ const v = NumberRatchet.safeNumber(input);
7
+ return v === null || v === undefined ? v : NumberRatchet.safeNumber(v.toFixed(placesAfterPoint));
8
+ }
9
+ static leadingZeros(val, size) {
10
+ const sVal = String(val);
11
+ if (sVal.length < size) {
12
+ let pad = '0000';
13
+ if (size > NumberRatchet.MAX_LEADING_ZEROS_FORMAT_LENGTH) {
14
+ throw 'Cannot format number that large (max length is ' + NumberRatchet.MAX_LEADING_ZEROS_FORMAT_LENGTH + ')';
15
+ }
16
+ while (pad.length < size) {
17
+ pad = pad + pad;
18
+ }
19
+ return (pad + sVal).slice(-1 * size);
20
+ }
21
+ else {
22
+ return sVal;
23
+ }
24
+ }
25
+ static between(inTest, inP1, inP2) {
26
+ const test = NumberRatchet.safeNumber(inTest);
27
+ const p1 = NumberRatchet.safeNumber(inP1);
28
+ const p2 = NumberRatchet.safeNumber(inP2);
29
+ return (test >= p1 && test <= p2) || (test >= p2 && test <= p1);
30
+ }
31
+ static safeNumber(input, ifNotNumber = null, useDefaultForNullAndUndefined) {
32
+ let rval = undefined;
33
+ if (input !== null && input !== undefined) {
34
+ const type = typeof input;
35
+ if (type == 'number') {
36
+ rval = input;
37
+ }
38
+ else if (type == 'string') {
39
+ if (input.trim().length === 0) {
40
+ rval = ifNotNumber;
41
+ }
42
+ else {
43
+ rval = Number.parseFloat(input);
44
+ }
45
+ }
46
+ else {
47
+ Logger.warn('Value is of type %s, returning default', type);
48
+ rval = ifNotNumber;
49
+ }
50
+ if (isNaN(rval)) {
51
+ Logger.debug('Parsed string to NaN - using NaN value from param');
52
+ rval = ifNotNumber;
53
+ }
54
+ }
55
+ else {
56
+ rval = useDefaultForNullAndUndefined ? ifNotNumber : input;
57
+ }
58
+ return rval;
59
+ }
60
+ static numberCSVToList(inputCSV) {
61
+ let rval = null;
62
+ if (inputCSV) {
63
+ rval = inputCSV.split(',').map((s) => {
64
+ return NumberRatchet.safeNumber(s.trim());
65
+ });
66
+ rval = rval.filter((r) => typeof r === 'number' && !isNaN(r));
67
+ }
68
+ return rval;
69
+ }
70
+ static fitToWindow(val, b1, b2) {
71
+ let rval = val;
72
+ if (val === null || b1 === null || b2 === null || b1 < 0 || b2 < 0 || val < 0) {
73
+ throw new Error('All values must be non-null and larger than 0');
74
+ }
75
+ const low = Math.min(b1, b2);
76
+ const high = Math.max(b1, b2);
77
+ const windowSize = high - low;
78
+ if (high === low) {
79
+ rval = high;
80
+ }
81
+ else {
82
+ while (rval < low) {
83
+ rval += windowSize;
84
+ }
85
+ while (rval > high) {
86
+ rval -= windowSize;
87
+ }
88
+ }
89
+ return rval;
90
+ }
91
+ static groupNumbersIntoContiguousRanges(inputData, minRangeSize = 3) {
92
+ RequireRatchet.notNullOrUndefined(inputData);
93
+ const input = Object.assign([], inputData);
94
+ input.sort((a, b) => a - b);
95
+ const singles = [];
96
+ const ranges = [];
97
+ let start = 0;
98
+ for (let i = 1; i < input.length; i++) {
99
+ if (input[i] === input[i - 1] + 1) {
100
+ }
101
+ else {
102
+ if (start === i - 1) {
103
+ singles.push(input[i - 1]);
104
+ }
105
+ else {
106
+ const rangeSize = i - start;
107
+ if (rangeSize < minRangeSize) {
108
+ for (let j = start; j < i; j++) {
109
+ singles.push(input[j]);
110
+ }
111
+ }
112
+ else {
113
+ ranges.push({
114
+ min: input[start],
115
+ max: input[i - 1],
116
+ });
117
+ }
118
+ }
119
+ start = i;
120
+ }
121
+ }
122
+ return {
123
+ singles: singles,
124
+ ranges: ranges,
125
+ };
126
+ }
127
+ static distributeItemsEvenly(items, buckets) {
128
+ RequireRatchet.notNullOrUndefined(items, 'items');
129
+ RequireRatchet.notNullOrUndefined(buckets, 'buckets');
130
+ RequireRatchet.true(items > 0 && items === Math.floor(items), 'Items integer larger than 0');
131
+ RequireRatchet.true(buckets > 0 && buckets === Math.floor(buckets), 'Buckets integer larger than 0');
132
+ const offset = buckets / items;
133
+ const rval = [];
134
+ for (let i = 0; i < buckets; i++) {
135
+ rval.push(0);
136
+ }
137
+ let loc = 0;
138
+ let rem = items;
139
+ while (rem > 0) {
140
+ rval[Math.floor(loc) % buckets]++;
141
+ rem--;
142
+ loc += offset;
143
+ }
144
+ return rval;
145
+ }
146
+ static createRange(minInclusive, maxExclusive, step = 1) {
147
+ const rval = [];
148
+ let val = minInclusive;
149
+ while (val < maxExclusive) {
150
+ rval.push(val);
151
+ val += step;
152
+ }
153
+ return rval;
154
+ }
155
+ }
156
+ export { NumberRatchet };
157
+ //# 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,119 @@
1
+ import { NumberRatchet } from './number-ratchet.js';
2
+ import fs from 'fs';
3
+ import path from 'path';
4
+ import { EsmRatchet } from './esm-ratchet.js';
5
+ describe('#toFixedDecimalNumber', function () {
6
+ it('should convert "5.1234 to 5.12', function () {
7
+ expect(NumberRatchet.toFixedDecimalNumber(5.1234, 2)).toEqual(5.12);
8
+ expect(NumberRatchet.toFixedDecimalNumber('5.1234', 2)).toEqual(5.12);
9
+ });
10
+ it('should convert "5.5678 to 5.57', function () {
11
+ expect(NumberRatchet.toFixedDecimalNumber(5.5678, 2)).toEqual(5.57);
12
+ expect(NumberRatchet.toFixedDecimalNumber('5.5678', 2)).toEqual(5.57);
13
+ });
14
+ });
15
+ describe('#leadingZeros', function () {
16
+ it('should convert "5" to 05', function () {
17
+ const result = NumberRatchet.leadingZeros('5', 2);
18
+ expect(result).toEqual('05');
19
+ });
20
+ it('should leave 166 alone', function () {
21
+ const result = NumberRatchet.leadingZeros('166', 2);
22
+ expect(result).toEqual('166');
23
+ });
24
+ });
25
+ describe('#safeToNumber', function () {
26
+ it('should convert "55" to 55', function () {
27
+ const result = NumberRatchet.safeNumber('55');
28
+ expect(result).toEqual(55);
29
+ });
30
+ it('should leave 66 alone', function () {
31
+ const result = NumberRatchet.safeNumber(66);
32
+ expect(result).toEqual(66);
33
+ });
34
+ it('should return the default when it cannot parse', function () {
35
+ const result = NumberRatchet.safeNumber({ test: 'test' }, 42);
36
+ expect(result).toEqual(42);
37
+ });
38
+ it('should return the default for the empty string', function () {
39
+ const result = NumberRatchet.safeNumber({ test: '' }, 42);
40
+ expect(result).toEqual(42);
41
+ });
42
+ it('should return the default for null/undefined if set true', function () {
43
+ const result = NumberRatchet.safeNumber(null, 42, true);
44
+ expect(result).toEqual(42);
45
+ const result2 = NumberRatchet.safeNumber(undefined, 46, true);
46
+ expect(result2).toEqual(46);
47
+ });
48
+ it('should return the passed value for null/undefined if set false', function () {
49
+ const result = NumberRatchet.safeNumber(null, 42, false);
50
+ expect(result).toEqual(null);
51
+ const result2 = NumberRatchet.safeNumber(undefined, 46, false);
52
+ expect(result2).toEqual(undefined);
53
+ });
54
+ it('should return the passed value for null/undefined if not set', function () {
55
+ const result = NumberRatchet.safeNumber(null, 42);
56
+ expect(result).toEqual(null);
57
+ const result2 = NumberRatchet.safeNumber(undefined, 46);
58
+ expect(result2).toEqual(undefined);
59
+ });
60
+ });
61
+ describe('#parseCSV', function () {
62
+ it('should convert "1,2,3" to [1,2,3]', function () {
63
+ const result = NumberRatchet.numberCSVToList('1,2,3');
64
+ expect(result.length).toEqual(3);
65
+ });
66
+ it('should convert " 1, 2,3 " to [1,2,3]', function () {
67
+ const result = NumberRatchet.numberCSVToList(' 1, 2,3 ');
68
+ expect(result.length).toEqual(3);
69
+ });
70
+ it('should convert " a1, 2,b " to [2]', function () {
71
+ const result = NumberRatchet.numberCSVToList(' a1, 2,b ');
72
+ expect(result.length).toEqual(1);
73
+ expect(result[0]).toEqual(2);
74
+ });
75
+ });
76
+ describe('#fitToWindow', function () {
77
+ it('should fit input to the window', function () {
78
+ expect(NumberRatchet.fitToWindow(5, 8, 10)).toEqual(9);
79
+ expect(NumberRatchet.fitToWindow(8, 2, 10)).toEqual(8);
80
+ expect(NumberRatchet.fitToWindow(8, 9, 9)).toEqual(9);
81
+ expect(NumberRatchet.fitToWindow(12, 2, 10)).toEqual(4);
82
+ });
83
+ });
84
+ describe('#groupNumbersIntoContiguousRanges', function () {
85
+ it('should group numbers', function () {
86
+ let input = JSON.parse(fs.readFileSync(path.join(EsmRatchet.fetchDirName(import.meta.url), '../../../../test-data/number_set.json')).toString());
87
+ input = input.map((i) => NumberRatchet.safeNumber(i));
88
+ const grouped = NumberRatchet.groupNumbersIntoContiguousRanges(input, 5);
89
+ expect(grouped).toBeTruthy();
90
+ });
91
+ });
92
+ describe('#distributeItemsEvenly', function () {
93
+ it('should distribute evenly', function () {
94
+ const test1 = NumberRatchet.distributeItemsEvenly(4, 6);
95
+ expect(test1).toBeTruthy();
96
+ const test2 = NumberRatchet.distributeItemsEvenly(12, 6);
97
+ expect(test2).toBeTruthy();
98
+ const test3 = NumberRatchet.distributeItemsEvenly(5, 6);
99
+ expect(test3).toBeTruthy();
100
+ const test4 = NumberRatchet.distributeItemsEvenly(192, 11);
101
+ expect(test4).toBeTruthy();
102
+ const test5 = NumberRatchet.distributeItemsEvenly(11, 192);
103
+ expect(test5).toBeTruthy();
104
+ });
105
+ });
106
+ describe('#createRange', function () {
107
+ it('should create ranges', function () {
108
+ const test1 = NumberRatchet.createRange(0, 5, 1);
109
+ expect(test1).toBeTruthy();
110
+ expect(test1.length).toEqual(5);
111
+ const test2 = NumberRatchet.createRange(1, 5, 1);
112
+ expect(test2).toBeTruthy();
113
+ expect(test2.length).toEqual(4);
114
+ const test3 = NumberRatchet.createRange(0, 10, 2);
115
+ expect(test3).toBeTruthy();
116
+ expect(test3.length).toEqual(5);
117
+ });
118
+ });
119
+ //# sourceMappingURL=number-ratchet.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"number-ratchet.spec.js","sourceRoot":"","sources":["../../src/lang/number-ratchet.spec.ts"],"names":[],"mappings":"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"}
@@ -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,139 @@
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
+ 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, autoDebug = false) {
43
+ Logger.info('Success, result was : \n\n%s\n\n', JSON.stringify(result));
44
+ if (autoDebug) {
45
+ debugger;
46
+ }
47
+ process.exit(0);
48
+ }
49
+ static dumpError(err, autoDebug = false) {
50
+ Logger.warn('Failure, err was : \n\n%s\n\n -- \n\n%s\n\n', JSON.stringify(err), String(err));
51
+ console.trace();
52
+ if (autoDebug) {
53
+ debugger;
54
+ }
55
+ process.exit(1);
56
+ }
57
+ static logErrorAndReturnNull(err, autoDebug = false) {
58
+ Logger.warn('Failure, err was : \n\n%s\n\n -- \n\n%s\n\n', JSON.stringify(err), String(err));
59
+ if (autoDebug) {
60
+ debugger;
61
+ }
62
+ return null;
63
+ }
64
+ static runPromiseAndDump(promise) {
65
+ promise.then(PromiseRatchet.dumpResult).catch(PromiseRatchet.dumpError);
66
+ }
67
+ static async waitFor(testFunction, expectedValue, intervalMS, maxCycles, label = 'waitFor', count = 0) {
68
+ if (expectedValue == null || intervalMS < 50 || maxCycles < 1 || count < 0 || typeof testFunction != 'function') {
69
+ Logger.warn('%s: Invalid configuration for waitFor - exiting immediately', label);
70
+ Logger.warn('ExpectedValue : %s ; interval: %d ; maxCycles: %d ; test : %s', expectedValue, intervalMS, maxCycles, typeof testFunction);
71
+ return false;
72
+ }
73
+ let curVal = null;
74
+ try {
75
+ curVal = testFunction(count);
76
+ }
77
+ catch (err) {
78
+ Logger.warn('%s: Caught error while waiting, giving up', label);
79
+ return false;
80
+ }
81
+ if (curVal === null) {
82
+ Logger.debug('%s:CurVal was null - aborting', label);
83
+ return false;
84
+ }
85
+ else if (curVal == expectedValue) {
86
+ Logger.debug('%s:Found expected value', label);
87
+ return true;
88
+ }
89
+ else if (count > maxCycles) {
90
+ Logger.debug('%s:Exceeded max cycles, giving up', label);
91
+ return false;
92
+ }
93
+ else {
94
+ Logger.debug('%s : value not reached yet, waiting (count = %d of %d)', label, count, maxCycles);
95
+ await PromiseRatchet.wait(intervalMS);
96
+ return PromiseRatchet.waitFor(testFunction, expectedValue, intervalMS, maxCycles, label, count + 1);
97
+ }
98
+ }
99
+ static async runBoundedParallel(promiseFn, params, context, maxConcurrent = 1, logLevel = LoggerLevelName.debug) {
100
+ const sw = new StopWatch();
101
+ let rval = [];
102
+ let remain = params;
103
+ Logger.logByLevel(logLevel, 'Processing %d total elements %d at a time', params.length, maxConcurrent);
104
+ const ctx = context || this;
105
+ let processed = 0;
106
+ const totalCount = remain.length;
107
+ while (remain.length > 0) {
108
+ const curBatch = remain.slice(0, Math.min(remain.length, maxConcurrent));
109
+ remain = remain.slice(curBatch.length);
110
+ const proms = curBatch.map((c) => promiseFn.apply(ctx, c));
111
+ const output = await Promise.all(proms);
112
+ processed += proms.length;
113
+ rval = rval.concat(output);
114
+ const pct = processed / totalCount;
115
+ Logger.logByLevel(logLevel, '%d elements remain : %s', remain.length, sw.dumpExpected(pct));
116
+ }
117
+ sw.log();
118
+ return rval;
119
+ }
120
+ static async runBoundedParallelSingleParam(promiseFn, params, context, maxConcurrent = 1, logLevel = LoggerLevelName.debug) {
121
+ const wrappedParams = ArrayRatchet.wrapElementsInArray(params);
122
+ return PromiseRatchet.runBoundedParallel(promiseFn, wrappedParams, context, maxConcurrent, logLevel);
123
+ }
124
+ static async asyncForEachSerial(array, callback) {
125
+ for (let index = 0; index < array.length; index++) {
126
+ await callback(array[index], index, array);
127
+ }
128
+ }
129
+ static async asyncForEachParallel(array, callback) {
130
+ const proms = [];
131
+ for (let index = 0; index < array.length; index++) {
132
+ proms.push(callback(array[index], index, array));
133
+ }
134
+ await Promise.all(proms);
135
+ }
136
+ constructor() {
137
+ }
138
+ }
139
+ //# 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,75 @@
1
+ import { PromiseRatchet } from './promise-ratchet.js';
2
+ import { Logger } from '../logger/logger.js';
3
+ import { LoggerLevelName } from '../logger/logger-level-name.js';
4
+ const fnFalse = (ignored) => {
5
+ return false;
6
+ };
7
+ const fnOn3 = (t) => {
8
+ Logger.info('t=%d', t);
9
+ return t == 3;
10
+ };
11
+ const waitAndPrint = async (t1, t2) => {
12
+ Logger.info('Running: %s', t2);
13
+ await PromiseRatchet.wait(t1 * 2);
14
+ return t1 * 2;
15
+ };
16
+ describe('#promiseRatchet', function () {
17
+ it('should timeout eventually', async () => {
18
+ try {
19
+ Logger.setLevel(LoggerLevelName.silly);
20
+ const result = await PromiseRatchet.waitFor(fnFalse, true, 100, 2);
21
+ Logger.info('Got : %s', result);
22
+ expect(result).toEqual(false);
23
+ }
24
+ catch (err) {
25
+ Logger.warn('Error: %s', err, err);
26
+ }
27
+ });
28
+ it('should succeed on 3rd try', async () => {
29
+ const promise = PromiseRatchet.waitFor(fnOn3, true, 100, 4);
30
+ const result = await promise;
31
+ expect(result).toEqual(true);
32
+ });
33
+ it('should run 10 elements, 2 at a time', async () => {
34
+ Logger.setLevel(LoggerLevelName.debug);
35
+ const elements = [
36
+ [100, 'Test1'],
37
+ [200, 'Test2'],
38
+ [300, 'Test3'],
39
+ [400, 'Test4'],
40
+ [500, 'Test5'],
41
+ [600, 'Test6'],
42
+ [700, 'Test7'],
43
+ [800, 'Test8'],
44
+ [900, 'Test9'],
45
+ [1000, 'Test10'],
46
+ ];
47
+ const results = await PromiseRatchet.runBoundedParallel(waitAndPrint, elements, this, 2);
48
+ Logger.info('Final results %j', results);
49
+ expect(results).toBeTruthy();
50
+ expect(results.length).toEqual(10);
51
+ }, 30000);
52
+ it('should run 10 waits, 2 at a time', async () => {
53
+ Logger.setLevel(LoggerLevelName.debug);
54
+ const elements = [100, 200, 300, 400, 500, 600, 700, 800, 900, 1000];
55
+ const results = await PromiseRatchet.runBoundedParallelSingleParam(PromiseRatchet.wait, elements, this, 2);
56
+ Logger.info('Final results %j', results);
57
+ expect(results).toBeTruthy();
58
+ expect(results.length).toEqual(10);
59
+ });
60
+ xit('should run an async function as a for/each', async () => {
61
+ Logger.setLevel(LoggerLevelName.debug);
62
+ const elements = [1001, 1002, 2000];
63
+ const pfn = async (v) => {
64
+ Logger.info('Waiting %s', v);
65
+ await PromiseRatchet.wait(v);
66
+ Logger.info('Finished %s', v);
67
+ };
68
+ Logger.info('Serial test');
69
+ await PromiseRatchet.asyncForEachSerial(elements, pfn);
70
+ Logger.info('Parallel test');
71
+ await PromiseRatchet.asyncForEachParallel(elements, pfn);
72
+ Logger.info('Done');
73
+ });
74
+ });
75
+ //# sourceMappingURL=promise-ratchet.spec.js.map