UNPKG

sms-counter-npm

Version:

Character counter for SMS messages.

58 lines 1.96 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const gsm7bitChars = `@£$¥èéùìòÇ\\nØø\\rÅåΔ_ΦΓΛΩΠΨΣΘΞÆæßÉ !\\\"#¤%&'()*+,-./0123456789:;<=>?¡ABCDEFGHIJKLMNOPQRSTUVWXYZÄÖÑܧ¿abcdefghijklmnopqrstuvwxyzäöñüà`; const gsm7bitExChar = `\\^{}\\\\\\[~\\]|€`; const gsm7bitRegExp = RegExp(`^[${gsm7bitChars}]*$`); const gsm7bitExRegExp = RegExp(`^[${gsm7bitChars + gsm7bitExChar}]*$`); const gsm7bitExOnlyRegExp = RegExp(`^[\\${gsm7bitExChar}]*$`); function detectEncoding(text) { switch (false) { case text.match(gsm7bitRegExp) === null: return exports.GSM_7BIT; case text.match(gsm7bitExRegExp) === null: return exports.GSM_7BIT_EX; default: return exports.UTF16; } } function countGsm7bitEx(text) { const results = []; for (const char of text) { if (char.match(gsm7bitExOnlyRegExp) !== null) { results.push(char); } } return results.length; } exports.GSM_7BIT = 'GSM_7BIT'; exports.GSM_7BIT_EX = 'GSM_7BIT_EX'; exports.UTF16 = 'UTF16'; exports.messageLength = { GSM_7BIT: 160, GSM_7BIT_EX: 160, UTF16: 70, }; exports.multiMessageLength = { GSM_7BIT: 153, GSM_7BIT_EX: 153, UTF16: 67, }; function count(text) { const encoding = detectEncoding(text); let length = text.length; if (encoding === exports.GSM_7BIT_EX) { length += countGsm7bitEx(text); } let perMessage = exports.messageLength[encoding]; if (length > perMessage) { perMessage = exports.multiMessageLength[encoding]; } const messages = Math.ceil(length / perMessage); let remaining = (perMessage * messages) - length; if (remaining === 0 && messages === 0) { remaining = perMessage; } return { encoding, length, per_message: perMessage, remaining, messages }; } exports.count = count; //# sourceMappingURL=SmsCounter.js.map