From a4766f540c5f99bef3730e1877f9f22aaf161c07 Mon Sep 17 00:00:00 2001 From: dy Date: Mon, 24 Jan 2022 22:36:54 -0500 Subject: [PATCH] Update deps, make back-compat --- index.js | 33 +++++++++++++++++++----- package-lock.json | 65 ++++++++++++++++++++++++++--------------------- package.json | 6 ++--- test.cjs | 25 ++++++++++++++++++ 4 files changed, 90 insertions(+), 39 deletions(-) create mode 100644 test.cjs diff --git a/index.js b/index.js index 78d44ed..894897c 100644 --- a/index.js +++ b/index.js @@ -3,8 +3,6 @@ 'use strict' var parse = require('color-parse') -var rgb = require('color-space/rgb') -var hsl = require('color-space/hsl') module.exports = function rgba (color) { // template literals @@ -17,19 +15,40 @@ module.exports = function rgba (color) { if (!parsed.space) return [] - var min = parsed.space[0] === 'h' ? hsl.min : rgb.min - var max = parsed.space[0] === 'h' ? hsl.max : rgb.max + var min = [0,0,0], max = parsed.space[0] === 'h' ? [360,100,100] : [255,255,255] values = Array(3) values[0] = Math.min(Math.max(parsed.values[0], min[0]), max[0]) values[1] = Math.min(Math.max(parsed.values[1], min[1]), max[1]) values[2] = Math.min(Math.max(parsed.values[2], min[2]), max[2]) - if (parsed.space[0] === 'h') { - values = hsl.rgb(values) - } + if (parsed.space[0] === 'h') values = hsl2rgb(values) values.push(Math.min(Math.max(parsed.alpha, 0), 1)) return values } + + +// excerpt from color-space/hsl +function hsl2rgb(hsl) { + var h = hsl[0]/360, s = hsl[1]/100, l = hsl[2]/100, t1, t2, t3, rgb, val, i=0; + + if (s === 0) return val = l * 255, [val, val, val]; + + t2 = l < 0.5 ? l * (1 + s) : l + s - l * s; + t1 = 2 * l - t2; + + rgb = [0, 0, 0]; + for (;i<3;) { + t3 = h + 1 / 3 * - (i - 1); + t3 < 0 ? t3++ : t3 > 1 && t3--; + val = 6 * t3 < 1 ? t1 + (t2 - t1) * 6 * t3 : + 2 * t3 < 1 ? t2 : + 3 * t3 < 2 ? t1 + (t2 - t1) * (2 / 3 - t3) * 6 : + t1; + rgb[i++] = val * 255; + } + + return rgb; +} diff --git a/package-lock.json b/package-lock.json index 1197b91..7cb283b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,48 +1,55 @@ { "name": "color-rgba", "version": "2.3.0", - "lockfileVersion": 1, + "lockfileVersion": 2, "requires": true, - "dependencies": { - "almost-equal": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/almost-equal/-/almost-equal-1.1.0.tgz", - "integrity": "sha1-+FHGMROHV5lCdqou++jfowZszN0=" + "packages": { + "": { + "name": "color-rgba", + "version": "2.3.0", + "license": "MIT", + "dependencies": { + "color-parse": "^1.4.2", + "color-space": "^2.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/color-parse": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/color-parse/-/color-parse-1.4.2.tgz", + "integrity": "sha512-RI7s49/8yqDj3fECFZjUI1Yi0z/Gq1py43oNJivAIIDSyJiOZLfYCRQEgn8HEVAj++PcRe8AnL2XF0fRJ3BTnA==", + "dependencies": { + "color-name": "^1.0.0" + } }, + "node_modules/color-space": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/color-space/-/color-space-2.0.0.tgz", + "integrity": "sha512-Bu8P/usGNuVWushjxcuaGSkhT+L2KX0cvgMGMTF0KJ7lFeqonhsntT68d6Yu3uwZzCmbF7KTB9EV67AGcUXhJw==" + } + }, + "dependencies": { "color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "color-parse": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/color-parse/-/color-parse-1.4.1.tgz", - "integrity": "sha512-C+VYVNVcZZapuLaCk8Xh40xoYSgCUN1xZ0LCSw3JwGPGal4aGbDid0ebcUoCY2XFhEVil9fYUIlUgIM/5Z/hwQ==", + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/color-parse/-/color-parse-1.4.2.tgz", + "integrity": "sha512-RI7s49/8yqDj3fECFZjUI1Yi0z/Gq1py43oNJivAIIDSyJiOZLfYCRQEgn8HEVAj++PcRe8AnL2XF0fRJ3BTnA==", "requires": { "color-name": "^1.0.0" } }, "color-space": { - "version": "1.16.0", - "resolved": "https://registry.npmjs.org/color-space/-/color-space-1.16.0.tgz", - "integrity": "sha512-A6WMiFzunQ8KEPFmj02OnnoUnqhmSaHaZ/0LVFcPTdlvm8+3aMJ5x1HRHy3bDHPkovkf4sS0f4wsVvwk71fKkg==", - "requires": { - "hsluv": "^0.0.3", - "mumath": "^3.3.4" - } - }, - "hsluv": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/hsluv/-/hsluv-0.0.3.tgz", - "integrity": "sha1-gpEH2vtKn4tSoYCe0C4JHq3mdUw=" - }, - "mumath": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/mumath/-/mumath-3.3.4.tgz", - "integrity": "sha1-SNSg8P2MrU57Mglu6JsWGmPTC78=", - "requires": { - "almost-equal": "^1.1.0" - } + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/color-space/-/color-space-2.0.0.tgz", + "integrity": "sha512-Bu8P/usGNuVWushjxcuaGSkhT+L2KX0cvgMGMTF0KJ7lFeqonhsntT68d6Yu3uwZzCmbF7KTB9EV67AGcUXhJw==" } } } diff --git a/package.json b/package.json index 91ec04a..cff4fd0 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,7 @@ "browser": "index.js", "module": "./index.mjs", "scripts": { - "test": "node test.mjs" + "test": "node test.mjs && node test.cjs" }, "exports": { "import": "./index.mjs", @@ -31,7 +31,7 @@ }, "homepage": "https://github.com/colorjs/color-rgba#readme", "dependencies": { - "color-parse": "^1.4.1", - "color-space": "^1.14.6" + "color-parse": "^1.4.2", + "color-space": "^2.0.0" } } diff --git a/test.cjs b/test.cjs new file mode 100644 index 0000000..2dd5845 --- /dev/null +++ b/test.cjs @@ -0,0 +1,25 @@ +var assert = require( 'assert' ) +var rgba = require( './index.js' ) + +assert.deepEqual(rgba('rgba(1,2,3,.5)'), [1,2,3,.5]) +assert.deepEqual(rgba('rgba(0,0,0,0)'), [0,0,0,0]) +assert.deepEqual(rgba('hsla(0,0,0,1)'), [0,0,0,1]) +assert.deepEqual(rgba('rgba(-300,-300,-300,-1)'), [0,0,0,0]) + +assert.deepEqual(rgba('red'), [255, 0, 0, 1]) +assert.deepEqual(rgba('rgb(80, 120, 160)'), [80, 120, 160, 1]) +assert.deepEqual(rgba('rgba(80, 120, 160, .5)'), [80, 120, 160, .5]) +assert.deepEqual(rgba('rgba(80 120 160 / .5)'), [80, 120, 160, .5]) +assert.deepEqual(rgba('hsl(291 80% 50%)'), [198.89999999999995, 25.499999999999993, 229.5, 1]) +assert.deepEqual(rgba('hsla(109, 50%, 50%, .75)'), [87.125, 191.25, 63.75, 0.75]) +assert.deepEqual(rgba('#f00'), [255, 0, 0, 1]) +assert.deepEqual(rgba`#f00`, [255, 0, 0, 1]) + +assert.deepEqual(rgba('xyz'), []) +// console.log(rgba('hsla(170, 50%, 45%, 1)')) + +assert.deepEqual(rgba(0x00ff00), [0, 255, 0, 1]) +assert.deepEqual(rgba(new Number(0x00ff00)), [0, 255, 0, 1]) + +assert.deepEqual(rgba([1,1,1,1]), [1,1,1,1]) +assert.deepEqual(rgba(new Uint8Array([255, 255, 255, 255])), [255,255,255,1])