UNPKG

@uiowa/uiowa-mfk-material

Version:

mfk, uiowa-mfk

253 lines 16.7 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ /** * Uiowa MFK Type * * class type contains 10 required MFK fields and 1 optional BFR field. * there are also several common methods ready to use. */ var /** * Uiowa MFK Type * * class type contains 10 required MFK fields and 1 optional BFR field. * there are also several common methods ready to use. */ Mfk = /** @class */ (function () { /** * Uiowa MFK. constructor takes a MFK string. * * Non-numeric characters will be stripped out automatically. * * Example usages: * ```typescript * let m1 = new Mfk(); * const m2 = new Mfk('010-11-1010-00000-00000000-6218-000-00000-00-1111'); * const m3 = new Mfk('0201210120100100000000621900000111123555'); * ``` */ function Mfk(mfkString) { if (mfkString === void 0) { mfkString = null; } this.FUND = ''; this.ORG = ''; this.DEPT = ''; this.SUBDEPT = ''; this.GRANTPGM = ''; this.IACT = ''; this.OACT = ''; this.DACT = ''; this.FN = ''; this.CCTR = ''; this.BRF = ''; if (mfkString) { this.parseString(mfkString); } } /** * cast an object to type of MFK * * --> plain JSON object doesn't have type at run time. */ /** * cast an object to type of MFK * * --> plain JSON object doesn't have type at run time. * @param {?} obj * @return {?} */ Mfk.cast = /** * cast an object to type of MFK * * --> plain JSON object doesn't have type at run time. * @param {?} obj * @return {?} */ function (obj) { /** @type {?} */ var mfk = new Mfk(); Object.keys(obj).forEach((/** * @param {?} key * @return {?} */ function (key) { return (mfk[key.toUpperCase()] = obj[key]); })); return mfk; }; /** * Compare values of all 10 fields * * @param mfk An MFK */ /** * Compare values of all 10 fields * * @param {?} mfk An MFK * @return {?} */ Mfk.prototype.equals = /** * Compare values of all 10 fields * * @param {?} mfk An MFK * @return {?} */ function (mfk) { return (this.FUND === mfk.FUND && this.ORG === mfk.ORG && this.DEPT === mfk.DEPT && this.SUBDEPT === mfk.SUBDEPT && this.GRANTPGM === mfk.GRANTPGM && this.IACT === mfk.IACT && this.DACT === mfk.DACT && this.OACT === mfk.OACT && this.FN === mfk.FN && this.CCTR === mfk.CCTR); }; /** * convert MFK to a 40 digit string. * @param separator (Optional) the separator between MFK parts. Default: "". * @returns MFK string */ /** * convert MFK to a 40 digit string. * @param {?=} separator (Optional) the separator between MFK parts. Default: "". * @return {?} MFK string */ Mfk.prototype.to40String = /** * convert MFK to a 40 digit string. * @param {?=} separator (Optional) the separator between MFK parts. Default: "". * @return {?} MFK string */ function (separator) { var _this = this; if (separator === void 0) { separator = ''; } return Object.keys(this) .filter((/** * @param {?} k * @return {?} */ function (k) { return k !== 'BRF'; })) .map((/** * @param {?} k * @return {?} */ function (k) { return _this[k]; })) .join(separator); }; /** * Get MFK format validation message. It checkes this MFK's first 10 fields are numeric strings or not. */ /** * Get MFK format validation message. It checkes this MFK's first 10 fields are numeric strings or not. * @return {?} */ Mfk.prototype.validateFormat = /** * Get MFK format validation message. It checkes this MFK's first 10 fields are numeric strings or not. * @return {?} */ function () { /** @type {?} */ var mfkString = this.to40String(); if (mfkString.length !== 40) { return "MFK is not 40 digits long."; } if (isNaN(Number(mfkString))) { return "MFK [" + mfkString + "] should be all numbers."; } return null; }; /** * check if this MFK is in an array of Favorite MFKs. * * @param favoriteMfks an array of Favorite MFKs. * @returns boolean */ /** * check if this MFK is in an array of Favorite MFKs. * * @param {?} favoriteMfks an array of Favorite MFKs. * @return {?} boolean */ Mfk.prototype.isIn = /** * check if this MFK is in an array of Favorite MFKs. * * @param {?} favoriteMfks an array of Favorite MFKs. * @return {?} boolean */ function (favoriteMfks) { var _this = this; if (!favoriteMfks || favoriteMfks.length < 1) { return false; } return favoriteMfks.some((/** * @param {?} x * @return {?} */ function (x) { return x.matches(_this); })); }; /** * MFK module internal method. */ /** * MFK module internal method. * @param {?} input * @return {?} */ Mfk.prototype.parseString = /** * MFK module internal method. * @param {?} input * @return {?} */ function (input) { /** @type {?} */ var s = input.replace(/\D/g, ''); if (!s || s.length < 40) { return; } this.FUND = s.substring(0, 3); this.ORG = s.substring(3, 5); this.DEPT = s.substring(5, 9); this.SUBDEPT = s.substring(9, 14); this.GRANTPGM = s.substring(14, 22); this.IACT = s.substring(22, 26); this.OACT = s.substring(26, 29); this.DACT = s.substring(29, 34); this.FN = s.substring(34, 36); this.CCTR = s.substring(36, 40); if (s.length >= 42) { this.BRF = s.substring(40, 42); } }; return Mfk; }()); /** * Uiowa MFK Type * * class type contains 10 required MFK fields and 1 optional BFR field. * there are also several common methods ready to use. */ export { Mfk }; if (false) { /** @type {?} */ Mfk.prototype.FUND; /** @type {?} */ Mfk.prototype.ORG; /** @type {?} */ Mfk.prototype.DEPT; /** @type {?} */ Mfk.prototype.SUBDEPT; /** @type {?} */ Mfk.prototype.GRANTPGM; /** @type {?} */ Mfk.prototype.IACT; /** @type {?} */ Mfk.prototype.OACT; /** @type {?} */ Mfk.prototype.DACT; /** @type {?} */ Mfk.prototype.FN; /** @type {?} */ Mfk.prototype.CCTR; /** @type {?} */ Mfk.prototype.BRF; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWZrLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHVpb3dhL3Vpb3dhLW1may1tYXRlcmlhbC8iLCJzb3VyY2VzIjpbImxpYi9tb2RlbHMvbWZrLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFTQTs7Ozs7OztJQWFFOzs7Ozs7Ozs7OztPQVdHO0lBQ0gsYUFBWSxTQUF3QjtRQUF4QiwwQkFBQSxFQUFBLGdCQUF3QjtRQXhCcEMsU0FBSSxHQUFHLEVBQUUsQ0FBQztRQUNWLFFBQUcsR0FBRyxFQUFFLENBQUM7UUFDVCxTQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ1YsWUFBTyxHQUFHLEVBQUUsQ0FBQztRQUNiLGFBQVEsR0FBRyxFQUFFLENBQUM7UUFDZCxTQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ1YsU0FBSSxHQUFHLEVBQUUsQ0FBQztRQUNWLFNBQUksR0FBRyxFQUFFLENBQUM7UUFDVixPQUFFLEdBQUcsRUFBRSxDQUFDO1FBQ1IsU0FBSSxHQUFHLEVBQUUsQ0FBQztRQUNWLFFBQUcsR0FBRyxFQUFFLENBQUM7UUFlUCxJQUFJLFNBQVMsRUFBRTtZQUNiLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUM7U0FDN0I7SUFDSCxDQUFDO0lBRUQ7Ozs7T0FJRzs7Ozs7Ozs7SUFDSSxRQUFJOzs7Ozs7O0lBQVgsVUFBWSxHQUFROztZQUNaLEdBQUcsR0FBRyxJQUFJLEdBQUcsRUFBRTtRQUNyQixNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU87Ozs7UUFBQyxVQUFBLEdBQUcsSUFBSSxPQUFBLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFuQyxDQUFtQyxFQUFDLENBQUM7UUFDckUsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBRUQ7Ozs7T0FJRzs7Ozs7OztJQUNILG9CQUFNOzs7Ozs7SUFBTixVQUFPLEdBQVE7UUFDYixP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LENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDaEMsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNoQyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQzlCLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDaEMsSUFBSSxDQUFDLENBQUMsTUFBTSxJQUFJLEVBQUUsRUFBRTtZQUNsQixJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1NBQ2hDO0lBQ0gsQ0FBQztJQUNILFVBQUM7QUFBRCxDQUFDLEFBM0hELElBMkhDOzs7Ozs7Ozs7O0lBMUhDLG1CQUFVOztJQUNWLGtCQUFTOztJQUNULG1CQUFVOztJQUNWLHNCQUFhOztJQUNiLHVCQUFjOztJQUNkLG1CQUFVOztJQUNWLG1CQUFVOztJQUNWLG1CQUFVOztJQUNWLGlCQUFROztJQUNSLG1CQUFVOztJQUNWLGtCQUFTIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRmF2b3JpdGVNZmsgfSBmcm9tICcuL2Zhdm9yaXRlLW1mayc7XHJcbmltcG9ydCB7IElNZmsgfSBmcm9tICcuL21may5pbnRlcmZhY2UnO1xyXG5cclxuLyoqXHJcbiAqIFVpb3dhIE1GSyBUeXBlXHJcbiAqXHJcbiAqIGNsYXNzIHR5cGUgY29udGFpbnMgMTAgcmVxdWlyZWQgTUZLIGZpZWxkcyBhbmQgMSBvcHRpb25hbCBCRlIgZmllbGQuXHJcbiAqIHRoZXJlIGFyZSBhbHNvIHNldmVyYWwgY29tbW9uIG1ldGhvZHMgcmVhZHkgdG8gdXNlLlxyXG4gKi9cclxuZXhwb3J0IGNsYXNzIE1mayBpbXBsZW1lbnRzIElNZmsge1xyXG4gIEZVTkQgPSAnJztcclxuICBPUkcgPSAnJztcclxuICBERVBUID0gJyc7XHJcbiAgU1VCREVQVCA9ICcnO1xyXG4gIEdSQU5UUEdNID0gJyc7XHJcbiAgSUFDVCA9ICcnO1xyXG4gIE9BQ1QgPSAnJztcclxuICBEQUNUID0gJyc7XHJcbiAgRk4gPSAnJztcclxuICBDQ1RSID0gJyc7XHJcbiAgQlJGID0gJyc7XHJcblxyXG4gIC8qKlxyXG4gICAqIFVpb3dhIE1GSy4gY29uc3RydWN0b3IgdGFrZXMgYSBNRksgc3RyaW5nLlxyXG4gICAqXHJcbiAgICogTm9uLW51bWVyaWMgY2hhcmFjdGVycyB3aWxsIGJlIHN0cmlwcGVkIG91dCBhdXRvbWF0aWNhbGx5LlxyXG4gICAqXHJcbiAgICogRXhhbXBsZSB1c2FnZXM6XHJcbiAgICogYGBgdHlwZXNjcmlwdFxyXG4gICAqIGxldCBtMSA9IG5ldyBNZmsoKTtcclxuICAgKiBjb25zdCBtMiA9IG5ldyBNZmsoJzAxMC0xMS0xMDEwLTAwMDAwLTAwMDAwMDAwLTYyMTgtMDAwLTAwMDAwLTAwLTExMTEnKTtcclxuICAgKiBjb25zdCBtMyA9IG5ldyBNZmsoJzAyMDEyMTAxMjAxMDAxMDAwMDAwMDA2MjE5MDAwMDAxMTExMjM1NTUnKTtcclxuICAgKiBgYGBcclxuICAgKi9cclxuICBjb25zdHJ1Y3RvcihtZmtTdHJpbmc6IHN0cmluZyA9IG51bGwpIHtcclxuICAgIGlmIChtZmtTdHJpbmcpIHtcclxuICAgICAgdGhpcy5wYXJzZVN0cmluZyhtZmtTdHJpbmcpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogY2FzdCBhbiBvYmplY3QgdG8gdHlwZSBvZiBNRktcclxuICAgKlxyXG4gICAqIC0tPiBwbGFpbiBKU09OIG9iamVjdCBkb2Vzbid0IGhhdmUgdHlwZSBhdCBydW4gdGltZS5cclxuICAgKi9cclxuICBzdGF0aWMgY2FzdChvYmo6IGFueSk6IE1mayB7XHJcbiAgICBjb25zdCBtZmsgPSBuZXcgTWZrKCk7XHJcbiAgICBPYmplY3Qua2V5cyhvYmopLmZvckVhY2goa2V5ID0+IChtZmtba2V5LnRvVXBwZXJDYXNlKCldID0gb2JqW2tleV0pKTtcclxuICAgIHJldHVybiBtZms7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDb21wYXJlIHZhbHVlcyBvZiBhbGwgMTAgZmllbGRzXHJcbiAgICpcclxuICAgKiBAcGFyYW0gbWZrIEFuIE1GS1xyXG4gICAqL1xyXG4gIGVxdWFscyhtZms6IE1mayk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgdGhpcy5GVU5EID09PSBtZmsuRlVORCAmJlxyXG4gICAgICB0aGlzLk9SRyA9PT0gbWZrLk9SRyAmJlxyXG4gICAgICB0aGlzLkRFUFQgPT09IG1may5ERVBUICYmXHJcbiAgICAgIHRoaXMuU1VCREVQVCA9PT0gbWZrLlNVQkRFUFQgJiZcclxuICAgICAgdGhpcy5HUkFOVFBHTSA9PT0gbWZrLkdSQU5UUEdNICYmXHJcbiAgICAgIHRoaXMuSUFDVCA9PT0gbWZrLklBQ1QgJiZcclxuICAgICAgdGhpcy5EQUNUID09PSBtZmsuREFDVCAmJlxyXG4gICAgICB0aGlzLk9BQ1QgPT09IG1may5PQUNUICYmXHJcbiAgICAgIHRoaXMuRk4gPT09IG1may5GTiAmJlxyXG4gICAgICB0aGlzLkNDVFIgPT09IG1may5DQ1RSXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogY29udmVydCBNRksgdG8gYSA0MCBkaWdpdCBzdHJpbmcuXHJcbiAgICogQHBhcmFtICAgc2VwYXJhdG9yICAgKE9wdGlvbmFsKSB0aGUgc2VwYXJhdG9yIGJldHdlZW4gTUZLIHBhcnRzLiBEZWZhdWx0OiBcIlwiLlxyXG4gICAqIEByZXR1cm5zIE1GSyBzdHJpbmdcclxuICAgKi9cclxuICB0bzQwU3RyaW5nKHNlcGFyYXRvcjogc3RyaW5nID0gJycpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMpXHJcbiAgICAgIC5maWx0ZXIoKGs6IGtleW9mIElNZmspID0+IGsgIT09ICdCUkYnKVxyXG4gICAgICAubWFwKGsgPT4gdGhpc1trXSlcclxuICAgICAgLmpvaW4oc2VwYXJhdG9yKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldCBNRksgZm9ybWF0IHZhbGlkYXRpb24gbWVzc2FnZS4gSXQgY2hlY2tlcyB0aGlzIE1GSydzIGZpcnN0IDEwIGZpZWxkcyBhcmUgbnVtZXJpYyBzdHJpbmdzIG9yIG5vdC5cclxuICAgKi9cclxuICB2YWxpZGF0ZUZvcm1hdCgpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgbWZrU3RyaW5nID0gdGhpcy50bzQwU3RyaW5nKCk7XHJcbiAgICBpZiAobWZrU3RyaW5nLmxlbmd0aCAhPT0gNDApIHtcclxuICAgICAgcmV0dXJuIGBNRksgaXMgbm90IDQwIGRpZ2l0cyBsb25nLmA7XHJcbiAgICB9XHJcbiAgICBpZiAoaXNOYU4oTnVtYmVyKG1ma1N0cmluZykpKSB7XHJcbiAgICAgIHJldHVybiBgTUZLIFske21ma1N0cmluZ31dIHNob3VsZCBiZSBhbGwgbnVtYmVycy5gO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBjaGVjayBpZiB0aGlzIE1GSyBpcyBpbiBhbiBhcnJheSBvZiBGYXZvcml0ZSBNRktzLlxyXG4gICAqXHJcbiAgICogQHBhcmFtICAgZmF2b3JpdGVNZmtzICAgYW4gYXJyYXkgb2YgRmF2b3JpdGUgTUZLcy5cclxuICAgKiBAcmV0dXJucyBib29sZWFuXHJcbiAgICovXHJcbiAgaXNJbihmYXZvcml0ZU1ma3M6IEZhdm9yaXRlTWZrW10pOiBib29sZWFuIHtcclxuICAgIGlmICghZmF2b3JpdGVNZmtzIHx8IGZhdm9yaXRlTWZrcy5sZW5ndGggPCAxKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIHJldHVybiBmYXZvcml0ZU1ma3Muc29tZSh4ID0+IHgubWF0Y2hlcyh0aGlzKSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNRksgbW9kdWxlIGludGVybmFsIG1ldGhvZC5cclxuICAgKi9cclxuICBwYXJzZVN0cmluZyhpbnB1dDogc3RyaW5nKSB7XHJcbiAgICBjb25zdCBzID0gaW5wdXQucmVwbGFjZSgvXFxEL2csICcnKTtcclxuICAgIGlmICghcyB8fCBzLmxlbmd0aCA8IDQwKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuRlVORCA9IHMuc3Vic3RyaW5nKDAsIDMpO1xyXG4gICAgdGhpcy5PUkcgPSBzLnN1YnN0cmluZygzLCA1KTtcclxuICAgIHRoaXMuREVQVCA9IHMuc3Vic3RyaW5nKDUsIDkpO1xyXG4gICAgdGhpcy5TVUJERVBUID0gcy5zdWJzdHJpbmcoOSwgMTQpO1xyXG4gICAgdGhpcy5HUkFOVFBHTSA9IHMuc3Vic3RyaW5nKDE0LCAyMik7XHJcbiAgICB0aGlzLklBQ1QgPSBzLnN1YnN0cmluZygyMiwgMjYpO1xyXG4gICAgdGhpcy5PQUNUID0gcy5zdWJzdHJpbmcoMjYsIDI5KTtcclxuICAgIHRoaXMuREFDVCA9IHMuc3Vic3RyaW5nKDI5LCAzNCk7XHJcbiAgICB0aGlzLkZOID0gcy5zdWJzdHJpbmcoMzQsIDM2KTtcclxuICAgIHRoaXMuQ0NUUiA9IHMuc3Vic3RyaW5nKDM2LCA0MCk7XHJcbiAgICBpZiAocy5sZW5ndGggPj0gNDIpIHtcclxuICAgICAgdGhpcy5CUkYgPSBzLnN1YnN0cmluZyg0MCwgNDIpO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iXX0=