UNPKG

@gameroom/gameroom-kit

Version:

Node kit for the Gameroom API

31 lines (30 loc) 1.2 kB
module.exports = class Color extends String { constructor(data) { if (!data) { super(data); return Color.random(); }; if (data instanceof Object && data.r >= 0 && data.r <= 255 && data.g >= 0 && data.g <= 255 && data.b >= 0 && data.b <= 255) { data = `#${data.r.toString(16).padStart(2, 0)}${data.g.toString(16).padStart(2, 0)}${data.b.toString(16).padStart(2, 0)}`; } else if (!data instanceof String || (data instanceof String && !data.startsWith('#')) || (data instanceof String && (data.length !== 7 && data.length !== 4))) { throw new Error(`invalid Color data: ${data}`); }; super(data); }; static random() { return new Color(`#${(Math.random()*(1<<24)|0).toString(16).padStart(6, 0)}`); return new Color(`#${Math.floor(Math.random()*16777215).toString(16).padStart(6, 0)}`); }; toRGB() { const result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(this); return result ? { r: parseInt(result[1], 16), g: parseInt(result[2], 16), b: parseInt(result[3], 16) } : null; }; toRGBString() { const object = this.toRGB(); return `rgb(${object.r}, ${object.g}, ${object.b})`; }; };