@ringring/gsm
Version:
A utility library for short messages and mobile communication
75 lines • 2.5 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.unicodeReplace = exports.characterCount = exports.createParts = void 0;
const gsm = require("gsm");
const constants_1 = require("./constants");
/**
* Create message terminated (MT) parts to be sent to SMPPP linkers
*
* @param body message as string
* @param opts optional options (unicode: boolean)
* @returns {string[]} array of strings
*
* @example
* createParts('Hello World') // ['Hello World']
*/
function createParts(body, opts) {
const parts = gsm(body);
if (opts?.unicode && body.length > 70) {
parts.sms_count = Math.ceil(body.length / 67);
// eslint-disable-next-line no-plusplus
for (let i = 0; i < parts.sms_count; i++) {
parts.parts[i] = body.substring(i * 67, (i + 1) * 67);
}
}
return parts.parts;
}
exports.createParts = createParts;
/**
* Return the character length of given content
*
*
* @see [String.length](https://mdn.io/Reference/Global_Objects/String/length)
*
* @example
* characterCount('€') // 2 (GSM 03.38, 7bit)
* characterCount('€', { unicode: true }) // 1 (UCS2, unicode)
*
* @param content message content
* @param opts.unicode boolean, if true, count as unicode instead of GSM 03.38
* @param opts.unicode boolean, if true, count as unicode instead of GSM 03.38
*/
function characterCount(content, opts) {
return content
.split('')
.map((char) => {
const count = opts?.unicode ? 1 : constants_1.charset7bit[char] || 1;
return count;
})
.reduce((acc, value) => acc + value, 0);
}
exports.characterCount = characterCount;
/**
* Replace invalid unicode characters with sane equivalence or question mark (?)
*
* @example
* // character with sane replacements
* unicodeReplace('ýô') // 'yo'
* // Invalid characters
* unicodeReplace('A你Z') // 'A??Z'
* // Valid characters
* unicodeReplace('ΘΞÆæß') // 'ΘΞÆæß'
*
* @param content message content
*/
function unicodeReplace(content) {
let parsed = content;
const regex = /[^a-zA-Z' \d@£$¥èéùìòÇ\nØø\rÅåΔ_ΦΓΛΩΠΨΣΘΞÆæßÉ!"#¤%&()*+,\-./:;<=>?¡ÄÖÑܧ¿äöñüà\f^{}\\[~\]|€]/gm;
Object.keys(constants_1.GSM_MAP).forEach((c) => {
parsed = parsed.replaceAll(c, constants_1.GSM_MAP[c]);
});
parsed = parsed.replace(regex, '?');
return parsed;
}
exports.unicodeReplace = unicodeReplace;
//# sourceMappingURL=index.js.map