@marcinkowalczyk/due-sms-counter
Version:
a counter to determine sms type and size
94 lines (79 loc) • 2.69 kB
JavaScript
;
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
};