forked from enviPath/enviPy
23 lines
699 B
JavaScript
23 lines
699 B
JavaScript
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;
|
|
};
|