@uiowa/uiowa-mfk-material
Version:
mfk, uiowa-mfk
253 lines • 16.7 kB
JavaScript
/**
* @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=