Something went wrong. Try again.
[READ-ONLY] Mirror of https://github.com/flo-bit/shapecraft. flo-bit.dev/shapecraft
Something went wrong. Try again.
923 B · 47 lines
JavaScript
at commit da69385e
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748'use strict';const stripAnsi = require('strip-ansi');const isFullwidthCodePoint = require('is-fullwidth-code-point');const emojiRegex = require('emoji-regex');
const stringWidth = string => { if (typeof string !== 'string' || string.length === 0) { return 0; }
string = stripAnsi(string);
if (string.length === 0) { return 0; }
string = string.replace(emojiRegex(), ' ');
let width = 0;
for (let i = 0; i < string.length; i++) { const code = string.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;};
module.exports = stringWidth;// TODO: remove this in the next major versionmodule.exports.default = stringWidth;