Skip to content

Commit

Permalink
Added toolbox methods and types
Browse files Browse the repository at this point in the history
  • Loading branch information
Raphaël MC COMAS committed Mar 21, 2023
1 parent 1cdcff5 commit 8dab03b
Show file tree
Hide file tree
Showing 24 changed files with 1,059 additions and 1 deletion.
37 changes: 37 additions & 0 deletions src/utils/__tests__/unit/dates.utils.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
import { stringNumberOrDateToUNIXTimestamp } from "../../dates.utils";

describe("Dates utils", () => {
describe("stringNumberOrDateToUNIXTimestamp", () => {
const testDate = new Date("26 October 1985 01:20 PDT");
const expectedValue = Math.round(testDate.valueOf() / 1000);

it("should handle Date as Date", () => {
const unixTimestamp = stringNumberOrDateToUNIXTimestamp(testDate);
expect(unixTimestamp).toBe(expectedValue);
});

it("should handle Date as string", () => {
const unixTimestamp = stringNumberOrDateToUNIXTimestamp(testDate.toString());
expect(unixTimestamp).toBe(expectedValue);
});

it("should handle Date as isostring", () => {
const unixTimestamp = stringNumberOrDateToUNIXTimestamp(testDate.toISOString());
expect(unixTimestamp).toBe(expectedValue);
});

it("should handle timestamp as number", () => {
const numberTimestamp = testDate.valueOf();

const unixTimestamp = stringNumberOrDateToUNIXTimestamp(numberTimestamp);
expect(unixTimestamp).toBe(expectedValue);
});

it("should handle timestamp as string", () => {
const stringTimestamp = testDate.valueOf().toString();

const unixTimestamp = stringNumberOrDateToUNIXTimestamp(stringTimestamp);
expect(unixTimestamp).toBe(expectedValue);
});
});
});
86 changes: 86 additions & 0 deletions src/utils/array.utils.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
export async function asyncMap<T, U>(
array: readonly T[],
callbackfn: (value: T, index: number, innerArray: readonly T[]) => Promise<U>,
parallelized = false
): Promise<U[]> {
if (parallelized) {
return Promise.all(array.map(callbackfn));
}
const newArray = new Array<U>();
const arrayEntriesIterator = array.entries();
for (const [index, value] of arrayEntriesIterator) {
newArray[index] = await callbackfn(value, index, array);
}
return newArray;
}

export async function asyncForEach<T>(
array: readonly T[],
callbackfn: (value: T, index: number, innerArray: readonly T[]) => Promise<void>,
parallelized = false
): Promise<void> {
if (parallelized) {
await Promise.all(array.map(callbackfn));
} else {
const arrayEntriesIterator = array.entries();
for (const [index, value] of arrayEntriesIterator) {
await callbackfn(value, index, array);
}
}
}

export async function asyncReduce<T, U>(
array: readonly T[],
callbackfn: (
previousValue: U,
currentValue: T,
currentIndex: number,
innerArray: readonly T[]
) => Promise<U>,
initialValue: U
): Promise<U> {
const arrayEntriesIterator = array.entries();
for (const [index, value] of arrayEntriesIterator) {
initialValue = await callbackfn(initialValue, value, index, array);
}
return initialValue;
}

export async function asyncFind<T>(
array: readonly T[],
callbackfn: (value: T, index: number, innerArray: readonly T[]) => Promise<boolean>
): Promise<T | undefined> {
const arrayEntriesIterator = array.entries();
for (const [index, value] of arrayEntriesIterator) {
if (await callbackfn(value, index, array)) {
return value;
}
}
return undefined;
}

export async function asyncEvery<T>(
array: readonly T[],
predicate: (value: T, index: number, array: readonly T[]) => Promise<boolean>
): Promise<boolean> {
const arrayEntriesIterator = array.entries();
for (const [index, value] of arrayEntriesIterator) {
if (!(await predicate(value, index, array))) {
return false;
}
}
return true;
}

