@giveback007/util-lib 2.5.2 → 3.1.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.
- package/dist/@types.d.ts +4 -0
- package/dist/array.d.ts +1 -0
- package/dist/array.js +5 -0
- package/dist/array.js.map +1 -1
- package/dist/browser.d.ts +35 -0
- package/dist/browser.js +130 -0
- package/dist/browser.js.map +1 -0
- package/dist/general.d.ts +2 -1
- package/dist/general.js +11 -2
- package/dist/general.js.map +1 -1
- package/dist/geo.d.ts +4 -0
- package/dist/geo.js +62 -0
- package/dist/geo.js.map +1 -0
- package/dist/index.d.ts +3 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/number.d.ts +5 -4
- package/dist/number.js +12 -10
- package/dist/number.js.map +1 -1
- package/package.json +2 -1
- package/src/@types.ts +5 -0
- package/src/array.ts +5 -0
- package/src/browser.ts +145 -0
- package/src/general.ts +13 -3
- package/src/geo.ts +71 -0
- package/src/index.ts +3 -1
- package/src/number.ts +8 -6
package/dist/@types.d.ts
CHANGED
package/dist/array.d.ts
CHANGED
|
@@ -11,6 +11,7 @@ export declare const arrGen: <T = any>(length: number, fill?: number | BigInt |
|
|
|
11
11
|
* ```
|
|
12
12
|
*/
|
|
13
13
|
export declare function arrRemoveById<T extends AnyObj>(arr: T[], idArr: string[], idKey?: keyof T): T[];
|
|
14
|
+
export declare function arrRemoveItemByIndex<T>(arr: T[], index: number): T[];
|
|
14
15
|
/**
|
|
15
16
|
* Gets values out of `arr` that match the ids in `idArr`
|
|
16
17
|
*
|
package/dist/array.js
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.arrLast = exports.arrDeepFlatten = exports.arrGen = void 0;
|
|
4
4
|
exports.arrRemoveById = arrRemoveById;
|
|
5
|
+
exports.arrRemoveItemByIndex = arrRemoveItemByIndex;
|
|
5
6
|
exports.arrGetByIds = arrGetByIds;
|
|
6
7
|
exports.arrDivide = arrDivide;
|
|
7
8
|
exports.arrFlatten = arrFlatten;
|
|
@@ -29,6 +30,10 @@ function arrRemoveById(arr, idArr, idKey = 'id') {
|
|
|
29
30
|
const keep = (0, _1.objRemoveKeys)(objDict, idArr);
|
|
30
31
|
return (0, _1.objVals)(keep);
|
|
31
32
|
}
|
|
33
|
+
function arrRemoveItemByIndex(arr, index) {
|
|
34
|
+
// Use slice to create a new array without the item at the given index
|
|
35
|
+
return arr.slice(0, index).concat(arr.slice(index + 1));
|
|
36
|
+
}
|
|
32
37
|
/**
|
|
33
38
|
* Gets values out of `arr` that match the ids in `idArr`
|
|
34
39
|
*
|
package/dist/array.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"array.js","sourceRoot":"","sources":["../src/array.ts"],"names":[],"mappings":";;;AAoBA,sCAOC;AAYD,kCAKC;AAMD,8BAWC;AAWD,gCAEC;AAaD,gCAgCC;AAED,0CAUC;AAED,8BAQC;AAED,oCAMC;AAED,sCAMC;AAUD,wBAOC;
|
|
1
|
+
{"version":3,"file":"array.js","sourceRoot":"","sources":["../src/array.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { Dict } from "./@types";
|
|
2
|
+
export declare const lStore: {
|
|
3
|
+
hasStore: () => boolean;
|
|
4
|
+
get: <T = any>(key: string) => T | null;
|
|
5
|
+
set: (key: string, data: any) => void;
|
|
6
|
+
del: (key: string) => void;
|
|
7
|
+
};
|
|
8
|
+
export declare const sStore: {
|
|
9
|
+
hasStore: () => boolean;
|
|
10
|
+
get: <T = any>(key: string) => T | null;
|
|
11
|
+
set: (key: string, data: any) => void;
|
|
12
|
+
del: (key: string) => void;
|
|
13
|
+
};
|
|
14
|
+
export type ClassNameArray = ClassNameValue[];
|
|
15
|
+
export type ClassNameValue = ClassNameArray | string | null | undefined | 0 | 0n | false;
|
|
16
|
+
export type CssMergeArgs = Dict<any> | ClassNameValue | ClassNameValue[];
|
|
17
|
+
export declare function twMerge(...cssArgs: CssMergeArgs[]): string;
|
|
18
|
+
export declare function getFormData<T extends Dict<any> = Dict<string>>(formElm: HTMLFormElement): T;
|
|
19
|
+
export type FileDropEvent = DragEvent & {
|
|
20
|
+
currentTarget: EventTarget & HTMLDivElement;
|
|
21
|
+
} & {
|
|
22
|
+
dataTransfer: DataTransfer;
|
|
23
|
+
};
|
|
24
|
+
export declare class DragOverTracker {
|
|
25
|
+
private elm;
|
|
26
|
+
private onChange;
|
|
27
|
+
private onDrop;
|
|
28
|
+
private dragCounter;
|
|
29
|
+
constructor(elm: HTMLElement, onChange: (dragover: boolean) => any, onDrop: (e: FileDropEvent) => any);
|
|
30
|
+
destroy(): void;
|
|
31
|
+
private prevState;
|
|
32
|
+
private changeHandler;
|
|
33
|
+
}
|
|
34
|
+
export declare function downloadFile(url: string, filename?: string | null): Promise<void>;
|
|
35
|
+
export declare function copyToClipboard(text: string): Promise<boolean>;
|
package/dist/browser.js
ADDED
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DragOverTracker = exports.sStore = exports.lStore = void 0;
|
|
4
|
+
exports.twMerge = twMerge;
|
|
5
|
+
exports.getFormData = getFormData;
|
|
6
|
+
exports.downloadFile = downloadFile;
|
|
7
|
+
exports.copyToClipboard = copyToClipboard;
|
|
8
|
+
const test_1 = require("./test");
|
|
9
|
+
const tailwind_merge_1 = require("tailwind-merge");
|
|
10
|
+
function storageFactory(type) {
|
|
11
|
+
return {
|
|
12
|
+
hasStore: () => !!(typeof window !== "undefined" && window[type]),
|
|
13
|
+
get: (key) => JSON.parse(window[type].getItem(key) ?? 'null'),
|
|
14
|
+
set: (key, data) => window[type].setItem(key, JSON.stringify(data)),
|
|
15
|
+
del: (key) => window[type].removeItem(key),
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
exports.lStore = storageFactory('localStorage');
|
|
19
|
+
exports.sStore = storageFactory('sessionStorage');
|
|
20
|
+
function twMerge(...cssArgs) {
|
|
21
|
+
// @ts-ignore
|
|
22
|
+
cssArgs = Array.isArray(cssArgs) ? cssArgs.flat(Infinity) : cssArgs;
|
|
23
|
+
const classes = [];
|
|
24
|
+
for (let css of cssArgs) {
|
|
25
|
+
if ((0, test_1.isType)(css, 'object')) {
|
|
26
|
+
Object.entries(css).forEach(([cls, truthy]) => {
|
|
27
|
+
if (truthy)
|
|
28
|
+
classes.push(cls);
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
else if (css) {
|
|
32
|
+
classes.push(css);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
return (0, tailwind_merge_1.twMerge)(classes);
|
|
36
|
+
}
|
|
37
|
+
function getFormData(formElm) {
|
|
38
|
+
const dict = {};
|
|
39
|
+
const data = new FormData(formElm);
|
|
40
|
+
data.forEach((val, key) => dict[key] = val);
|
|
41
|
+
return dict;
|
|
42
|
+
}
|
|
43
|
+
class DragOverTracker {
|
|
44
|
+
elm;
|
|
45
|
+
onChange;
|
|
46
|
+
onDrop;
|
|
47
|
+
dragCounter = 0;
|
|
48
|
+
constructor(elm, onChange, onDrop) {
|
|
49
|
+
this.elm = elm;
|
|
50
|
+
this.onChange = onChange;
|
|
51
|
+
this.onDrop = onDrop;
|
|
52
|
+
elm.ondragenter = () => {
|
|
53
|
+
this.dragCounter++;
|
|
54
|
+
this.changeHandler(true);
|
|
55
|
+
};
|
|
56
|
+
elm.ondragleave = () => {
|
|
57
|
+
this.dragCounter--;
|
|
58
|
+
if (this.dragCounter === 0)
|
|
59
|
+
this.changeHandler(false);
|
|
60
|
+
};
|
|
61
|
+
elm.ondragover = (e) => e.preventDefault();
|
|
62
|
+
elm.ondrop = (e) => {
|
|
63
|
+
e.preventDefault();
|
|
64
|
+
this.dragCounter = 0;
|
|
65
|
+
this.changeHandler(false);
|
|
66
|
+
this.onDrop(e);
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
destroy() {
|
|
70
|
+
this.elm.ondragenter = null;
|
|
71
|
+
this.elm.ondragleave = null;
|
|
72
|
+
this.elm.ondragover = null;
|
|
73
|
+
this.elm.ondrop = null;
|
|
74
|
+
}
|
|
75
|
+
prevState = false;
|
|
76
|
+
changeHandler(newState) {
|
|
77
|
+
if (this.prevState === newState)
|
|
78
|
+
return;
|
|
79
|
+
this.prevState = newState;
|
|
80
|
+
this.onChange(newState);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
exports.DragOverTracker = DragOverTracker;
|
|
84
|
+
async function downloadFile(url, filename = null) {
|
|
85
|
+
try {
|
|
86
|
+
const response = await fetch(url);
|
|
87
|
+
if (!response.ok) {
|
|
88
|
+
throw new Error(`HTTP error! status: ${response.status}`);
|
|
89
|
+
}
|
|
90
|
+
const blob = await response.blob();
|
|
91
|
+
const downloadUrl = window.URL.createObjectURL(blob);
|
|
92
|
+
const link = document.createElement('a');
|
|
93
|
+
link.href = downloadUrl;
|
|
94
|
+
// Use provided filename or try to extract from URL or response headers
|
|
95
|
+
link.download = filename || extractFilenameFromUrl(url) || 'download';
|
|
96
|
+
document.body.appendChild(link);
|
|
97
|
+
link.click();
|
|
98
|
+
document.body.removeChild(link);
|
|
99
|
+
window.URL.revokeObjectURL(downloadUrl);
|
|
100
|
+
console.log('File downloaded successfully');
|
|
101
|
+
}
|
|
102
|
+
catch (error) {
|
|
103
|
+
console.error('Download failed:', error);
|
|
104
|
+
// Fallback: try opening in new tab
|
|
105
|
+
window.open(url, '_blank');
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
;
|
|
109
|
+
function extractFilenameFromUrl(url) {
|
|
110
|
+
try {
|
|
111
|
+
const urlPath = new URL(url).pathname;
|
|
112
|
+
const segments = urlPath.split('/');
|
|
113
|
+
const filename = segments[segments.length - 1];
|
|
114
|
+
return filename && filename.includes('.') ? filename : null;
|
|
115
|
+
}
|
|
116
|
+
catch {
|
|
117
|
+
return null;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
;
|
|
121
|
+
async function copyToClipboard(text) {
|
|
122
|
+
try {
|
|
123
|
+
await navigator.clipboard.writeText(text);
|
|
124
|
+
return true;
|
|
125
|
+
}
|
|
126
|
+
catch (err) {
|
|
127
|
+
return false;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
//# sourceMappingURL=browser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"browser.js","sourceRoot":"","sources":["../src/browser.ts"],"names":[],"mappings":"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"}
|
package/dist/general.d.ts
CHANGED
|
@@ -42,5 +42,6 @@ export declare function promiseOut<T = any>(): {
|
|
|
42
42
|
resolve: (value: T) => void;
|
|
43
43
|
promise: Promise<T>;
|
|
44
44
|
};
|
|
45
|
-
export declare function concurrentTasks<T, Res = any>(arr: T[], fn: (
|
|
45
|
+
export declare function concurrentTasks<T, Res = any>(arr: T[], fn: (arr: T, arrIdx: number, concurrentIdx: num) => Promise<Res> | Res, nOfConcurrentTasks?: number): Promise<Res[]>;
|
|
46
46
|
export declare function hash(str: string): string;
|
|
47
|
+
export declare function formatFileSize(bytes: num): string;
|
package/dist/general.js
CHANGED
|
@@ -8,6 +8,7 @@ exports.debounceTimeOut = debounceTimeOut;
|
|
|
8
8
|
exports.promiseOut = promiseOut;
|
|
9
9
|
exports.concurrentTasks = concurrentTasks;
|
|
10
10
|
exports.hash = hash;
|
|
11
|
+
exports.formatFileSize = formatFileSize;
|
|
11
12
|
const _1 = require(".");
|
|
12
13
|
/**
|
|
13
14
|
* @example
|
|
@@ -156,11 +157,11 @@ function promiseOut() {
|
|
|
156
157
|
async function concurrentTasks(arr, fn, nOfConcurrentTasks = 8) {
|
|
157
158
|
let idx = -1;
|
|
158
159
|
const result = [];
|
|
159
|
-
await Promise.all(Array(nOfConcurrentTasks).fill(0).map(async () => {
|
|
160
|
+
await Promise.all(Array(nOfConcurrentTasks).fill(0).map(async (_, cI) => {
|
|
160
161
|
let data;
|
|
161
162
|
while (data = arr[++idx]) {
|
|
162
163
|
const i = idx;
|
|
163
|
-
result[i] = await fn(data, idx);
|
|
164
|
+
result[i] = await fn(data, idx, cI);
|
|
164
165
|
}
|
|
165
166
|
}));
|
|
166
167
|
return result;
|
|
@@ -171,4 +172,12 @@ function hash(str) {
|
|
|
171
172
|
hash = (hash * 31n + BigInt(str.charCodeAt(i))) & 0xffffffffffffffffn;
|
|
172
173
|
return hash.toString(36);
|
|
173
174
|
}
|
|
175
|
+
function formatFileSize(bytes) {
|
|
176
|
+
if (bytes === 0)
|
|
177
|
+
return '0 B';
|
|
178
|
+
const k = 1024;
|
|
179
|
+
const sizes = ['B', 'KB', 'MB', 'GB', 'TB'];
|
|
180
|
+
const i = Math.floor(Math.log(bytes) / Math.log(k));
|
|
181
|
+
return parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + ' ' + sizes[i];
|
|
182
|
+
}
|
|
174
183
|
//# sourceMappingURL=general.js.map
|
package/dist/general.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"general.js","sourceRoot":"","sources":["../src/general.ts"],"names":[],"mappings":";;;AAkDA,4BAOC;AAWD,oBAUC;AAGD,gCAQC;AAuCD,0CASC;AAYD,gCAcC;AAED,0CAiBC;AAED,oBAMC;
|
|
1
|
+
{"version":3,"file":"general.js","sourceRoot":"","sources":["../src/general.ts"],"names":[],"mappings":"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"}
|
package/dist/geo.d.ts
ADDED
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { GeoPoint } from "./@types";
|
|
2
|
+
export declare const haversineDistance: (geo1: GeoPoint | [lat: number, lat: number], geo2: GeoPoint | [lat: number, lat: number], type?: "mi" | "km") => number;
|
|
3
|
+
export declare function getCountryName(code: string, lang?: string): string | undefined;
|
|
4
|
+
export declare const countryCodes: string[];
|
package/dist/geo.js
ADDED
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.countryCodes = exports.haversineDistance = void 0;
|
|
4
|
+
exports.getCountryName = getCountryName;
|
|
5
|
+
const haversineDistance = (geo1, geo2, type = 'km') => {
|
|
6
|
+
let lat1 = 0, lon1 = 0, lat2 = 0, lon2 = 0;
|
|
7
|
+
if (Array.isArray(geo1)) {
|
|
8
|
+
lat1 = geo1[0];
|
|
9
|
+
lat1 = geo1[1];
|
|
10
|
+
}
|
|
11
|
+
else {
|
|
12
|
+
lat1 = geo1.lat;
|
|
13
|
+
lon1 = geo1.lon;
|
|
14
|
+
}
|
|
15
|
+
if (Array.isArray(geo2)) {
|
|
16
|
+
lat2 = geo2[0];
|
|
17
|
+
lat2 = geo2[1];
|
|
18
|
+
}
|
|
19
|
+
else {
|
|
20
|
+
lat2 = geo2.lat;
|
|
21
|
+
lon2 = geo2.lon;
|
|
22
|
+
}
|
|
23
|
+
const toRadian = (angle) => (Math.PI / 180) * angle;
|
|
24
|
+
const distance = (a, b) => (Math.PI / 180) * (a - b);
|
|
25
|
+
const RADIUS_OF_EARTH_IN_KM = 6371;
|
|
26
|
+
const dLat = distance(lat2, lat1);
|
|
27
|
+
const dLon = distance(lon2, lon1);
|
|
28
|
+
lat1 = toRadian(lat1);
|
|
29
|
+
lat2 = toRadian(lat2);
|
|
30
|
+
// Haversine Formula
|
|
31
|
+
const a = Math.pow(Math.sin(dLat / 2), 2) +
|
|
32
|
+
Math.pow(Math.sin(dLon / 2), 2) * Math.cos(lat1) * Math.cos(lat2);
|
|
33
|
+
const c = 2 * Math.asin(Math.sqrt(a));
|
|
34
|
+
let finalDistance = RADIUS_OF_EARTH_IN_KM * c;
|
|
35
|
+
if (type === 'mi') {
|
|
36
|
+
finalDistance /= 1.60934;
|
|
37
|
+
}
|
|
38
|
+
return finalDistance;
|
|
39
|
+
};
|
|
40
|
+
exports.haversineDistance = haversineDistance;
|
|
41
|
+
function getCountryName(code, lang = "es") {
|
|
42
|
+
const regionNames = new Intl.DisplayNames([lang], { type: 'region' });
|
|
43
|
+
return regionNames.of(code);
|
|
44
|
+
}
|
|
45
|
+
exports.countryCodes = [
|
|
46
|
+
"AF", "AL", "DZ", "AS", "AD", "AO", "AI", "AQ", "AG", "AR", "AM", "AW", "AU", "AT", "AZ", "BS", "BH", "BD",
|
|
47
|
+
"BB", "BY", "BE", "BZ", "BJ", "BM", "BT", "BO", "BQ", "BA", "BW", "BV", "BR", "IO", "BN", "BG", "BF", "BI",
|
|
48
|
+
"KH", "CM", "CA", "CV", "KY", "CF", "TD", "CL", "CN", "CX", "CC", "CO", "KM", "CG", "CD", "CK", "CR", "CI",
|
|
49
|
+
"HR", "CU", "CW", "CY", "CZ", "DK", "DJ", "DM", "DO", "EC", "EG", "SV", "GQ", "ER", "EE", "SZ", "ET", "FK",
|
|
50
|
+
"FO", "FJ", "FI", "FR", "GF", "PF", "TF", "GA", "GM", "GE", "DE", "GH", "GI", "GR", "GL", "GD", "GP", "GU",
|
|
51
|
+
"GT", "GG", "GN", "GW", "GY", "HT", "HM", "VA", "HN", "HK", "HU", "IS", "IN", "ID", "IR", "IQ", "IE", "IM",
|
|
52
|
+
"IL", "IT", "CI", "JM", "JP", "JE", "JO", "KZ", "KE", "KI", "KP", "KR", "KW", "KG", "LA", "LA", "LV", "LB",
|
|
53
|
+
"LS", "LR", "LY", "LI", "LT", "LU", "MO", "MK", "MG", "MW", "MY", "MV", "ML", "MT", "MH", "MQ", "MR", "MU",
|
|
54
|
+
"YT", "MX", "FM", "MD", "MC", "MN", "ME", "MS", "MA", "MZ", "MM", "NA", "NR", "NP", "NL", "AN", "NC", "NZ",
|
|
55
|
+
"NI", "NE", "NG", "NU", "NF", "MP", "NO", "OM", "PK", "PW", "PS", "PA", "PG", "PY", "PE", "PH", "PN", "PL",
|
|
56
|
+
"PT", "PR", "QA", "RW", "RE", "RO", "RU", "BL", "SH", "KN", "LC", "MF", "PM", "VC", "WS", "SM", "ST", "SA",
|
|
57
|
+
"SN", "RS", "SC", "SL", "SG", "SX", "SK", "SI", "SB", "SO", "ZA", "GS", "SS", "ES", "LK", "SD", "SR", "SJ",
|
|
58
|
+
"SZ", "SE", "CH", "SY", "TW", "TJ", "TZ", "TH", "TL", "TG", "TK", "TO", "TT", "TN", "TR", "TM", "TC", "TV",
|
|
59
|
+
"UG", "UA", "AE", "GB", "US", "UM", "UY", "UZ", "VU", "VE", "VN", "VN", "VG", "VI", "WF", "EH", "YE", "ZM",
|
|
60
|
+
"ZW", "AX",
|
|
61
|
+
];
|
|
62
|
+
//# sourceMappingURL=geo.js.map
|
package/dist/geo.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"geo.js","sourceRoot":"","sources":["../src/geo.ts"],"names":[],"mappings":"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C1G,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;IAC1G,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;IAC1G,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;IAC1G,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;IAC1G,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;IAC1G,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;IAC1G,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;IAC1G,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;IAC1G,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;IAC1G,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;IAC1G,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;IAC1G,IAAI,EAAE,IAAI;CACb,CAAA"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,9 +1,11 @@
|
|
|
1
|
-
export * from './@types';
|
|
2
1
|
export * from './@state.types';
|
|
2
|
+
export * from './@types';
|
|
3
3
|
export * from './array';
|
|
4
|
+
export * from './browser';
|
|
4
5
|
export * from './clone';
|
|
5
6
|
export * from './equality';
|
|
6
7
|
export * from './general';
|
|
8
|
+
export * from './geo';
|
|
7
9
|
export * from './http';
|
|
8
10
|
export * from './iterate';
|
|
9
11
|
export * from './number';
|
package/dist/index.js
CHANGED
|
@@ -14,12 +14,14 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
14
14
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
__exportStar(require("./@types"), exports);
|
|
18
17
|
__exportStar(require("./@state.types"), exports);
|
|
18
|
+
__exportStar(require("./@types"), exports);
|
|
19
19
|
__exportStar(require("./array"), exports);
|
|
20
|
+
__exportStar(require("./browser"), exports);
|
|
20
21
|
__exportStar(require("./clone"), exports);
|
|
21
22
|
__exportStar(require("./equality"), exports);
|
|
22
23
|
__exportStar(require("./general"), exports);
|
|
24
|
+
__exportStar(require("./geo"), exports);
|
|
23
25
|
__exportStar(require("./http"), exports);
|
|
24
26
|
__exportStar(require("./iterate"), exports);
|
|
25
27
|
__exportStar(require("./number"), exports);
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2CAAyB;AACzB,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,iDAA8B;AAC9B,2CAAyB;AACzB,0CAAwB;AACxB,4CAA0B;AAC1B,0CAAwB;AACxB,6CAA2B;AAC3B,4CAA0B;AAC1B,wCAAsB;AACtB,yCAAuB;AACvB,4CAA0B;AAC1B,2CAAyB;AACzB,2CAAyB;AACzB,kDAAgC;AAChC,2CAAyB;AACzB,yCAAuB;AACvB,yCAAuB"}
|
package/dist/number.d.ts
CHANGED
|
@@ -6,10 +6,10 @@ import { num } from '.';
|
|
|
6
6
|
* @param min - whole number & `< max`
|
|
7
7
|
* @param max - whole number & `> min`
|
|
8
8
|
*/
|
|
9
|
-
export declare const
|
|
10
|
-
export declare const
|
|
9
|
+
export declare const numRandInt: (min: number, max: number) => number;
|
|
10
|
+
export declare const numRand: (min: number, max: number) => number;
|
|
11
11
|
/** Takes an array of numbers and finds and average */
|
|
12
|
-
export declare const
|
|
12
|
+
export declare const numAvg: (nArr: number[]) => number;
|
|
13
13
|
/**
|
|
14
14
|
* Takes a number `n` & fixes to decimal places `places`
|
|
15
15
|
* @param n - the number to fix decimal places of
|
|
@@ -25,4 +25,5 @@ export declare const numFixed: (n: number, fractionDigits: number) => number;
|
|
|
25
25
|
* new random number.
|
|
26
26
|
*/
|
|
27
27
|
export declare function newNum(prevNum: number | number[], min: number, max: number): number;
|
|
28
|
-
export declare const
|
|
28
|
+
export declare const numGetProgress: (total: num, nOfDone: num, fractionDigits?: number) => string;
|
|
29
|
+
export declare const numSum: (nArr: num[]) => number;
|
package/dist/number.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.numSum = exports.numGetProgress = exports.numFixed = exports.numAvg = exports.numRand = exports.numRandInt = void 0;
|
|
4
4
|
exports.newNum = newNum;
|
|
5
5
|
const _1 = require(".");
|
|
6
6
|
/**
|
|
@@ -10,13 +10,13 @@ const _1 = require(".");
|
|
|
10
10
|
* @param min - whole number & `< max`
|
|
11
11
|
* @param max - whole number & `> min`
|
|
12
12
|
*/
|
|
13
|
-
const
|
|
14
|
-
exports.
|
|
15
|
-
const
|
|
16
|
-
exports.
|
|
13
|
+
const numRandInt = (min, max) => Math.floor(Math.random() * ((max + 1) - min)) + min;
|
|
14
|
+
exports.numRandInt = numRandInt;
|
|
15
|
+
const numRand = (min, max) => Math.random() * (max - min) + min;
|
|
16
|
+
exports.numRand = numRand;
|
|
17
17
|
/** Takes an array of numbers and finds and average */
|
|
18
|
-
const
|
|
19
|
-
exports.
|
|
18
|
+
const numAvg = (nArr) => nArr.reduce((a = 0, b = 0) => a + b, 0) / nArr.length;
|
|
19
|
+
exports.numAvg = numAvg;
|
|
20
20
|
/**
|
|
21
21
|
* Takes a number `n` & fixes to decimal places `places`
|
|
22
22
|
* @param n - the number to fix decimal places of
|
|
@@ -38,7 +38,7 @@ function newNum(prevNum, min, max) {
|
|
|
38
38
|
const dict = (0, _1.isType)(prevNum, 'array') ?
|
|
39
39
|
(0, _1.arrToBoolDict)(prevNum) : { [prevNum]: true };
|
|
40
40
|
do {
|
|
41
|
-
num = (0, exports.
|
|
41
|
+
num = (0, exports.numRandInt)(min, max);
|
|
42
42
|
loop++;
|
|
43
43
|
if (loop > 1_000_000) {
|
|
44
44
|
console.error('Check for infinite loops');
|
|
@@ -47,6 +47,8 @@ function newNum(prevNum, min, max) {
|
|
|
47
47
|
} while (dict[num]);
|
|
48
48
|
return num;
|
|
49
49
|
}
|
|
50
|
-
const
|
|
51
|
-
exports.
|
|
50
|
+
const numGetProgress = (total, nOfDone, fractionDigits = 2) => (nOfDone / total * 100).toFixed(fractionDigits);
|
|
51
|
+
exports.numGetProgress = numGetProgress;
|
|
52
|
+
const numSum = (nArr) => nArr.reduce((acc, n) => acc + n, 0);
|
|
53
|
+
exports.numSum = numSum;
|
|
52
54
|
//# sourceMappingURL=number.js.map
|
package/dist/number.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"number.js","sourceRoot":"","sources":["../src/number.ts"],"names":[],"mappings":";;;AAmCA,wBAmBC;AAtDD,wBAAqD;AAErD;;;;;;GAMG;AACI,MAAM,
|
|
1
|
+
{"version":3,"file":"number.js","sourceRoot":"","sources":["../src/number.ts"],"names":[],"mappings":";;;AAmCA,wBAmBC;AAtDD,wBAAqD;AAErD;;;;;;GAMG;AACI,MAAM,UAAU,GAAG,CAAC,GAAW,EAAE,GAAW,EAAE,EAAE,CACnD,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC;AAD3C,QAAA,UAAU,cACiC;AAEjD,MAAM,OAAO,GAAG,CAAC,GAAW,EAAE,GAAW,EAAE,EAAE,CAChD,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;AADzB,QAAA,OAAO,WACkB;AAEtC,sDAAsD;AAC/C,MAAM,MAAM,GAAG,CAAC,IAAc,EAAE,EAAE,CACrC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;AAD7C,QAAA,MAAM,UACuC;AAE1D;;;;;;;;GAQG;AACI,MAAM,QAAQ,GAAG,CAAC,CAAS,EAAE,cAAsB,EAAE,EAAE,CAC1D,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC;AAD7B,QAAA,QAAQ,YACqB;AAE1C;;;GAGG;AACH,SAAgB,MAAM,CAClB,OAA0B,EAAE,GAAW,EAAE,GAAW;IAEpD,IAAI,GAAG,CAAC;IACR,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,MAAM,IAAI,GAAkB,IAAA,SAAM,EAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;QAClD,IAAA,gBAAa,EAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,CAAC;IAEjD,GAAG,CAAC;QACA,GAAG,GAAG,IAAA,kBAAU,EAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QAC3B,IAAI,EAAE,CAAC;QAEP,IAAI,IAAI,GAAG,SAAS,EAAE,CAAC;YACnB,OAAO,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;YAC1C,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;QAC9C,CAAC;IACL,CAAC,QAAQ,IAAI,CAAC,GAAG,CAAC,EAAE;IAEpB,OAAO,GAAG,CAAC;AACf,CAAC;AAEM,MAAM,cAAc,GAAG,CAC1B,KAAU,EAAE,OAAY,EAAE,cAAc,GAAG,CAAC,EAC9C,EAAE,CAAC,CAAC,OAAO,GAAG,KAAK,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;AAFxC,QAAA,cAAc,kBAE0B;AAE9C,MAAM,MAAM,GAAG,CAAC,IAAW,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;AAA9D,QAAA,MAAM,UAAwD"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@giveback007/util-lib",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "3.1.0",
|
|
4
4
|
"description": "Utility library",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -27,6 +27,7 @@
|
|
|
27
27
|
"homepage": "https://github.com/Giveback007/util-lib#readme",
|
|
28
28
|
"dependencies": {
|
|
29
29
|
"@js-temporal/polyfill": "^0.5.1",
|
|
30
|
+
"tailwind-merge": "^3.3.1",
|
|
30
31
|
"tslib": "^2.8.1"
|
|
31
32
|
},
|
|
32
33
|
"devDependencies": {
|
package/src/@types.ts
CHANGED
package/src/array.ts
CHANGED
|
@@ -27,6 +27,11 @@ export function arrRemoveById<
|
|
|
27
27
|
return objVals(keep);
|
|
28
28
|
}
|
|
29
29
|
|
|
30
|
+
export function arrRemoveItemByIndex<T>(arr: T[], index: number) {
|
|
31
|
+
// Use slice to create a new array without the item at the given index
|
|
32
|
+
return arr.slice(0, index).concat(arr.slice(index + 1));
|
|
33
|
+
}
|
|
34
|
+
|
|
30
35
|
/**
|
|
31
36
|
* Gets values out of `arr` that match the ids in `idArr`
|
|
32
37
|
*
|
package/src/browser.ts
ADDED
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
import { Dict } from "./@types";
|
|
2
|
+
import { isType } from "./test";
|
|
3
|
+
import { twMerge as _twMerge } from "tailwind-merge";
|
|
4
|
+
|
|
5
|
+
type StorageType = 'localStorage' | 'sessionStorage';
|
|
6
|
+
|
|
7
|
+
function storageFactory(type: StorageType) {
|
|
8
|
+
return {
|
|
9
|
+
hasStore: () => !!(typeof window !== "undefined" && window[type]),
|
|
10
|
+
get: <T = any>(key: string) => JSON.parse(window[type].getItem(key) ?? 'null') as T | null,
|
|
11
|
+
set: (key: string, data: any) => window[type].setItem(key, JSON.stringify(data)),
|
|
12
|
+
del: (key: string) => window[type].removeItem(key),
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export const lStore = storageFactory('localStorage');
|
|
17
|
+
export const sStore = storageFactory('sessionStorage');
|
|
18
|
+
|
|
19
|
+
export type ClassNameArray = ClassNameValue[];
|
|
20
|
+
export type ClassNameValue = ClassNameArray | string | null | undefined | 0 | 0n | false;
|
|
21
|
+
export type CssMergeArgs = Dict<any> | ClassNameValue | ClassNameValue[];
|
|
22
|
+
|
|
23
|
+
export function twMerge(...cssArgs: CssMergeArgs[]): string {
|
|
24
|
+
// @ts-ignore
|
|
25
|
+
cssArgs = Array.isArray(cssArgs) ? cssArgs.flat(Infinity) : cssArgs;
|
|
26
|
+
const classes: ClassNameValue[] = [];
|
|
27
|
+
|
|
28
|
+
for (let css of cssArgs) {
|
|
29
|
+
if (isType(css, 'object')) {
|
|
30
|
+
Object.entries(css).forEach(([cls, truthy]) => {
|
|
31
|
+
if (truthy) classes.push(cls);
|
|
32
|
+
});
|
|
33
|
+
} else if (css) {
|
|
34
|
+
classes.push(css)
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
return _twMerge(classes);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
export function getFormData<T extends Dict<any> = Dict<string>>(formElm: HTMLFormElement) {
|
|
42
|
+
const dict = {} as T;
|
|
43
|
+
const data = new FormData(formElm);
|
|
44
|
+
data.forEach((val, key) => (dict[key] as any) = val);
|
|
45
|
+
|
|
46
|
+
return dict;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
export type FileDropEvent = DragEvent & {
|
|
50
|
+
currentTarget: EventTarget & HTMLDivElement;
|
|
51
|
+
} & {
|
|
52
|
+
dataTransfer: DataTransfer;
|
|
53
|
+
};
|
|
54
|
+
export class DragOverTracker {
|
|
55
|
+
private dragCounter = 0;
|
|
56
|
+
|
|
57
|
+
constructor(
|
|
58
|
+
private elm: HTMLElement,
|
|
59
|
+
private onChange: (dragover: boolean) => any,
|
|
60
|
+
private onDrop: (e: FileDropEvent) => any,
|
|
61
|
+
) {
|
|
62
|
+
elm.ondragenter = () => {
|
|
63
|
+
this.dragCounter++;
|
|
64
|
+
this.changeHandler(true);
|
|
65
|
+
};
|
|
66
|
+
elm.ondragleave = () => {
|
|
67
|
+
this.dragCounter--;
|
|
68
|
+
if (this.dragCounter === 0)
|
|
69
|
+
this.changeHandler(false)
|
|
70
|
+
};
|
|
71
|
+
elm.ondragover = (e) => e.preventDefault();
|
|
72
|
+
elm.ondrop = (e) => {
|
|
73
|
+
e.preventDefault();
|
|
74
|
+
this.dragCounter = 0;
|
|
75
|
+
this.changeHandler(false);
|
|
76
|
+
|
|
77
|
+
this.onDrop(e as FileDropEvent);
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
destroy() {
|
|
82
|
+
this.elm.ondragenter = null;
|
|
83
|
+
this.elm.ondragleave = null;
|
|
84
|
+
this.elm.ondragover = null;
|
|
85
|
+
this.elm.ondrop = null;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
private prevState = false;
|
|
89
|
+
private changeHandler(newState: boolean) {
|
|
90
|
+
if (this.prevState === newState) return;
|
|
91
|
+
this.prevState = newState;
|
|
92
|
+
|
|
93
|
+
this.onChange(newState);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
export async function downloadFile(url: string, filename: string | null = null) {
|
|
98
|
+
try {
|
|
99
|
+
const response = await fetch(url);
|
|
100
|
+
|
|
101
|
+
if (!response.ok) {
|
|
102
|
+
throw new Error(`HTTP error! status: ${response.status}`);
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
const blob = await response.blob();
|
|
106
|
+
const downloadUrl = window.URL.createObjectURL(blob);
|
|
107
|
+
|
|
108
|
+
const link = document.createElement('a');
|
|
109
|
+
link.href = downloadUrl;
|
|
110
|
+
|
|
111
|
+
// Use provided filename or try to extract from URL or response headers
|
|
112
|
+
link.download = filename || extractFilenameFromUrl(url) || 'download';
|
|
113
|
+
|
|
114
|
+
document.body.appendChild(link);
|
|
115
|
+
link.click();
|
|
116
|
+
document.body.removeChild(link);
|
|
117
|
+
window.URL.revokeObjectURL(downloadUrl);
|
|
118
|
+
|
|
119
|
+
console.log('File downloaded successfully');
|
|
120
|
+
} catch (error) {
|
|
121
|
+
console.error('Download failed:', error);
|
|
122
|
+
// Fallback: try opening in new tab
|
|
123
|
+
window.open(url, '_blank');
|
|
124
|
+
}
|
|
125
|
+
};
|
|
126
|
+
|
|
127
|
+
function extractFilenameFromUrl(url: string) {
|
|
128
|
+
try {
|
|
129
|
+
const urlPath = new URL(url).pathname;
|
|
130
|
+
const segments = urlPath.split('/');
|
|
131
|
+
const filename = segments[segments.length - 1];
|
|
132
|
+
return filename && filename.includes('.') ? filename : null;
|
|
133
|
+
} catch {
|
|
134
|
+
return null;
|
|
135
|
+
}
|
|
136
|
+
};
|
|
137
|
+
|
|
138
|
+
export async function copyToClipboard(text: string) {
|
|
139
|
+
try {
|
|
140
|
+
await navigator.clipboard.writeText(text);
|
|
141
|
+
return true;
|
|
142
|
+
} catch (err) {
|
|
143
|
+
return false;
|
|
144
|
+
}
|
|
145
|
+
}
|
package/src/general.ts
CHANGED
|
@@ -165,17 +165,17 @@ export function promiseOut<T = any>() {
|
|
|
165
165
|
|
|
166
166
|
export async function concurrentTasks<T, Res = any>(
|
|
167
167
|
arr: T[],
|
|
168
|
-
fn: (
|
|
168
|
+
fn: (arr: T, arrIdx: number, concurrentIdx: num) => Promise<Res> | Res,
|
|
169
169
|
nOfConcurrentTasks = 8
|
|
170
170
|
): Promise<Res[]> {
|
|
171
171
|
let idx = -1;
|
|
172
172
|
const result: Res[] = [];
|
|
173
173
|
|
|
174
|
-
await Promise.all(Array(nOfConcurrentTasks).fill(0).map(async () => {
|
|
174
|
+
await Promise.all(Array(nOfConcurrentTasks).fill(0).map(async (_, cI) => {
|
|
175
175
|
let data: T | undefined;
|
|
176
176
|
while (data = arr[++idx]) {
|
|
177
177
|
const i = idx;
|
|
178
|
-
result[i] = await fn(data, idx)
|
|
178
|
+
result[i] = await fn(data, idx, cI)
|
|
179
179
|
}
|
|
180
180
|
}));
|
|
181
181
|
|
|
@@ -188,4 +188,14 @@ export function hash(str: string) {
|
|
|
188
188
|
hash = (hash * 31n + BigInt(str.charCodeAt(i))) & 0xFFFFFFFFFFFFFFFFn;
|
|
189
189
|
|
|
190
190
|
return hash.toString(36);
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
export function formatFileSize(bytes: num) {
|
|
194
|
+
if (bytes === 0) return '0 B';
|
|
195
|
+
|
|
196
|
+
const k = 1024;
|
|
197
|
+
const sizes = ['B', 'KB', 'MB', 'GB', 'TB'];
|
|
198
|
+
const i = Math.floor(Math.log(bytes) / Math.log(k));
|
|
199
|
+
|
|
200
|
+
return parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + ' ' + sizes[i];
|
|
191
201
|
}
|
package/src/geo.ts
ADDED
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { GeoPoint } from "./@types";
|
|
2
|
+
|
|
3
|
+
export const haversineDistance = (
|
|
4
|
+
geo1: GeoPoint | [lat: number, lat: number],
|
|
5
|
+
geo2: GeoPoint | [lat: number, lat: number],
|
|
6
|
+
type: 'mi' | 'km' = 'km',
|
|
7
|
+
) => {
|
|
8
|
+
let lat1 = 0, lon1 = 0, lat2 = 0, lon2 = 0;
|
|
9
|
+
if (Array.isArray(geo1)) {
|
|
10
|
+
lat1 = geo1[0];
|
|
11
|
+
lat1 = geo1[1];
|
|
12
|
+
} else {
|
|
13
|
+
lat1 = geo1.lat;
|
|
14
|
+
lon1 = geo1.lon;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
if (Array.isArray(geo2)) {
|
|
18
|
+
lat2 = geo2[0];
|
|
19
|
+
lat2 = geo2[1];
|
|
20
|
+
} else {
|
|
21
|
+
lat2 = geo2.lat;
|
|
22
|
+
lon2 = geo2.lon;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
const toRadian = (angle: number) => (Math.PI / 180) * angle;
|
|
26
|
+
const distance = (a: number, b: number) => (Math.PI / 180) * (a - b);
|
|
27
|
+
const RADIUS_OF_EARTH_IN_KM = 6371;
|
|
28
|
+
|
|
29
|
+
const dLat = distance(lat2, lat1);
|
|
30
|
+
const dLon = distance(lon2, lon1);
|
|
31
|
+
|
|
32
|
+
lat1 = toRadian(lat1);
|
|
33
|
+
lat2 = toRadian(lat2);
|
|
34
|
+
|
|
35
|
+
// Haversine Formula
|
|
36
|
+
const a =
|
|
37
|
+
Math.pow(Math.sin(dLat / 2), 2) +
|
|
38
|
+
Math.pow(Math.sin(dLon / 2), 2) * Math.cos(lat1) * Math.cos(lat2);
|
|
39
|
+
const c = 2 * Math.asin(Math.sqrt(a));
|
|
40
|
+
|
|
41
|
+
let finalDistance = RADIUS_OF_EARTH_IN_KM * c;
|
|
42
|
+
|
|
43
|
+
if (type === 'mi') {
|
|
44
|
+
finalDistance /= 1.60934;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
return finalDistance;
|
|
48
|
+
};
|
|
49
|
+
|
|
50
|
+
export function getCountryName(code: string, lang = "es") {
|
|
51
|
+
const regionNames = new Intl.DisplayNames([lang], { type: 'region' });
|
|
52
|
+
return regionNames.of(code)
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
export const countryCodes = [
|
|
56
|
+
"AF", "AL", "DZ", "AS", "AD", "AO", "AI", "AQ", "AG", "AR", "AM", "AW", "AU", "AT", "AZ", "BS", "BH", "BD",
|
|
57
|
+
"BB", "BY", "BE", "BZ", "BJ", "BM", "BT", "BO", "BQ", "BA", "BW", "BV", "BR", "IO", "BN", "BG", "BF", "BI",
|
|
58
|
+
"KH", "CM", "CA", "CV", "KY", "CF", "TD", "CL", "CN", "CX", "CC", "CO", "KM", "CG", "CD", "CK", "CR", "CI",
|
|
59
|
+
"HR", "CU", "CW", "CY", "CZ", "DK", "DJ", "DM", "DO", "EC", "EG", "SV", "GQ", "ER", "EE", "SZ", "ET", "FK",
|
|
60
|
+
"FO", "FJ", "FI", "FR", "GF", "PF", "TF", "GA", "GM", "GE", "DE", "GH", "GI", "GR", "GL", "GD", "GP", "GU",
|
|
61
|
+
"GT", "GG", "GN", "GW", "GY", "HT", "HM", "VA", "HN", "HK", "HU", "IS", "IN", "ID", "IR", "IQ", "IE", "IM",
|
|
62
|
+
"IL", "IT", "CI", "JM", "JP", "JE", "JO", "KZ", "KE", "KI", "KP", "KR", "KW", "KG", "LA", "LA", "LV", "LB",
|
|
63
|
+
"LS", "LR", "LY", "LI", "LT", "LU", "MO", "MK", "MG", "MW", "MY", "MV", "ML", "MT", "MH", "MQ", "MR", "MU",
|
|
64
|
+
"YT", "MX", "FM", "MD", "MC", "MN", "ME", "MS", "MA", "MZ", "MM", "NA", "NR", "NP", "NL", "AN", "NC", "NZ",
|
|
65
|
+
"NI", "NE", "NG", "NU", "NF", "MP", "NO", "OM", "PK", "PW", "PS", "PA", "PG", "PY", "PE", "PH", "PN", "PL",
|
|
66
|
+
"PT", "PR", "QA", "RW", "RE", "RO", "RU", "BL", "SH", "KN", "LC", "MF", "PM", "VC", "WS", "SM", "ST", "SA",
|
|
67
|
+
"SN", "RS", "SC", "SL", "SG", "SX", "SK", "SI", "SB", "SO", "ZA", "GS", "SS", "ES", "LK", "SD", "SR", "SJ",
|
|
68
|
+
"SZ", "SE", "CH", "SY", "TW", "TJ", "TZ", "TH", "TL", "TG", "TK", "TO", "TT", "TN", "TR", "TM", "TC", "TV",
|
|
69
|
+
"UG", "UA", "AE", "GB", "US", "UM", "UY", "UZ", "VU", "VE", "VN", "VN", "VG", "VI", "WF", "EH", "YE", "ZM",
|
|
70
|
+
"ZW", "AX",
|
|
71
|
+
]
|
package/src/index.ts
CHANGED
|
@@ -1,9 +1,11 @@
|
|
|
1
|
-
export * from './@types';
|
|
2
1
|
export * from './@state.types'
|
|
2
|
+
export * from './@types';
|
|
3
3
|
export * from './array';
|
|
4
|
+
export * from './browser';
|
|
4
5
|
export * from './clone';
|
|
5
6
|
export * from './equality';
|
|
6
7
|
export * from './general';
|
|
8
|
+
export * from './geo';
|
|
7
9
|
export * from './http';
|
|
8
10
|
export * from './iterate';
|
|
9
11
|
export * from './number';
|
package/src/number.ts
CHANGED
|
@@ -7,14 +7,14 @@ import { arrToBoolDict, Dict, isType, num } from '.';
|
|
|
7
7
|
* @param min - whole number & `< max`
|
|
8
8
|
* @param max - whole number & `> min`
|
|
9
9
|
*/
|
|
10
|
-
export const
|
|
10
|
+
export const numRandInt = (min: number, max: number) =>
|
|
11
11
|
Math.floor(Math.random() * ((max + 1) - min)) + min;
|
|
12
12
|
|
|
13
|
-
export const
|
|
13
|
+
export const numRand = (min: number, max: number) =>
|
|
14
14
|
Math.random() * (max - min) + min;
|
|
15
15
|
|
|
16
16
|
/** Takes an array of numbers and finds and average */
|
|
17
|
-
export const
|
|
17
|
+
export const numAvg = (nArr: number[]) =>
|
|
18
18
|
nArr.reduce((a = 0, b = 0) => a + b, 0) / nArr.length;
|
|
19
19
|
|
|
20
20
|
/**
|
|
@@ -42,7 +42,7 @@ export function newNum(
|
|
|
42
42
|
arrToBoolDict(prevNum) : { [prevNum]: true };
|
|
43
43
|
|
|
44
44
|
do {
|
|
45
|
-
num =
|
|
45
|
+
num = numRandInt(min, max);
|
|
46
46
|
loop++;
|
|
47
47
|
|
|
48
48
|
if (loop > 1_000_000) {
|
|
@@ -54,6 +54,8 @@ export function newNum(
|
|
|
54
54
|
return num;
|
|
55
55
|
}
|
|
56
56
|
|
|
57
|
-
export const
|
|
57
|
+
export const numGetProgress = (
|
|
58
58
|
total: num, nOfDone: num, fractionDigits = 2
|
|
59
|
-
) => (nOfDone / total * 100).toFixed(fractionDigits);
|
|
59
|
+
) => (nOfDone / total * 100).toFixed(fractionDigits);
|
|
60
|
+
|
|
61
|
+
export const numSum = (nArr: num[]) => nArr.reduce((acc, n) => acc + n, 0);
|