umt 2.4.0 → 2.6.0

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 (276) hide show
  1. package/README.md +288 -16
  2. package/module/Array/generateNumberArray.js +13 -7
  3. package/module/Array/generateNumberArray.js.map +1 -1
  4. package/module/Array/getArraysCommon.js +21 -3
  5. package/module/Array/getArraysCommon.js.map +1 -1
  6. package/module/Array/groupBy.js +8 -7
  7. package/module/Array/groupBy.js.map +1 -1
  8. package/module/Array/index.d.ts +3 -0
  9. package/module/Array/index.js +3 -0
  10. package/module/Array/index.js.map +1 -1
  11. package/module/Array/timSort.js +2 -20
  12. package/module/Array/timSort.js.map +1 -1
  13. package/module/Array/ultraNumberSort.d.ts +7 -0
  14. package/module/Array/ultraNumberSort.js +373 -0
  15. package/module/Array/ultraNumberSort.js.map +1 -0
  16. package/module/Array/uniqBy.d.ts +7 -0
  17. package/module/Array/uniqBy.js +19 -0
  18. package/module/Array/uniqBy.js.map +1 -0
  19. package/module/Array/unique.d.ts +6 -0
  20. package/module/Array/unique.js +9 -0
  21. package/module/Array/unique.js.map +1 -0
  22. package/module/Color/rgbaToHsla.js +1 -1
  23. package/module/Color/rgbaToHsla.js.map +1 -1
  24. package/module/Date/birthday.js +14 -6
  25. package/module/Date/birthday.js.map +1 -1
  26. package/module/Date/isLeapYear.js +3 -0
  27. package/module/Date/isLeapYear.js.map +1 -1
  28. package/module/Error/index.d.ts +1 -0
  29. package/module/Error/index.js +1 -0
  30. package/module/Error/index.js.map +1 -1
  31. package/module/Error/retry.d.ts +37 -0
  32. package/module/Error/retry.js +47 -0
  33. package/module/Error/retry.js.map +1 -0
  34. package/module/IP/getIpClass.js +1 -1
  35. package/module/IP/getIpClass.js.map +1 -1
  36. package/module/IP/getNetworkAddress.js +2 -2
  37. package/module/IP/getNetworkAddress.js.map +1 -1
  38. package/module/IP/ipToBinaryString.js +2 -2
  39. package/module/IP/ipToBinaryString.js.map +1 -1
  40. package/module/IP/subnetMaskToCidr.js +1 -1
  41. package/module/IP/subnetMaskToCidr.js.map +1 -1
  42. package/module/Math/calculator/core.js +21 -13
  43. package/module/Math/calculator/core.js.map +1 -1
  44. package/module/Math/calculator/literalExpression.js +19 -7
  45. package/module/Math/calculator/literalExpression.js.map +1 -1
  46. package/module/Math/division.js +3 -3
  47. package/module/Math/division.js.map +1 -1
  48. package/module/Math/gcd.js +26 -4
  49. package/module/Math/gcd.js.map +1 -1
  50. package/module/Math/standardDeviation.js +4 -2
  51. package/module/Math/standardDeviation.js.map +1 -1
  52. package/module/Object/has.js +1 -2
  53. package/module/Object/has.js.map +1 -1
  54. package/module/Object/index.d.ts +4 -0
  55. package/module/Object/index.js +4 -0
  56. package/module/Object/index.js.map +1 -1
  57. package/module/Object/isEmpty.d.ts +6 -0
  58. package/module/Object/isEmpty.js +20 -0
  59. package/module/Object/isEmpty.js.map +1 -0
  60. package/module/Object/merge.d.ts +8 -0
  61. package/module/Object/merge.js +10 -0
  62. package/module/Object/merge.js.map +1 -0
  63. package/module/Object/mergeDeep.d.ts +8 -0
  64. package/module/Object/mergeDeep.js +37 -0
  65. package/module/Object/mergeDeep.js.map +1 -0
  66. package/module/Object/omit.d.ts +7 -0
  67. package/module/Object/omit.js +14 -0
  68. package/module/Object/omit.js.map +1 -0
  69. package/module/Object/pickDeep.d.ts +2 -2
  70. package/module/Object/pickDeep.js +4 -4
  71. package/module/Object/pickDeep.js.map +1 -1
  72. package/module/Simple/Date/dayOfWeekSimple.js +3 -3
  73. package/module/Simple/Date/dayOfWeekSimple.js.map +1 -1
  74. package/module/String/camelCase.d.ts +6 -0
  75. package/module/String/camelCase.js +12 -0
  76. package/module/String/camelCase.js.map +1 -0
  77. package/module/String/escapeHtml.d.ts +6 -0
  78. package/module/String/escapeHtml.js +19 -0
  79. package/module/String/escapeHtml.js.map +1 -0
  80. package/module/String/formatString/applyFormatter.d.ts +25 -0
  81. package/module/String/formatString/applyFormatter.js +71 -0
  82. package/module/String/formatString/applyFormatter.js.map +1 -0
  83. package/module/String/formatString/defaultFormatters.d.ts +24 -0
  84. package/module/String/formatString/defaultFormatters.js +59 -0
  85. package/module/String/formatString/defaultFormatters.js.map +1 -0
  86. package/module/String/formatString/detectMode.d.ts +26 -0
  87. package/module/String/formatString/detectMode.js +61 -0
  88. package/module/String/formatString/detectMode.js.map +1 -0
  89. package/module/String/formatString/getValue.d.ts +27 -0
  90. package/module/String/formatString/getValue.js +56 -0
  91. package/module/String/formatString/getValue.js.map +1 -0
  92. package/module/String/formatString/index.d.ts +91 -0
  93. package/module/String/formatString/index.js +38 -0
  94. package/module/String/formatString/index.js.map +1 -0
  95. package/module/String/index.d.ts +5 -0
  96. package/module/String/index.js +5 -0
  97. package/module/String/index.js.map +1 -1
  98. package/module/String/kebabCase.d.ts +6 -0
  99. package/module/String/kebabCase.js +22 -0
  100. package/module/String/kebabCase.js.map +1 -0
  101. package/module/String/levenshteinDistance.d.ts +8 -0
  102. package/module/String/levenshteinDistance.js +38 -0
  103. package/module/String/levenshteinDistance.js.map +1 -0
  104. package/module/String/stringSimilarity.d.ts +8 -0
  105. package/module/String/stringSimilarity.js +23 -0
  106. package/module/String/stringSimilarity.js.map +1 -0
  107. package/module/Tool/pipe.d.ts +1 -1
  108. package/module/Tool/pipe.js.map +1 -1
  109. package/module/Validate/core/index.js +0 -1
  110. package/module/Validate/core/index.js.map +1 -1
  111. package/module/Validate/isDouble.js +1 -1
  112. package/module/Validate/isDouble.js.map +1 -1
  113. package/module/Validate/isNode.js +1 -0
  114. package/module/Validate/isNode.js.map +1 -1
  115. package/module/Validate/isNumber.js +1 -1
  116. package/module/Validate/isNumber.js.map +1 -1
  117. package/module/Validate/isValueNaN.js +1 -1
  118. package/module/Validate/isValueNaN.js.map +1 -1
  119. package/module/Validate/number/even.js +7 -1
  120. package/module/Validate/number/even.js.map +1 -1
  121. package/module/Validate/number/odd.js +7 -1
  122. package/module/Validate/number/odd.js.map +1 -1
  123. package/module/Validate/string/email.js +20 -2
  124. package/module/Validate/string/email.js.map +1 -1
  125. package/module/es5/Array/generateNumberArray.js +15 -9
  126. package/module/es5/Array/getArraysCommon.js +39 -4
  127. package/module/es5/Array/groupBy.js +8 -7
  128. package/module/es5/Array/index.d.ts +3 -0
  129. package/module/es5/Array/index.js +33 -0
  130. package/module/es5/Array/timSort.js +2 -20
  131. package/module/es5/Array/ultraNumberSort.d.ts +7 -0
  132. package/module/es5/Array/ultraNumberSort.js +475 -0
  133. package/module/es5/Array/uniqBy.d.ts +7 -0
  134. package/module/es5/Array/uniqBy.js +36 -0
  135. package/module/es5/Array/unique.d.ts +6 -0
  136. package/module/es5/Array/unique.js +20 -0
  137. package/module/es5/Color/rgbaToHsla.js +1 -1
  138. package/module/es5/Date/birthday.js +17 -3
  139. package/module/es5/Date/isLeapYear.js +3 -0
  140. package/module/es5/Error/index.d.ts +1 -0
  141. package/module/es5/Error/index.js +11 -0
  142. package/module/es5/Error/retry.d.ts +37 -0
  143. package/module/es5/Error/retry.js +88 -0
  144. package/module/es5/IP/getIpClass.js +1 -1
  145. package/module/es5/IP/getNetworkAddress.js +2 -2
  146. package/module/es5/IP/ipToBinaryString.js +2 -2
  147. package/module/es5/IP/subnetMaskToCidr.js +1 -1
  148. package/module/es5/Math/calculator/core.js +17 -9
  149. package/module/es5/Math/calculator/literalExpression.js +19 -6
  150. package/module/es5/Math/division.js +3 -3
  151. package/module/es5/Math/gcd.js +43 -5
  152. package/module/es5/Math/standardDeviation.js +4 -2
  153. package/module/es5/Object/has.js +1 -1
  154. package/module/es5/Object/index.d.ts +4 -0
  155. package/module/es5/Object/index.js +44 -0
  156. package/module/es5/Object/isEmpty.d.ts +6 -0
  157. package/module/es5/Object/isEmpty.js +26 -0
  158. package/module/es5/Object/merge.d.ts +8 -0
  159. package/module/es5/Object/merge.js +18 -0
  160. package/module/es5/Object/mergeDeep.d.ts +8 -0
  161. package/module/es5/Object/mergeDeep.js +46 -0
  162. package/module/es5/Object/omit.d.ts +7 -0
  163. package/module/es5/Object/omit.js +29 -0
  164. package/module/es5/Object/pickDeep.d.ts +2 -2
  165. package/module/es5/Object/pickDeep.js +4 -4
  166. package/module/es5/Simple/Date/dayOfWeekSimple.js +3 -3
  167. package/module/es5/String/camelCase.d.ts +6 -0
  168. package/module/es5/String/camelCase.js +18 -0
  169. package/module/es5/String/escapeHtml.d.ts +6 -0
  170. package/module/es5/String/escapeHtml.js +27 -0
  171. package/module/es5/String/formatString/applyFormatter.d.ts +25 -0
  172. package/module/es5/String/formatString/applyFormatter.js +100 -0
  173. package/module/es5/String/formatString/defaultFormatters.d.ts +24 -0
  174. package/module/es5/String/formatString/defaultFormatters.js +79 -0
  175. package/module/es5/String/formatString/detectMode.d.ts +26 -0
  176. package/module/es5/String/formatString/detectMode.js +60 -0
  177. package/module/es5/String/formatString/getValue.d.ts +27 -0
  178. package/module/es5/String/formatString/getValue.js +85 -0
  179. package/module/es5/String/formatString/index.d.ts +91 -0
  180. package/module/es5/String/formatString/index.js +152 -0
  181. package/module/es5/String/index.d.ts +5 -0
  182. package/module/es5/String/index.js +55 -0
  183. package/module/es5/String/kebabCase.d.ts +6 -0
  184. package/module/es5/String/kebabCase.js +26 -0
  185. package/module/es5/String/levenshteinDistance.d.ts +8 -0
  186. package/module/es5/String/levenshteinDistance.js +58 -0
  187. package/module/es5/String/stringSimilarity.d.ts +8 -0
  188. package/module/es5/String/stringSimilarity.js +30 -0
  189. package/module/es5/Tool/pipe.d.ts +1 -1
  190. package/module/es5/Validate/core/index.js +0 -1
  191. package/module/es5/Validate/isDouble.js +1 -1
  192. package/module/es5/Validate/isNode.js +1 -0
  193. package/module/es5/Validate/isNumber.js +1 -1
  194. package/module/es5/Validate/isValueNaN.js +1 -1
  195. package/module/es5/Validate/number/even.js +4 -0
  196. package/module/es5/Validate/number/odd.js +4 -0
  197. package/module/es5/Validate/string/email.js +26 -1
  198. package/module/es5/tsconfig.tsbuildinfo +1 -1
  199. package/module/es5/types/index.d.ts +1 -0
  200. package/module/es5/types/index.js +11 -0
  201. package/module/es5/types/logic/deepPartial.d.ts +37 -0
  202. package/module/es5/types/logic/deepPartial.js +5 -0
  203. package/module/es5/types/logic/deepRequired.d.ts +37 -0
  204. package/module/es5/types/logic/deepRequired.js +5 -0
  205. package/module/es5/types/logic/index.d.ts +3 -0
  206. package/module/es5/types/logic/index.js +33 -0
  207. package/module/es5/types/logic/unionToIntersection.d.ts +12 -0
  208. package/module/es5/types/logic/unionToIntersection.js +5 -0
  209. package/module/es5/types/object/index.d.ts +1 -0
  210. package/module/es5/types/object/index.js +11 -0
  211. package/module/es5/types/object/pickDeep.d.ts +13 -1
  212. package/module/es5/types/object/shallowObjectValue.d.ts +9 -0
  213. package/module/es5/types/object/shallowObjectValue.js +5 -0
  214. package/module/es5/types/string/formatString/formatData.d.ts +17 -0
  215. package/module/es5/types/string/formatString/formatData.js +5 -0
  216. package/module/es5/types/string/formatString/formatOptions.d.ts +21 -0
  217. package/module/es5/types/string/formatString/formatOptions.js +5 -0
  218. package/module/es5/types/string/formatString/formatString.d.ts +4 -0
  219. package/module/es5/types/string/formatString/formatString.js +49 -0
  220. package/module/es5/types/string/formatString/formatValue.d.ts +15 -0
  221. package/module/es5/types/string/formatString/formatValue.js +5 -0
  222. package/module/es5/types/string/formatString/formatter.d.ts +13 -0
  223. package/module/es5/types/string/formatString/formatter.js +5 -0
  224. package/module/es5/types/string/formatString/index.d.ts +5 -0
  225. package/module/es5/types/string/formatString/index.js +60 -0
  226. package/module/es5/types/string/index.d.ts +1 -0
  227. package/module/es5/types/string/index.js +16 -0
  228. package/module/types/index.d.ts +1 -0
  229. package/module/types/index.js +1 -0
  230. package/module/types/index.js.map +1 -1
  231. package/module/types/logic/deepPartial.d.ts +37 -0
  232. package/module/types/logic/deepPartial.js +36 -0
  233. package/module/types/logic/deepPartial.js.map +1 -0
  234. package/module/types/logic/deepRequired.d.ts +37 -0
  235. package/module/types/logic/deepRequired.js +2 -0
  236. package/module/types/logic/deepRequired.js.map +1 -0
  237. package/module/types/logic/index.d.ts +3 -0
  238. package/module/types/logic/index.js +3 -0
  239. package/module/types/logic/index.js.map +1 -1
  240. package/module/types/logic/unionToIntersection.d.ts +12 -0
  241. package/module/types/logic/unionToIntersection.js +2 -0
  242. package/module/types/logic/unionToIntersection.js.map +1 -0
  243. package/module/types/object/index.d.ts +1 -0
  244. package/module/types/object/index.js +1 -0
  245. package/module/types/object/index.js.map +1 -1
  246. package/module/types/object/pickDeep.d.ts +13 -1
  247. package/module/types/object/shallowObjectValue.d.ts +9 -0
  248. package/module/types/object/shallowObjectValue.js +2 -0
  249. package/module/types/object/shallowObjectValue.js.map +1 -0
  250. package/module/types/string/formatString/formatData.d.ts +17 -0
  251. package/module/types/string/formatString/formatData.js +2 -0
  252. package/module/types/string/formatString/formatData.js.map +1 -0
  253. package/module/types/string/formatString/formatOptions.d.ts +21 -0
  254. package/module/types/string/formatString/formatOptions.js +2 -0
  255. package/module/types/string/formatString/formatOptions.js.map +1 -0
  256. package/module/types/string/formatString/formatString.d.ts +4 -0
  257. package/module/types/string/formatString/formatString.js +5 -0
  258. package/module/types/string/formatString/formatString.js.map +1 -0
  259. package/module/types/string/formatString/formatValue.d.ts +15 -0
  260. package/module/types/string/formatString/formatValue.js +2 -0
  261. package/module/types/string/formatString/formatValue.js.map +1 -0
  262. package/module/types/string/formatString/formatter.d.ts +13 -0
  263. package/module/types/string/formatString/formatter.js +2 -0
  264. package/module/types/string/formatString/formatter.js.map +1 -0
  265. package/module/types/string/formatString/index.d.ts +5 -0
  266. package/module/types/string/formatString/index.js +6 -0
  267. package/module/types/string/formatString/index.js.map +1 -0
  268. package/module/types/string/index.d.ts +1 -0
  269. package/module/types/string/index.js +2 -0
  270. package/module/types/string/index.js.map +1 -0
  271. package/package.json +31 -32
  272. package/module/String/formatString.d.ts +0 -13
  273. package/module/String/formatString.js +0 -18
  274. package/module/String/formatString.js.map +0 -1
  275. package/module/es5/String/formatString.d.ts +0 -13
  276. package/module/es5/String/formatString.js +0 -26
