blob: 583a51696b4b0e9259c1ff81583e7824cc793a1a [file] [log] [blame]
var REGEX_SYMBOLS, punycode, stripAnsi;
punycode = require('punycode');
stripAnsi = require('strip-ansi');
REGEX_SYMBOLS = /([\0-\u02FF\u0370-\u1DBF\u1E00-\u20CF\u2100-\uD7FF\uDC00-\uFE1F\uFE30-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF])([\u0300-\u036F\u1DC0-\u1DFF\u20D0-\u20FF\uFE20-\uFE2F]+)/g;
exports.get = function(input) {
var stripped;
if (input == null) {
throw new Error('Missing input');
}
if (typeof input !== 'string') {
throw new Error("Invalid input: " + input);
}
input = stripAnsi(input);
stripped = input.replace(REGEX_SYMBOLS, function($0, symbol, combiningMarks) {
return symbol;
});
return punycode.ucs2.decode(stripped).length;
};