| 12345678910111213141516171819202122232425262728293031323334353637 | 'use strict';var stripAnsi = require('strip-ansi');var codePointAt = require('code-point-at');var isFullwidthCodePoint = require('is-fullwidth-code-point');// https://github.com/nodejs/io.js/blob/cff7300a578be1b10001f2d967aaedc88aee6402/lib/readline.js#L1345module.exports = function (str) {	if (typeof str !== 'string' || str.length === 0) {		return 0;	}	var width = 0;	str = stripAnsi(str);	for (var i = 0; i < str.length; i++) {		var code = codePointAt(str, i);		// ignore control characters		if (code <= 0x1f || (code >= 0x7f && code <= 0x9f)) {			continue;		}		// surrogates		if (code >= 0x10000) {			i++;		}		if (isFullwidthCodePoint(code)) {			width += 2;		} else {			width++;		}	}	return width;};
 |