@@ -0,0 +1,373 @@
1
+ /**
2
+ * Ultra-fast sorting specifically optimized for number arrays
3
+ * @param array Array of numbers to sort
4
+ * @param ascending Sort in ascending order if true, descending if false
5
+ * @returns Sorted array
6
+ */
7
+ export const ultraNumberSort = (array, ascending = true) => {
8
+ const length = array.length;
9
+ if (length <= 1) {
10
+ return array;
11
+ }
12
+ // For tiny arrays, use optimized inline sort
13
+ if (length === 2) {
14
+ if (array[0] > array[1] === ascending) {
15
+ [array[0], array[1]] = [array[1], array[0]];
16
+ }
17
+ return array;
18
+ }
19
+ if (length === 3) {
20
+ inlineSort3(array, ascending);
21
+ return array;
22
+ }
23
+ // Check if all numbers are integers and find range
24
+ let allIntegers = true;
25
+ let min = array[0];
26
+ let max = array[0];
27
+ let hasNaN = false;
28
+ for (let index = 0; index < length; index++) {
29
+ const value = array[index];
30
+ // biome-ignore lint/suspicious/noSelfCompare: ignore
31
+ if (value !== value) {
32
+ hasNaN = true;
33
+ break;
34
+ }
35
+ if (value < min) {
36
+ min = value;
37
+ }
38
+ if (value > max) {
39
+ max = value;
40
+ }
41
+ if (allIntegers && value !== Math.floor(value)) {
42
+ allIntegers = false;
43
+ }
44
+ }
45
+ // Handle NaN values
46
+ if (hasNaN) {
47
+ return handleNaNSort(array, ascending);
48
+ }
49
+ // For small integer ranges, use counting sort
50
+ if (allIntegers && max - min < length * 2 && max - min < 1_000_000) {
51
+ return countingSort(array, min, max, ascending);
52
+ }
53
+ // For larger arrays, use radix sort if applicable
54
+ if (allIntegers && length > 100) {
55
+ return radixSort(array, ascending);
56
+ }
57
+ // Fall back to optimized quicksort for floating point
58
+ return numericQuickSort(array, 0, length - 1, ascending);
59
+ };
60
+ /**
61
+ * Inline sort for 3 elements
62
+ */
63
+ const inlineSort3 = (array, ascending) => {
64
+ let a = array[0];
65
+ let b = array[1];
66
+ let c = array[2];
67
+ if (ascending) {
68
+ if (a > b) {
69
+ [a, b] = [b, a];
70
+ }
71
+ if (b > c) {
72
+ [b, c] = [c, b];
73
+ if (a > b) {
74
+ [a, b] = [b, a];
75
+ }
76
+ }
77
+ }
78
+ else {
79
+ if (a < b) {
80
+ [a, b] = [b, a];
81
+ }
82
+ if (b < c) {
83
+ [b, c] = [c, b];
84
+ if (a < b) {
85
+ [a, b] = [b, a];
86
+ }
87
+ }
88
+ }
89
+ array[0] = a;
90
+ array[1] = b;
91
+ array[2] = c;
92
+ };
93
+ /**
94
+ * Handle arrays with NaN values
95
+ */
96
+ const handleNaNSort = (array, ascending) => {
97
+ const valid = [];
98
+ let nanCount = 0;
99
+ for (const element of array) {
100
+ // biome-ignore lint/suspicious/noSelfCompare: ignore
101
+ if (element === element) {
102
+ valid.push(element);
103
+ }
104
+ else {
105
+ nanCount++;
106
+ }
107
+ }
108
+ numericQuickSort(valid, 0, valid.length - 1, ascending);
109
+ // NaN values go to the end
110
+ for (let index = 0; index < nanCount; index++) {
111
+ valid.push(Number.NaN);
112
+ }
113
+ // Copy back
114
+ for (let index = 0; index < array.length; index++) {
115
+ array[index] = valid[index];
116
+ }
117
+ return array;
118
+ };
119
+ /**
120
+ * Counting sort for small integer ranges
121
+ */
122
+ const countingSort = (array, min, max, ascending) => {
123
+ const range = max - min + 1;
124
+ const count = new Uint32Array(range);
125
+ // Count occurrences
126
+ for (const element of array) {
127
+ count[element - min]++;
128
+ }
129
+ // Reconstruct array
130
+ let index = 0;
131
+ if (ascending) {
132
+ for (let index_ = 0; index_ < range; index_++) {
133
+ const cnt = count[index_];
134
+ const value = index_ + min;
135
+ for (let index_ = 0; index_ < cnt; index_++) {
136
+ array[index++] = value;
137
+ }
138
+ }
139
+ }
140
+ else {
141
+ for (let index_ = range - 1; index_ >= 0; index_--) {
142
+ const cnt = count[index_];
143
+ const value = index_ + min;
144
+ for (let index_ = 0; index_ < cnt; index_++) {
145
+ array[index++] = value;
146
+ }
147
+ }
148
+ }
149
+ return array;
150
+ };
151
+ /**
152
+ * Radix sort for integers
153
+ */
154
+ const radixSort = (array, ascending) => {
155
+ const length = array.length;
156
+ // Separate positive and negative numbers
157
+ const positive = [];
158
+ const negative = [];
159
+ let zeroCount = 0;
160
+ for (let index_ = 0; index_ < length; index_++) {
161
+ if (array[index_] > 0) {
162
+ positive.push(array[index_]);
163
+ }
164
+ else if (array[index_] < 0) {
165
+ negative.push(-array[index_]);
166
+ }
167
+ else {
168
+ zeroCount++;
169
+ }
170
+ }
171
+ // Sort positive numbers
172
+ if (positive.length > 0) {
173
+ radixSortPositive(positive);
174
+ }
175
+ // Sort negative numbers
176
+ if (negative.length > 0) {
177
+ radixSortPositive(negative);
178
+ }
179
+ // Merge results
180
+ let index = 0;
181
+ if (ascending) {
182
+ // Negative numbers first (in reverse order)
183
+ for (let index_ = negative.length - 1; index_ >= 0; index_--) {
184
+ array[index++] = -negative[index_];
185
+ }
186
+ // Zeros
187
+ for (let index_ = 0; index_ < zeroCount; index_++) {
188
+ array[index++] = 0;
189
+ }
190
+ // Positive numbers
191
+ for (const element of positive) {
192
+ array[index++] = element;
193
+ }
194
+ }
195
+ else {
196
+ // Positive numbers first (in reverse order)
197
+ for (let index_ = positive.length - 1; index_ >= 0; index_--) {
198
+ array[index++] = positive[index_];
199
+ }
200
+ // Zeros
201
+ for (let index_ = 0; index_ < zeroCount; index_++) {
202
+ array[index++] = 0;
203
+ }
204
+ // Negative numbers
205
+ for (const element of negative) {
206
+ array[index++] = -element;
207
+ }
208
+ }
209
+ return array;
210
+ };
211
+ /**
212
+ * Radix sort for positive integers
213
+ */
214
+ const radixSortPositive = (array) => {
215
+ const length = array.length;
216
+ if (length <= 1) {
217
+ return;
218
+ }
219
+ // Find maximum to determine number of digits
220
+ let max = array[0];
221
+ for (let index = 1; index < length; index++) {
222
+ if (array[index] > max) {
223
+ max = array[index];
224
+ }
225
+ }
226
+ // Use typed arrays for better performance
227
+ const output = new Float64Array(length);
228
+ const count = new Uint32Array(256);
229
+ // Process 8 bits at a time
230
+ for (let shift = 0; max >> shift > 0; shift += 8) {
231
+ // Reset count array
232
+ count.fill(0);
233
+ // Count occurrences
234
+ for (let index = 0; index < length; index++) {
235
+ const digit = (array[index] >> shift) & 0xff;
236
+ count[digit]++;
237
+ }
238
+ // Change count[i] to actual position
239
+ for (let index = 1; index < 256; index++) {
240
+ count[index] += count[index - 1];
241
+ }
242
+ // Build output array
243
+ for (let index = length - 1; index >= 0; index--) {
244
+ const digit = (array[index] >> shift) & 0xff;
245
+ output[--count[digit]] = array[index];
246
+ }
247
+ // Copy back
248
+ for (let index = 0; index < length; index++) {
249
+ array[index] = output[index];
250
+ }
251
+ }
252
+ };
253
+ /**
254
+ * Optimized quicksort for numbers
255
+ */
256
+ const numericQuickSort = (array, low, high, ascending) => {
257
+ const stack = [];
258
+ stack.push(low, high);
259
+ while (stack.length > 0) {
260
+ const h = stack.pop();
261
+ const l = stack.pop();
262
+ if (h === undefined || l === undefined || h <= l) {
263
+ continue;
264
+ }
265
+ // For small subarrays, use insertion sort
266
+ if (h - l < 16) {
267
+ numericInsertionSort(array, l, h, ascending);
268
+ continue;
269
+ }
270
+ // Partition
271
+ const pivot = numericPartition(array, l, h, ascending);
272
+ // Push larger partition first to limit stack depth
273
+ if (pivot - l > h - pivot) {
274
+ stack.push(l, pivot - 1, pivot + 1, h);
275
+ }
276
+ else {
277
+ stack.push(pivot + 1, h, l, pivot - 1);
278
+ }
279
+ }
280
+ return array;
281
+ };
282
+ /**
283
+ * Numeric insertion sort
284
+ */
285
+ const numericInsertionSort = (array, low, high, ascending) => {
286
+ if (ascending) {
287
+ for (let index = low + 1; index <= high; index++) {
288
+ const key = array[index];
289
+ let index_ = index - 1;
290
+ while (index_ >= low && array[index_] > key) {
291
+ array[index_ + 1] = array[index_];
292
+ index_--;
293
+ }
294
+ array[index_ + 1] = key;
295
+ }
296
+ }
297
+ else {
298
+ for (let index = low + 1; index <= high; index++) {
299
+ const key = array[index];
300
+ let index_ = index - 1;
301
+ while (index_ >= low && array[index_] < key) {
302
+ array[index_ + 1] = array[index_];
303
+ index_--;
304
+ }
305
+ array[index_ + 1] = key;
306
+ }
307
+ }
308
+ };
309
+ /**
310
+ * Numeric partition with median-of-three pivot
311
+ */
312
+ const numericPartition = (array, low, high, ascending) => {
313
+ // Median-of-three pivot selection
314
+ const mid = low + ((high - low) >> 1);
315
+ if (ascending) {
316
+ if (array[mid] < array[low]) {
317
+ [array[low], array[mid]] = [array[mid], array[low]];
318
+ }
319
+ if (array[high] < array[low]) {
320
+ [array[low], array[high]] = [array[high], array[low]];
321
+ }
322
+ if (array[high] < array[mid]) {
323
+ [array[mid], array[high]] = [array[high], array[mid]];
324
+ }
325
+ }
326
+ else {
327
+ if (array[mid] > array[low]) {
328
+ [array[low], array[mid]] = [array[mid], array[low]];
329
+ }
330
+ if (array[high] > array[low]) {
331
+ [array[low], array[high]] = [array[high], array[low]];
332
+ }
333
+ if (array[high] > array[mid]) {
334
+ [array[mid], array[high]] = [array[high], array[mid]];
335
+ }
336
+ }
337
+ // Move pivot to end-1
338
+ [array[mid], array[high - 1]] = [array[high - 1], array[mid]];
339
+ const pivot = array[high - 1];
340
+ let index = low;
341
+ let index_ = high - 1;
342
+ if (ascending) {
343
+ while (true) {
344
+ while (array[++index] < pivot) {
345
+ // Continue
346
+ }
347
+ while (array[--index_] > pivot) {
348
+ // Continue
349
+ }
350
+ if (index >= index_) {
351
+ break;
352
+ }
353
+ [array[index], array[index_]] = [array[index_], array[index]];
354
+ }
355
+ }
356
+ else {
357
+ while (true) {
358
+ while (array[++index] > pivot) {
359
+ // Continue
360
+ }
361
+ while (array[--index_] < pivot) {
362
+ // Continue
363
+ }
364
+ if (index >= index_) {
365
+ break;
366
+ }
367
+ [array[index], array[index_]] = [array[index_], array[index]];
368
+ }
369
+ }
370
+ [array[index], array[high - 1]] = [array[high - 1], array[index]];
371
+ return index;
372
+ };
373
+ //# sourceMappingURL=ultraNumberSort.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ultraNumberSort.js","sourceRoot":"","sources":["../../src/Array/ultraNumberSort.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Removes duplicate values from an array based on a selector function
3
+ * @param array - The array to process
4
+ * @param selector - Function that returns the value to compare for uniqueness
5
+ * @returns A new array with unique values based on the selector
6
+ */
7
+ export declare const uniqBy: <T extends unknown[], K>(array: T, selector: (item: T[number]) => K) => T;
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Removes duplicate values from an array based on a selector function
3
+ * @param array - The array to process
4
+ * @param selector - Function that returns the value to compare for uniqueness
5
+ * @returns A new array with unique values based on the selector
6
+ */
7
+ export const uniqBy = (array, selector) => {
8
+ const seen = new Set();
9
+ const result = [];
10
+ for (const item of array) {
11
+ const key = selector(item);
12
+ if (!seen.has(key)) {
13
+ seen.add(key);
14
+ result.push(item);
15
+ }
16
+ }
17
+ return result;
18
+ };
19
+ //# sourceMappingURL=uniqBy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uniqBy.js","sourceRoot":"","sources":["../../src/Array/uniqBy.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG,CACpB,KAAQ,EACR,QAAgC,EAC7B,EAAE;IACL,MAAM,IAAI,GAAG,IAAI,GAAG,EAAK,CAAC;IAC1B,MAAM,MAAM,GAAM,EAAkB,CAAC;IAErC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAS,CAAC,CAAC;QAChC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YACnB,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACd,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpB,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Removes duplicate values from an array
3
+ * @param array - The array to process
4
+ * @returns A new array with unique values
5
+ */
6
+ export declare const unique: <T>(array: T[]) => T[];
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Removes duplicate values from an array
3
+ * @param array - The array to process
4
+ * @returns A new array with unique values
5
+ */
6
+ export const unique = (array) => {
7
+ return [...new Set(array)];
8
+ };
9
+ //# sourceMappingURL=unique.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unique.js","sourceRoot":"","sources":["../../src/Array/unique.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG,CAAI,KAAU,EAAO,EAAE;IAC3C,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;AAC7B,CAAC,CAAC"}
@@ -34,7 +34,7 @@ export const rgbaToHsla = ({ r, g, b, a = 1, }) => {
34
34
  ? 0
35
35
  : division(diff, subtract(1, Math.abs(subtract(addition(max, min), 1))));
36
36
  if (diff !== 0) {
37
- // biome-ignore lint/style/useDefaultSwitchClause: <explanation>
37
+ // biome-ignore lint/style/useDefaultSwitchClause: ignore
38
38
  switch (max) {
39
39
  case rPrime: {
40
40
  h = addition(division(subtract(gPrime, bPrime), diff), gPrime < bPrime ? 6 : 0);
@@ -1 +1 @@
1
- {"version":3,"file":"rgbaToHsla.js","sourceRoot":"","sources":["../../src/Color/rgbaToHsla.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"rgbaToHsla.js","sourceRoot":"","sources":["../../src/Color/rgbaToHsla.ts"],"names":[],"mappings":"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"}
@@ -12,11 +12,19 @@ import { now } from "../Date/now";
12
12
  export const birthday = (year, mon, day, timeDifference = 9) => {
13
13
  const birthdayDate = new Date(newDateInt(year, mon, day));
14
14
  const nowTime = now(timeDifference);
15
- const y = nowTime.getFullYear() - birthdayDate.getFullYear();
16
- const r = nowTime <
17
- newDateInt(nowTime.getFullYear(), (birthdayDate.getMonth() - 1), birthdayDate.getDay())
18
- ? y - 1
19
- : y;
20
- return year < 100 ? 1900 + y : r;
15
+ const currentYear = nowTime.getFullYear();
16
+ const birthYear = birthdayDate.getFullYear();
17
+ // Calculate base age
18
+ let age = currentYear - birthYear;
19
+ // Check if birthday hasn't occurred this year yet
20
+ const thisYearBirthday = new Date(currentYear, birthdayDate.getMonth(), birthdayDate.getDate());
21
+ if (nowTime < thisYearBirthday) {
22
+ age -= 1;
23
+ }
24
+ // Handle future birthdays (should return 0 or non-negative)
25
+ if (age < 0) {
26
+ return 0;
27
+ }
28
+ return age;
21
29
  };
22
30
  //# sourceMappingURL=birthday.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"birthday.js","sourceRoot":"","sources":["../../src/Date/birthday.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,GAAG,EAAE,MAAM,YAAY,CAAC;AACjC;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG,CACtB,IAAY,EACZ,GAAM,EACN,GAAkB,EAClB,iBAA+B,CAAC,EAChC,EAAE;IACF,MAAM,YAAY,GAAG,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;IAC1D,MAAM,OAAO,GAAG,GAAG,CAAC,cAAc,CAAC,CAAC;IACpC,MAAM,CAAC,GAAG,OAAO,CAAC,WAAW,EAAE,GAAG,YAAY,CAAC,WAAW,EAAE,CAAC;IAC7D,MAAM,CAAC,GACL,OAAO;QACP,UAAU,CACR,OAAO,CAAC,WAAW,EAAE,EACrB,CAAC,YAAY,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAe,EAC3C,YAAY,CAAC,MAAM,EAAmB,CACvC;QACC,CAAC,CAAC,CAAC,GAAG,CAAC;QACP,CAAC,CAAC,CAAC,CAAC;IACR,OAAO,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACnC,CAAC,CAAC"}
1
+ {"version":3,"file":"birthday.js","sourceRoot":"","sources":["../../src/Date/birthday.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,GAAG,EAAE,MAAM,YAAY,CAAC;AACjC;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG,CACtB,IAAY,EACZ,GAAM,EACN,GAAkB,EAClB,iBAA+B,CAAC,EAChC,EAAE;IACF,MAAM,YAAY,GAAG,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;IAC1D,MAAM,OAAO,GAAG,GAAG,CAAC,cAAc,CAAC,CAAC;IACpC,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAC1C,MAAM,SAAS,GAAG,YAAY,CAAC,WAAW,EAAE,CAAC;IAE7C,qBAAqB;IACrB,IAAI,GAAG,GAAG,WAAW,GAAG,SAAS,CAAC;IAElC,kDAAkD;IAClD,MAAM,gBAAgB,GAAG,IAAI,IAAI,CAC/B,WAAW,EACX,YAAY,CAAC,QAAQ,EAAE,EACvB,YAAY,CAAC,OAAO,EAAE,CACvB,CAAC;IACF,IAAI,OAAO,GAAG,gBAAgB,EAAE,CAAC;QAC/B,GAAG,IAAI,CAAC,CAAC;IACX,CAAC;IAED,4DAA4D;IAC5D,IAAI,GAAG,GAAG,CAAC,EAAE,CAAC;QACZ,OAAO,CAAC,CAAC;IACX,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC,CAAC"}
@@ -9,6 +9,9 @@
9
9
  * isLeapYear(2023); // Returns false (not divisible by 4)
10
10
  */
11
11
  export const isLeapYear = (year) => {
12
+ if (!Number.isInteger(year)) {
13
+ return false;
14
+ }
12
15
  return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;
13
16
  };
14
17
  //# sourceMappingURL=isLeapYear.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"isLeapYear.js","sourceRoot":"","sources":["../../src/Date/isLeapYear.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,IAAY,EAAW,EAAE;IAClD,OAAO,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,GAAG,GAAG,KAAK,CAAC,CAAC,IAAI,IAAI,GAAG,GAAG,KAAK,CAAC,CAAC;AAClE,CAAC,CAAC"}
1
+ {"version":3,"file":"isLeapYear.js","sourceRoot":"","sources":["../../src/Date/isLeapYear.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,IAAY,EAAW,EAAE;IAClD,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;QAC5B,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,GAAG,GAAG,KAAK,CAAC,CAAC,IAAI,IAAI,GAAG,GAAG,KAAK,CAAC,CAAC;AAClE,CAAC,CAAC"}
@@ -1 +1,2 @@
1
+ export * from "./retry";
1
2
  export * from "./safeExecute";
@@ -1,2 +1,3 @@
1
+ export * from "./retry";
1
2
  export * from "./safeExecute";
2
3
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/Error/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/Error/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,eAAe,CAAC"}
@@ -0,0 +1,37 @@
1
+ export interface RetryOptions {
2
+ retries?: number;
3
+ delay?: number;
4
+ shouldRetry?: (error: unknown) => boolean;
5
+ }
6
+ /**
7
+ * Retries a given async function with configurable retry logic
8
+ *
9
+ * @template T - The return type of the function
10
+ * @param function_ - The async function to retry
11
+ * @param options - Configuration options for retry behavior
12
+ * @param options.retries - Maximum number of retry attempts (default: 3)
13
+ * @param options.delay - Delay between retries in milliseconds (default: 1000)
14
+ * @param options.shouldRetry - Function to determine if an error should trigger a retry (default: always retry)
15
+ * @returns Promise that resolves with the function result or rejects with the final error
16
+ *
17
+ * @example
18
+ * ```typescript
19
+ * // Basic usage with default options
20
+ * const result = await retry(async () => {
21
+ * const response = await fetch('/api/data');
22
+ * if (!response.ok) throw new Error('Failed to fetch');
23
+ * return response.json();
24
+ * });
25
+ *
26
+ * // Custom retry configuration
27
+ * const result = await retry(
28
+ * () => riskyOperation(),
29
+ * {
30
+ * retries: 5,
31
+ * delay: 2000,
32
+ * shouldRetry: (error) => error instanceof NetworkError
33
+ * }
34
+ * );
35
+ * ```
36
+ */
37
+ export declare const retry: <T>(function_: () => Promise<T>, options?: RetryOptions) => Promise<T>;
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Retries a given async function with configurable retry logic
3
+ *
4
+ * @template T - The return type of the function
5
+ * @param function_ - The async function to retry
6
+ * @param options - Configuration options for retry behavior
7
+ * @param options.retries - Maximum number of retry attempts (default: 3)
8
+ * @param options.delay - Delay between retries in milliseconds (default: 1000)
9
+ * @param options.shouldRetry - Function to determine if an error should trigger a retry (default: always retry)
10
+ * @returns Promise that resolves with the function result or rejects with the final error
11
+ *
12
+ * @example
13
+ * ```typescript
14
+ * // Basic usage with default options
15
+ * const result = await retry(async () => {
16
+ * const response = await fetch('/api/data');
17
+ * if (!response.ok) throw new Error('Failed to fetch');
18
+ * return response.json();
19
+ * });
20
+ *
21
+ * // Custom retry configuration
22
+ * const result = await retry(
23
+ * () => riskyOperation(),
24
+ * {
25
+ * retries: 5,
26
+ * delay: 2000,
27
+ * shouldRetry: (error) => error instanceof NetworkError
28
+ * }
29
+ * );
30
+ * ```
31
+ */
32
+ export const retry = (function_, options = {}) => {
33
+ const { retries = 3, delay = 1000, shouldRetry = () => true } = options;
34
+ const attempt = async (remainingAttempts) => {
35
+ try {
36
+ return await function_();
37
+ }
38
+ catch (error) {
39
+ if (remainingAttempts <= 0 || !shouldRetry(error)) {
40
+ throw error;
41
+ }
42
+ return await new Promise((resolve) => setTimeout(() => resolve(attempt(remainingAttempts - 1)), delay));
43
+ }
44
+ };
45
+ return attempt(retries);
46
+ };
47
+ //# sourceMappingURL=retry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retry.js","sourceRoot":"","sources":["../../src/Error/retry.ts"],"names":[],"mappings":"AAMA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,MAAM,CAAC,MAAM,KAAK,GAAG,CACnB,SAA2B,EAC3B,UAAwB,EAAE,EACd,EAAE;IACd,MAAM,EAAE,OAAO,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,EAAE,WAAW,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,GAAG,OAAO,CAAC;IACxE,MAAM,OAAO,GAAG,KAAK,EAAE,iBAAyB,EAAc,EAAE;QAC9D,IAAI,CAAC;YACH,OAAO,MAAM,SAAS,EAAE,CAAC;QAC3B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,iBAAiB,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC;gBAClD,MAAM,KAAK,CAAC;YACd,CAAC;YACD,OAAO,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CACnC,UAAU,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,iBAAiB,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CACjE,CAAC;QACJ,CAAC;IACH,CAAC,CAAC;IACF,OAAO,OAAO,CAAC,OAAO,CAAC,CAAC;AAC1B,CAAC,CAAC"}
@@ -12,7 +12,7 @@ export const getIpClass = (ip) => {
12
12
  if (parts.length !== 4) {
13
13
  return "";
14
14
  }
15
- const firstOctet = Number.parseInt(parts[0]);
15
+ const firstOctet = Number.parseInt(parts[0], 10);
16
16
  if (Number.isNaN(firstOctet) || firstOctet < 0 || firstOctet > 255) {
17
17
  return "";
18
18
  }
@@ -1 +1 @@
1
- {"version":3,"file":"getIpClass.js","sourceRoot":"","sources":["../../src/IP/getIpClass.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,EAAU,EAAU,EAAE;IAC/C,IAAI,CAAC,EAAE,EAAE,CAAC;QACR,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,qBAAqB;IACrB,MAAM,KAAK,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC5B,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,UAAU,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7C,IAAI,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,UAAU,GAAG,CAAC,IAAI,UAAU,GAAG,GAAG,EAAE,CAAC;QACnE,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,yBAAyB;IACzB,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,UAAU,KAAK,CAAC,CAAC,CAAC,CAAC;YACtB,OAAO,EAAE,CAAC;QACZ,CAAC,CAAC,WAAW;QACb,KAAK,UAAU,GAAG,GAAG,CAAC,CAAC,CAAC;YACtB,OAAO,GAAG,CAAC;QACb,CAAC,CAAC,QAAQ;QACV,KAAK,UAAU,GAAG,GAAG,CAAC,CAAC,CAAC;YACtB,OAAO,GAAG,CAAC;QACb,CAAC,CAAC,UAAU;QACZ,KAAK,UAAU,GAAG,GAAG,CAAC,CAAC,CAAC;YACtB,OAAO,GAAG,CAAC;QACb,CAAC,CAAC,UAAU;QACZ,KAAK,UAAU,GAAG,GAAG,CAAC,CAAC,CAAC;YACtB,OAAO,GAAG,CAAC;QACb,CAAC,CAAC,UAAU;QACZ,OAAO,CAAC,CAAC,CAAC;YACR,OAAO,GAAG,CAAC;QACb,CAAC,CAAC,UAAU;IACd,CAAC;AACH,CAAC,CAAC"}
1
+ {"version":3,"file":"getIpClass.js","sourceRoot":"","sources":["../../src/IP/getIpClass.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,EAAU,EAAU,EAAE;IAC/C,IAAI,CAAC,EAAE,EAAE,CAAC;QACR,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,qBAAqB;IACrB,MAAM,KAAK,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC5B,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,UAAU,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACjD,IAAI,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,UAAU,GAAG,CAAC,IAAI,UAAU,GAAG,GAAG,EAAE,CAAC;QACnE,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,yBAAyB;IACzB,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,UAAU,KAAK,CAAC,CAAC,CAAC,CAAC;YACtB,OAAO,EAAE,CAAC;QACZ,CAAC,CAAC,WAAW;QACb,KAAK,UAAU,GAAG,GAAG,CAAC,CAAC,CAAC;YACtB,OAAO,GAAG,CAAC;QACb,CAAC,CAAC,QAAQ;QACV,KAAK,UAAU,GAAG,GAAG,CAAC,CAAC,CAAC;YACtB,OAAO,GAAG,CAAC;QACb,CAAC,CAAC,UAAU;QACZ,KAAK,UAAU,GAAG,GAAG,CAAC,CAAC,CAAC;YACtB,OAAO,GAAG,CAAC;QACb,CAAC,CAAC,UAAU;QACZ,KAAK,UAAU,GAAG,GAAG,CAAC,CAAC,CAAC;YACtB,OAAO,GAAG,CAAC;QACb,CAAC,CAAC,UAAU;QACZ,OAAO,CAAC,CAAC,CAAC;YACR,OAAO,GAAG,CAAC;QACb,CAAC,CAAC,UAAU;IACd,CAAC;AACH,CAAC,CAAC"}