UNPKG

@marcinkowalczyk/due-sms-counter

Version:

a counter to determine sms type and size

94 lines (79 loc) 2.69 kB
'use strict'; var _consts = require('./consts.js'); var _consts2 = _interopRequireDefault(_consts); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } } var B7_2SIZED_CHARS = _consts2.default.B7_2SIZED_CHARS, B7_BASE_CHARS = _consts2.default.B7_BASE_CHARS, B7_SMS_COUNT = _consts2.default.B7_SMS_COUNT, UNICODE_SMS_COUNT = _consts2.default.UNICODE_SMS_COUNT; var B7_CHARS = [].concat(_toConsumableArray(B7_BASE_CHARS), _toConsumableArray(B7_2SIZED_CHARS)); function uniq(array) { var uniq = []; array.forEach(function (elem) { uniq.indexOf(elem) < 0 && uniq.push(elem); }); return uniq; } function count_2chars_sized(sms) { var res = 0; sms.forEach(function (letter) { res += B7_2SIZED_CHARS.indexOf(letter) == -1 ? 0 : 1; }); return res; }; function calcSmsCount(char_count, is_unicode) { var base = is_unicode ? UNICODE_SMS_COUNT : B7_SMS_COUNT; var sms_count = 0; while (42) { if (!base[sms_count] || base[sms_count][1] >= char_count) { break; } sms_count++; } if (sms_count == 0) sms_count++; return sms_count; } function calcCharAndSmsCount(sms) { var result = calcCharCount(sms); result.sms_count = calcSmsCount(result.char_count, result.is_unicode); return result; } function calcCharCount(sms) { sms = (sms || '').split(''); var is_7_bits = uniq([].concat(_toConsumableArray(sms), _toConsumableArray(B7_CHARS))).length == B7_CHARS.length; if (is_7_bits) { return { char_count: sms.length + count_2chars_sized(sms), is_unicode: false }; } else { return { char_count: sms.length, is_unicode: true }; } } function calcMaxCharCount(sms_count) { var gsm7 = B7_SMS_COUNT[sms_count.toString()]; var unicode = UNICODE_SMS_COUNT[sms_count.toString()]; gsm7 = (gsm7 === undefined && sms_count ? B7_SMS_COUNT['max'] : gsm7)[1]; unicode = (unicode === undefined && sms_count ? UNICODE_SMS_COUNT['max'] : unicode)[1]; return { gsm7: gsm7, unicode: unicode }; } function canBeSent(sms_body, max_sms) { var char_count = calcCharCount(sms_body), max_char = calcMaxCharCount(max_sms), is_unicode = char_count.is_unicode; return char_count.char_count <= max_char[is_unicode ? 'unicode' : 'gsm7']; } module.exports = { calcCharCount: calcCharCount, calcMaxCharCount: calcMaxCharCount, canBeSent: canBeSent, calcSmsCount: calcSmsCount, calcCharAndSmsCount: calcCharAndSmsCount };