rondonjon-fintech-datatypes
Version:
A collection of TypeScript datatypes and typeguards for use in FinTech applications
537 lines (527 loc) • 6.2 kB
JavaScript
// src/lists/assetTypes.ts
var assetTypes = ["M", "S", "C"];
// src/typeguards/isAssetType.ts
var isAssetType = (s) => assetTypes.includes(s);
// src/lists/iso-country-alpha2.generated.ts
var codes = [
"AF",
"AL",
"DZ",
"AS",
"AD",
"AO",
"AI",
"AQ",
"AG",
"AR",
"AM",
"AW",
"AU",
"AT",
"AZ",
"BS",
"BH",
"BD",
"BB",
"BY",
"BE",
"BZ",
"BJ",
"BM",
"BT",
"BO",
"BA",
"BW",
"BV",
"BR",
"IO",
"BN",
"BG",
"BF",
"BI",
"KH",
"CM",
"CA",
"CV",
"KY",
"CF",
"TD",
"CL",
"CN",
"CX",
"CC",
"CO",
"KM",
"CG",
"CD",
"CK",
"CR",
"CI",
"HR",
"CU",
"CY",
"CZ",
"DK",
"DJ",
"DM",
"DO",
"EC",
"EG",
"SV",
"GQ",
"ER",
"EE",
"ET",
"FK",
"FO",
"FJ",
"FI",
"FR",
"GF",
"PF",
"TF",
"GA",
"GM",
"GE",
"DE",
"GH",
"GI",
"GR",
"GL",
"GD",
"GP",
"GU",
"GT",
"GN",
"GW",
"GY",
"HT",
"HM",
"VA",
"HN",
"HK",
"HU",
"IS",
"IN",
"ID",
"IR",
"IQ",
"IE",
"IL",
"IT",
"JM",
"JP",
"JO",
"KZ",
"KE",
"KI",
"KP",
"KR",
"KW",
"KG",
"LA",
"LV",
"LB",
"LS",
"LR",
"LY",
"LI",
"LT",
"LU",
"MO",
"MG",
"MW",
"MY",
"MV",
"ML",
"MT",
"MH",
"MQ",
"MR",
"MU",
"YT",
"MX",
"FM",
"MD",
"MC",
"MN",
"MS",
"MA",
"MZ",
"MM",
"NA",
"NR",
"NP",
"NL",
"NC",
"NZ",
"NI",
"NE",
"NG",
"NU",
"NF",
"MP",
"MK",
"NO",
"OM",
"PK",
"PW",
"PS",
"PA",
"PG",
"PY",
"PE",
"PH",
"PN",
"PL",
"PT",
"PR",
"QA",
"RE",
"RO",
"RU",
"RW",
"SH",
"KN",
"LC",
"PM",
"VC",
"WS",
"SM",
"ST",
"SA",
"SN",
"SC",
"SL",
"SG",
"SK",
"SI",
"SB",
"SO",
"ZA",
"GS",
"ES",
"LK",
"SD",
"SR",
"SJ",
"SZ",
"SE",
"CH",
"SY",
"TW",
"TJ",
"TZ",
"TH",
"TL",
"TG",
"TK",
"TO",
"TT",
"TN",
"TR",
"TM",
"TC",
"TV",
"UG",
"UA",
"AE",
"GB",
"US",
"UM",
"UY",
"UZ",
"VU",
"VE",
"VN",
"VG",
"VI",
"WF",
"EH",
"YE",
"ZM",
"ZW",
"AX",
"BQ",
"CW",
"GG",
"IM",
"JE",
"ME",
"BL",
"MF",
"RS",
"SX",
"SS",
"XK"
];
// src/typeguards/isIsoCountryA2.ts
var isIsoCountryA2 = (s) => codes.includes(s);
// src/typeguards/isIsin.ts
var calculateCheckDigit = (isinCountryCode, nsin) => {
const s = isinCountryCode + nsin;
const mapIsinDigits = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
let m = "";
for (let i = 0; i < s.length; i++) {
m += mapIsinDigits.indexOf(s[i]);
}
const parity = m.length & 1;
let n = "";
for (let i = 0; i < m.length; i++) {
n += Number(m[i]) * ((i & 1) === parity ? 1 : 2);
}
let o = 0;
for (let i = 0; i < n.length; i++) {
o += Number(n[i]);
}
return (10 - o % 10) % 10;
};
var isIsin = (s) => {
const parts = s == null ? void 0 : s.match(/^([A-Z]{2})([0-9A-Z]{9})([0-9]{1})$/);
if (!parts) {
return false;
}
const [, cc, nsin, cd] = parts;
const PSEUDO_COUNTRY_CODES = ["XS", "XA", "XB", "XC", "XD", "XF", "QS", "QT", "QW", "EU"];
if (!isIsoCountryA2(cc) && !PSEUDO_COUNTRY_CODES.includes(cc)) {
return false;
}
const ccd = calculateCheckDigit(cc, nsin);
if (Number(cd) !== ccd) {
return false;
}
return true;
};
// src/lists/iso-currency-alpha3.generated.ts
var codes2 = [
"AED",
"AFN",
"ALL",
"AMD",
"ANG",
"AOA",
"ARS",
"AUD",
"AWG",
"AZN",
"BAM",
"BBD",
"BDT",
"BGN",
"BHD",
"BIF",
"BMD",
"BND",
"BOB",
"BOV",
"BRL",
"BSD",
"BTN",
"BWP",
"BYN",
"BZD",
"CAD",
"CDF",
"CHE",
"CHF",
"CHW",
"CLF",
"CLP",
"CNY",
"COP",
"COU",
"CRC",
"CUC",
"CUP",
"CVE",
"CZK",
"DJF",
"DKK",
"DOP",
"DZD",
"EGP",
"ERN",
"ETB",
"EUR",
"FJD",
"FKP",
"GBP",
"GEL",
"GHS",
"GIP",
"GMD",
"GNF",
"GTQ",
"GYD",
"HKD",
"HNL",
"HRK",
"HTG",
"HUF",
"IDR",
"ILS",
"INR",
"IQD",
"IRR",
"ISK",
"JMD",
"JOD",
"JPY",
"KES",
"KGS",
"KHR",
"KMF",
"KPW",
"KRW",
"KWD",
"KYD",
"KZT",
"LAK",
"LBP",
"LKR",
"LRD",
"LSL",
"LYD",
"MAD",
"MDL",
"MGA",
"MKD",
"MMK",
"MNT",
"MOP",
"MRU",
"MUR",
"MVR",
"MWK",
"MXN",
"MXV",
"MYR",
"MZN",
"NAD",
"NGN",
"NIO",
"NOK",
"NPR",
"NZD",
"OMR",
"PAB",
"PEN",
"PGK",
"PHP",
"PKR",
"PLN",
"PYG",
"QAR",
"RON",
"RSD",
"RUB",
"RWF",
"SAR",
"SBD",
"SCR",
"SDG",
"SEK",
"SGD",
"SHP",
"SLL",
"SOS",
"SRD",
"SSP",
"STN",
"SVC",
"SYP",
"SZL",
"THB",
"TJS",
"TMT",
"TND",
"TOP",
"TRY",
"TTD",
"TWD",
"TZS",
"UAH",
"UGX",
"USD",
"USN",
"UYI",
"UYU",
"UYW",
"UZS",
"VES",
"VND",
"VUV",
"WST",
"XAF",
"XAG",
"XAU",
"XBA",
"XBB",
"XBC",
"XBD",
"XCD",
"XDR",
"XOF",
"XPD",
"XPF",
"XPT",
"XSU",
"XTS",
"XUA",
"XXX",
"YER",
"ZAR",
"ZMW",
"ZWL"
];
// src/typeguards/isIsoCurrencyA3.ts
var isIsoCurrencyA3 = (s) => codes2.includes(s);
// src/typeguards/isAssetId.ts
var isAssetId = (s) => {
const type = s.charAt(0);
if (!isAssetType(type)) {
return false;
}
const code = s.substring(2);
if (type === "M") {
return isIsoCurrencyA3(code);
} else if (type === "S") {
return isIsin(code);
} else {
return code.match(/^[A-Z]{1,5}$/) !== null;
}
};
// src/typeguards/isIsoDate.ts
var isIsoDate = (s) => {
const match = s && s.match(/^([0-9]{4})-([0-9]{2})-([0-9]{2})$/);
if (!match) {
return false;
}
const parsedDate = new Date(s);
if (Number.isNaN(parsedDate.getTime())) {
return false;
}
const calendarDay = parsedDate.toISOString().substring(0, 10);
if (calendarDay !== s) {
return false;
}
return true;
};
// src/typeguards/isIsoTime.ts
var isIsoTime = (s) => {
const match = s.match(/^([0-2][0-9]):[0-5][0-9]$/);
return match !== null && Number(match[1]) <= 23;
};
// src/typeguards/isWkn.ts
var isWkn = (s) => s.match(/^[A-Z0-9]{6}$/) !== null;
export {
isAssetId,
isAssetType,
isIsin,
isIsoCountryA2,
isIsoCurrencyA3,
isIsoDate,
isIsoTime,
isWkn
};
//# sourceMappingURL=index.mjs.map