UNPKG

rondonjon-fintech-datatypes

Version:

A collection of TypeScript datatypes and typeguards for use in FinTech applications

571 lines (559 loc) 7.44 kB
"use strict"; var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __hasOwnProp = Object.prototype.hasOwnProperty; var __export = (target, all) => { for (var name in all) __defProp(target, name, { get: all[name], enumerable: true }); }; var __copyProps = (to, from, except, desc) => { if (from && typeof from === "object" || typeof from === "function") { for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); } return to; }; var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); // src/index.ts var src_exports = {}; __export(src_exports, { isAssetId: () => isAssetId, isAssetType: () => isAssetType, isIsin: () => isIsin, isIsoCountryA2: () => isIsoCountryA2, isIsoCurrencyA3: () => isIsoCurrencyA3, isIsoDate: () => isIsoDate, isIsoTime: () => isIsoTime, isWkn: () => isWkn }); module.exports = __toCommonJS(src_exports); // 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; // Annotate the CommonJS export names for ESM import in node: 0 && (module.exports = { isAssetId, isAssetType, isIsin, isIsoCountryA2, isIsoCurrencyA3, isIsoDate, isIsoTime, isWkn }); //# sourceMappingURL=index.js.map