diff options
| author | Dimitri Staessens <dimitri@ouroboros.rocks> | 2019-10-06 21:37:45 +0200 | 
|---|---|---|
| committer | Dimitri Staessens <dimitri@ouroboros.rocks> | 2019-10-06 21:37:45 +0200 | 
| commit | 3c51c3be85bb0d1bdb87ea0d6632f1c256912f27 (patch) | |
| tree | c7ccc8279b12c4f7bdbbb4270d617e48f51722e4 /node_modules/string-width/index.js | |
| parent | 412c104bebc507bea9c94fd53b5bdc4b64cbfe31 (diff) | |
| download | website-3c51c3be85bb0d1bdb87ea0d6632f1c256912f27.tar.gz website-3c51c3be85bb0d1bdb87ea0d6632f1c256912f27.zip | |
build: Add some required modules for node
Diffstat (limited to 'node_modules/string-width/index.js')
| -rw-r--r-- | node_modules/string-width/index.js | 36 | 
1 files changed, 36 insertions, 0 deletions
| diff --git a/node_modules/string-width/index.js b/node_modules/string-width/index.js new file mode 100644 index 0000000..bbc49d2 --- /dev/null +++ b/node_modules/string-width/index.js @@ -0,0 +1,36 @@ +'use strict'; +const stripAnsi = require('strip-ansi'); +const isFullwidthCodePoint = require('is-fullwidth-code-point'); + +module.exports = str => { +	if (typeof str !== 'string' || str.length === 0) { +		return 0; +	} + +	str = stripAnsi(str); + +	let width = 0; + +	for (let i = 0; i < str.length; i++) { +		const code = str.codePointAt(i); + +		// Ignore control characters +		if (code <= 0x1F || (code >= 0x7F && code <= 0x9F)) { +			continue; +		} + +		// Ignore combining characters +		if (code >= 0x300 && code <= 0x36F) { +			continue; +		} + +		// Surrogates +		if (code > 0xFFFF) { +			i++; +		} + +		width += isFullwidthCodePoint(code) ? 2 : 1; +	} + +	return width; +}; | 