export async function asyncSome<T>(
array: readonly T[],
predicate: (value: T, index: number, array: readonly T[]) => Promise<boolean>
): Promise<boolean> {
const arrayEntriesIterator = array.entries();
for (const [index, value] of arrayEntriesIterator) {
if (await predicate(value, index, array)) {
return true;
}
}
return false;
}
5 changes: 5 additions & 0 deletions src/utils/boolean.utils.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
import { randomSelect } from "./data.utils";

export function randomBoolean(): boolean {
return randomSelect(true, false);
}
255 changes: 255 additions & 0 deletions src/utils/country.utils.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,255 @@
const isoCountries = {
AF: "Afghanistan",
AX: "Aland Islands",
AL: "Albania",
DZ: "Algeria",
AS: "American Samoa",
AD: "Andorra",
AO: "Angola",
AI: "Anguilla",
AQ: "Antarctica",
AG: "Antigua And Barbuda",
AR: "Argentina",
AM: "Armenia",
AW: "Aruba",
AU: "Australia",
AT: "Austria",
AZ: "Azerbaijan",
BS: "Bahamas",
BH: "Bahrain",
BD: "Bangladesh",
BB: "Barbados",
BY: "Belarus",
BE: "Belgium",
BZ: "Belize",
BJ: "Benin",
BM: "Bermuda",
BT: "Bhutan",
BO: "Bolivia",
BA: "Bosnia And Herzegovina",
BW: "Botswana",
BV: "Bouvet Island",
BR: "Brazil",
IO: "British Indian Ocean Territory",
BN: "Brunei Darussalam",
BG: "Bulgaria",
BF: "Burkina Faso",
BI: "Burundi",
KH: "Cambodia",
CM: "Cameroon",
CA: "Canada",
CV: "Cape Verde",
KY: "Cayman Islands",
CF: "Central African Republic",
TD: "Chad",
CL: "Chile",
CN: "China",
CX: "Christmas Island",
CC: "Cocos (Keeling) Islands",
CO: "Colombia",
KM: "Comoros",
CG: "Congo",
CD: "Congo, Democratic Republic",
CK: "Cook Islands",
CR: "Costa Rica",
CI: "Cote D'Ivoire",
HR: "Croatia",
CU: "Cuba",
CY: "Cyprus",
CZ: "Czech Republic",
DK: "Denmark",
DJ: "Djibouti",
DM: "Dominica",
DO: "Dominican Republic",
EC: "Ecuador",
EG: "Egypt",
SV: "El Salvador",
GQ: "Equatorial Guinea",
ER: "Eritrea",
EE: "Estonia",
ET: "Ethiopia",
FK: "Falkland Islands (Malvinas)",
FO: "Faroe Islands",
FJ: "Fiji",
FI: "Finland",
FR: "France",
GF: "French Guiana",
PF: "French Polynesia",
TF: "French Southern Territories",
GA: "Gabon",
GM: "Gambia",
GE: "Georgia",
DE: "Germany",
GH: "Ghana",
GI: "Gibraltar",
GR: "Greece",
GL: "Greenland",
GD: "Grenada",
GP: "Guadeloupe",
GU: "Guam",
GT: "Guatemala",
GG: "Guernsey",
GN: "Guinea",
GW: "Guinea-Bissau",
GY: "Guyana",
HT: "Haiti",
HM: "Heard Island & Mcdonald Islands",
VA: "Holy See (Vatican City State)",
HN: "Honduras",
HK: "Hong Kong",
HU: "Hungary",
IS: "Iceland",
IN: "India",
ID: "Indonesia",
IR: "Iran, Islamic Republic Of",
IQ: "Iraq",
IE: "Ireland",
IM: "Isle Of Man",
IL: "Israel",
IT: "Italy",
JM: "Jamaica",
JP: "Japan",
JE: "Jersey",
JO: "Jordan",
KZ: "Kazakhstan",
KE: "Kenya",
KI: "Kiribati",
KR: "Korea",
KW: "Kuwait",
KG: "Kyrgyzstan",
LA: "Lao People's Democratic Republic",
LV: "Latvia",
LB: "Lebanon",
LS: "Lesotho",
LR: "Liberia",
LY: "Libyan Arab Jamahiriya",
LI: "Liechtenstein",
LT: "Lithuania",
LU: "Luxembourg",
MO: "Macao",
MK: "Macedonia",
MG: "Madagascar",
MW: "Malawi",
MY: "Malaysia",
MV: "Maldives",
ML: "Mali",
MT: "Malta",
MH: "Marshall Islands",
MQ: "Martinique",
MR: "Mauritania",
MU: "Mauritius",
YT: "Mayotte",
MX: "Mexico",
FM: "Micronesia, Federated States Of",
MD: "Moldova",
MC: "Monaco",
MN: "Mongolia",
ME: "Montenegro",
MS: "Montserrat",
MA: "Morocco",
MZ: "Mozambique",
MM: "Myanmar",
NA: "Namibia",
NR: "Nauru",
NP: "Nepal",
NL: "Netherlands",
AN: "Netherlands Antilles",
NC: "New Caledonia",
NZ: "New Zealand",
NI: "Nicaragua",
NE: "Niger",
NG: "Nigeria",
NU: "Niue",
NF: "Norfolk Island",
MP: "Northern Mariana Islands",
NO: "Norway",
OM: "Oman",
PK: "Pakistan",
PW: "Palau",
PS: "Palestinian Territory, Occupied",
PA: "Panama",
PG: "Papua New Guinea",
PY: "Paraguay",
PE: "Peru",
PH: "Philippines",
PN: "Pitcairn",
PL: "Poland",
PT: "Portugal",
PR: "Puerto Rico",
QA: "Qatar",
RE: "Reunion",
RO: "Romania",
RU: "Russian Federation",
RW: "Rwanda",
BL: "Saint Barthelemy",
SH: "Saint Helena",
KN: "Saint Kitts And Nevis",
LC: "Saint Lucia",
MF: "Saint Martin",
PM: "Saint Pierre And Miquelon",
VC: "Saint Vincent And Grenadines",
WS: "Samoa",
SM: "San Marino",
ST: "Sao Tome And Principe",
SA: "Saudi Arabia",
SN: "Senegal",
RS: "Serbia",
SC: "Seychelles",
SL: "Sierra Leone",
SG: "Singapore",
SK: "Slovakia",
SI: "Slovenia",
SB: "Solomon Islands",
SO: "Somalia",
ZA: "South Africa",
GS: "South Georgia And Sandwich Isl.",
ES: "Spain",
LK: "Sri Lanka",
SD: "Sudan",
SR: "Suriname",
SJ: "Svalbard And Jan Mayen",
SZ: "Swaziland",
SE: "Sweden",
CH: "Switzerland",
SY: "Syrian Arab Republic",
TW: "Taiwan",
TJ: "Tajikistan",
TZ: "Tanzania",
TH: "Thailand",
TL: "Timor-Leste",
TG: "Togo",
TK: "Tokelau",
TO: "Tonga",
TT: "Trinidad And Tobago",
TN: "Tunisia",
TR: "Turkey",
TM: "Turkmenistan",
TC: "Turks And Caicos Islands",
TV: "Tuvalu",
UG: "Uganda",
UA: "Ukraine",
AE: "United Arab Emirates",
GB: "United Kingdom",
US: "United States",
UM: "United States Outlying Islands",
UY: "Uruguay",
UZ: "Uzbekistan",
VU: "Vanuatu",
VE: "Venezuela",
VN: "Viet Nam",
VG: "Virgin Islands, British",
VI: "Virgin Islands, U.S.",
WF: "Wallis And Futuna",
EH: "Western Sahara",
YE: "Yemen",
ZM: "Zambia",
ZW: "Zimbabwe",
} as const;

export function getCountryName(countryCode: keyof typeof isoCountries): string {
const cc = countryCode.toUpperCase();
if (cc in isoCountries) {
return isoCountries[countryCode];
}
return cc;
}
Loading

0 comments on commit 8dab03b

Please sign in to comment.