UNPKG

jspos

Version:

JavaScript ISO8583 ,JavaScript version of JPOS

225 lines (188 loc) 9.79 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); var _ISOUtil = require('./ISOUtil'); var _ISOUtil2 = _interopRequireDefault(_ISOUtil); var _ISOComponent2 = require('./ISOComponent'); var _ISOComponent3 = _interopRequireDefault(_ISOComponent2); var _ISOField = require('./ISOField'); var _ISOField2 = _interopRequireDefault(_ISOField); var _ISOHeader = require('./ISOHeader'); var _ISOHeader2 = _interopRequireDefault(_ISOHeader); var _ISOBasePackager = require('./ISOBasePackager'); var _ISOBasePackager2 = _interopRequireDefault(_ISOBasePackager); var _ISOBinaryFieldPackager = require('./packer/ISOBinaryFieldPackager'); var _ISOBinaryFieldPackager2 = _interopRequireDefault(_ISOBinaryFieldPackager); var _ISOBinaryField = require('./ISOBinaryField'); var _ISOBinaryField2 = _interopRequireDefault(_ISOBinaryField); var _BitSet = require('jsdk/util/BitSet'); var _BitSet2 = _interopRequireDefault(_BitSet); var _ISOBitMap = require('./ISOBitMap'); var _ISOBitMap2 = _interopRequireDefault(_ISOBitMap); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /** * ISO Msg * @author Sean sean.snow@live.com * @date 2015/12/22 */ var ISOMsg = function (_ISOComponent) { _inherits(ISOMsg, _ISOComponent); function ISOMsg() { var _ref; var _temp, _this, _ret; _classCallCheck(this, ISOMsg); for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_ref = ISOMsg.__proto__ || Object.getPrototypeOf(ISOMsg)).call.apply(_ref, [this].concat(args))), _this), _this.fields = {}, _this.maxField = -1, _this.dirty = true, _this.maxFieldDirty = true, _this.direction = 0, _this.header = null, _this.trailer = null, _this.fieldNumber = -1, _this.packager = null, _temp), _possibleConstructorReturn(_this, _ret); } _createClass(ISOMsg, [{ key: 'setPackager', value: function setPackager(packager) { this.packager = packager; } }, { key: 'setFieldNumber', value: function setFieldNumber(fieldNumber) { this.fieldNumber = fieldNumber; } }, { key: 'setMTI', value: function setMTI(mti) { if (this.isInnter()) { throw Error('can\'t setMTI on inner message'); } this.set(new _ISOField2.default(0, mti)); } }, { key: 'isInnter', value: function isInnter() { return this.fieldNumber > -1; } }, { key: 'set', value: function set(c) { if (c != null) { var i = c.getKey(); this.fields[i] = c; if (i > this.maxField) { this.maxField = i; } this.dirty = true; } } }, { key: 'unset', value: function unset(fldno) { if (this.fields[fldno] != null) { this.dirty = this.maxFieldDirty = true; delete this.fields[fldno]; } } }, { key: 'setField', value: function setField(fldno, value) { if (value != null) { if (!(this.packager instanceof _ISOBasePackager2.default)) { this.set(new _ISOField2.default(fldno, value)); } else { var obj = this.packager.getFieldPackager(fldno); if (obj instanceof _ISOBinaryFieldPackager2.default) { this.set(new _ISOBinaryField2.default(fldno, _ISOUtil2.default.hex2byte(value))); } else { this.set(new _ISOField2.default(fldno, value)); } } } else { this.unset(fldno); } } }, { key: 'getMTI', value: function getMTI() { return this.getValue(0); } }, { key: 'getValue', value: function getValue(fldno) { var field = this.fields[fldno]; return field ? field.getValue() : undefined; } }, { key: 'getComposite', value: function getComposite() { //noinspection JSValidateTypes return this; } }, { key: 'getChildren', value: function getChildren() { return this.fields; } }, { key: 'setHeader', value: function setHeader(header) { this.header = header; } }, { key: 'getHeader', value: function getHeader() { return this.header != null ? this.header.pack() : null; } }, { key: 'getMaxField', value: function getMaxField() { if (this.maxFieldDirty) { this._recalcMaxField(); } return this.maxField; } }, { key: 'pack', value: function pack() { this._recalcBitMap(); return this.packager.pack(this); } }, { key: 'unpack', value: function unpack(b) { return this.packager.unpack(this, b); } }, { key: '_recalcBitMap', value: function _recalcBitMap() { if (!this.dirty) { return; } var mf = Math.min(this.getMaxField(), 192); var bmap = new _BitSet2.default(mf + 62 >> 6 << 6); for (var i = 1; i <= mf; i++) { if (this.fields[i] != null) { bmap.set(i); } } this.set(new _ISOBitMap2.default(-1, bmap)); this.dirty = false; } /** * * @private */ }, { key: '_recalcMaxField', value: function _recalcMaxField() { var _this2 = this; this.maxField = 0; Object.keys(this.fields).forEach(function (key) { _this2.maxField = Math.max(_this2.maxField, Number(key)); }); this.maxFieldDirty = false; } }]); return ISOMsg; }(_ISOComponent3.default); exports.default = ISOMsg;