diff --git a/.eslintrc.json b/.eslintrc.json
index 8287875..8c49dab 100644
--- a/.eslintrc.json
+++ b/.eslintrc.json
@@ -4,11 +4,6 @@
"sourceType": "module",
"ecmaVersion": 8
},
- "env": {
- "es6": true,
- "node": true,
- "browser": true
- },
"rules": {
"no-cond-assign": 0
}
diff --git a/.github/eslint.json b/.github/eslint.json
new file mode 100644
index 0000000..c280fdb
--- /dev/null
+++ b/.github/eslint.json
@@ -0,0 +1,18 @@
+{
+ "problemMatcher": [
+ {
+ "owner": "eslint-compact",
+ "pattern": [
+ {
+ "regexp": "^(.+):\\sline\\s(\\d+),\\scol\\s(\\d+),\\s(Error|Warning|Info)\\s-\\s(.+)\\s\\((.+)\\)$",
+ "file": 1,
+ "line": 2,
+ "column": 3,
+ "severity": 4,
+ "message": 5,
+ "code": 6
+ }
+ ]
+ }
+ ]
+}
diff --git a/.github/workflows/node.js.yml b/.github/workflows/node.js.yml
new file mode 100644
index 0000000..7e5ee59
--- /dev/null
+++ b/.github/workflows/node.js.yml
@@ -0,0 +1,30 @@
+# https://help.github.com/actions/language-and-framework-guides/using-nodejs-with-github-actions
+
+name: Node.js CI
+
+on:
+ push:
+ branches: [ main ]
+ pull_request:
+ branches: [ main ]
+
+jobs:
+ build:
+
+ runs-on: ubuntu-latest
+
+ strategy:
+ matrix:
+ node-version: [14.x]
+
+ steps:
+ - uses: actions/checkout@v2
+ - name: Use Node.js ${{ matrix.node-version }}
+ uses: actions/setup-node@v1
+ with:
+ node-version: ${{ matrix.node-version }}
+ - run: yarn --frozen-lockfile
+ - run: |
+ echo ::add-matcher::.github/eslint.json
+ yarn run eslint src test --format=compact
+ - run: yarn test
diff --git a/LICENSE b/LICENSE
index 721bd22..b014515 100644
--- a/LICENSE
+++ b/LICENSE
@@ -1,27 +1,13 @@
-Copyright 2010-2016 Mike Bostock
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without modification,
-are permitted provided that the following conditions are met:
-
-* Redistributions of source code must retain the above copyright notice, this
- list of conditions and the following disclaimer.
-
-* Redistributions in binary form must reproduce the above copyright notice,
- this list of conditions and the following disclaimer in the documentation
- and/or other materials provided with the distribution.
-
-* Neither the name of the author nor the names of contributors may be used to
- endorse or promote products derived from this software without specific prior
- written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
-ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
-ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
-ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+Copyright 2010-2021 Mike Bostock
+
+Permission to use, copy, modify, and/or distribute this software for any purpose
+with or without fee is hereby granted, provided that the above copyright notice
+and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
+REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
+FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
+INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
+OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
+THIS SOFTWARE.
diff --git a/README.md b/README.md
index c29bed1..22ce38c 100644
--- a/README.md
+++ b/README.md
@@ -5,13 +5,13 @@ Even though your browser understands a lot about colors, it doesn’t offer much
For example, take the color named “steelblue”:
```js
-var c = d3.color("steelblue"); // {r: 70, g: 130, b: 180, opacity: 1}
+const c = d3.color("steelblue"); // {r: 70, g: 130, b: 180, opacity: 1}
```
Let’s try converting it to HSL:
```js
-var c = d3.hsl("steelblue"); // {h: 207.27…, s: 0.44, l: 0.4902…, opacity: 1}
+const c = d3.hsl("steelblue"); // {h: 207.27…, s: 0.44, l: 0.4902…, opacity: 1}
```
Now rotate the hue by 90°, bump up the saturation, and format as a string for CSS:
@@ -53,13 +53,25 @@ To measure color differences, see:
## Installing
-If you use NPM, `npm install d3-color`. Otherwise, download the [latest release](https://github.com/d3/d3-color/releases/latest). You can also load directly from [d3js.org](https://d3js.org), either as a [standalone library](https://d3js.org/d3-color.v2.min.js) or as part of [D3](https://github.com/d3/d3). AMD, CommonJS, and vanilla environments are supported. In vanilla, a `d3` global is exported:
+If you use npm, `npm install d3-color`. You can also download the [latest release on GitHub](https://github.com/d3/d3-color/releases/latest). For vanilla HTML in modern browsers, import d3-color from Skypack:
```html
-
+
+```
+
+For legacy environments, you can load d3-color’s UMD bundle from an npm-based CDN such as jsDelivr; a `d3` global is exported:
+
+```html
+
```
diff --git a/d3-color.sublime-project b/d3-color.sublime-project
deleted file mode 100644
index 772dfa5..0000000
--- a/d3-color.sublime-project
+++ /dev/null
@@ -1,17 +0,0 @@
-{
- "folders": [
- {
- "path": ".",
- "file_exclude_patterns": ["*.sublime-workspace"],
- "folder_exclude_patterns": ["dist"]
- }
- ],
- "build_systems": [
- {
- "name": "yarn test",
- "cmd": ["yarn", "test"],
- "file_regex": "\\((...*?):([0-9]*):([0-9]*)\\)",
- "working_dir": "$project_path"
- }
- ]
-}
diff --git a/package.json b/package.json
index dbfb8bd..c9ff4ea 100644
--- a/package.json
+++ b/package.json
@@ -2,6 +2,11 @@
"name": "d3-color",
"version": "2.0.0",
"description": "Color spaces! RGB, HSL, Cubehelix, Lab and HCL (Lch).",
+ "homepage": "https://d3js.org/d3-color/",
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/d3/d3-color.git"
+ },
"keywords": [
"d3",
"d3-module",
@@ -13,35 +18,37 @@
"lch",
"cubehelix"
],
- "homepage": "https://d3js.org/d3-color/",
- "license": "BSD-3-Clause",
+ "license": "ISC",
"author": {
"name": "Mike Bostock",
"url": "http://bost.ocks.org/mike"
},
- "main": "dist/d3-color.js",
- "unpkg": "dist/d3-color.min.js",
- "jsdelivr": "dist/d3-color.min.js",
- "module": "src/index.js",
- "repository": {
- "type": "git",
- "url": "https://github.com/d3/d3-color.git"
- },
+ "type": "module",
"files": [
"dist/**/*.js",
"src/**/*.js"
],
- "scripts": {
- "pretest": "rollup -c",
- "test": "tape 'test/**/*-test.js' && eslint src test",
- "prepublishOnly": "rm -rf dist && yarn test",
- "postpublish": "git push && git push --tags && cd ../d3.github.com && git pull && cp ../${npm_package_name}/dist/${npm_package_name}.js ${npm_package_name}.v${npm_package_version%%.*}.js && cp ../${npm_package_name}/dist/${npm_package_name}.min.js ${npm_package_name}.v${npm_package_version%%.*}.min.js && git add ${npm_package_name}.v${npm_package_version%%.*}.js ${npm_package_name}.v${npm_package_version%%.*}.min.js && git commit -m \"${npm_package_name} ${npm_package_version}\" && git push && cd - && zip -j dist/${npm_package_name}.zip -- LICENSE README.md dist/${npm_package_name}.js dist/${npm_package_name}.min.js"
+ "module": "src/index.js",
+ "main": "src/index.js",
+ "jsdelivr": "dist/d3-color.min.js",
+ "unpkg": "dist/d3-color.min.js",
+ "exports": {
+ "umd": "./dist/d3-color.min.js",
+ "default": "./src/index.js"
},
"sideEffects": false,
"devDependencies": {
- "eslint": "6",
- "rollup": "1",
- "rollup-plugin-terser": "5",
- "tape": "4"
+ "eslint": "7",
+ "mocha": "8",
+ "rollup": "2",
+ "rollup-plugin-terser": "7"
+ },
+ "scripts": {
+ "test": "mocha 'test/**/*-test.js' && eslint src test",
+ "prepublishOnly": "rm -rf dist && yarn test && rollup -c",
+ "postpublish": "git push && git push --tags && cd ../d3.github.com && git pull && cp ../${npm_package_name}/dist/${npm_package_name}.js ${npm_package_name}.v${npm_package_version%%.*}.js && cp ../${npm_package_name}/dist/${npm_package_name}.min.js ${npm_package_name}.v${npm_package_version%%.*}.min.js && git add ${npm_package_name}.v${npm_package_version%%.*}.js ${npm_package_name}.v${npm_package_version%%.*}.min.js && git commit -m \"${npm_package_name} ${npm_package_version}\" && git push && cd -"
+ },
+ "engines": {
+ "node": ">=12"
}
}
diff --git a/test/.eslintrc.json b/test/.eslintrc.json
new file mode 100644
index 0000000..d5fdab6
--- /dev/null
+++ b/test/.eslintrc.json
@@ -0,0 +1,13 @@
+{
+ "extends": "eslint:recommended",
+ "parserOptions": {
+ "sourceType": "module",
+ "ecmaVersion": 8
+ },
+ "rules": {
+ "no-cond-assign": 0
+ },
+ "env": {
+ "mocha": true
+ }
+}
diff --git a/test/asserts.js b/test/asserts.js
new file mode 100644
index 0000000..e769b59
--- /dev/null
+++ b/test/asserts.js
@@ -0,0 +1,46 @@
+import assert from "assert";
+import {hcl, hsl, lab, rgb} from "../src/index.js";
+
+export function assertRgbEqual(actual, r, g, b, opacity) {
+ assert(actual instanceof rgb
+ && (isNaN(r) ? isNaN(actual.r) && actual.r !== actual.r : actual.r === r)
+ && (isNaN(g) ? isNaN(actual.g) && actual.g !== actual.g : actual.g === g)
+ && (isNaN(b) ? isNaN(actual.b) && actual.b !== actual.b : actual.b === b)
+ && (isNaN(opacity) ? isNaN(actual.opacity) && actual.opacity !== actual.opacity : actual.opacity === opacity)
+ );
+}
+
+export function assertRgbApproxEqual(actual, r, g, b, opacity) {
+ assert(actual instanceof rgb
+ && (isNaN(r) ? isNaN(actual.r) && actual.r !== actual.r : Math.round(actual.r) === Math.round(r))
+ && (isNaN(g) ? isNaN(actual.g) && actual.g !== actual.g : Math.round(actual.g) === Math.round(g))
+ && (isNaN(b) ? isNaN(actual.b) && actual.b !== actual.b : Math.round(actual.b) === Math.round(b))
+ && (isNaN(opacity) ? isNaN(actual.opacity) && actual.opacity !== actual.opacity : actual.opacity === opacity)
+ );
+}
+export function assertHclEqual(actual, h, c, l, opacity) {
+ assert(actual instanceof hcl
+ && (isNaN(h) ? isNaN(actual.h) && actual.h !== actual.h : h - 1e-6 <= actual.h && actual.h <= h + 1e-6)
+ && (isNaN(c) ? isNaN(actual.c) && actual.c !== actual.c : c - 1e-6 <= actual.c && actual.c <= c + 1e-6)
+ && (isNaN(l) ? isNaN(actual.l) && actual.l !== actual.l : l - 1e-6 <= actual.l && actual.l <= l + 1e-6)
+ && (isNaN(opacity) ? isNaN(actual.opacity) && actual.opacity !== actual.opacity : actual.opacity === opacity)
+ );
+}
+
+export function assertHslEqual(actual, h, s, l, opacity) {
+ assert(actual instanceof hsl
+ && (isNaN(h) ? isNaN(actual.h) && actual.h !== actual.h : h - 1e-6 <= actual.h && actual.h <= h + 1e-6)
+ && (isNaN(s) ? isNaN(actual.s) && actual.s !== actual.s : s - 1e-6 <= actual.s && actual.s <= s + 1e-6)
+ && (isNaN(l) ? isNaN(actual.l) && actual.l !== actual.l : l - 1e-6 <= actual.l && actual.l <= l + 1e-6)
+ && (isNaN(opacity) ? isNaN(actual.opacity) && actual.opacity !== actual.opacity : actual.opacity === opacity)
+ );
+}
+
+export function assertLabEqual(actual, l, a, b, opacity) {
+ assert(actual instanceof lab
+ && (isNaN(l) ? isNaN(actual.l) && actual.l !== actual.l : l - 1e-6 <= actual.l && actual.l <= l + 1e-6)
+ && (isNaN(a) ? isNaN(actual.a) && actual.a !== actual.a : a - 1e-6 <= actual.a && actual.a <= a + 1e-6)
+ && (isNaN(b) ? isNaN(actual.b) && actual.b !== actual.b : b - 1e-6 <= actual.b && actual.b <= b + 1e-6)
+ && (isNaN(opacity) ? isNaN(actual.opacity) && actual.opacity !== actual.opacity : actual.opacity === opacity)
+ );
+}
diff --git a/test/color-test.js b/test/color-test.js
index 2c44313..3282877 100644
--- a/test/color-test.js
+++ b/test/color-test.js
@@ -1,188 +1,160 @@
-var tape = require("tape"),
- color = require("../");
+import assert from "assert";
+import {color} from "../src/index.js";
+import {assertHslEqual, assertRgbApproxEqual, assertRgbEqual} from "./asserts.js";
-require("./rgbEqual");
-require("./hslEqual");
+it("color(format) parses CSS color names (e.g., \"rebeccapurple\")", () => {
+ assertRgbApproxEqual(color("moccasin"), 255, 228, 181, 1);
+ assertRgbApproxEqual(color("aliceblue"), 240, 248, 255, 1);
+ assertRgbApproxEqual(color("yellow"), 255, 255, 0, 1);
+ assertRgbApproxEqual(color("moccasin"), 255, 228, 181, 1);
+ assertRgbApproxEqual(color("aliceblue"), 240, 248, 255, 1);
+ assertRgbApproxEqual(color("yellow"), 255, 255, 0, 1);
+ assertRgbApproxEqual(color("rebeccapurple"), 102, 51, 153, 1);
+ assertRgbApproxEqual(color("transparent"), NaN, NaN, NaN, 0);
+});
-tape("color(format) parses CSS color names (e.g., \"rebeccapurple\")", function(test) {
- test.rgbEqual(color.color("moccasin"), 255, 228, 181, 1);
- test.rgbEqual(color.color("aliceblue"), 240, 248, 255, 1);
- test.rgbEqual(color.color("yellow"), 255, 255, 0, 1);
- test.rgbEqual(color.color("moccasin"), 255, 228, 181, 1);
- test.rgbEqual(color.color("aliceblue"), 240, 248, 255, 1);
- test.rgbEqual(color.color("yellow"), 255, 255, 0, 1);
- test.rgbEqual(color.color("rebeccapurple"), 102, 51, 153, 1);
- test.rgbEqual(color.color("transparent"), NaN, NaN, NaN, 0);
- test.end();
+it("color(format) parses 6-digit hexadecimal (e.g., \"#abcdef\")", () => {
+ assertRgbApproxEqual(color("#abcdef"), 171, 205, 239, 1);
});
-tape("color(format) parses 6-digit hexadecimal (e.g., \"#abcdef\")", function(test) {
- test.rgbEqual(color.color("#abcdef"), 171, 205, 239, 1);
- test.end();
+it("color(format) parses 3-digit hexadecimal (e.g., \"#abc\")", () => {
+ assertRgbApproxEqual(color("#abc"), 170, 187, 204, 1);
});
-tape("color(format) parses 3-digit hexadecimal (e.g., \"#abc\")", function(test) {
- test.rgbEqual(color.color("#abc"), 170, 187, 204, 1);
- test.end();
+it("color(format) does not parse 7-digit hexadecimal (e.g., \"#abcdef3\")", () => {
+ assert.strictEqual(color("#abcdef3"), null);
});
-tape("color(format) does not parse 7-digit hexadecimal (e.g., \"#abcdef3\")", function(test) {
- test.strictEqual(color.color("#abcdef3"), null);
- test.end();
+it("color(format) parses 8-digit hexadecimal (e.g., \"#abcdef33\")", () => {
+ assertRgbApproxEqual(color("#abcdef33"), 171, 205, 239, 0.2);
});
-tape("color(format) parses 8-digit hexadecimal (e.g., \"#abcdef33\")", function(test) {
- test.rgbEqual(color.color("#abcdef33"), 171, 205, 239, 0.2);
- test.end();
+it("color(format) parses 4-digit hexadecimal (e.g., \"#abc3\")", () => {
+ assertRgbApproxEqual(color("#abc3"), 170, 187, 204, 0.2);
});
-tape("color(format) parses 4-digit hexadecimal (e.g., \"#abc3\")", function(test) {
- test.rgbEqual(color.color("#abc3"), 170, 187, 204, 0.2);
- test.end();
+it("color(format) parses RGB integer format (e.g., \"rgb(12,34,56)\")", () => {
+ assertRgbApproxEqual(color("rgb(12,34,56)"), 12, 34, 56, 1);
});
-tape("color(format) parses RGB integer format (e.g., \"rgb(12,34,56)\")", function(test) {
- test.rgbEqual(color.color("rgb(12,34,56)"), 12, 34, 56, 1);
- test.end();
+it("color(format) parses RGBA integer format (e.g., \"rgba(12,34,56,0.4)\")", () => {
+ assertRgbApproxEqual(color("rgba(12,34,56,0.4)"), 12, 34, 56, 0.4);
});
-tape("color(format) parses RGBA integer format (e.g., \"rgba(12,34,56,0.4)\")", function(test) {
- test.rgbEqual(color.color("rgba(12,34,56,0.4)"), 12, 34, 56, 0.4);
- test.end();
+it("color(format) parses RGB percentage format (e.g., \"rgb(12%,34%,56%)\")", () => {
+ assertRgbApproxEqual(color("rgb(12%,34%,56%)"), 31, 87, 143, 1);
+ assertRgbEqual(color("rgb(100%,100%,100%)"), 255, 255, 255, 1);
});
-tape("color(format) parses RGB percentage format (e.g., \"rgb(12%,34%,56%)\")", function(test) {
- test.rgbEqual(color.color("rgb(12%,34%,56%)"), 31, 87, 143, 1);
- test.rgbStrictEqual(color.color("rgb(100%,100%,100%)"), 255, 255, 255, 1);
- test.end();
+it("color(format) parses RGBA percentage format (e.g., \"rgba(12%,34%,56%,0.4)\")", () => {
+ assertRgbApproxEqual(color("rgba(12%,34%,56%,0.4)"), 31, 87, 143, 0.4);
+ assertRgbEqual(color("rgba(100%,100%,100%,0.4)"), 255, 255, 255, 0.4);
});
-tape("color(format) parses RGBA percentage format (e.g., \"rgba(12%,34%,56%,0.4)\")", function(test) {
- test.rgbEqual(color.color("rgba(12%,34%,56%,0.4)"), 31, 87, 143, 0.4);
- test.rgbStrictEqual(color.color("rgba(100%,100%,100%,0.4)"), 255, 255, 255, 0.4);
- test.end();
+it("color(format) parses HSL format (e.g., \"hsl(60,100%,20%)\")", () => {
+ assertHslEqual(color("hsl(60,100%,20%)"), 60, 1, 0.2, 1);
});
-tape("color(format) parses HSL format (e.g., \"hsl(60,100%,20%)\")", function(test) {
- test.hslEqual(color.color("hsl(60,100%,20%)"), 60, 1, 0.2, 1);
- test.end();
+it("color(format) parses HSLA format (e.g., \"hsla(60,100%,20%,0.4)\")", () => {
+ assertHslEqual(color("hsla(60,100%,20%,0.4)"), 60, 1, 0.2, 0.4);
});
-tape("color(format) parses HSLA format (e.g., \"hsla(60,100%,20%,0.4)\")", function(test) {
- test.hslEqual(color.color("hsla(60,100%,20%,0.4)"), 60, 1, 0.2, 0.4);
- test.end();
+it("color(format) ignores leading and trailing whitespace", () => {
+ assertRgbApproxEqual(color(" aliceblue\t\n"), 240, 248, 255, 1);
+ assertRgbApproxEqual(color(" #abc\t\n"), 170, 187, 204, 1);
+ assertRgbApproxEqual(color(" #aabbcc\t\n"), 170, 187, 204, 1);
+ assertRgbApproxEqual(color(" rgb(120,30,50)\t\n"), 120, 30, 50, 1);
+ assertHslEqual(color(" hsl(120,30%,50%)\t\n"), 120, 0.3, 0.5, 1);
});
-tape("color(format) ignores leading and trailing whitespace", function(test) {
- test.rgbEqual(color.color(" aliceblue\t\n"), 240, 248, 255, 1);
- test.rgbEqual(color.color(" #abc\t\n"), 170, 187, 204, 1);
- test.rgbEqual(color.color(" #aabbcc\t\n"), 170, 187, 204, 1);
- test.rgbEqual(color.color(" rgb(120,30,50)\t\n"), 120, 30, 50, 1);
- test.hslEqual(color.color(" hsl(120,30%,50%)\t\n"), 120, 0.3, 0.5, 1);
- test.end();
+it("color(format) ignores whitespace between numbers", () => {
+ assertRgbApproxEqual(color(" rgb( 120 , 30 , 50 ) "), 120, 30, 50, 1);
+ assertHslEqual(color(" hsl( 120 , 30% , 50% ) "), 120, 0.3, 0.5, 1);
+ assertRgbApproxEqual(color(" rgba( 12 , 34 , 56 , 0.4 ) "), 12, 34, 56, 0.4);
+ assertRgbApproxEqual(color(" rgba( 12% , 34% , 56% , 0.4 ) "), 31, 87, 143, 0.4);
+ assertHslEqual(color(" hsla( 60 , 100% , 20% , 0.4 ) "), 60, 1, 0.2, 0.4);
});
-tape("color(format) ignores whitespace between numbers", function(test) {
- test.rgbEqual(color.color(" rgb( 120 , 30 , 50 ) "), 120, 30, 50, 1);
- test.hslEqual(color.color(" hsl( 120 , 30% , 50% ) "), 120, 0.3, 0.5, 1);
- test.rgbEqual(color.color(" rgba( 12 , 34 , 56 , 0.4 ) "), 12, 34, 56, 0.4);
- test.rgbEqual(color.color(" rgba( 12% , 34% , 56% , 0.4 ) "), 31, 87, 143, 0.4);
- test.hslEqual(color.color(" hsla( 60 , 100% , 20% , 0.4 ) "), 60, 1, 0.2, 0.4);
- test.end();
+it("color(format) allows number signs", () => {
+ assertRgbApproxEqual(color("rgb(+120,+30,+50)"), 120, 30, 50, 1);
+ assertHslEqual(color("hsl(+120,+30%,+50%)"), 120, 0.3, 0.5, 1);
+ assertRgbApproxEqual(color("rgb(-120,-30,-50)"), -120, -30, -50, 1);
+ assertHslEqual(color("hsl(-120,-30%,-50%)"), NaN, NaN, -0.5, 1);
+ assertRgbApproxEqual(color("rgba(12,34,56,+0.4)"), 12, 34, 56, 0.4);
+ assertRgbApproxEqual(color("rgba(12,34,56,-0.4)"), NaN, NaN, NaN, -0.4);
+ assertRgbApproxEqual(color("rgba(12%,34%,56%,+0.4)"), 31, 87, 143, 0.4);
+ assertRgbApproxEqual(color("rgba(12%,34%,56%,-0.4)"), NaN, NaN, NaN, -0.4);
+ assertHslEqual(color("hsla(60,100%,20%,+0.4)"), 60, 1, 0.2, 0.4);
+ assertHslEqual(color("hsla(60,100%,20%,-0.4)"), NaN, NaN, NaN, -0.4);
});
-tape("color(format) allows number signs", function(test) {
- test.rgbEqual(color.color("rgb(+120,+30,+50)"), 120, 30, 50, 1);
- test.hslEqual(color.color("hsl(+120,+30%,+50%)"), 120, 0.3, 0.5, 1);
- test.rgbEqual(color.color("rgb(-120,-30,-50)"), -120, -30, -50, 1);
- test.hslEqual(color.color("hsl(-120,-30%,-50%)"), NaN, NaN, -0.5, 1);
- test.rgbEqual(color.color("rgba(12,34,56,+0.4)"), 12, 34, 56, 0.4);
- test.rgbEqual(color.color("rgba(12,34,56,-0.4)"), NaN, NaN, NaN, -0.4);
- test.rgbEqual(color.color("rgba(12%,34%,56%,+0.4)"), 31, 87, 143, 0.4);
- test.rgbEqual(color.color("rgba(12%,34%,56%,-0.4)"), NaN, NaN, NaN, -0.4);
- test.hslEqual(color.color("hsla(60,100%,20%,+0.4)"), 60, 1, 0.2, 0.4);
- test.hslEqual(color.color("hsla(60,100%,20%,-0.4)"), NaN, NaN, NaN, -0.4);
- test.end();
+it("color(format) allows decimals for non-integer values", () => {
+ assertRgbApproxEqual(color("rgb(20.0%,30.4%,51.2%)"), 51, 78, 131, 1);
+ assertHslEqual(color("hsl(20.0,30.4%,51.2%)"), 20, 0.304, 0.512, 1);
});
-tape("color(format) allows decimals for non-integer values", function(test) {
- test.rgbEqual(color.color("rgb(20.0%,30.4%,51.2%)"), 51, 78, 131, 1);
- test.hslEqual(color.color("hsl(20.0,30.4%,51.2%)"), 20, 0.304, 0.512, 1);
- test.end();
+it("color(format) allows leading decimal for hue, opacity and percentages", () => {
+ assertHslEqual(color("hsl(.9,.3%,.5%)"), 0.9, 0.003, 0.005, 1);
+ assertHslEqual(color("hsla(.9,.3%,.5%,.5)"), 0.9, 0.003, 0.005, 0.5);
+ assertRgbApproxEqual(color("rgb(.1%,.2%,.3%)"), 0, 1, 1, 1);
+ assertRgbApproxEqual(color("rgba(120,30,50,.5)"), 120, 30, 50, 0.5);
});
-tape("color(format) allows leading decimal for hue, opacity and percentages", function(test) {
- test.hslEqual(color.color("hsl(.9,.3%,.5%)"), 0.9, 0.003, 0.005, 1);
- test.hslEqual(color.color("hsla(.9,.3%,.5%,.5)"), 0.9, 0.003, 0.005, 0.5);
- test.rgbEqual(color.color("rgb(.1%,.2%,.3%)"), 0, 1, 1, 1);
- test.rgbEqual(color.color("rgba(120,30,50,.5)"), 120, 30, 50, 0.5);
- test.end();
+it("color(format) allows exponential format for hue, opacity and percentages", () => {
+ assertHslEqual(color("hsl(1e1,2e1%,3e1%)"), 10, 0.2, 0.3, 1);
+ assertHslEqual(color("hsla(9e-1,3e-1%,5e-1%,5e-1)"), 0.9, 0.003, 0.005, 0.5);
+ assertRgbApproxEqual(color("rgb(1e-1%,2e-1%,3e-1%)"), 0, 1, 1, 1);
+ assertRgbApproxEqual(color("rgba(120,30,50,1e-1)"), 120, 30, 50, 0.1);
});
-tape("color(format) allows exponential format for hue, opacity and percentages", function(test) {
- test.hslEqual(color.color("hsl(1e1,2e1%,3e1%)"), 10, 0.2, 0.3, 1);
- test.hslEqual(color.color("hsla(9e-1,3e-1%,5e-1%,5e-1)"), 0.9, 0.003, 0.005, 0.5);
- test.rgbEqual(color.color("rgb(1e-1%,2e-1%,3e-1%)"), 0, 1, 1, 1);
- test.rgbEqual(color.color("rgba(120,30,50,1e-1)"), 120, 30, 50, 0.1);
- test.end();
+it("color(format) does not allow decimals for integer values", () => {
+ assert.strictEqual(color("rgb(120.5,30,50)"), null);
});
-tape("color(format) does not allow decimals for integer values", function(test) {
- test.equal(color.color("rgb(120.5,30,50)"), null);
- test.end();
+it("color(format) does not allow empty decimals", () => {
+ assert.strictEqual(color("rgb(120.,30,50)"), null);
+ assert.strictEqual(color("rgb(120.%,30%,50%)"), null);
+ assert.strictEqual(color("rgba(120,30,50,1.)"), null);
+ assert.strictEqual(color("rgba(12%,30%,50%,1.)"), null);
+ assert.strictEqual(color("hsla(60,100%,20%,1.)"), null);
});
-tape("color(format) does not allow empty decimals", function(test) {
- test.equal(color.color("rgb(120.,30,50)"), null);
- test.equal(color.color("rgb(120.%,30%,50%)"), null);
- test.equal(color.color("rgba(120,30,50,1.)"), null);
- test.equal(color.color("rgba(12%,30%,50%,1.)"), null);
- test.equal(color.color("hsla(60,100%,20%,1.)"), null);
- test.end();
+it("color(format) does not allow made-up names", () => {
+ assert.strictEqual(color("bostock"), null);
});
-tape("color(format) does not allow made-up names", function(test) {
- test.equal(color.color("bostock"), null);
- test.end();
+it("color(format) allows achromatic colors", () => {
+ assertRgbApproxEqual(color("rgba(0,0,0,0)"), NaN, NaN, NaN, 0);
+ assertRgbApproxEqual(color("#0000"), NaN, NaN, NaN, 0);
+ assertRgbApproxEqual(color("#00000000"), NaN, NaN, NaN, 0);
});
-tape("color(format) allows achromatic colors", function(test) {
- test.rgbEqual(color.color("rgba(0,0,0,0)"), NaN, NaN, NaN, 0);
- test.rgbEqual(color.color("#0000"), NaN, NaN, NaN, 0);
- test.rgbEqual(color.color("#00000000"), NaN, NaN, NaN, 0);
- test.end();
+it("color(format) does not allow whitespace before open paren or percent sign", () => {
+ assert.strictEqual(color("rgb (120,30,50)"), null);
+ assert.strictEqual(color("rgb (12%,30%,50%)"), null);
+ assert.strictEqual(color("hsl (120,30%,50%)"), null);
+ assert.strictEqual(color("hsl(120,30 %,50%)"), null);
+ assert.strictEqual(color("rgba (120,30,50,1)"), null);
+ assert.strictEqual(color("rgba (12%,30%,50%,1)"), null);
+ assert.strictEqual(color("hsla (120,30%,50%,1)"), null);
});
-tape("color(format) does not allow whitespace before open paren or percent sign", function(test) {
- test.equal(color.color("rgb (120,30,50)"), null);
- test.equal(color.color("rgb (12%,30%,50%)"), null);
- test.equal(color.color("hsl (120,30%,50%)"), null);
- test.equal(color.color("hsl(120,30 %,50%)"), null);
- test.equal(color.color("rgba (120,30,50,1)"), null);
- test.equal(color.color("rgba (12%,30%,50%,1)"), null);
- test.equal(color.color("hsla (120,30%,50%,1)"), null);
- test.end();
+it("color(format) is case-insensitive", () => {
+ assertRgbApproxEqual(color("aLiCeBlUE"), 240, 248, 255, 1);
+ assertRgbApproxEqual(color("transPARENT"), NaN, NaN, NaN, 0);
+ assertRgbApproxEqual(color(" #aBc\t\n"), 170, 187, 204, 1);
+ assertRgbApproxEqual(color(" #aaBBCC\t\n"), 170, 187, 204, 1);
+ assertRgbApproxEqual(color(" rGB(120,30,50)\t\n"), 120, 30, 50, 1);
+ assertHslEqual(color(" HSl(120,30%,50%)\t\n"), 120, 0.3, 0.5, 1);
});
-tape("color(format) is case-insensitive", function(test) {
- test.rgbEqual(color.color("aLiCeBlUE"), 240, 248, 255, 1);
- test.rgbEqual(color.color("transPARENT"), NaN, NaN, NaN, 0);
- test.rgbEqual(color.color(" #aBc\t\n"), 170, 187, 204, 1);
- test.rgbEqual(color.color(" #aaBBCC\t\n"), 170, 187, 204, 1);
- test.rgbEqual(color.color(" rGB(120,30,50)\t\n"), 120, 30, 50, 1);
- test.hslEqual(color.color(" HSl(120,30%,50%)\t\n"), 120, 0.3, 0.5, 1);
- test.end();
-});
-
-tape("color(format) returns undefined RGB channel values for unknown formats", function(test) {
- test.equal(color.color("invalid"), null);
- test.equal(color.color("hasOwnProperty"), null);
- test.equal(color.color("__proto__"), null);
- test.equal(color.color("#ab"), null);
- test.end();
+it("color(format) returns undefined RGB channel values for unknown formats", () => {
+ assert.strictEqual(color("invalid"), null);
+ assert.strictEqual(color("hasOwnProperty"), null);
+ assert.strictEqual(color("__proto__"), null);
+ assert.strictEqual(color("#ab"), null);
});
-
-tape("color(format).hex() returns a hexadecimal string", function(test) {
- test.equal(color.color("rgba(12%,34%,56%,0.4)").hex(), "#1f578f");
- test.end();
+
+it("color(format).hex() returns a hexadecimal string", () => {
+ assert.strictEqual(color("rgba(12%,34%,56%,0.4)").hex(), "#1f578f");
});
diff --git a/test/cubehelix-test.js b/test/cubehelix-test.js
index 849b2be..adb3991 100644
--- a/test/cubehelix-test.js
+++ b/test/cubehelix-test.js
@@ -1,9 +1,8 @@
-var tape = require("tape"),
- color = require("../");
+import assert from "assert";
+import {color, cubehelix} from "../src/index.js";
-tape("cubehelix(…) returns an instance of cubehelix and color", function(test) {
- var c = color.cubehelix("steelblue");
- test.ok(c instanceof color.cubehelix);
- test.ok(c instanceof color.color);
- test.end();
+it("cubehelix(…) returns an instance of cubehelix and color", () => {
+ const c = cubehelix("steelblue");
+ assert(c instanceof cubehelix);
+ assert(c instanceof color);
});
diff --git a/test/gray-test.js b/test/gray-test.js
index e5fee13..983c9db 100644
--- a/test/gray-test.js
+++ b/test/gray-test.js
@@ -1,12 +1,9 @@
-var tape = require("tape"),
- color = require("../");
+import {assertLabEqual} from "./asserts.js";
+import {gray} from "../src/index.js";
-require("./labEqual");
-
-tape("gray(l[, opacity]) is an alias for lab(l, 0, 0[, opacity])", function(test) {
- test.labEqual(color.gray(120), 120, 0, 0, 1);
- test.labEqual(color.gray(120, 0.5), 120, 0, 0, 0.5);
- test.labEqual(color.gray(120, null), 120, 0, 0, 1);
- test.labEqual(color.gray(120, undefined), 120, 0, 0, 1);
- test.end();
+it("gray(l[, opacity]) is an alias for lab(l, 0, 0[, opacity])", () => {
+ assertLabEqual(gray(120), 120, 0, 0, 1);
+ assertLabEqual(gray(120, 0.5), 120, 0, 0, 0.5);
+ assertLabEqual(gray(120, null), 120, 0, 0, 1);
+ assertLabEqual(gray(120, undefined), 120, 0, 0, 1);
});
diff --git a/test/hcl-test.js b/test/hcl-test.js
index dfb464c..2c75025 100644
--- a/test/hcl-test.js
+++ b/test/hcl-test.js
@@ -1,247 +1,214 @@
-var tape = require("tape"),
- color = require("../");
+import assert from "assert";
+import {assertHclEqual, assertRgbApproxEqual} from "./asserts.js";
+import {color, hcl, hsl, lab, rgb} from "../src/index.js";
-require("./hclEqual");
-require("./rgbEqual");
-
-tape("hcl(…) returns an instance of hcl and color", function(test) {
- var c = color.hcl(120, 40, 50);
- test.ok(c instanceof color.hcl);
- test.ok(c instanceof color.color);
- test.end();
+it("hcl(…) returns an instance of hcl and color", () => {
+ const c = hcl(120, 40, 50);
+ assert(c instanceof hcl);
+ assert(c instanceof color);
});
-tape("hcl(…) exposes h, c, and l channel values", function(test) {
- test.hclEqual(color.hcl("#abc"), 252.37145234745182, 11.223567114593477, 74.96879980931759, 1);
- test.end();
+it("hcl(…) exposes h, c, and l channel values", () => {
+ assertHclEqual(hcl("#abc"), 252.37145234745182, 11.223567114593477, 74.96879980931759, 1);
});
-tape("hcl(…) returns defined hue and undefined chroma for black and white", function(test) {
- test.hclEqual(color.hcl("black"), NaN, NaN, 0, 1);
- test.hclEqual(color.hcl("#000"), NaN, NaN, 0, 1);
- test.hclEqual(color.hcl(color.lab("#000")), NaN, NaN, 0, 1);
- test.hclEqual(color.hcl("white"), NaN, NaN, 100, 1);
- test.hclEqual(color.hcl("#fff"), NaN, NaN, 100, 1);
- test.hclEqual(color.hcl(color.lab("#fff")), NaN, NaN, 100, 1);
- test.end();
+it("hcl(…) returns defined hue and undefined chroma for black and white", () => {
+ assertHclEqual(hcl("black"), NaN, NaN, 0, 1);
+ assertHclEqual(hcl("#000"), NaN, NaN, 0, 1);
+ assertHclEqual(hcl(lab("#000")), NaN, NaN, 0, 1);
+ assertHclEqual(hcl("white"), NaN, NaN, 100, 1);
+ assertHclEqual(hcl("#fff"), NaN, NaN, 100, 1);
+ assertHclEqual(hcl(lab("#fff")), NaN, NaN, 100, 1);
});
-tape("hcl(…) returns undefined hue and zero chroma for gray", function(test) {
- test.hclEqual(color.hcl("gray"), NaN, 0, 53.585013, 1);
- test.hclEqual(color.hcl(color.lab("gray")), NaN, 0, 53.585013, 1);
- test.end();
+it("hcl(…) returns undefined hue and zero chroma for gray", () => {
+ assertHclEqual(hcl("gray"), NaN, 0, 53.585013, 1);
+ assertHclEqual(hcl(lab("gray")), NaN, 0, 53.585013, 1);
});
-tape("hcl.toString() converts to RGB and formats as hexadecimal", function(test) {
- test.equal(color.hcl("#abcdef") + "", "rgb(171, 205, 239)");
- test.equal(color.hcl("moccasin") + "", "rgb(255, 228, 181)");
- test.equal(color.hcl("hsl(60, 100%, 20%)") + "", "rgb(102, 102, 0)");
- test.equal(color.hcl("rgb(12, 34, 56)") + "", "rgb(12, 34, 56)");
- test.equal(color.hcl(color.rgb(12, 34, 56)) + "", "rgb(12, 34, 56)");
- test.equal(color.hcl(color.hsl(60, 1, 0.2)) + "", "rgb(102, 102, 0)");
- test.end();
+it("hcl.toString() converts to RGB and formats as hexadecimal", () => {
+ assert.strictEqual(hcl("#abcdef") + "", "rgb(171, 205, 239)");
+ assert.strictEqual(hcl("moccasin") + "", "rgb(255, 228, 181)");
+ assert.strictEqual(hcl("hsl(60, 100%, 20%)") + "", "rgb(102, 102, 0)");
+ assert.strictEqual(hcl("rgb(12, 34, 56)") + "", "rgb(12, 34, 56)");
+ assert.strictEqual(hcl(rgb(12, 34, 56)) + "", "rgb(12, 34, 56)");
+ assert.strictEqual(hcl(hsl(60, 1, 0.2)) + "", "rgb(102, 102, 0)");
});
-tape("hcl.toString() reflects h, c and l channel values", function(test) {
- var c = color.hcl("#abc");
+it("hcl.toString() reflects h, c and l channel values", () => {
+ const c = hcl("#abc");
c.h += 10, c.c += 1, c.l -= 1;
- test.equal(c + "", "rgb(170, 183, 204)");
- test.end();
+ assert.strictEqual(c + "", "rgb(170, 183, 204)");
});
-tape("hcl.toString() treats undefined opacity as 1", function(test) {
- var c = color.hcl("#abc");
+it("hcl.toString() treats undefined opacity as 1", () => {
+ const c = hcl("#abc");
c.opacity = NaN;
- test.equal(c + "", "rgb(170, 187, 204)");
- test.end();
+ assert.strictEqual(c + "", "rgb(170, 187, 204)");
});
-tape("hcl.toString() treats undefined channel values as 0", function(test) {
- test.equal(color.hcl("invalid") + "", "rgb(0, 0, 0)");
- test.equal(color.hcl("#000") + "", "rgb(0, 0, 0)");
- test.equal(color.hcl("#ccc") + "", "rgb(204, 204, 204)");
- test.equal(color.hcl("#fff") + "", "rgb(255, 255, 255)");
- test.equal(color.hcl(NaN, 20, 40) + "", "rgb(94, 94, 94)"); // equivalent to hcl(*, *, 40)
- test.equal(color.hcl(120, NaN, 40) + "", "rgb(94, 94, 94)");
- test.equal(color.hcl(0, NaN, 40) + "", "rgb(94, 94, 94)");
- test.equal(color.hcl(120, 50, NaN) + "", "rgb(0, 0, 0)"); // equivalent to hcl(*, *, 0)
- test.equal(color.hcl(0, 50, NaN) + "", "rgb(0, 0, 0)");
- test.equal(color.hcl(120, 0, NaN) + "", "rgb(0, 0, 0)");
- test.end();
+it("hcl.toString() treats undefined channel values as 0", () => {
+ assert.strictEqual(hcl("invalid") + "", "rgb(0, 0, 0)");
+ assert.strictEqual(hcl("#000") + "", "rgb(0, 0, 0)");
+ assert.strictEqual(hcl("#ccc") + "", "rgb(204, 204, 204)");
+ assert.strictEqual(hcl("#fff") + "", "rgb(255, 255, 255)");
+ assert.strictEqual(hcl(NaN, 20, 40) + "", "rgb(94, 94, 94)"); // equivalent to hcl(*, *, 40)
+ assert.strictEqual(hcl(120, NaN, 40) + "", "rgb(94, 94, 94)");
+ assert.strictEqual(hcl(0, NaN, 40) + "", "rgb(94, 94, 94)");
+ assert.strictEqual(hcl(120, 50, NaN) + "", "rgb(0, 0, 0)"); // equivalent to hcl(*, *, 0)
+ assert.strictEqual(hcl(0, 50, NaN) + "", "rgb(0, 0, 0)");
+ assert.strictEqual(hcl(120, 0, NaN) + "", "rgb(0, 0, 0)");
});
-tape("hcl(yellow) is displayable", function(test) {
- test.equal(color.hcl("yellow").displayable(), true);
- test.equal(color.hcl("yellow") + "", "rgb(255, 255, 0)");
- test.end();
+it("hcl(yellow) is displayable", () => {
+ assert.strictEqual(hcl("yellow").displayable(), true);
+ assert.strictEqual(hcl("yellow") + "", "rgb(255, 255, 0)");
});
-tape("hcl(h, c, l) does not wrap hue to [0,360)", function(test) {
- test.hclEqual(color.hcl(-10, 40, 50), -10, 40, 50, 1);
- test.hclEqual(color.hcl(0, 40, 50), 0, 40, 50, 1);
- test.hclEqual(color.hcl(360, 40, 50), 360, 40, 50, 1);
- test.hclEqual(color.hcl(370, 40, 50), 370, 40, 50, 1);
- test.end();
+it("hcl(h, c, l) does not wrap hue to [0,360)", () => {
+ assertHclEqual(hcl(-10, 40, 50), -10, 40, 50, 1);
+ assertHclEqual(hcl(0, 40, 50), 0, 40, 50, 1);
+ assertHclEqual(hcl(360, 40, 50), 360, 40, 50, 1);
+ assertHclEqual(hcl(370, 40, 50), 370, 40, 50, 1);
});
-tape("hcl(h, c, l) does not clamp l channel value", function(test) {
- test.hclEqual(color.hcl(120, 20, -10), 120, 20, -10, 1);
- test.hclEqual(color.hcl(120, 20, 0), 120, 20, 0, 1);
- test.hclEqual(color.hcl(120, 20, 100), 120, 20, 100, 1);
- test.hclEqual(color.hcl(120, 20, 110), 120, 20, 110, 1);
- test.end();
+it("hcl(h, c, l) does not clamp l channel value", () => {
+ assertHclEqual(hcl(120, 20, -10), 120, 20, -10, 1);
+ assertHclEqual(hcl(120, 20, 0), 120, 20, 0, 1);
+ assertHclEqual(hcl(120, 20, 100), 120, 20, 100, 1);
+ assertHclEqual(hcl(120, 20, 110), 120, 20, 110, 1);
});
-tape("hcl(h, c, l, opacity) does not clamp opacity to [0,1]", function(test) {
- test.hclEqual(color.hcl(120, 20, 100, -0.2), 120, 20, 100, -0.2);
- test.hclEqual(color.hcl(120, 20, 110, 1.2), 120, 20, 110, 1.2);
- test.end();
+it("hcl(h, c, l, opacity) does not clamp opacity to [0,1]", () => {
+ assertHclEqual(hcl(120, 20, 100, -0.2), 120, 20, 100, -0.2);
+ assertHclEqual(hcl(120, 20, 110, 1.2), 120, 20, 110, 1.2);
});
-tape("hcl(h, c, l) coerces channel values to numbers", function(test) {
- test.hclEqual(color.hcl("120", "40", "50"), 120, 40, 50, 1);
- test.end();
+it("hcl(h, c, l) coerces channel values to numbers", () => {
+ assertHclEqual(hcl("120", "40", "50"), 120, 40, 50, 1);
});
-tape("hcl(h, c, l, opacity) coerces opacity to number", function(test) {
- test.hclEqual(color.hcl(120, 40, 50, "0.2"), 120, 40, 50, 0.2);
- test.end();
+it("hcl(h, c, l, opacity) coerces opacity to number", () => {
+ assertHclEqual(hcl(120, 40, 50, "0.2"), 120, 40, 50, 0.2);
});
-tape("hcl(h, c, l) allows undefined channel values", function(test) {
- test.hclEqual(color.hcl(undefined, NaN, "foo"), NaN, NaN, NaN, 1);
- test.hclEqual(color.hcl(undefined, 40, 50), NaN, 40, 50, 1);
- test.hclEqual(color.hcl(42, undefined, 50), 42, NaN, 50, 1);
- test.hclEqual(color.hcl(42, 40, undefined), 42, 40, NaN, 1);
- test.end();
+it("hcl(h, c, l) allows undefined channel values", () => {
+ assertHclEqual(hcl(undefined, NaN, "foo"), NaN, NaN, NaN, 1);
+ assertHclEqual(hcl(undefined, 40, 50), NaN, 40, 50, 1);
+ assertHclEqual(hcl(42, undefined, 50), 42, NaN, 50, 1);
+ assertHclEqual(hcl(42, 40, undefined), 42, 40, NaN, 1);
});
-tape("hcl(h, c, l, opacity) converts undefined opacity to 1", function(test) {
- test.hclEqual(color.hcl(10, 20, 30, null), 10, 20, 30, 1);
- test.hclEqual(color.hcl(10, 20, 30, undefined), 10, 20, 30, 1);
- test.end();
+it("hcl(h, c, l, opacity) converts undefined opacity to 1", () => {
+ assertHclEqual(hcl(10, 20, 30, null), 10, 20, 30, 1);
+ assertHclEqual(hcl(10, 20, 30, undefined), 10, 20, 30, 1);
});
-tape("hcl(format) parses the specified format and converts to HCL", function(test) {
- test.hclEqual(color.hcl("#abcdef"), 254.0079700170605, 21.62257586147983, 80.77135418262527, 1);
- test.hclEqual(color.hcl("#abc"), 252.37145234745182, 11.223567114593477, 74.96879980931759, 1);
- test.hclEqual(color.hcl("rgb(12, 34, 56)"), 262.8292023352897, 17.30347233219686, 12.404844123471648, 1);
- test.hclEqual(color.hcl("rgb(12%, 34%, 56%)"), 266.117653326772, 37.03612078188506, 35.48300043476593, 1);
- test.hclEqual(color.hcl("rgba(12%, 34%, 56%, 0.4)"), 266.117653326772, 37.03612078188506, 35.48300043476593, 0.4);
- test.hclEqual(color.hcl("hsl(60,100%,20%)"), 99.57458688693686, 48.327323183108916, 41.97125732118659, 1);
- test.hclEqual(color.hcl("hsla(60,100%,20%,0.4)"), 99.57458688693686, 48.327323183108916, 41.97125732118659, 0.4);
- test.hclEqual(color.hcl("aliceblue"), 247.7353849904697, 4.681732046417135, 97.12294991108756, 1);
- test.end();
+it("hcl(format) parses the specified format and converts to HCL", () => {
+ assertHclEqual(hcl("#abcdef"), 254.0079700170605, 21.62257586147983, 80.77135418262527, 1);
+ assertHclEqual(hcl("#abc"), 252.37145234745182, 11.223567114593477, 74.96879980931759, 1);
+ assertHclEqual(hcl("rgb(12, 34, 56)"), 262.8292023352897, 17.30347233219686, 12.404844123471648, 1);
+ assertHclEqual(hcl("rgb(12%, 34%, 56%)"), 266.117653326772, 37.03612078188506, 35.48300043476593, 1);
+ assertHclEqual(hcl("rgba(12%, 34%, 56%, 0.4)"), 266.117653326772, 37.03612078188506, 35.48300043476593, 0.4);
+ assertHclEqual(hcl("hsl(60,100%,20%)"), 99.57458688693686, 48.327323183108916, 41.97125732118659, 1);
+ assertHclEqual(hcl("hsla(60,100%,20%,0.4)"), 99.57458688693686, 48.327323183108916, 41.97125732118659, 0.4);
+ assertHclEqual(hcl("aliceblue"), 247.7353849904697, 4.681732046417135, 97.12294991108756, 1);
});
-tape("hcl(format) returns undefined channel values for unknown formats", function(test) {
- test.hclEqual(color.hcl("invalid"), NaN, NaN, NaN, NaN);
- test.end();
+it("hcl(format) returns undefined channel values for unknown formats", () => {
+ assertHclEqual(hcl("invalid"), NaN, NaN, NaN, NaN);
});
-tape("hcl(hcl) copies an HCL color", function(test) {
- var c1 = color.hcl(120, 30, 50, 0.4),
- c2 = color.hcl(c1);
- test.hclEqual(c1, 120, 30, 50, 0.4);
+it("hcl(hcl) copies an HCL color", () => {
+ const c1 = hcl(120, 30, 50, 0.4);
+ const c2 = hcl(c1);
+ assertHclEqual(c1, 120, 30, 50, 0.4);
c1.h = c1.c = c1.l = c1.opacity = 0;
- test.hclEqual(c1, 0, 0, 0, 0);
- test.hclEqual(c2, 120, 30, 50, 0.4);
- test.end();
+ assertHclEqual(c1, 0, 0, 0, 0);
+ assertHclEqual(c2, 120, 30, 50, 0.4);
});
-tape("hcl(lab) returns h = NaN if a and b are zero", function(test) {
- test.hclEqual(color.hcl(color.lab(0, 0, 0)), NaN, NaN, 0, 1);
- test.hclEqual(color.hcl(color.lab(50, 0, 0)), NaN, 0, 50, 1);
- test.hclEqual(color.hcl(color.lab(100, 0, 0)), NaN, NaN, 100, 1);
- test.hclEqual(color.hcl(color.lab(0, 10, 0)), 0, 10, 0, 1);
- test.hclEqual(color.hcl(color.lab(50, 10, 0)), 0, 10, 50, 1);
- test.hclEqual(color.hcl(color.lab(100, 10, 0)), 0, 10, 100, 1);
- test.hclEqual(color.hcl(color.lab(0, 0, 10)), 90, 10, 0, 1);
- test.hclEqual(color.hcl(color.lab(50, 0, 10)), 90, 10, 50, 1);
- test.hclEqual(color.hcl(color.lab(100, 0, 10)), 90, 10, 100, 1);
- test.end();
+it("hcl(lab) returns h = NaN if a and b are zero", () => {
+ assertHclEqual(hcl(lab(0, 0, 0)), NaN, NaN, 0, 1);
+ assertHclEqual(hcl(lab(50, 0, 0)), NaN, 0, 50, 1);
+ assertHclEqual(hcl(lab(100, 0, 0)), NaN, NaN, 100, 1);
+ assertHclEqual(hcl(lab(0, 10, 0)), 0, 10, 0, 1);
+ assertHclEqual(hcl(lab(50, 10, 0)), 0, 10, 50, 1);
+ assertHclEqual(hcl(lab(100, 10, 0)), 0, 10, 100, 1);
+ assertHclEqual(hcl(lab(0, 0, 10)), 90, 10, 0, 1);
+ assertHclEqual(hcl(lab(50, 0, 10)), 90, 10, 50, 1);
+ assertHclEqual(hcl(lab(100, 0, 10)), 90, 10, 100, 1);
});
-tape("hcl(rgb) converts from RGB", function(test) {
- test.hclEqual(color.hcl(color.rgb(255, 0, 0, 0.4)), 40.85261277607024, 106.83899941284552, 54.29173376861782, 0.4);
- test.end();
+it("hcl(rgb) converts from RGB", () => {
+ assertHclEqual(hcl(rgb(255, 0, 0, 0.4)), 40.85261277607024, 106.83899941284552, 54.29173376861782, 0.4);
});
-tape("hcl(color) converts from another colorspace via color.rgb()", function(test) {
+it("hcl(color) converts from another colorspace via rgb()", () => {
function TestColor() {}
- TestColor.prototype = Object.create(color.color.prototype);
- TestColor.prototype.rgb = function() { return color.rgb(12, 34, 56, 0.4); };
+ TestColor.prototype = Object.create(color.prototype);
+ TestColor.prototype.rgb = function() { return rgb(12, 34, 56, 0.4); };
TestColor.prototype.toString = function() { throw new Error("should use rgb, not toString"); };
- test.hclEqual(color.hcl(new TestColor), 262.8292023352897, 17.30347233219686, 12.404844123471648, 0.4);
- test.end();
+ assertHclEqual(hcl(new TestColor), 262.8292023352897, 17.30347233219686, 12.404844123471648, 0.4);
});
-tape("hcl.brighter(k) returns a brighter color if k > 0", function(test) {
- var c = color.hcl("rgba(165, 42, 42, 0.4)");
- test.hclEqual(c.brighter(0.5), 32.28342524928155, 59.60231039142763, 47.149667346714935, 0.4);
- test.hclEqual(c.brighter(1), 32.28342524928155, 59.60231039142763, 56.149667346714935, 0.4);
- test.hclEqual(c.brighter(2), 32.28342524928155, 59.60231039142763, 74.14966734671493, 0.4);
- test.end();
+it("hcl.brighter(k) returns a brighter color if k > 0", () => {
+ const c = hcl("rgba(165, 42, 42, 0.4)");
+ assertHclEqual(c.brighter(0.5), 32.28342524928155, 59.60231039142763, 47.149667346714935, 0.4);
+ assertHclEqual(c.brighter(1), 32.28342524928155, 59.60231039142763, 56.149667346714935, 0.4);
+ assertHclEqual(c.brighter(2), 32.28342524928155, 59.60231039142763, 74.14966734671493, 0.4);
});
-tape("hcl.brighter(k) returns a copy", function(test) {
- var c1 = color.hcl("rgba(70, 130, 180, 0.4)"),
- c2 = c1.brighter(1);
- test.hclEqual(c1, 255.71009124439382, 33.88100417355615, 51.98624890550498, 0.4);
- test.hclEqual(c2, 255.71009124439382, 33.88100417355615, 69.98624890550498, 0.4);
- test.end();
+it("hcl.brighter(k) returns a copy", () => {
+ const c1 = hcl("rgba(70, 130, 180, 0.4)");
+ const c2 = c1.brighter(1);
+ assertHclEqual(c1, 255.71009124439382, 33.88100417355615, 51.98624890550498, 0.4);
+ assertHclEqual(c2, 255.71009124439382, 33.88100417355615, 69.98624890550498, 0.4);
});
-tape("hcl.brighter() is equivalent to hcl.brighter(1)", function(test) {
- var c1 = color.hcl("rgba(70, 130, 180, 0.4)"),
- c2 = c1.brighter(),
- c3 = c1.brighter(1);
- test.hclEqual(c2, c3.h, c3.c, c3.l, 0.4);
- test.end();
+it("hcl.brighter() is equivalent to hcl.brighter(1)", () => {
+ const c1 = hcl("rgba(70, 130, 180, 0.4)");
+ const c2 = c1.brighter();
+ const c3 = c1.brighter(1);
+ assertHclEqual(c2, c3.h, c3.c, c3.l, 0.4);
});
-tape("hcl.brighter(k) is equivalent to hcl.darker(-k)", function(test) {
- var c1 = color.hcl("rgba(70, 130, 180, 0.4)"),
- c2 = c1.brighter(1.5),
- c3 = c1.darker(-1.5);
- test.hclEqual(c2, c3.h, c3.c, c3.l, 0.4);
- test.end();
+it("hcl.brighter(k) is equivalent to hcl.darker(-k)", () => {
+ const c1 = hcl("rgba(70, 130, 180, 0.4)");
+ const c2 = c1.brighter(1.5);
+ const c3 = c1.darker(-1.5);
+ assertHclEqual(c2, c3.h, c3.c, c3.l, 0.4);
});
-tape("hcl.darker(k) returns a darker color if k > 0", function(test) {
- var c = color.hcl("rgba(165, 42, 42, 0.4)");
- test.hclEqual(c.darker(0.5), 32.28342524928155, 59.60231039142763, 29.149667346714935, 0.4);
- test.hclEqual(c.darker(1), 32.28342524928155, 59.60231039142763, 20.149667346714935, 0.4);
- test.hclEqual(c.darker(2), 32.28342524928155, 59.60231039142763, 2.149667346714935, 0.4);
- test.end();
+it("hcl.darker(k) returns a darker color if k > 0", () => {
+ const c = hcl("rgba(165, 42, 42, 0.4)");
+ assertHclEqual(c.darker(0.5), 32.28342524928155, 59.60231039142763, 29.149667346714935, 0.4);
+ assertHclEqual(c.darker(1), 32.28342524928155, 59.60231039142763, 20.149667346714935, 0.4);
+ assertHclEqual(c.darker(2), 32.28342524928155, 59.60231039142763, 2.149667346714935, 0.4);
});
-tape("hcl.darker(k) returns a copy", function(test) {
- var c1 = color.hcl("rgba(70, 130, 180, 0.4)"),
- c2 = c1.darker(1);
- test.hclEqual(c1, 255.71009124439382, 33.88100417355615, 51.98624890550498, 0.4);
- test.hclEqual(c2, 255.71009124439382, 33.88100417355615, 33.98624890550498, 0.4);
- test.end();
+it("hcl.darker(k) returns a copy", () => {
+ const c1 = hcl("rgba(70, 130, 180, 0.4)");
+ const c2 = c1.darker(1);
+ assertHclEqual(c1, 255.71009124439382, 33.88100417355615, 51.98624890550498, 0.4);
+ assertHclEqual(c2, 255.71009124439382, 33.88100417355615, 33.98624890550498, 0.4);
});
-tape("hcl.darker() is equivalent to hcl.darker(1)", function(test) {
- var c1 = color.hcl("rgba(70, 130, 180, 0.4)"),
- c2 = c1.darker(),
- c3 = c1.darker(1);
- test.hclEqual(c2, c3.h, c3.c, c3.l, 0.4);
- test.end();
+it("hcl.darker() is equivalent to hcl.darker(1)", () => {
+ const c1 = hcl("rgba(70, 130, 180, 0.4)");
+ const c2 = c1.darker();
+ const c3 = c1.darker(1);
+ assertHclEqual(c2, c3.h, c3.c, c3.l, 0.4);
});
-tape("hcl.darker(k) is equivalent to hcl.brighter(-k)", function(test) {
- var c1 = color.hcl("rgba(70, 130, 180, 0.4)"),
- c2 = c1.darker(1.5),
- c3 = c1.brighter(-1.5);
- test.hclEqual(c2, c3.h, c3.c, c3.l, 0.4);
- test.end();
+it("hcl.darker(k) is equivalent to hcl.brighter(-k)", () => {
+ const c1 = hcl("rgba(70, 130, 180, 0.4)");
+ const c2 = c1.darker(1.5);
+ const c3 = c1.brighter(-1.5);
+ assertHclEqual(c2, c3.h, c3.c, c3.l, 0.4);
});
-tape("hcl.rgb() converts to RGB", function(test) {
- var c = color.hcl(120, 30, 50, 0.4);
- test.rgbEqual(c.rgb(), 105, 126, 73, 0.4);
- test.end();
+it("hcl.rgb() converts to RGB", () => {
+ const c = hcl(120, 30, 50, 0.4);
+ assertRgbApproxEqual(c.rgb(), 105, 126, 73, 0.4);
});
diff --git a/test/hclEqual.js b/test/hclEqual.js
deleted file mode 100644
index f56bb2a..0000000
--- a/test/hclEqual.js
+++ /dev/null
@@ -1,15 +0,0 @@
-var tape = require("tape"),
- color = require("../");
-
-tape.Test.prototype.hclEqual = function(actual, h, c, l, opacity) {
- this._assert(actual instanceof color.hcl
- && (isNaN(h) ? isNaN(actual.h) && actual.h !== actual.h : h - 1e-6 <= actual.h && actual.h <= h + 1e-6)
- && (isNaN(c) ? isNaN(actual.c) && actual.c !== actual.c : c - 1e-6 <= actual.c && actual.c <= c + 1e-6)
- && (isNaN(l) ? isNaN(actual.l) && actual.l !== actual.l : l - 1e-6 <= actual.l && actual.l <= l + 1e-6)
- && (isNaN(opacity) ? isNaN(actual.opacity) && actual.opacity !== actual.opacity : actual.opacity === opacity), {
- message: "should be equal",
- operator: "hclEqual",
- actual: [actual.h, actual.c, actual.l, actual.opacity],
- expected: [h, c, l, opacity]
- });
-};
diff --git a/test/hsl-test.js b/test/hsl-test.js
index 4ac92b5..5f5b9c7 100644
--- a/test/hsl-test.js
+++ b/test/hsl-test.js
@@ -1,328 +1,285 @@
-var tape = require("tape"),
- color = require("../");
+import assert from "assert";
+import {color, hsl, rgb} from "../src/index.js";
+import {assertHslEqual, assertRgbApproxEqual} from "./asserts.js";
-require("./hslEqual");
-require("./rgbEqual");
-
-tape("hsl(…) returns an instance of hsl and color", function(test) {
- var c = color.hsl(120, 0.4, 0.5);
- test.ok(c instanceof color.hsl);
- test.ok(c instanceof color.color);
- test.end();
+it("hsl(…) returns an instance of hsl and color", () => {
+ const c = hsl(120, 0.4, 0.5);
+ assert(c instanceof hsl);
+ assert(c instanceof color);
});
-tape("hsl(…) exposes h, s, and l channel values and opacity", function(test) {
- test.hslEqual(color.hsl("#abc"), 210, 0.25, 0.7333333, 1);
- test.hslEqual(color.hsl("hsla(60, 100%, 20%, 0.4)"), 60, 1, 0.2, 0.4);
- test.end();
+it("hsl(…) exposes h, s, and l channel values and opacity", () => {
+ assertHslEqual(hsl("#abc"), 210, 0.25, 0.7333333, 1);
+ assertHslEqual(hsl("hsla(60, 100%, 20%, 0.4)"), 60, 1, 0.2, 0.4);
});
-tape("hsl.toString() converts to RGB and formats as rgb(…) or rgba(…)", function(test) {
- test.equal(color.hsl("#abcdef") + "", "rgb(171, 205, 239)");
- test.equal(color.hsl("moccasin") + "", "rgb(255, 228, 181)");
- test.equal(color.hsl("hsl(60, 100%, 20%)") + "", "rgb(102, 102, 0)");
- test.equal(color.hsl("hsla(60, 100%, 20%, 0.4)") + "", "rgba(102, 102, 0, 0.4)");
- test.equal(color.hsl("rgb(12, 34, 56)") + "", "rgb(12, 34, 56)");
- test.equal(color.hsl(color.rgb(12, 34, 56)) + "", "rgb(12, 34, 56)");
- test.equal(color.hsl(color.hsl(60, 1, 0.2)) + "", "rgb(102, 102, 0)");
- test.equal(color.hsl(color.hsl(60, 1, 0.2, 0.4)) + "", "rgba(102, 102, 0, 0.4)");
- test.end();
+it("hsl.toString() converts to RGB and formats as rgb(…) or rgba(…)", () => {
+ assert.strictEqual(hsl("#abcdef") + "", "rgb(171, 205, 239)");
+ assert.strictEqual(hsl("moccasin") + "", "rgb(255, 228, 181)");
+ assert.strictEqual(hsl("hsl(60, 100%, 20%)") + "", "rgb(102, 102, 0)");
+ assert.strictEqual(hsl("hsla(60, 100%, 20%, 0.4)") + "", "rgba(102, 102, 0, 0.4)");
+ assert.strictEqual(hsl("rgb(12, 34, 56)") + "", "rgb(12, 34, 56)");
+ assert.strictEqual(hsl(rgb(12, 34, 56)) + "", "rgb(12, 34, 56)");
+ assert.strictEqual(hsl(hsl(60, 1, 0.2)) + "", "rgb(102, 102, 0)");
+ assert.strictEqual(hsl(hsl(60, 1, 0.2, 0.4)) + "", "rgba(102, 102, 0, 0.4)");
});
-tape("hsl.formatRgb() formats as rgb(…) or rgba(…)", function(test) {
- test.equal(color.hsl("#abcdef").formatRgb(), "rgb(171, 205, 239)");
- test.equal(color.hsl("hsl(60, 100%, 20%)").formatRgb(), "rgb(102, 102, 0)");
- test.equal(color.hsl("rgba(12%, 34%, 56%, 0.4)").formatRgb(), "rgba(31, 87, 143, 0.4)");
- test.equal(color.hsl("hsla(60, 100%, 20%, 0.4)").formatRgb(), "rgba(102, 102, 0, 0.4)");
- test.end();
+it("hsl.formatRgb() formats as rgb(…) or rgba(…)", () => {
+ assert.strictEqual(hsl("#abcdef").formatRgb(), "rgb(171, 205, 239)");
+ assert.strictEqual(hsl("hsl(60, 100%, 20%)").formatRgb(), "rgb(102, 102, 0)");
+ assert.strictEqual(hsl("rgba(12%, 34%, 56%, 0.4)").formatRgb(), "rgba(31, 87, 143, 0.4)");
+ assert.strictEqual(hsl("hsla(60, 100%, 20%, 0.4)").formatRgb(), "rgba(102, 102, 0, 0.4)");
});
-tape("hsl.formatHsl() formats as hsl(…) or hsla(…)", function(test) {
- test.equal(color.hsl("#abcdef").formatHsl(), "hsl(210, 68%, 80.3921568627451%)");
- test.equal(color.hsl("hsl(60, 100%, 20%)").formatHsl(), "hsl(60, 100%, 20%)");
- test.equal(color.hsl("rgba(12%, 34%, 56%, 0.4)").formatHsl(), "hsla(210, 64.70588235294117%, 34%, 0.4)");
- test.equal(color.hsl("hsla(60, 100%, 20%, 0.4)").formatHsl(), "hsla(60, 100%, 20%, 0.4)");
- test.end();
+it("hsl.formatHsl() formats as hsl(…) or hsla(…)", () => {
+ assert.strictEqual(hsl("#abcdef").formatHsl(), "hsl(210, 68%, 80.3921568627451%)");
+ assert.strictEqual(hsl("hsl(60, 100%, 20%)").formatHsl(), "hsl(60, 100%, 20%)");
+ assert.strictEqual(hsl("rgba(12%, 34%, 56%, 0.4)").formatHsl(), "hsla(210, 64.70588235294117%, 34%, 0.4)");
+ assert.strictEqual(hsl("hsla(60, 100%, 20%, 0.4)").formatHsl(), "hsla(60, 100%, 20%, 0.4)");
});
-tape("hsl.formatHex() formats as #rrggbb", function(test) {
- test.equal(color.hsl("#abcdef").formatHex(), "#abcdef");
- test.equal(color.hsl("hsl(60, 100%, 20%)").formatHex(), "#666600");
- test.equal(color.hsl("rgba(12%, 34%, 56%, 0.4)").formatHex(), "#1f578f");
- test.equal(color.hsl("hsla(60, 100%, 20%, 0.4)").formatHex(), "#666600");
- test.end();
+it("hsl.formatHex() formats as #rrggbb", () => {
+ assert.strictEqual(hsl("#abcdef").formatHex(), "#abcdef");
+ assert.strictEqual(hsl("hsl(60, 100%, 20%)").formatHex(), "#666600");
+ assert.strictEqual(hsl("rgba(12%, 34%, 56%, 0.4)").formatHex(), "#1f578f");
+ assert.strictEqual(hsl("hsla(60, 100%, 20%, 0.4)").formatHex(), "#666600");
});
-tape("hsl.toString() reflects h, s and l channel values and opacity", function(test) {
- var c = color.hsl("#abc");
+it("hsl.toString() reflects h, s and l channel values and opacity", () => {
+ const c = hsl("#abc");
c.h += 10, c.s += 0.01, c.l -= 0.01, c.opacity = 0.4;
- test.equal(c + "", "rgba(166, 178, 203, 0.4)");
- test.end();
+ assert.strictEqual(c + "", "rgba(166, 178, 203, 0.4)");
});
-tape("hsl.toString() treats undefined channel values as 0", function(test) {
- test.equal(color.hsl("invalid") + "", "rgb(0, 0, 0)");
- test.equal(color.hsl("#000") + "", "rgb(0, 0, 0)");
- test.equal(color.hsl("#ccc") + "", "rgb(204, 204, 204)");
- test.equal(color.hsl("#fff") + "", "rgb(255, 255, 255)");
- test.equal(color.hsl(NaN, 0.5, 0.4) + "", "rgb(102, 102, 102)"); // equivalent to hsl(*, 0, 0.4)
- test.equal(color.hsl(120, NaN, 0.4) + "", "rgb(102, 102, 102)");
- test.equal(color.hsl(NaN, NaN, 0.4) + "", "rgb(102, 102, 102)");
- test.equal(color.hsl(120, 0.5, NaN) + "", "rgb(0, 0, 0)"); // equivalent to hsl(120, 0.5, 0)
- test.end();
+it("hsl.toString() treats undefined channel values as 0", () => {
+ assert.strictEqual(hsl("invalid") + "", "rgb(0, 0, 0)");
+ assert.strictEqual(hsl("#000") + "", "rgb(0, 0, 0)");
+ assert.strictEqual(hsl("#ccc") + "", "rgb(204, 204, 204)");
+ assert.strictEqual(hsl("#fff") + "", "rgb(255, 255, 255)");
+ assert.strictEqual(hsl(NaN, 0.5, 0.4) + "", "rgb(102, 102, 102)"); // equivalent to hsl(*, 0, 0.4)
+ assert.strictEqual(hsl(120, NaN, 0.4) + "", "rgb(102, 102, 102)");
+ assert.strictEqual(hsl(NaN, NaN, 0.4) + "", "rgb(102, 102, 102)");
+ assert.strictEqual(hsl(120, 0.5, NaN) + "", "rgb(0, 0, 0)"); // equivalent to hsl(120, 0.5, 0)
});
-tape("hsl.toString() treats undefined opacity as 1", function(test) {
- var c = color.hsl("#abc");
+it("hsl.toString() treats undefined opacity as 1", () => {
+ const c = hsl("#abc");
c.opacity = NaN;
- test.equal(c + "", "rgb(170, 187, 204)");
- test.end();
+ assert.strictEqual(c + "", "rgb(170, 187, 204)");
});
-tape("hsl(h, s, l) does not wrap hue to [0,360)", function(test) {
- test.hslEqual(color.hsl(-10, 0.4, 0.5), -10, 0.4, 0.5, 1);
- test.hslEqual(color.hsl(0, 0.4, 0.5), 0, 0.4, 0.5, 1);
- test.hslEqual(color.hsl(360, 0.4, 0.5), 360, 0.4, 0.5, 1);
- test.hslEqual(color.hsl(370, 0.4, 0.5), 370, 0.4, 0.5, 1);
- test.end();
+it("hsl(h, s, l) does not wrap hue to [0,360)", () => {
+ assertHslEqual(hsl(-10, 0.4, 0.5), -10, 0.4, 0.5, 1);
+ assertHslEqual(hsl(0, 0.4, 0.5), 0, 0.4, 0.5, 1);
+ assertHslEqual(hsl(360, 0.4, 0.5), 360, 0.4, 0.5, 1);
+ assertHslEqual(hsl(370, 0.4, 0.5), 370, 0.4, 0.5, 1);
});
-tape("hsl(h, s, l) does not clamp s and l channel values to [0,1]", function(test) {
- test.hslEqual(color.hsl(120, -0.1, 0.5), 120, -0.1, 0.5, 1);
- test.hslEqual(color.hsl(120, 1.1, 0.5), 120, 1.1, 0.5, 1);
- test.hslEqual(color.hsl(120, 0.2, -0.1), 120, 0.2, -0.1, 1);
- test.hslEqual(color.hsl(120, 0.2, 1.1), 120, 0.2, 1.1, 1);
- test.end();
+it("hsl(h, s, l) does not clamp s and l channel values to [0,1]", () => {
+ assertHslEqual(hsl(120, -0.1, 0.5), 120, -0.1, 0.5, 1);
+ assertHslEqual(hsl(120, 1.1, 0.5), 120, 1.1, 0.5, 1);
+ assertHslEqual(hsl(120, 0.2, -0.1), 120, 0.2, -0.1, 1);
+ assertHslEqual(hsl(120, 0.2, 1.1), 120, 0.2, 1.1, 1);
});
-tape("hsl(h, s, l, opacity) does not clamp opacity to [0,1]", function(test) {
- test.hslEqual(color.hsl(120, 0.1, 0.5, -0.2), 120, 0.1, 0.5, -0.2);
- test.hslEqual(color.hsl(120, 0.9, 0.5, 1.2), 120, 0.9, 0.5, 1.2);
- test.end();
+it("hsl(h, s, l, opacity) does not clamp opacity to [0,1]", () => {
+ assertHslEqual(hsl(120, 0.1, 0.5, -0.2), 120, 0.1, 0.5, -0.2);
+ assertHslEqual(hsl(120, 0.9, 0.5, 1.2), 120, 0.9, 0.5, 1.2);
});
-tape("hsl(h, s, l) coerces channel values to numbers", function(test) {
- test.hslEqual(color.hsl("120", ".4", ".5"), 120, 0.4, 0.5, 1);
- test.end();
+it("hsl(h, s, l) coerces channel values to numbers", () => {
+ assertHslEqual(hsl("120", ".4", ".5"), 120, 0.4, 0.5, 1);
});
-tape("hsl(h, s, l, opacity) coerces opacity to number", function(test) {
- test.hslEqual(color.hsl(120, 0.1, 0.5, "0.2"), 120, 0.1, 0.5, 0.2);
- test.hslEqual(color.hsl(120, 0.9, 0.5, "0.9"), 120, 0.9, 0.5, 0.9);
- test.end();
+it("hsl(h, s, l, opacity) coerces opacity to number", () => {
+ assertHslEqual(hsl(120, 0.1, 0.5, "0.2"), 120, 0.1, 0.5, 0.2);
+ assertHslEqual(hsl(120, 0.9, 0.5, "0.9"), 120, 0.9, 0.5, 0.9);
});
-tape("hsl(h, s, l) allows undefined channel values", function(test) {
- test.hslEqual(color.hsl(undefined, NaN, "foo"), NaN, NaN, NaN, 1);
- test.hslEqual(color.hsl(undefined, 0.4, 0.5), NaN, 0.4, 0.5, 1);
- test.hslEqual(color.hsl(42, undefined, 0.5), 42, NaN, 0.5, 1);
- test.hslEqual(color.hsl(42, 0.4, undefined), 42, 0.4, NaN, 1);
- test.end();
+it("hsl(h, s, l) allows undefined channel values", () => {
+ assertHslEqual(hsl(undefined, NaN, "foo"), NaN, NaN, NaN, 1);
+ assertHslEqual(hsl(undefined, 0.4, 0.5), NaN, 0.4, 0.5, 1);
+ assertHslEqual(hsl(42, undefined, 0.5), 42, NaN, 0.5, 1);
+ assertHslEqual(hsl(42, 0.4, undefined), 42, 0.4, NaN, 1);
});
-tape("hsl(h, s, l, opacity) converts undefined opacity to 1", function(test) {
- test.hslEqual(color.hsl(10, 0.2, 0.3, null), 10, 0.2, 0.3, 1);
- test.hslEqual(color.hsl(10, 0.2, 0.3, undefined), 10, 0.2, 0.3, 1);
- test.end();
+it("hsl(h, s, l, opacity) converts undefined opacity to 1", () => {
+ assertHslEqual(hsl(10, 0.2, 0.3, null), 10, 0.2, 0.3, 1);
+ assertHslEqual(hsl(10, 0.2, 0.3, undefined), 10, 0.2, 0.3, 1);
});
-tape("hsl(h, s, l) preserves explicit hue, even for grays", function(test) {
- test.hslEqual(color.hsl(0, 0, 0), 0, 0, 0, 1);
- test.hslEqual(color.hsl(42, 0, 0.5), 42, 0, 0.5, 1);
- test.hslEqual(color.hsl(118, 0, 1), 118, 0, 1, 1);
- test.end();
+it("hsl(h, s, l) preserves explicit hue, even for grays", () => {
+ assertHslEqual(hsl(0, 0, 0), 0, 0, 0, 1);
+ assertHslEqual(hsl(42, 0, 0.5), 42, 0, 0.5, 1);
+ assertHslEqual(hsl(118, 0, 1), 118, 0, 1, 1);
});
-tape("hsl(h, s, l) preserves explicit saturation, even for white or black", function(test) {
- test.hslEqual(color.hsl(0, 0, 0), 0, 0, 0, 1);
- test.hslEqual(color.hsl(0, 0.18, 0), 0, 0.18, 0, 1);
- test.hslEqual(color.hsl(0, 0.42, 1), 0, 0.42, 1, 1);
- test.hslEqual(color.hsl(0, 1, 1), 0, 1, 1, 1);
- test.end();
+it("hsl(h, s, l) preserves explicit saturation, even for white or black", () => {
+ assertHslEqual(hsl(0, 0, 0), 0, 0, 0, 1);
+ assertHslEqual(hsl(0, 0.18, 0), 0, 0.18, 0, 1);
+ assertHslEqual(hsl(0, 0.42, 1), 0, 0.42, 1, 1);
+ assertHslEqual(hsl(0, 1, 1), 0, 1, 1, 1);
});
-tape("hsl(format) parses the specified format and converts to HSL", function(test) {
- test.hslEqual(color.hsl("#abcdef"), 210, 0.68, 0.8039215, 1);
- test.hslEqual(color.hsl("#abc"), 210, 0.25, 0.733333333, 1);
- test.hslEqual(color.hsl("rgb(12, 34, 56)"), 210, 0.647058, 0.1333333, 1);
- test.hslEqual(color.hsl("rgb(12%, 34%, 56%)"), 210, 0.647058, 0.34, 1);
- test.hslEqual(color.hsl("hsl(60,100%,20%)"), 60, 1, 0.2, 1);
- test.hslEqual(color.hsl("hsla(60,100%,20%,0.4)"), 60, 1, 0.2, 0.4);
- test.hslEqual(color.hsl("aliceblue"), 208, 1, 0.9705882, 1);
- test.hslEqual(color.hsl("transparent"), NaN, NaN, NaN, 0);
- test.end();
+it("hsl(format) parses the specified format and converts to HSL", () => {
+ assertHslEqual(hsl("#abcdef"), 210, 0.68, 0.8039215, 1);
+ assertHslEqual(hsl("#abc"), 210, 0.25, 0.733333333, 1);
+ assertHslEqual(hsl("rgb(12, 34, 56)"), 210, 0.647058, 0.1333333, 1);
+ assertHslEqual(hsl("rgb(12%, 34%, 56%)"), 210, 0.647058, 0.34, 1);
+ assertHslEqual(hsl("hsl(60,100%,20%)"), 60, 1, 0.2, 1);
+ assertHslEqual(hsl("hsla(60,100%,20%,0.4)"), 60, 1, 0.2, 0.4);
+ assertHslEqual(hsl("aliceblue"), 208, 1, 0.9705882, 1);
+ assertHslEqual(hsl("transparent"), NaN, NaN, NaN, 0);
});
-tape("hsl(format) ignores the hue if the saturation is <= 0", function(test) {
- test.hslEqual(color.hsl("hsl(120,0%,20%)"), NaN, 0, 0.2, 1);
- test.hslEqual(color.hsl("hsl(120,-10%,20%)"), NaN, -0.1, 0.2, 1);
- test.end();
+it("hsl(format) ignores the hue if the saturation is <= 0", () => {
+ assertHslEqual(hsl("hsl(120,0%,20%)"), NaN, 0, 0.2, 1);
+ assertHslEqual(hsl("hsl(120,-10%,20%)"), NaN, -0.1, 0.2, 1);
});
-tape("hsl(format) ignores the hue and saturation if the lightness is <= 0 or >= 1", function(test) {
- test.hslEqual(color.hsl("hsl(120,20%,-10%)"), NaN, NaN, -0.1, 1);
- test.hslEqual(color.hsl("hsl(120,20%,0%)"), NaN, NaN, 0.0, 1);
- test.hslEqual(color.hsl("hsl(120,20%,100%)"), NaN, NaN, 1.0, 1);
- test.hslEqual(color.hsl("hsl(120,20%,120%)"), NaN, NaN, 1.2, 1);
- test.end();
+it("hsl(format) ignores the hue and saturation if the lightness is <= 0 or >= 1", () => {
+ assertHslEqual(hsl("hsl(120,20%,-10%)"), NaN, NaN, -0.1, 1);
+ assertHslEqual(hsl("hsl(120,20%,0%)"), NaN, NaN, 0.0, 1);
+ assertHslEqual(hsl("hsl(120,20%,100%)"), NaN, NaN, 1.0, 1);
+ assertHslEqual(hsl("hsl(120,20%,120%)"), NaN, NaN, 1.2, 1);
});
-tape("hsl(format) ignores all channels if the alpha is <= 0", function(test) {
- test.hslEqual(color.hsl("hsla(120,20%,10%,0)"), NaN, NaN, NaN, 0);
- test.hslEqual(color.hsl("hsla(120,20%,10%,-0.1)"), NaN, NaN, NaN, -0.1);
- test.end();
+it("hsl(format) ignores all channels if the alpha is <= 0", () => {
+ assertHslEqual(hsl("hsla(120,20%,10%,0)"), NaN, NaN, NaN, 0);
+ assertHslEqual(hsl("hsla(120,20%,10%,-0.1)"), NaN, NaN, NaN, -0.1);
});
-tape("hsl(format) does not lose precision when parsing HSL formats", function(test) {
- test.hslEqual(color.hsl("hsl(325,50%,40%)"), 325, 0.5, 0.4, 1);
- test.end();
+it("hsl(format) does not lose precision when parsing HSL formats", () => {
+ assertHslEqual(hsl("hsl(325,50%,40%)"), 325, 0.5, 0.4, 1);
});
-tape("hsl(format) returns undefined channel values for unknown formats", function(test) {
- test.hslEqual(color.hsl("invalid"), NaN, NaN, NaN, NaN);
- test.end();
+it("hsl(format) returns undefined channel values for unknown formats", () => {
+ assertHslEqual(hsl("invalid"), NaN, NaN, NaN, NaN);
});
-tape("hsl(hsl) copies an HSL color", function(test) {
- var c1 = color.hsl("hsla(120,30%,50%,0.4)"),
- c2 = color.hsl(c1);
- test.hslEqual(c1, 120, 0.3, 0.5, 0.4);
+it("hsl(hsl) copies an HSL color", () => {
+ const c1 = hsl("hsla(120,30%,50%,0.4)");
+ const c2 = hsl(c1);
+ assertHslEqual(c1, 120, 0.3, 0.5, 0.4);
c1.h = c1.s = c1.l = c1.opacity = 0;
- test.hslEqual(c1, 0, 0, 0, 0);
- test.hslEqual(c2, 120, 0.3, 0.5, 0.4);
- test.end();
+ assertHslEqual(c1, 0, 0, 0, 0);
+ assertHslEqual(c2, 120, 0.3, 0.5, 0.4);
});
-tape("hsl(rgb) converts from RGB", function(test) {
- test.hslEqual(color.hsl(color.rgb(255, 0, 0, 0.4)), 0, 1, 0.5, 0.4);
- test.end();
+it("hsl(rgb) converts from RGB", () => {
+ assertHslEqual(hsl(rgb(255, 0, 0, 0.4)), 0, 1, 0.5, 0.4);
});
-tape("hsl(color) returns undefined hue and zero saturation for grays (but not white and black)", function(test) {
- test.hslEqual(color.hsl("gray"), NaN, 0, 0.5019608, 1);
- test.hslEqual(color.hsl("#ccc"), NaN, 0, 0.8, 1);
- test.hslEqual(color.hsl(color.rgb("gray")), NaN, 0, 0.5019608, 1);
- test.end();
+it("hsl(color) returns undefined hue and zero saturation for grays (but not white and black)", () => {
+ assertHslEqual(hsl("gray"), NaN, 0, 0.5019608, 1);
+ assertHslEqual(hsl("#ccc"), NaN, 0, 0.8, 1);
+ assertHslEqual(hsl(rgb("gray")), NaN, 0, 0.5019608, 1);
});
-tape("hsl(color) returns undefined hue and saturation for black and white", function(test) {
- test.hslEqual(color.hsl("black"), NaN, NaN, 0, 1);
- test.hslEqual(color.hsl("#000"), NaN, NaN, 0, 1);
- test.hslEqual(color.hsl("white"), NaN, NaN, 1, 1);
- test.hslEqual(color.hsl("#fff"), NaN, NaN, 1, 1);
- test.hslEqual(color.hsl(color.rgb("#fff")), NaN, NaN, 1, 1);
- test.end();
+it("hsl(color) returns undefined hue and saturation for black and white", () => {
+ assertHslEqual(hsl("black"), NaN, NaN, 0, 1);
+ assertHslEqual(hsl("#000"), NaN, NaN, 0, 1);
+ assertHslEqual(hsl("white"), NaN, NaN, 1, 1);
+ assertHslEqual(hsl("#fff"), NaN, NaN, 1, 1);
+ assertHslEqual(hsl(rgb("#fff")), NaN, NaN, 1, 1);
});
-tape("hsl(color) converts from another colorspace via color.rgb()", function(test) {
+it("hsl(color) converts from another colorspace via rgb()", () => {
function TestColor() {}
- TestColor.prototype = Object.create(color.color.prototype);
- TestColor.prototype.rgb = function() { return color.rgb(12, 34, 56, 0.4); };
+ TestColor.prototype = Object.create(color.prototype);
+ TestColor.prototype.rgb = function() { return rgb(12, 34, 56, 0.4); };
TestColor.prototype.toString = function() { throw new Error("should use rgb, not toString"); };
- test.hslEqual(color.hsl(new TestColor), 210, 0.6470588, 0.1333334, 0.4);
- test.end();
-});
-
-tape("hsl.displayable() returns true if the color is within the RGB gamut and the opacity is in [0,1]", function(test) {
- test.equal(color.hsl("white").displayable(), true);
- test.equal(color.hsl("red").displayable(), true);
- test.equal(color.hsl("black").displayable(), true);
- test.equal(color.hsl("invalid").displayable(), false);
- test.equal(color.hsl(NaN, NaN, 1).displayable(), true);
- test.equal(color.hsl(NaN, NaN, 1.5).displayable(), false);
- test.equal(color.hsl(120, -0.5, 0).displayable(), false);
- test.equal(color.hsl(120, 1.5, 0).displayable(), false);
- test.equal(color.hsl(0, 1, 1, 0).displayable(), true);
- test.equal(color.hsl(0, 1, 1, 1).displayable(), true);
- test.equal(color.hsl(0, 1, 1, -0.2).displayable(), false);
- test.equal(color.hsl(0, 1, 1, 1.2).displayable(), false);
- test.end();
-});
-
-tape("hsl.brighter(k) returns a brighter color if k > 0", function(test) {
- var c = color.hsl("rgba(165, 42, 42, 0.4)");
- test.hslEqual(c.brighter(0.5), 0, 0.5942028, 0.4851222, 0.4);
- test.hslEqual(c.brighter(1), 0, 0.5942028, 0.5798319, 0.4);
- test.hslEqual(c.brighter(2), 0, 0.5942028, 0.8283313, 0.4);
- test.end();
-});
-
-tape("hsl.brighter(k) returns a copy", function(test) {
- var c1 = color.hsl("rgba(70, 130, 180, 0.4)"),
- c2 = c1.brighter(1);
- test.hslEqual(c1, 207.272727, 0.44, 0.4901961, 0.4);
- test.hslEqual(c2, 207.272727, 0.44, 0.7002801, 0.4);
- test.end();
-});
-
-tape("hsl.brighter() is equivalent to hsl.brighter(1)", function(test) {
- var c1 = color.hsl("rgba(70, 130, 180, 0.4)"),
- c2 = c1.brighter(),
- c3 = c1.brighter(1);
- test.hslEqual(c2, c3.h, c3.s, c3.l, 0.4);
- test.end();
-});
-
-tape("hsl.brighter(k) is equivalent to hsl.darker(-k)", function(test) {
- var c1 = color.hsl("rgba(70, 130, 180, 0.4)"),
- c2 = c1.brighter(1.5),
- c3 = c1.darker(-1.5);
- test.hslEqual(c2, c3.h, c3.s, c3.l, 0.4);
- test.end();
-});
-
-tape("hsl(\"black\").brighter() still returns black", function(test) {
- var c1 = color.hsl("black"),
- c2 = c1.brighter(1);
- test.hslEqual(c1, NaN, NaN, 0, 1);
- test.hslEqual(c2, NaN, NaN, 0, 1);
- test.end();
-});
-
-tape("hsl.darker(k) returns a darker color if k > 0", function(test) {
- var c = color.hsl("rgba(165, 42, 42, 0.4)");
- test.hslEqual(c.darker(0.5), 0, 0.5942029, 0.3395855, 0.4);
- test.hslEqual(c.darker(1), 0, 0.5942029, 0.2841176, 0.4);
- test.hslEqual(c.darker(2), 0, 0.5942029, 0.1988823, 0.4);
- test.end();
-});
-
-tape("hsl.darker(k) returns a copy", function(test) {
- var c1 = color.hsl("rgba(70, 130, 180, 0.4)"),
- c2 = c1.darker(1);
- test.hslEqual(c1, 207.272727, 0.44, 0.4901961, 0.4);
- test.hslEqual(c2, 207.272727, 0.44, 0.3431373, 0.4);
- test.end();
-});
-
-tape("hsl.darker() is equivalent to hsl.darker(1)", function(test) {
- var c1 = color.hsl("rgba(70, 130, 180, 0.4)"),
- c2 = c1.darker(),
- c3 = c1.darker(1);
- test.hslEqual(c2, c3.h, c3.s, c3.l, 0.4);
- test.end();
-});
-
-tape("hsl.darker(k) is equivalent to hsl.brighter(-k)", function(test) {
- var c1 = color.hsl("rgba(70, 130, 180, 0.4)"),
- c2 = c1.darker(1.5),
- c3 = c1.brighter(-1.5);
- test.hslEqual(c2, c3.h, c3.s, c3.l, 0.4);
- test.end();
-});
-
-tape("hsl.rgb() converts to RGB", function(test) {
- var c = color.hsl(120, 0.3, 0.5, 0.4);
- test.rgbEqual(c.rgb(), 89, 166, 89, 0.4);
- test.end();
-});
-
-tape("hsl.copy(…) returns a new hsl with the specified channel values", function(test) {
- var c = color.hsl(120, 0.3, 0.5, 0.4);
- test.equal(c.copy() instanceof color.hsl, true);
- test.equal(c.copy().formatHsl(), "hsla(120, 30%, 50%, 0.4)");
- test.equal(c.copy({opacity: 1}).formatHsl(), "hsl(120, 30%, 50%)");
- test.equal(c.copy({h: 20}).formatHsl(), "hsla(20, 30%, 50%, 0.4)");
- test.equal(c.copy({h: 20, s: 0.4}).formatHsl(), "hsla(20, 40%, 50%, 0.4)");
- test.end();
+ assertHslEqual(hsl(new TestColor), 210, 0.6470588, 0.1333334, 0.4);
+});
+
+it("hsl.displayable() returns true if the color is within the RGB gamut and the opacity is in [0,1]", () => {
+ assert.strictEqual(hsl("white").displayable(), true);
+ assert.strictEqual(hsl("red").displayable(), true);
+ assert.strictEqual(hsl("black").displayable(), true);
+ assert.strictEqual(hsl("invalid").displayable(), false);
+ assert.strictEqual(hsl(NaN, NaN, 1).displayable(), true);
+ assert.strictEqual(hsl(NaN, NaN, 1.5).displayable(), false);
+ assert.strictEqual(hsl(120, -0.5, 0).displayable(), false);
+ assert.strictEqual(hsl(120, 1.5, 0).displayable(), false);
+ assert.strictEqual(hsl(0, 1, 1, 0).displayable(), true);
+ assert.strictEqual(hsl(0, 1, 1, 1).displayable(), true);
+ assert.strictEqual(hsl(0, 1, 1, -0.2).displayable(), false);
+ assert.strictEqual(hsl(0, 1, 1, 1.2).displayable(), false);
+});
+
+it("hsl.brighter(k) returns a brighter color if k > 0", () => {
+ const c = hsl("rgba(165, 42, 42, 0.4)");
+ assertHslEqual(c.brighter(0.5), 0, 0.5942028, 0.4851222, 0.4);
+ assertHslEqual(c.brighter(1), 0, 0.5942028, 0.5798319, 0.4);
+ assertHslEqual(c.brighter(2), 0, 0.5942028, 0.8283313, 0.4);
+});
+
+it("hsl.brighter(k) returns a copy", () => {
+ const c1 = hsl("rgba(70, 130, 180, 0.4)");
+ const c2 = c1.brighter(1);
+ assertHslEqual(c1, 207.272727, 0.44, 0.4901961, 0.4);
+ assertHslEqual(c2, 207.272727, 0.44, 0.7002801, 0.4);
+});
+
+it("hsl.brighter() is equivalent to hsl.brighter(1)", () => {
+ const c1 = hsl("rgba(70, 130, 180, 0.4)");
+ const c2 = c1.brighter();
+ const c3 = c1.brighter(1);
+ assertHslEqual(c2, c3.h, c3.s, c3.l, 0.4);
+});
+
+it("hsl.brighter(k) is equivalent to hsl.darker(-k)", () => {
+ const c1 = hsl("rgba(70, 130, 180, 0.4)");
+ const c2 = c1.brighter(1.5);
+ const c3 = c1.darker(-1.5);
+ assertHslEqual(c2, c3.h, c3.s, c3.l, 0.4);
+});
+
+it("hsl(\"black\").brighter() still returns black", () => {
+ const c1 = hsl("black");
+ const c2 = c1.brighter(1);
+ assertHslEqual(c1, NaN, NaN, 0, 1);
+ assertHslEqual(c2, NaN, NaN, 0, 1);
+});
+
+it("hsl.darker(k) returns a darker color if k > 0", () => {
+ const c = hsl("rgba(165, 42, 42, 0.4)");
+ assertHslEqual(c.darker(0.5), 0, 0.5942029, 0.3395855, 0.4);
+ assertHslEqual(c.darker(1), 0, 0.5942029, 0.2841176, 0.4);
+ assertHslEqual(c.darker(2), 0, 0.5942029, 0.1988823, 0.4);
+});
+
+it("hsl.darker(k) returns a copy", () => {
+ const c1 = hsl("rgba(70, 130, 180, 0.4)");
+ const c2 = c1.darker(1);
+ assertHslEqual(c1, 207.272727, 0.44, 0.4901961, 0.4);
+ assertHslEqual(c2, 207.272727, 0.44, 0.3431373, 0.4);
+});
+
+it("hsl.darker() is equivalent to hsl.darker(1)", () => {
+ const c1 = hsl("rgba(70, 130, 180, 0.4)");
+ const c2 = c1.darker();
+ const c3 = c1.darker(1);
+ assertHslEqual(c2, c3.h, c3.s, c3.l, 0.4);
+});
+
+it("hsl.darker(k) is equivalent to hsl.brighter(-k)", () => {
+ const c1 = hsl("rgba(70, 130, 180, 0.4)");
+ const c2 = c1.darker(1.5);
+ const c3 = c1.brighter(-1.5);
+ assertHslEqual(c2, c3.h, c3.s, c3.l, 0.4);
+});
+
+it("hsl.rgb() converts to RGB", () => {
+ const c = hsl(120, 0.3, 0.5, 0.4);
+ assertRgbApproxEqual(c.rgb(), 89, 166, 89, 0.4);
+});
+
+it("hsl.copy(…) returns a new hsl with the specified channel values", () => {
+ const c = hsl(120, 0.3, 0.5, 0.4);
+ assert.strictEqual(c.copy() instanceof hsl, true);
+ assert.strictEqual(c.copy().formatHsl(), "hsla(120, 30%, 50%, 0.4)");
+ assert.strictEqual(c.copy({opacity: 1}).formatHsl(), "hsl(120, 30%, 50%)");
+ assert.strictEqual(c.copy({h: 20}).formatHsl(), "hsla(20, 30%, 50%, 0.4)");
+ assert.strictEqual(c.copy({h: 20, s: 0.4}).formatHsl(), "hsla(20, 40%, 50%, 0.4)");
});
diff --git a/test/hslEqual.js b/test/hslEqual.js
deleted file mode 100644
index e4f6b16..0000000
--- a/test/hslEqual.js
+++ /dev/null
@@ -1,15 +0,0 @@
-var tape = require("tape"),
- color = require("../");
-
-tape.Test.prototype.hslEqual = function(actual, h, s, l, opacity) {
- this._assert(actual instanceof color.hsl
- && (isNaN(h) ? isNaN(actual.h) && actual.h !== actual.h : h - 1e-6 <= actual.h && actual.h <= h + 1e-6)
- && (isNaN(s) ? isNaN(actual.s) && actual.s !== actual.s : s - 1e-6 <= actual.s && actual.s <= s + 1e-6)
- && (isNaN(l) ? isNaN(actual.l) && actual.l !== actual.l : l - 1e-6 <= actual.l && actual.l <= l + 1e-6)
- && (isNaN(opacity) ? isNaN(actual.opacity) && actual.opacity !== actual.opacity : actual.opacity === opacity), {
- message: "should be equal",
- operator: "hslEqual",
- actual: [actual.h, actual.s, actual.l, actual.opacity],
- expected: [h, s, l, opacity]
- });
-};
diff --git a/test/lab-test.js b/test/lab-test.js
index 0464644..cb01f45 100644
--- a/test/lab-test.js
+++ b/test/lab-test.js
@@ -1,206 +1,177 @@
-var tape = require("tape"),
- color = require("../");
+import assert from "assert";
+import {color, hcl, hsl, lab, rgb} from "../src/index.js";
+import {assertLabEqual, assertRgbApproxEqual} from "./asserts.js";
-require("./labEqual");
-require("./rgbEqual");
-
-tape("lab(…) returns an instance of lab and color", function(test) {
- var c = color.lab(120, 40, 50);
- test.ok(c instanceof color.lab);
- test.ok(c instanceof color.color);
- test.end();
+it("lab(…) returns an instance of lab and color", () => {
+ const c = lab(120, 40, 50);
+ assert(c instanceof lab);
+ assert(c instanceof color);
});
-tape("lab(…) exposes l, a and b channel values and opacity", function(test) {
- test.labEqual(color.lab("rgba(170, 187, 204, 0.4)"), 74.96879980931759, -3.398998724348956, -10.696507207853333, 0.4);
- test.end();
+it("lab(…) exposes l, a and b channel values and opacity", () => {
+ assertLabEqual(lab("rgba(170, 187, 204, 0.4)"), 74.96879980931759, -3.398998724348956, -10.696507207853333, 0.4);
});
-tape("lab.toString() converts to RGB and formats as rgb(…) or rgba(…)", function(test) {
- test.equal(color.lab("#abcdef") + "", "rgb(171, 205, 239)");
- test.equal(color.lab("moccasin") + "", "rgb(255, 228, 181)");
- test.equal(color.lab("hsl(60, 100%, 20%)") + "", "rgb(102, 102, 0)");
- test.equal(color.lab("hsla(60, 100%, 20%, 0.4)") + "", "rgba(102, 102, 0, 0.4)");
- test.equal(color.lab("rgb(12, 34, 56)") + "", "rgb(12, 34, 56)");
- test.equal(color.lab(color.rgb(12, 34, 56)) + "", "rgb(12, 34, 56)");
- test.equal(color.lab(color.hsl(60, 1, 0.2)) + "", "rgb(102, 102, 0)");
- test.equal(color.lab(color.hsl(60, 1, 0.2, 0.4)) + "", "rgba(102, 102, 0, 0.4)");
- test.end();
+it("lab.toString() converts to RGB and formats as rgb(…) or rgba(…)", () => {
+ assert.strictEqual(lab("#abcdef") + "", "rgb(171, 205, 239)");
+ assert.strictEqual(lab("moccasin") + "", "rgb(255, 228, 181)");
+ assert.strictEqual(lab("hsl(60, 100%, 20%)") + "", "rgb(102, 102, 0)");
+ assert.strictEqual(lab("hsla(60, 100%, 20%, 0.4)") + "", "rgba(102, 102, 0, 0.4)");
+ assert.strictEqual(lab("rgb(12, 34, 56)") + "", "rgb(12, 34, 56)");
+ assert.strictEqual(lab(rgb(12, 34, 56)) + "", "rgb(12, 34, 56)");
+ assert.strictEqual(lab(hsl(60, 1, 0.2)) + "", "rgb(102, 102, 0)");
+ assert.strictEqual(lab(hsl(60, 1, 0.2, 0.4)) + "", "rgba(102, 102, 0, 0.4)");
});
-tape("lab.toString() reflects l, a and b channel values and opacity", function(test) {
- var c = color.lab("#abc");
+it("lab.toString() reflects l, a and b channel values and opacity", () => {
+ const c = lab("#abc");
c.l += 10, c.a -= 10, c.b += 10, c.opacity = 0.4;
- test.equal(c + "", "rgba(184, 220, 213, 0.4)");
- test.end();
+ assert.strictEqual(c + "", "rgba(184, 220, 213, 0.4)");
});
-tape("lab.toString() treats undefined channel values as 0", function(test) {
- test.equal(color.lab("invalid") + "", "rgb(0, 0, 0)");
- test.equal(color.lab(NaN, 0, 0) + "", "rgb(0, 0, 0)");
- test.equal(color.lab(50, NaN, 0) + "", "rgb(119, 119, 119)");
- test.equal(color.lab(50, 0, NaN) + "", "rgb(119, 119, 119)");
- test.equal(color.lab(50, NaN, NaN) + "", "rgb(119, 119, 119)");
- test.end();
+it("lab.toString() treats undefined channel values as 0", () => {
+ assert.strictEqual(lab("invalid") + "", "rgb(0, 0, 0)");
+ assert.strictEqual(lab(NaN, 0, 0) + "", "rgb(0, 0, 0)");
+ assert.strictEqual(lab(50, NaN, 0) + "", "rgb(119, 119, 119)");
+ assert.strictEqual(lab(50, 0, NaN) + "", "rgb(119, 119, 119)");
+ assert.strictEqual(lab(50, NaN, NaN) + "", "rgb(119, 119, 119)");
});
-tape("lab.toString() treats undefined opacity as 1", function(test) {
- var c = color.lab("#abc");
+it("lab.toString() treats undefined opacity as 1", () => {
+ const c = lab("#abc");
c.opacity = NaN;
- test.equal(c + "", "rgb(170, 187, 204)");
- test.end();
+ assert.strictEqual(c + "", "rgb(170, 187, 204)");
});
-tape("lab(l, a, b) does not clamp l channel value", function(test) {
- test.labEqual(color.lab(-10, 1, 2), -10, 1, 2, 1);
- test.labEqual(color.lab(0, 1, 2), 0, 1, 2, 1);
- test.labEqual(color.lab(100, 1, 2), 100, 1, 2, 1);
- test.labEqual(color.lab(110, 1, 2), 110, 1, 2, 1);
- test.end();
+it("lab(l, a, b) does not clamp l channel value", () => {
+ assertLabEqual(lab(-10, 1, 2), -10, 1, 2, 1);
+ assertLabEqual(lab(0, 1, 2), 0, 1, 2, 1);
+ assertLabEqual(lab(100, 1, 2), 100, 1, 2, 1);
+ assertLabEqual(lab(110, 1, 2), 110, 1, 2, 1);
});
-tape("lab(l, a, b, opacity) does not clamp opacity to [0,1]", function(test) {
- test.labEqual(color.lab(50, 10, 20, -0.2), 50, 10, 20, -0.2);
- test.labEqual(color.lab(50, 10, 20, 1.2), 50, 10, 20, 1.2);
- test.end();
+it("lab(l, a, b, opacity) does not clamp opacity to [0,1]", () => {
+ assertLabEqual(lab(50, 10, 20, -0.2), 50, 10, 20, -0.2);
+ assertLabEqual(lab(50, 10, 20, 1.2), 50, 10, 20, 1.2);
});
-tape("lab(l, a, b) coerces channel values to numbers", function(test) {
- test.labEqual(color.lab("50", "4", "-5"), 50, 4, -5, 1);
- test.end();
+it("lab(l, a, b) coerces channel values to numbers", () => {
+ assertLabEqual(lab("50", "4", "-5"), 50, 4, -5, 1);
});
-tape("lab(l, a, b, opacity) coerces opacity to number", function(test) {
- test.labEqual(color.lab(50, 4, -5, "0.2"), 50, 4, -5, 0.2);
- test.end();
+it("lab(l, a, b, opacity) coerces opacity to number", () => {
+ assertLabEqual(lab(50, 4, -5, "0.2"), 50, 4, -5, 0.2);
});
-tape("lab(l, a, b) allows undefined channel values", function(test) {
- test.labEqual(color.lab(undefined, NaN, "foo"), NaN, NaN, NaN, 1);
- test.labEqual(color.lab(undefined, 4, -5), NaN, 4, -5, 1);
- test.labEqual(color.lab(42, undefined, -5), 42, NaN, -5, 1);
- test.labEqual(color.lab(42, 4, undefined), 42, 4, NaN, 1);
- test.end();
+it("lab(l, a, b) allows undefined channel values", () => {
+ assertLabEqual(lab(undefined, NaN, "foo"), NaN, NaN, NaN, 1);
+ assertLabEqual(lab(undefined, 4, -5), NaN, 4, -5, 1);
+ assertLabEqual(lab(42, undefined, -5), 42, NaN, -5, 1);
+ assertLabEqual(lab(42, 4, undefined), 42, 4, NaN, 1);
});
-tape("lab(l, a, b, opacity) converts undefined opacity to 1", function(test) {
- test.labEqual(color.lab(10, 20, 30, null), 10, 20, 30, 1);
- test.labEqual(color.lab(10, 20, 30, undefined), 10, 20, 30, 1);
- test.end();
+it("lab(l, a, b, opacity) converts undefined opacity to 1", () => {
+ assertLabEqual(lab(10, 20, 30, null), 10, 20, 30, 1);
+ assertLabEqual(lab(10, 20, 30, undefined), 10, 20, 30, 1);
});
-tape("lab(format) parses the specified format and converts to Lab", function(test) {
- test.labEqual(color.lab("#abcdef"), 80.77135418262527, -5.957098328496224, -20.785782794739237, 1);
- test.labEqual(color.lab("#abc"), 74.96879980931759, -3.398998724348956, -10.696507207853333, 1);
- test.labEqual(color.lab("rgb(12, 34, 56)"), 12.404844123471648, -2.159950219712034, -17.168132391132946, 1);
- test.labEqual(color.lab("rgb(12%, 34%, 56%)"), 35.48300043476593, -2.507637675606522, -36.95112983195855, 1);
- test.labEqual(color.lab("rgba(12%, 34%, 56%, 0.4)"), 35.48300043476593, -2.507637675606522, -36.95112983195855, 0.4);
- test.labEqual(color.lab("hsl(60,100%,20%)"), 41.97125732118659, -8.03835128380484, 47.65411917854332, 1);
- test.labEqual(color.lab("hsla(60,100%,20%,0.4)"), 41.97125732118659, -8.03835128380484, 47.65411917854332, 0.4);
- test.labEqual(color.lab("aliceblue"), 97.12294991108756, -1.773836604137824, -4.332680308569969, 1);
- test.end();
+it("lab(format) parses the specified format and converts to Lab", () => {
+ assertLabEqual(lab("#abcdef"), 80.77135418262527, -5.957098328496224, -20.785782794739237, 1);
+ assertLabEqual(lab("#abc"), 74.96879980931759, -3.398998724348956, -10.696507207853333, 1);
+ assertLabEqual(lab("rgb(12, 34, 56)"), 12.404844123471648, -2.159950219712034, -17.168132391132946, 1);
+ assertLabEqual(lab("rgb(12%, 34%, 56%)"), 35.48300043476593, -2.507637675606522, -36.95112983195855, 1);
+ assertLabEqual(lab("rgba(12%, 34%, 56%, 0.4)"), 35.48300043476593, -2.507637675606522, -36.95112983195855, 0.4);
+ assertLabEqual(lab("hsl(60,100%,20%)"), 41.97125732118659, -8.03835128380484, 47.65411917854332, 1);
+ assertLabEqual(lab("hsla(60,100%,20%,0.4)"), 41.97125732118659, -8.03835128380484, 47.65411917854332, 0.4);
+ assertLabEqual(lab("aliceblue"), 97.12294991108756, -1.773836604137824, -4.332680308569969, 1);
});
-tape("lab(format) returns undefined channel values for unknown formats", function(test) {
- test.labEqual(color.lab("invalid"), NaN, NaN, NaN, NaN);
- test.end();
+it("lab(format) returns undefined channel values for unknown formats", () => {
+ assertLabEqual(lab("invalid"), NaN, NaN, NaN, NaN);
});
-tape("lab(lab) copies a Lab color", function(test) {
- var c1 = color.lab(50, 4, -5, 0.4),
- c2 = color.lab(c1);
- test.labEqual(c1, 50, 4, -5, 0.4);
+it("lab(lab) copies a Lab color", () => {
+ const c1 = lab(50, 4, -5, 0.4);
+ const c2 = lab(c1);
+ assertLabEqual(c1, 50, 4, -5, 0.4);
c1.l = c1.a = c1.b = c1.opacity = 0;
- test.labEqual(c1, 0, 0, 0, 0);
- test.labEqual(c2, 50, 4, -5, 0.4);
- test.end();
+ assertLabEqual(c1, 0, 0, 0, 0);
+ assertLabEqual(c2, 50, 4, -5, 0.4);
});
-tape("lab(hcl(lab)) doesn’t lose a and b channels if luminance is zero", function(test) {
- test.labEqual(color.lab(color.hcl(color.lab(0, 10, 0))), 0, 10, 0, 1);
- test.end();
+it("lab(hcl(lab)) doesn’t lose a and b channels if luminance is zero", () => {
+ assertLabEqual(lab(hcl(lab(0, 10, 0))), 0, 10, 0, 1);
});
-tape("lab(rgb) converts from RGB", function(test) {
- test.labEqual(color.lab(color.rgb(255, 0, 0, 0.4)), 54.29173376861782, 80.8124553179771, 69.88504032350531, 0.4);
- test.end();
+it("lab(rgb) converts from RGB", () => {
+ assertLabEqual(lab(rgb(255, 0, 0, 0.4)), 54.29173376861782, 80.8124553179771, 69.88504032350531, 0.4);
});
-tape("lab(color) converts from another colorspace via color.rgb()", function(test) {
+it("lab(color) converts from another colorspace via rgb()", () => {
function TestColor() {}
- TestColor.prototype = Object.create(color.color.prototype);
- TestColor.prototype.rgb = function() { return color.rgb(12, 34, 56, 0.4); };
+ TestColor.prototype = Object.create(color.prototype);
+ TestColor.prototype.rgb = function() { return rgb(12, 34, 56, 0.4); };
TestColor.prototype.toString = function() { throw new Error("should use rgb, not toString"); };
- test.labEqual(color.lab(new TestColor), 12.404844123471648, -2.159950219712034, -17.168132391132946, 0.4);
- test.end();
+ assertLabEqual(lab(new TestColor), 12.404844123471648, -2.159950219712034, -17.168132391132946, 0.4);
});
-tape("lab.brighter(k) returns a brighter color if k > 0", function(test) {
- var c = color.lab("rgba(165, 42, 42, 0.4)");
- test.labEqual(c.brighter(0.5), 47.149667346714935, 50.388769337115, 31.834059255569358, 0.4);
- test.labEqual(c.brighter(1), 56.149667346714935, 50.388769337115, 31.834059255569358, 0.4);
- test.labEqual(c.brighter(2), 74.14966734671493, 50.388769337115, 31.834059255569358, 0.4);
- test.end();
+it("lab.brighter(k) returns a brighter color if k > 0", () => {
+ const c = lab("rgba(165, 42, 42, 0.4)");
+ assertLabEqual(c.brighter(0.5), 47.149667346714935, 50.388769337115, 31.834059255569358, 0.4);
+ assertLabEqual(c.brighter(1), 56.149667346714935, 50.388769337115, 31.834059255569358, 0.4);
+ assertLabEqual(c.brighter(2), 74.14966734671493, 50.388769337115, 31.834059255569358, 0.4);
});
-tape("lab.brighter(k) returns a copy", function(test) {
- var c1 = color.lab("rgba(70, 130, 180, 0.4)"),
- c2 = c1.brighter(1);
- test.labEqual(c1, 51.98624890550498, -8.362792037014344, -32.832699449697685, 0.4);
- test.labEqual(c2, 69.98624890550498, -8.362792037014344, -32.832699449697685, 0.4);
- test.end();
+it("lab.brighter(k) returns a copy", () => {
+ const c1 = lab("rgba(70, 130, 180, 0.4)");
+ const c2 = c1.brighter(1);
+ assertLabEqual(c1, 51.98624890550498, -8.362792037014344, -32.832699449697685, 0.4);
+ assertLabEqual(c2, 69.98624890550498, -8.362792037014344, -32.832699449697685, 0.4);
});
-tape("lab.brighter() is equivalent to lab.brighter(1)", function(test) {
- var c1 = color.lab("rgba(70, 130, 180, 0.4)"),
- c2 = c1.brighter(),
- c3 = c1.brighter(1);
- test.labEqual(c2, c3.l, c3.a, c3.b, 0.4);
- test.end();
+it("lab.brighter() is equivalent to lab.brighter(1)", () => {
+ const c1 = lab("rgba(70, 130, 180, 0.4)");
+ const c2 = c1.brighter();
+ const c3 = c1.brighter(1);
+ assertLabEqual(c2, c3.l, c3.a, c3.b, 0.4);
});
-tape("lab.brighter(k) is equivalent to lab.darker(-k)", function(test) {
- var c1 = color.lab("rgba(70, 130, 180, 0.4)"),
- c2 = c1.brighter(1.5),
- c3 = c1.darker(-1.5);
- test.labEqual(c2, c3.l, c3.a, c3.b, 0.4);
- test.end();
+it("lab.brighter(k) is equivalent to lab.darker(-k)", () => {
+ const c1 = lab("rgba(70, 130, 180, 0.4)");
+ const c2 = c1.brighter(1.5);
+ const c3 = c1.darker(-1.5);
+ assertLabEqual(c2, c3.l, c3.a, c3.b, 0.4);
});
-tape("lab.darker(k) returns a darker color if k > 0", function(test) {
- var c = color.lab("rgba(165, 42, 42, 0.4)");
- test.labEqual(c.darker(0.5), 29.149667346714935, 50.388769337115, 31.834059255569358, 0.4);
- test.labEqual(c.darker(1), 20.149667346714935, 50.388769337115, 31.834059255569358, 0.4);
- test.labEqual(c.darker(2), 2.149667346714935, 50.388769337115, 31.834059255569358, 0.4);
- test.end();
+it("lab.darker(k) returns a darker color if k > 0", () => {
+ const c = lab("rgba(165, 42, 42, 0.4)");
+ assertLabEqual(c.darker(0.5), 29.149667346714935, 50.388769337115, 31.834059255569358, 0.4);
+ assertLabEqual(c.darker(1), 20.149667346714935, 50.388769337115, 31.834059255569358, 0.4);
+ assertLabEqual(c.darker(2), 2.149667346714935, 50.388769337115, 31.834059255569358, 0.4);
});
-tape("lab.darker(k) returns a copy", function(test) {
- var c1 = color.lab("rgba(70, 130, 180, 0.4)"),
- c2 = c1.darker(1);
- test.labEqual(c1, 51.98624890550498, -8.362792037014344, -32.832699449697685, 0.4);
- test.labEqual(c2, 33.98624890550498, -8.362792037014344, -32.832699449697685, 0.4);
- test.end();
+it("lab.darker(k) returns a copy", () => {
+ const c1 = lab("rgba(70, 130, 180, 0.4)");
+ const c2 = c1.darker(1);
+ assertLabEqual(c1, 51.98624890550498, -8.362792037014344, -32.832699449697685, 0.4);
+ assertLabEqual(c2, 33.98624890550498, -8.362792037014344, -32.832699449697685, 0.4);
});
-tape("lab.darker() is equivalent to lab.darker(1)", function(test) {
- var c1 = color.lab("rgba(70, 130, 180, 0.4)"),
- c2 = c1.darker(),
- c3 = c1.darker(1);
- test.labEqual(c2, c3.l, c3.a, c3.b, 0.4);
- test.end();
+it("lab.darker() is equivalent to lab.darker(1)", () => {
+ const c1 = lab("rgba(70, 130, 180, 0.4)");
+ const c2 = c1.darker();
+ const c3 = c1.darker(1);
+ assertLabEqual(c2, c3.l, c3.a, c3.b, 0.4);
});
-tape("lab.darker(k) is equivalent to lab.brighter(-k)", function(test) {
- var c1 = color.lab("rgba(70, 130, 180, 0.4)"),
- c2 = c1.darker(1.5),
- c3 = c1.brighter(-1.5);
- test.labEqual(c2, c3.l, c3.a, c3.b, 0.4);
- test.end();
+it("lab.darker(k) is equivalent to lab.brighter(-k)", () => {
+ const c1 = lab("rgba(70, 130, 180, 0.4)");
+ const c2 = c1.darker(1.5);
+ const c3 = c1.brighter(-1.5);
+ assertLabEqual(c2, c3.l, c3.a, c3.b, 0.4);
});
-tape("lab.rgb() converts to RGB", function(test) {
- var c = color.lab(50, 4, -5, 0.4);
- test.rgbEqual(c.rgb(), 123, 117, 128, 0.4);
- test.end();
+it("lab.rgb() converts to RGB", () => {
+ const c = lab(50, 4, -5, 0.4);
+ assertRgbApproxEqual(c.rgb(), 123, 117, 128, 0.4);
});
diff --git a/test/labEqual.js b/test/labEqual.js
deleted file mode 100644
index efd00d7..0000000
--- a/test/labEqual.js
+++ /dev/null
@@ -1,15 +0,0 @@
-var tape = require("tape"),
- color = require("../");
-
-tape.Test.prototype.labEqual = function(actual, l, a, b, opacity) {
- this._assert(actual instanceof color.lab
- && (isNaN(l) ? isNaN(actual.l) && actual.l !== actual.l : l - 1e-6 <= actual.l && actual.l <= l + 1e-6)
- && (isNaN(a) ? isNaN(actual.a) && actual.a !== actual.a : a - 1e-6 <= actual.a && actual.a <= a + 1e-6)
- && (isNaN(b) ? isNaN(actual.b) && actual.b !== actual.b : b - 1e-6 <= actual.b && actual.b <= b + 1e-6)
- && (isNaN(opacity) ? isNaN(actual.opacity) && actual.opacity !== actual.opacity : actual.opacity === opacity), {
- message: "should be equal",
- operator: "labEqual",
- actual: [actual.l, actual.a, actual.b, actual.opacity],
- expected: [l, a, b, opacity]
- });
-};
diff --git a/test/lch-test.js b/test/lch-test.js
index 3f401f0..8093998 100644
--- a/test/lch-test.js
+++ b/test/lch-test.js
@@ -1,19 +1,15 @@
-var tape = require("tape"),
- color = require("../");
+import {lch, rgb} from "../src/index.js";
+import {assertHclEqual} from "./asserts.js";
-require("./hclEqual");
-
-tape("lch(color) is equivalent to hcl(color)", function(test) {
- test.hclEqual(color.lch("#abc"), 252.37145234745182, 11.223567114593477, 74.96879980931759, 1);
- test.hclEqual(color.lch(color.rgb("#abc")), 252.37145234745182, 11.223567114593477, 74.96879980931759, 1);
- test.end();
+it("lch(color) is equivalent to hcl(color)", () => {
+ assertHclEqual(lch("#abc"), 252.37145234745182, 11.223567114593477, 74.96879980931759, 1);
+ assertHclEqual(lch(rgb("#abc")), 252.37145234745182, 11.223567114593477, 74.96879980931759, 1);
});
-tape("lch(l, c, h[, opacity]) is equivalent to hcl(h, c, l[, opacity])", function(test) {
- test.hclEqual(color.lch(74, 11, 252), 252, 11, 74, 1);
- test.hclEqual(color.lch(74, 11, 252), 252, 11, 74, 1);
- test.hclEqual(color.lch(74, 11, 252, null), 252, 11, 74, 1);
- test.hclEqual(color.lch(74, 11, 252, undefined), 252, 11, 74, 1);
- test.hclEqual(color.lch(74, 11, 252, 0.5), 252, 11, 74, 0.5);
- test.end();
+it("lch(l, c, h[, opacity]) is equivalent to hcl(h, c, l[, opacity])", () => {
+ assertHclEqual(lch(74, 11, 252), 252, 11, 74, 1);
+ assertHclEqual(lch(74, 11, 252), 252, 11, 74, 1);
+ assertHclEqual(lch(74, 11, 252, null), 252, 11, 74, 1);
+ assertHclEqual(lch(74, 11, 252, undefined), 252, 11, 74, 1);
+ assertHclEqual(lch(74, 11, 252, 0.5), 252, 11, 74, 0.5);
});
diff --git a/test/rgb-test.js b/test/rgb-test.js
index a62709f..32ebdf2 100644
--- a/test/rgb-test.js
+++ b/test/rgb-test.js
@@ -1,291 +1,253 @@
-var tape = require("tape"),
- color = require("../");
+import assert from "assert";
+import {color, hsl, rgb} from "../src/index.js";
+import {assertRgbApproxEqual, assertRgbEqual} from "./asserts.js";
-require("./rgbEqual");
-
-tape("rgb(…) returns an instance of rgb and color", function(test) {
- var c = color.rgb(70, 130, 180);
- test.ok(c instanceof color.rgb);
- test.ok(c instanceof color.color);
- test.end();
+it("rgb(…) returns an instance of rgb and color", () => {
+ const c = rgb(70, 130, 180);
+ assert(c instanceof rgb);
+ assert(c instanceof color);
});
-tape("rgb(…) exposes r, g and b channel values and opacity", function(test) {
- test.rgbEqual(color.rgb("#abc"), 170, 187, 204, 1);
- test.rgbEqual(color.rgb("rgba(170, 187, 204, 0.4)"), 170, 187, 204, 0.4);
- test.end();
+it("rgb(…) exposes r, g and b channel values and opacity", () => {
+ assertRgbApproxEqual(rgb("#abc"), 170, 187, 204, 1);
+ assertRgbApproxEqual(rgb("rgba(170, 187, 204, 0.4)"), 170, 187, 204, 0.4);
});
-tape("rgb.toString() formats as rgb(…) or rgba(…)", function(test) {
- test.equal(color.rgb("#abcdef") + "", "rgb(171, 205, 239)");
- test.equal(color.rgb("moccasin") + "", "rgb(255, 228, 181)");
- test.equal(color.rgb("hsl(60, 100%, 20%)") + "", "rgb(102, 102, 0)");
- test.equal(color.rgb("rgb(12, 34, 56)") + "", "rgb(12, 34, 56)");
- test.equal(color.rgb(color.rgb(12, 34, 56)) + "", "rgb(12, 34, 56)");
- test.equal(color.rgb(color.hsl(60, 1, 0.2)) + "", "rgb(102, 102, 0)");
- test.equal(color.rgb("rgba(12, 34, 56, 0.4)") + "", "rgba(12, 34, 56, 0.4)");
- test.equal(color.rgb("rgba(12%, 34%, 56%, 0.4)") + "", "rgba(31, 87, 143, 0.4)");
- test.equal(color.rgb("hsla(60, 100%, 20%, 0.4)") + "", "rgba(102, 102, 0, 0.4)");
- test.end();
+it("rgb.toString() formats as rgb(…) or rgba(…)", () => {
+ assert.strictEqual(rgb("#abcdef") + "", "rgb(171, 205, 239)");
+ assert.strictEqual(rgb("moccasin") + "", "rgb(255, 228, 181)");
+ assert.strictEqual(rgb("hsl(60, 100%, 20%)") + "", "rgb(102, 102, 0)");
+ assert.strictEqual(rgb("rgb(12, 34, 56)") + "", "rgb(12, 34, 56)");
+ assert.strictEqual(rgb(rgb(12, 34, 56)) + "", "rgb(12, 34, 56)");
+ assert.strictEqual(rgb(hsl(60, 1, 0.2)) + "", "rgb(102, 102, 0)");
+ assert.strictEqual(rgb("rgba(12, 34, 56, 0.4)") + "", "rgba(12, 34, 56, 0.4)");
+ assert.strictEqual(rgb("rgba(12%, 34%, 56%, 0.4)") + "", "rgba(31, 87, 143, 0.4)");
+ assert.strictEqual(rgb("hsla(60, 100%, 20%, 0.4)") + "", "rgba(102, 102, 0, 0.4)");
});
-tape("rgb.formatRgb() formats as rgb(…) or rgba(…)", function(test) {
- test.equal(color.rgb("#abcdef").formatRgb(), "rgb(171, 205, 239)");
- test.equal(color.rgb("hsl(60, 100%, 20%)").formatRgb(), "rgb(102, 102, 0)");
- test.equal(color.rgb("rgba(12%, 34%, 56%, 0.4)").formatRgb(), "rgba(31, 87, 143, 0.4)");
- test.equal(color.rgb("hsla(60, 100%, 20%, 0.4)").formatRgb(), "rgba(102, 102, 0, 0.4)");
- test.end();
+it("rgb.formatRgb() formats as rgb(…) or rgba(…)", () => {
+ assert.strictEqual(rgb("#abcdef").formatRgb(), "rgb(171, 205, 239)");
+ assert.strictEqual(rgb("hsl(60, 100%, 20%)").formatRgb(), "rgb(102, 102, 0)");
+ assert.strictEqual(rgb("rgba(12%, 34%, 56%, 0.4)").formatRgb(), "rgba(31, 87, 143, 0.4)");
+ assert.strictEqual(rgb("hsla(60, 100%, 20%, 0.4)").formatRgb(), "rgba(102, 102, 0, 0.4)");
});
-tape("rgb.formatHsl() formats as hsl(…) or hsla(…)", function(test) {
- test.equal(color.rgb("#abcdef").formatHsl(), "hsl(210, 68%, 80.3921568627451%)");
- test.equal(color.rgb("hsl(60, 100%, 20%)").formatHsl(), "hsl(60, 100%, 20%)");
- test.equal(color.rgb("rgba(12%, 34%, 56%, 0.4)").formatHsl(), "hsla(210, 64.70588235294117%, 34%, 0.4)");
- test.equal(color.rgb("hsla(60, 100%, 20%, 0.4)").formatHsl(), "hsla(60, 100%, 20%, 0.4)");
- test.end();
+it("rgb.formatHsl() formats as hsl(…) or hsla(…)", () => {
+ assert.strictEqual(rgb("#abcdef").formatHsl(), "hsl(210, 68%, 80.3921568627451%)");
+ assert.strictEqual(rgb("hsl(60, 100%, 20%)").formatHsl(), "hsl(60, 100%, 20%)");
+ assert.strictEqual(rgb("rgba(12%, 34%, 56%, 0.4)").formatHsl(), "hsla(210, 64.70588235294117%, 34%, 0.4)");
+ assert.strictEqual(rgb("hsla(60, 100%, 20%, 0.4)").formatHsl(), "hsla(60, 100%, 20%, 0.4)");
});
-tape("rgb.formatHex() formats as #rrggbb", function(test) {
- test.equal(color.rgb("#abcdef").formatHex(), "#abcdef");
- test.equal(color.rgb("hsl(60, 100%, 20%)").formatHex(), "#666600");
- test.equal(color.rgb("rgba(12%, 34%, 56%, 0.4)").formatHex(), "#1f578f");
- test.equal(color.rgb("hsla(60, 100%, 20%, 0.4)").formatHex(), "#666600");
- test.end();
+it("rgb.formatHex() formats as #rrggbb", () => {
+ assert.strictEqual(rgb("#abcdef").formatHex(), "#abcdef");
+ assert.strictEqual(rgb("hsl(60, 100%, 20%)").formatHex(), "#666600");
+ assert.strictEqual(rgb("rgba(12%, 34%, 56%, 0.4)").formatHex(), "#1f578f");
+ assert.strictEqual(rgb("hsla(60, 100%, 20%, 0.4)").formatHex(), "#666600");
});
-tape("rgb.hex() is an alias for rgb.formatHex()", function(test) {
- test.equal(color.color.prototype.hex, color.color.prototype.formatHex);
- test.equal(color.rgb.prototype.hex, color.rgb.prototype.formatHex);
- test.end();
+it("rgb.hex() is an alias for rgb.formatHex()", () => {
+ assert.strictEqual(color.prototype.hex, color.prototype.formatHex);
+ assert.strictEqual(rgb.prototype.hex, rgb.prototype.formatHex);
});
-tape("rgb.toString() reflects r, g and b channel values and opacity", function(test) {
- var c = color.rgb("#abc");
+it("rgb.toString() reflects r, g and b channel values and opacity", () => {
+ const c = rgb("#abc");
++c.r, ++c.g, ++c.b, c.opacity = 0.5;
- test.equal(c + "", "rgba(171, 188, 205, 0.5)");
- test.end();
+ assert.strictEqual(c + "", "rgba(171, 188, 205, 0.5)");
});
-tape("rgb.toString() treats undefined channel values as 0", function(test) {
- test.equal(color.rgb("invalid") + "", "rgb(0, 0, 0)");
- test.equal(color.rgb(NaN, 12, 34) + "", "rgb(0, 12, 34)");
- test.end();
+it("rgb.toString() treats undefined channel values as 0", () => {
+ assert.strictEqual(rgb("invalid") + "", "rgb(0, 0, 0)");
+ assert.strictEqual(rgb(NaN, 12, 34) + "", "rgb(0, 12, 34)");
});
-tape("rgb.toString() treats undefined opacity as 1", function(test) {
- var c = color.rgb("#abc");
+it("rgb.toString() treats undefined opacity as 1", () => {
+ const c = rgb("#abc");
++c.r, ++c.g, ++c.b, c.opacity = NaN;
- test.equal(c + "", "rgb(171, 188, 205)");
- test.end();
+ assert.strictEqual(c + "", "rgb(171, 188, 205)");
});
-tape("rgb.toString() clamps r, g, b and opacity channel values", function(test) {
- test.equal(color.rgb(-1, 2, 3) + "", "rgb(0, 2, 3)");
- test.equal(color.rgb( 2, -1, 3) + "", "rgb(2, 0, 3)");
- test.equal(color.rgb( 2, 3, -1) + "", "rgb(2, 3, 0)");
- test.equal(color.rgb( 2, 3, -1, -0.2) + "", "rgba(2, 3, 0, 0)");
- test.equal(color.rgb( 2, 3, -1, 1.2) + "", "rgb(2, 3, 0)");
- test.end();
+it("rgb.toString() clamps r, g, b and opacity channel values", () => {
+ assert.strictEqual(rgb(-1, 2, 3) + "", "rgb(0, 2, 3)");
+ assert.strictEqual(rgb( 2, -1, 3) + "", "rgb(2, 0, 3)");
+ assert.strictEqual(rgb( 2, 3, -1) + "", "rgb(2, 3, 0)");
+ assert.strictEqual(rgb( 2, 3, -1, -0.2) + "", "rgba(2, 3, 0, 0)");
+ assert.strictEqual(rgb( 2, 3, -1, 1.2) + "", "rgb(2, 3, 0)");
});
-tape("rgb.toString() rounds r, g and b channel values", function(test) {
- test.equal(color.rgb(0.5, 2.0, 3.0) + "", "rgb(1, 2, 3)");
- test.equal(color.rgb(2.0, 0.5, 3.0) + "", "rgb(2, 1, 3)");
- test.equal(color.rgb(2.0, 3.0, 0.5) + "", "rgb(2, 3, 1)");
- test.end();
+it("rgb.toString() rounds r, g and b channel values", () => {
+ assert.strictEqual(rgb(0.5, 2.0, 3.0) + "", "rgb(1, 2, 3)");
+ assert.strictEqual(rgb(2.0, 0.5, 3.0) + "", "rgb(2, 1, 3)");
+ assert.strictEqual(rgb(2.0, 3.0, 0.5) + "", "rgb(2, 3, 1)");
});
-tape("rgb(r, g, b) does not round channel values", function(test) {
- test.rgbStrictEqual(color.rgb(1.2, 2.6, 42.9), 1.2, 2.6, 42.9, 1);
- test.end();
+it("rgb(r, g, b) does not round channel values", () => {
+ assertRgbEqual(rgb(1.2, 2.6, 42.9), 1.2, 2.6, 42.9, 1);
});
-tape("rgb(r, g, b) does not clamp channel values", function(test) {
- test.rgbEqual(color.rgb(-10, -20, -30), -10, -20, -30, 1);
- test.rgbEqual(color.rgb(300, 400, 500), 300, 400, 500, 1);
- test.end();
+it("rgb(r, g, b) does not clamp channel values", () => {
+ assertRgbApproxEqual(rgb(-10, -20, -30), -10, -20, -30, 1);
+ assertRgbApproxEqual(rgb(300, 400, 500), 300, 400, 500, 1);
});
-tape("rgb(r, g, b, opacity) does not clamp opacity", function(test) {
- test.rgbEqual(color.rgb(-10, -20, -30, -0.2), -10, -20, -30, -0.2);
- test.rgbEqual(color.rgb(300, 400, 500, 1.2), 300, 400, 500, 1.2);
- test.end();
+it("rgb(r, g, b, opacity) does not clamp opacity", () => {
+ assertRgbApproxEqual(rgb(-10, -20, -30, -0.2), -10, -20, -30, -0.2);
+ assertRgbApproxEqual(rgb(300, 400, 500, 1.2), 300, 400, 500, 1.2);
});
-tape("rgb(r, g, b) coerces channel values to numbers", function(test) {
- test.rgbEqual(color.rgb("12", "34", "56"), 12, 34, 56, 1);
- test.rgbEqual(color.rgb(null, null, null), 0, 0, 0, 1);
- test.end();
+it("rgb(r, g, b) coerces channel values to numbers", () => {
+ assertRgbApproxEqual(rgb("12", "34", "56"), 12, 34, 56, 1);
+ assertRgbApproxEqual(rgb(null, null, null), 0, 0, 0, 1);
});
-tape("rgb(r, g, b, opacity) coerces opacity to number", function(test) {
- test.rgbStrictEqual(color.rgb(-10, -20, -30, "-0.2"), -10, -20, -30, -0.2);
- test.rgbStrictEqual(color.rgb(300, 400, 500, "1.2"), 300, 400, 500, 1.2);
- test.end();
+it("rgb(r, g, b, opacity) coerces opacity to number", () => {
+ assertRgbEqual(rgb(-10, -20, -30, "-0.2"), -10, -20, -30, -0.2);
+ assertRgbEqual(rgb(300, 400, 500, "1.2"), 300, 400, 500, 1.2);
});
-tape("rgb(r, g, b) allows undefined channel values", function(test) {
- test.rgbEqual(color.rgb(undefined, NaN, "foo"), NaN, NaN, NaN, 1);
- test.rgbEqual(color.rgb(undefined, 42, 56), NaN, 42, 56, 1);
- test.rgbEqual(color.rgb(42, undefined, 56), 42, NaN, 56, 1);
- test.rgbEqual(color.rgb(42, 56, undefined), 42, 56, NaN, 1);
- test.end();
+it("rgb(r, g, b) allows undefined channel values", () => {
+ assertRgbApproxEqual(rgb(undefined, NaN, "foo"), NaN, NaN, NaN, 1);
+ assertRgbApproxEqual(rgb(undefined, 42, 56), NaN, 42, 56, 1);
+ assertRgbApproxEqual(rgb(42, undefined, 56), 42, NaN, 56, 1);
+ assertRgbApproxEqual(rgb(42, 56, undefined), 42, 56, NaN, 1);
});
-tape("rgb(r, g, b, opacity) converts undefined opacity to 1", function(test) {
- test.rgbEqual(color.rgb(10, 20, 30, null), 10, 20, 30, 1);
- test.rgbEqual(color.rgb(10, 20, 30, undefined), 10, 20, 30, 1);
- test.end();
+it("rgb(r, g, b, opacity) converts undefined opacity to 1", () => {
+ assertRgbApproxEqual(rgb(10, 20, 30, null), 10, 20, 30, 1);
+ assertRgbApproxEqual(rgb(10, 20, 30, undefined), 10, 20, 30, 1);
});
-tape("rgb(format) parses the specified format and converts to RGB", function(test) {
- test.rgbEqual(color.rgb("#abcdef"), 171, 205, 239, 1);
- test.rgbEqual(color.rgb("#abc"), 170, 187, 204, 1);
- test.rgbEqual(color.rgb("rgb(12, 34, 56)"), 12, 34, 56, 1);
- test.rgbEqual(color.rgb("rgb(12%, 34%, 56%)"), 31, 87, 143, 1);
- test.rgbEqual(color.rgb("hsl(60,100%,20%)"), 102, 102, 0, 1);
- test.rgbEqual(color.rgb("aliceblue"), 240, 248, 255, 1);
- test.rgbEqual(color.rgb("hsla(60,100%,20%,0.4)"), 102, 102, 0, 0.4);
- test.end();
+it("rgb(format) parses the specified format and converts to RGB", () => {
+ assertRgbApproxEqual(rgb("#abcdef"), 171, 205, 239, 1);
+ assertRgbApproxEqual(rgb("#abc"), 170, 187, 204, 1);
+ assertRgbApproxEqual(rgb("rgb(12, 34, 56)"), 12, 34, 56, 1);
+ assertRgbApproxEqual(rgb("rgb(12%, 34%, 56%)"), 31, 87, 143, 1);
+ assertRgbApproxEqual(rgb("hsl(60,100%,20%)"), 102, 102, 0, 1);
+ assertRgbApproxEqual(rgb("aliceblue"), 240, 248, 255, 1);
+ assertRgbApproxEqual(rgb("hsla(60,100%,20%,0.4)"), 102, 102, 0, 0.4);
});
-tape("rgb(format) ignores all channels if the alpha is <= 0", function(test) {
- test.rgbEqual(color.rgb("rgba(12,34,45,0)"), NaN, NaN, NaN, 0);
- test.rgbEqual(color.rgb("rgba(12,34,45,-0.1)"), NaN, NaN, NaN, -0.1);
- test.end();
+it("rgb(format) ignores all channels if the alpha is <= 0", () => {
+ assertRgbApproxEqual(rgb("rgba(12,34,45,0)"), NaN, NaN, NaN, 0);
+ assertRgbApproxEqual(rgb("rgba(12,34,45,-0.1)"), NaN, NaN, NaN, -0.1);
});
-tape("rgb(format) returns undefined channel values for unknown formats", function(test) {
- test.rgbEqual(color.rgb("invalid"), NaN, NaN, NaN, NaN);
- test.end();
+it("rgb(format) returns undefined channel values for unknown formats", () => {
+ assertRgbApproxEqual(rgb("invalid"), NaN, NaN, NaN, NaN);
});
-tape("rgb(rgb) copies an RGB color", function(test) {
- var c1 = color.rgb("rgba(70, 130, 180, 0.4)"),
- c2 = color.rgb(c1);
- test.rgbEqual(c1, 70, 130, 180, 0.4);
+it("rgb(rgb) copies an RGB color", () => {
+ const c1 = rgb("rgba(70, 130, 180, 0.4)");
+ const c2 = rgb(c1);
+ assertRgbApproxEqual(c1, 70, 130, 180, 0.4);
c1.r = c1.g = c1.b = c1.opacity = 0;
- test.rgbEqual(c1, 0, 0, 0, 0);
- test.rgbEqual(c2, 70, 130, 180, 0.4);
- test.end();
+ assertRgbApproxEqual(c1, 0, 0, 0, 0);
+ assertRgbApproxEqual(c2, 70, 130, 180, 0.4);
});
-tape("rgb(hsl) converts from HSL", function(test) {
- test.rgbEqual(color.rgb(color.hsl(0, 1, 0.5)), 255, 0, 0, 1);
- test.rgbEqual(color.rgb(color.hsl(0, 1, 0.5, 0.4)), 255, 0, 0, 0.4);
- test.end();
+it("rgb(hsl) converts from HSL", () => {
+ assertRgbApproxEqual(rgb(hsl(0, 1, 0.5)), 255, 0, 0, 1);
+ assertRgbApproxEqual(rgb(hsl(0, 1, 0.5, 0.4)), 255, 0, 0, 0.4);
});
-tape("rgb(color) converts from another colorspace via color.rgb()", function(test) {
+it("rgb(color) converts from another colorspace via rgb()", () => {
function TestColor() {}
- TestColor.prototype = Object.create(color.color.prototype);
- TestColor.prototype.rgb = function() { return color.rgb(12, 34, 56, 0.4); };
+ TestColor.prototype = Object.create(color.prototype);
+ TestColor.prototype.rgb = function() { return rgb(12, 34, 56, 0.4); };
TestColor.prototype.toString = function() { throw new Error("should use rgb, not toString"); };
- test.rgbEqual(color.rgb(new TestColor), 12, 34, 56, 0.4);
- test.end();
-});
-
-tape("rgb.displayable() returns true if the color is within the RGB gamut and opacity is in [0,1]", function(test) {
- test.equal(color.rgb("white").displayable(), true);
- test.equal(color.rgb("red").displayable(), true);
- test.equal(color.rgb("black").displayable(), true);
- test.equal(color.rgb("invalid").displayable(), false);
- test.equal(color.rgb(-1, 0, 0).displayable(), false);
- test.equal(color.rgb(0, -1, 0).displayable(), false);
- test.equal(color.rgb(0, 0, -1).displayable(), false);
- test.equal(color.rgb(256, 0, 0).displayable(), false);
- test.equal(color.rgb(0, 256, 0).displayable(), false);
- test.equal(color.rgb(0, 0, 256).displayable(), false);
- test.equal(color.rgb(0, 0, 255, 0).displayable(), true);
- test.equal(color.rgb(0, 0, 255, 1.2).displayable(), false);
- test.equal(color.rgb(0, 0, 255, -0.2).displayable(), false);
- test.end();
-});
-
-tape("rgb.brighter(k) returns a brighter color if k > 0", function(test) {
- var c = color.rgb("rgba(165, 42, 42, 0.4)");
- test.rgbEqual(c.brighter(0.5), 197, 50, 50, 0.4);
- test.rgbEqual(c.brighter(1), 236, 60, 60, 0.4);
- test.rgbEqual(c.brighter(2), 337, 86, 86, 0.4);
- test.end();
-});
-
-tape("rgb.brighter(k) returns a copy", function(test) {
- var c1 = color.rgb("rgba(70, 130, 180, 0.4)"),
- c2 = c1.brighter(1);
- test.rgbEqual(c1, 70, 130, 180, 0.4);
- test.rgbEqual(c2, 100, 186, 257, 0.4);
- test.end();
-});
-
-tape("rgb.brighter() is equivalent to rgb.brighter(1)", function(test) {
- var c1 = color.rgb("rgba(70, 130, 180, 0.4)"),
- c2 = c1.brighter(),
- c3 = c1.brighter(1);
- test.rgbEqual(c2, c3.r, c3.g, c3.b, 0.4);
- test.end();
-});
-
-tape("rgb.brighter(k) is equivalent to rgb.darker(-k)", function(test) {
- var c1 = color.rgb("rgba(70, 130, 180, 0.4)"),
- c2 = c1.brighter(1.5),
- c3 = c1.darker(-1.5);
- test.rgbEqual(c2, c3.r, c3.g, c3.b, 0.4);
- test.end();
-});
-
-tape("rgb(\"black\").brighter() still returns black", function(test) {
- var c1 = color.rgb("black"),
- c2 = c1.brighter(1);
- test.rgbEqual(c1, 0, 0, 0, 1);
- test.rgbEqual(c2, 0, 0, 0, 1);
- test.end();
-});
-
-tape("rgb.darker(k) returns a darker color if k > 0", function(test) {
- var c = color.rgb("rgba(165, 42, 42, 0.4)");
- test.rgbEqual(c.darker(0.5), 138, 35, 35, 0.4);
- test.rgbEqual(c.darker(1), 115, 29, 29, 0.4);
- test.rgbEqual(c.darker(2), 81, 21, 21, 0.4);
- test.end();
-});
-
-tape("rgb.darker(k) returns a copy", function(test) {
- var c1 = color.rgb("rgba(70, 130, 180, 0.4)"),
- c2 = c1.darker(1);
- test.rgbEqual(c1, 70, 130, 180, 0.4);
- test.rgbEqual(c2, 49, 91, 126, 0.4);
- test.end();
-});
-
-tape("rgb.darker() is equivalent to rgb.darker(1)", function(test) {
- var c1 = color.rgb("rgba(70, 130, 180, 0.4)"),
- c2 = c1.darker(),
- c3 = c1.darker(1);
- test.rgbEqual(c2, c3.r, c3.g, c3.b, 0.4);
- test.end();
-});
-
-tape("rgb.darker(k) is equivalent to rgb.brighter(-k)", function(test) {
- var c1 = color.rgb("rgba(70, 130, 180, 0.4)"),
- c2 = c1.darker(1.5),
- c3 = c1.brighter(-1.5);
- test.rgbEqual(c2, c3.r, c3.g, c3.b, 0.4);
- test.end();
-});
-
-tape("rgb.rgb() returns this", function(test) {
- var c = color.rgb(70, 130, 180);
- test.equal(c.rgb(), c);
- test.end();
-});
-
-tape("rgb.copy(…) returns a new rgb with the specified channel values", function(test) {
- var c = color.rgb(70, 130, 180);
- test.equal(c.copy() instanceof color.rgb, true);
- test.equal(c.copy() + "", "rgb(70, 130, 180)");
- test.equal(c.copy({opacity: 0.2}) + "", "rgba(70, 130, 180, 0.2)");
- test.equal(c.copy({r: 20}) + "", "rgb(20, 130, 180)");
- test.equal(c.copy({r: 20, g: 40}) + "", "rgb(20, 40, 180)");
- test.end();
+ assertRgbApproxEqual(rgb(new TestColor), 12, 34, 56, 0.4);
+});
+
+it("rgb.displayable() returns true if the color is within the RGB gamut and opacity is in [0,1]", () => {
+ assert.strictEqual(rgb("white").displayable(), true);
+ assert.strictEqual(rgb("red").displayable(), true);
+ assert.strictEqual(rgb("black").displayable(), true);
+ assert.strictEqual(rgb("invalid").displayable(), false);
+ assert.strictEqual(rgb(-1, 0, 0).displayable(), false);
+ assert.strictEqual(rgb(0, -1, 0).displayable(), false);
+ assert.strictEqual(rgb(0, 0, -1).displayable(), false);
+ assert.strictEqual(rgb(256, 0, 0).displayable(), false);
+ assert.strictEqual(rgb(0, 256, 0).displayable(), false);
+ assert.strictEqual(rgb(0, 0, 256).displayable(), false);
+ assert.strictEqual(rgb(0, 0, 255, 0).displayable(), true);
+ assert.strictEqual(rgb(0, 0, 255, 1.2).displayable(), false);
+ assert.strictEqual(rgb(0, 0, 255, -0.2).displayable(), false);
+});
+
+it("rgb.brighter(k) returns a brighter color if k > 0", () => {
+ const c = rgb("rgba(165, 42, 42, 0.4)");
+ assertRgbApproxEqual(c.brighter(0.5), 197, 50, 50, 0.4);
+ assertRgbApproxEqual(c.brighter(1), 236, 60, 60, 0.4);
+ assertRgbApproxEqual(c.brighter(2), 337, 86, 86, 0.4);
+});
+
+it("rgb.brighter(k) returns a copy", () => {
+ const c1 = rgb("rgba(70, 130, 180, 0.4)");
+ const c2 = c1.brighter(1);
+ assertRgbApproxEqual(c1, 70, 130, 180, 0.4);
+ assertRgbApproxEqual(c2, 100, 186, 257, 0.4);
+});
+
+it("rgb.brighter() is equivalent to rgb.brighter(1)", () => {
+ const c1 = rgb("rgba(70, 130, 180, 0.4)");
+ const c2 = c1.brighter();
+ const c3 = c1.brighter(1);
+ assertRgbApproxEqual(c2, c3.r, c3.g, c3.b, 0.4);
+});
+
+it("rgb.brighter(k) is equivalent to rgb.darker(-k)", () => {
+ const c1 = rgb("rgba(70, 130, 180, 0.4)");
+ const c2 = c1.brighter(1.5);
+ const c3 = c1.darker(-1.5);
+ assertRgbApproxEqual(c2, c3.r, c3.g, c3.b, 0.4);
+});
+
+it("rgb(\"black\").brighter() still returns black", () => {
+ const c1 = rgb("black");
+ const c2 = c1.brighter(1);
+ assertRgbApproxEqual(c1, 0, 0, 0, 1);
+ assertRgbApproxEqual(c2, 0, 0, 0, 1);
+});
+
+it("rgb.darker(k) returns a darker color if k > 0", () => {
+ const c = rgb("rgba(165, 42, 42, 0.4)");
+ assertRgbApproxEqual(c.darker(0.5), 138, 35, 35, 0.4);
+ assertRgbApproxEqual(c.darker(1), 115, 29, 29, 0.4);
+ assertRgbApproxEqual(c.darker(2), 81, 21, 21, 0.4);
+});
+
+it("rgb.darker(k) returns a copy", () => {
+ const c1 = rgb("rgba(70, 130, 180, 0.4)");
+ const c2 = c1.darker(1);
+ assertRgbApproxEqual(c1, 70, 130, 180, 0.4);
+ assertRgbApproxEqual(c2, 49, 91, 126, 0.4);
+});
+
+it("rgb.darker() is equivalent to rgb.darker(1)", () => {
+ const c1 = rgb("rgba(70, 130, 180, 0.4)");
+ const c2 = c1.darker();
+ const c3 = c1.darker(1);
+ assertRgbApproxEqual(c2, c3.r, c3.g, c3.b, 0.4);
+});
+
+it("rgb.darker(k) is equivalent to rgb.brighter(-k)", () => {
+ const c1 = rgb("rgba(70, 130, 180, 0.4)");
+ const c2 = c1.darker(1.5);
+ const c3 = c1.brighter(-1.5);
+ assertRgbApproxEqual(c2, c3.r, c3.g, c3.b, 0.4);
+});
+
+it("rgb.rgb() returns this", () => {
+ const c = rgb(70, 130, 180);
+ assert.strictEqual(c.rgb(), c);
+});
+
+it("rgb.copy(…) returns a new rgb with the specified channel values", () => {
+ const c = rgb(70, 130, 180);
+ assert.strictEqual(c.copy() instanceof rgb, true);
+ assert.strictEqual(c.copy() + "", "rgb(70, 130, 180)");
+ assert.strictEqual(c.copy({opacity: 0.2}) + "", "rgba(70, 130, 180, 0.2)");
+ assert.strictEqual(c.copy({r: 20}) + "", "rgb(20, 130, 180)");
+ assert.strictEqual(c.copy({r: 20, g: 40}) + "", "rgb(20, 40, 180)");
});
diff --git a/test/rgbEqual.js b/test/rgbEqual.js
deleted file mode 100644
index 487dec1..0000000
--- a/test/rgbEqual.js
+++ /dev/null
@@ -1,28 +0,0 @@
-var tape = require("tape"),
- color = require("../");
-
-tape.Test.prototype.rgbStrictEqual = function(actual, r, g, b, opacity) {
- this._assert(actual instanceof color.rgb
- && (isNaN(r) ? isNaN(actual.r) && actual.r !== actual.r : actual.r === r)
- && (isNaN(g) ? isNaN(actual.g) && actual.g !== actual.g : actual.g === g)
- && (isNaN(b) ? isNaN(actual.b) && actual.b !== actual.b : actual.b === b)
- && (isNaN(opacity) ? isNaN(actual.opacity) && actual.opacity !== actual.opacity : actual.opacity === opacity), {
- message: "should be equal",
- operator: "rgbStrictEqual",
- actual: [actual.r, actual.g, actual.b, actual.opacity],
- expected: [r, g, b, opacity]
- });
-};
-
-tape.Test.prototype.rgbEqual = function(actual, r, g, b, opacity) {
- this._assert(actual instanceof color.rgb
- && (isNaN(r) ? isNaN(actual.r) && actual.r !== actual.r : Math.round(actual.r) === Math.round(r))
- && (isNaN(g) ? isNaN(actual.g) && actual.g !== actual.g : Math.round(actual.g) === Math.round(g))
- && (isNaN(b) ? isNaN(actual.b) && actual.b !== actual.b : Math.round(actual.b) === Math.round(b))
- && (isNaN(opacity) ? isNaN(actual.opacity) && actual.opacity !== actual.opacity : actual.opacity === opacity), {
- message: "should be equal",
- operator: "rgbEqual",
- actual: [Math.round(actual.r), Math.round(actual.g), Math.round(actual.b), actual.opacity],
- expected: [Math.round(r), Math.round(g), Math.round(b), opacity]
- });
-};
diff --git a/yarn.lock b/yarn.lock
index 79cda26..521c82d 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -2,74 +2,126 @@
# yarn lockfile v1
-"@babel/code-frame@^7.0.0":
- version "7.5.5"
- resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.5.5.tgz#bc0782f6d69f7b7d49531219699b988f669a8f9d"
- integrity sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw==
+"@babel/code-frame@7.12.11":
+ version "7.12.11"
+ resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.11.tgz#f4ad435aa263db935b8f10f2c552d23fb716a63f"
+ integrity sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==
dependencies:
- "@babel/highlight" "^7.0.0"
+ "@babel/highlight" "^7.10.4"
-"@babel/highlight@^7.0.0":
- version "7.5.0"
- resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.5.0.tgz#56d11312bd9248fa619591d02472be6e8cb32540"
- integrity sha512-7dV4eu9gBxoM0dAnj/BCFDW9LFU0zvTrkq0ugM7pnHEgguOEeOz1so2ZghEdzviYzQEED0r4EAgpsBChKy1TRQ==
+"@babel/code-frame@^7.10.4":
+ version "7.12.13"
+ resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.13.tgz#dcfc826beef65e75c50e21d3837d7d95798dd658"
+ integrity sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==
dependencies:
+ "@babel/highlight" "^7.12.13"
+
+"@babel/helper-validator-identifier@^7.14.0":
+ version "7.14.0"
+ resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.0.tgz#d26cad8a47c65286b15df1547319a5d0bcf27288"
+ integrity sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A==
+
+"@babel/highlight@^7.10.4", "@babel/highlight@^7.12.13":
+ version "7.14.0"
+ resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.14.0.tgz#3197e375711ef6bf834e67d0daec88e4f46113cf"
+ integrity sha512-YSCOwxvTYEIMSGaBQb5kDDsCopDdiUGsqpatp3fOlI4+2HQSkTmEVWnVuySdAC5EWCqSWWTv0ib63RjR7dTBdg==
+ dependencies:
+ "@babel/helper-validator-identifier" "^7.14.0"
chalk "^2.0.0"
- esutils "^2.0.2"
js-tokens "^4.0.0"
-"@types/estree@0.0.39":
- version "0.0.39"
- resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f"
- integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==
+"@eslint/eslintrc@^0.4.2":
+ version "0.4.2"
+ resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.4.2.tgz#f63d0ef06f5c0c57d76c4ab5f63d3835c51b0179"
+ integrity sha512-8nmGq/4ycLpIwzvhI4tNDmQztZ8sp+hI7cyG8i1nQDhkAbRzHpXPidRAHlNvCZQpJTKw5ItIpMw9RSToGF00mg==
+ dependencies:
+ ajv "^6.12.4"
+ debug "^4.1.1"
+ espree "^7.3.0"
+ globals "^13.9.0"
+ ignore "^4.0.6"
+ import-fresh "^3.2.1"
+ js-yaml "^3.13.1"
+ minimatch "^3.0.4"
+ strip-json-comments "^3.1.1"
-"@types/node@^12.6.2":
- version "12.6.8"
- resolved "https://registry.yarnpkg.com/@types/node/-/node-12.6.8.tgz#e469b4bf9d1c9832aee4907ba8a051494357c12c"
- integrity sha512-aX+gFgA5GHcDi89KG5keey2zf0WfZk/HAQotEamsK2kbey+8yGKcson0hbK8E+v0NArlCJQCqMP161YhV6ZXLg==
+"@types/node@*":
+ version "15.12.1"
+ resolved "https://registry.yarnpkg.com/@types/node/-/node-15.12.1.tgz#9b60797dee1895383a725f828a869c86c6caa5c2"
+ integrity sha512-zyxJM8I1c9q5sRMtVF+zdd13Jt6RU4r4qfhTd7lQubyThvLfx6yYekWSQjGCGV2Tkecgxnlpl/DNlb6Hg+dmEw==
-acorn-jsx@^5.0.0:
- version "5.0.1"
- resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.0.1.tgz#32a064fd925429216a09b141102bfdd185fae40e"
- integrity sha512-HJ7CfNHrfJLlNTzIEUTj43LNWGkqpRLxm3YjAlcD0ACydk9XynzYsCBHxut+iqt+1aBXkx9UP/w/ZqMr13XIzg==
+"@ungap/promise-all-settled@1.1.2":
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz#aa58042711d6e3275dd37dc597e5d31e8c290a44"
+ integrity sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==
+
+acorn-jsx@^5.3.1:
+ version "5.3.1"
+ resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.1.tgz#fc8661e11b7ac1539c47dbfea2e72b3af34d267b"
+ integrity sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==
-acorn@^6.0.7, acorn@^6.2.0:
- version "6.2.1"
- resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.2.1.tgz#3ed8422d6dec09e6121cc7a843ca86a330a86b51"
- integrity sha512-JD0xT5FCRDNyjDda3Lrg/IxFscp9q4tiYtxE1/nOzlKCk7hIRuYjhq1kCNkbPjMRMZuFq20HNQn1I9k8Oj0E+Q==
+acorn@^7.4.0:
+ version "7.4.1"
+ resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa"
+ integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==
-ajv@^6.10.0, ajv@^6.10.2:
- version "6.10.2"
- resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.10.2.tgz#d3cea04d6b017b2894ad69040fec8b623eb4bd52"
- integrity sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==
+ajv@^6.10.0, ajv@^6.12.4:
+ version "6.12.6"
+ resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4"
+ integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==
dependencies:
- fast-deep-equal "^2.0.1"
+ fast-deep-equal "^3.1.1"
fast-json-stable-stringify "^2.0.0"
json-schema-traverse "^0.4.1"
uri-js "^4.2.2"
-ansi-escapes@^3.2.0:
- version "3.2.0"
- resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b"
- integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==
+ajv@^8.0.1:
+ version "8.5.0"
+ resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.5.0.tgz#695528274bcb5afc865446aa275484049a18ae4b"
+ integrity sha512-Y2l399Tt1AguU3BPRP9Fn4eN+Or+StUGWCUpbnFyXSo8NZ9S4uj+AG2pjs5apK+ZMOwYOz1+a+VKvKH7CudXgQ==
+ dependencies:
+ fast-deep-equal "^3.1.1"
+ json-schema-traverse "^1.0.0"
+ require-from-string "^2.0.2"
+ uri-js "^4.2.2"
+
+ansi-colors@4.1.1, ansi-colors@^4.1.1:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348"
+ integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==
ansi-regex@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998"
integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=
-ansi-regex@^4.1.0:
- version "4.1.0"
- resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997"
- integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==
+ansi-regex@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75"
+ integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==
-ansi-styles@^3.2.0, ansi-styles@^3.2.1:
+ansi-styles@^3.2.1:
version "3.2.1"
resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"
integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==
dependencies:
color-convert "^1.9.0"
+ansi-styles@^4.0.0, ansi-styles@^4.1.0:
+ version "4.3.0"
+ resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937"
+ integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==
+ dependencies:
+ color-convert "^2.0.1"
+
+anymatch@~3.1.1:
+ version "3.1.2"
+ resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716"
+ integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==
+ dependencies:
+ normalize-path "^3.0.0"
+ picomatch "^2.0.4"
+
argparse@^1.0.7:
version "1.0.10"
resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911"
@@ -77,15 +129,25 @@ argparse@^1.0.7:
dependencies:
sprintf-js "~1.0.2"
-astral-regex@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9"
- integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==
+argparse@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38"
+ integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==
+
+astral-regex@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31"
+ integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==
balanced-match@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767"
- integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c=
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee"
+ integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==
+
+binary-extensions@^2.0.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d"
+ integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==
brace-expansion@^1.1.7:
version "1.1.11"
@@ -95,6 +157,18 @@ brace-expansion@^1.1.7:
balanced-match "^1.0.0"
concat-map "0.0.1"
+braces@~3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107"
+ integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==
+ dependencies:
+ fill-range "^7.0.1"
+
+browser-stdout@1.3.1:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60"
+ integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==
+
buffer-from@^1.0.0:
version "1.1.1"
resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef"
@@ -105,7 +179,12 @@ callsites@^3.0.0:
resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73"
integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==
-chalk@^2.0.0, chalk@^2.1.0, chalk@^2.4.2:
+camelcase@^6.0.0:
+ version "6.2.0"
+ resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.2.0.tgz#924af881c9d525ac9d87f40d964e5cea982a1809"
+ integrity sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==
+
+chalk@^2.0.0:
version "2.4.2"
resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==
@@ -114,22 +193,37 @@ chalk@^2.0.0, chalk@^2.1.0, chalk@^2.4.2:
escape-string-regexp "^1.0.5"
supports-color "^5.3.0"
-chardet@^0.7.0:
- version "0.7.0"
- resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e"
- integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==
-
-cli-cursor@^2.1.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5"
- integrity sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=
- dependencies:
- restore-cursor "^2.0.0"
-
-cli-width@^2.0.0:
- version "2.2.0"
- resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639"
- integrity sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=
+chalk@^4.0.0:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.1.tgz#c80b3fab28bf6371e6863325eee67e618b77e6ad"
+ integrity sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==
+ dependencies:
+ ansi-styles "^4.1.0"
+ supports-color "^7.1.0"
+
+chokidar@3.5.1:
+ version "3.5.1"
+ resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.1.tgz#ee9ce7bbebd2b79f49f304799d5468e31e14e68a"
+ integrity sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==
+ dependencies:
+ anymatch "~3.1.1"
+ braces "~3.0.2"
+ glob-parent "~5.1.0"
+ is-binary-path "~2.1.0"
+ is-glob "~4.0.1"
+ normalize-path "~3.0.0"
+ readdirp "~3.5.0"
+ optionalDependencies:
+ fsevents "~2.3.1"
+
+cliui@^7.0.2:
+ version "7.0.4"
+ resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f"
+ integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==
+ dependencies:
+ string-width "^4.2.0"
+ strip-ansi "^6.0.0"
+ wrap-ansi "^7.0.0"
color-convert@^1.9.0:
version "1.9.3"
@@ -138,65 +232,63 @@ color-convert@^1.9.0:
dependencies:
color-name "1.1.3"
+color-convert@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3"
+ integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==
+ dependencies:
+ color-name "~1.1.4"
+
color-name@1.1.3:
version "1.1.3"
resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"
integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=
+color-name@~1.1.4:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2"
+ integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
+
commander@^2.20.0:
- version "2.20.0"
- resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.0.tgz#d58bb2b5c1ee8f87b0d340027e9e94e222c5a422"
- integrity sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ==
+ version "2.20.3"
+ resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33"
+ integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==
concat-map@0.0.1:
version "0.0.1"
resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=
-core-util-is@~1.0.0:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
- integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=
-
-cross-spawn@^6.0.5:
- version "6.0.5"
- resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4"
- integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==
+cross-spawn@^7.0.2:
+ version "7.0.3"
+ resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6"
+ integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==
dependencies:
- nice-try "^1.0.4"
- path-key "^2.0.1"
- semver "^5.5.0"
- shebang-command "^1.2.0"
- which "^1.2.9"
+ path-key "^3.1.0"
+ shebang-command "^2.0.0"
+ which "^2.0.1"
-debug@^4.0.1:
- version "4.1.1"
- resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791"
- integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==
+debug@4.3.1, debug@^4.0.1, debug@^4.1.1:
+ version "4.3.1"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee"
+ integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==
dependencies:
- ms "^2.1.1"
+ ms "2.1.2"
-deep-equal@~1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.0.1.tgz#f5d260292b660e084eff4cdbc9f08ad3247448b5"
- integrity sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=
+decamelize@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-4.0.0.tgz#aa472d7bf660eb15f3494efd531cab7f2a709837"
+ integrity sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==
-deep-is@~0.1.3:
+deep-is@^0.1.3:
version "0.1.3"
resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34"
integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=
-define-properties@^1.1.2:
- version "1.1.3"
- resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1"
- integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==
- dependencies:
- object-keys "^1.0.12"
-
-defined@~1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693"
- integrity sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=
+diff@5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/diff/-/diff-5.0.0.tgz#7ed6ad76d859d030787ec35855f5b1daf31d852b"
+ integrity sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==
doctrine@^3.0.0:
version "3.0.0"
@@ -205,228 +297,232 @@ doctrine@^3.0.0:
dependencies:
esutils "^2.0.2"
-emoji-regex@^7.0.1:
- version "7.0.3"
- resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156"
- integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==
-
-es-abstract@^1.5.0:
- version "1.13.0"
- resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.13.0.tgz#ac86145fdd5099d8dd49558ccba2eaf9b88e24e9"
- integrity sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg==
- dependencies:
- es-to-primitive "^1.2.0"
- function-bind "^1.1.1"
- has "^1.0.3"
- is-callable "^1.1.4"
- is-regex "^1.0.4"
- object-keys "^1.0.12"
-
-es-to-primitive@^1.2.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.0.tgz#edf72478033456e8dda8ef09e00ad9650707f377"
- integrity sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==
+emoji-regex@^8.0.0:
+ version "8.0.0"
+ resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37"
+ integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==
+
+enquirer@^2.3.5:
+ version "2.3.6"
+ resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d"
+ integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==
dependencies:
- is-callable "^1.1.4"
- is-date-object "^1.0.1"
- is-symbol "^1.0.2"
+ ansi-colors "^4.1.1"
+
+escalade@^3.1.1:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40"
+ integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==
+
+escape-string-regexp@4.0.0, escape-string-regexp@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34"
+ integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==
escape-string-regexp@^1.0.5:
version "1.0.5"
resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=
-eslint-scope@^5.0.0:
- version "5.0.0"
- resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.0.0.tgz#e87c8887c73e8d1ec84f1ca591645c358bfc8fb9"
- integrity sha512-oYrhJW7S0bxAFDvWqzvMPRm6pcgcnWc4QnofCAqRTRfQC0JcwenzGglTtsLyIuuWFfkqDG9vz67cnttSd53djw==
+eslint-scope@^5.1.1:
+ version "5.1.1"
+ resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c"
+ integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==
dependencies:
- esrecurse "^4.1.0"
+ esrecurse "^4.3.0"
estraverse "^4.1.1"
-eslint-utils@^1.3.1:
- version "1.4.3"
- resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.4.3.tgz#74fec7c54d0776b6f67e0251040b5806564e981f"
- integrity sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==
+eslint-utils@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27"
+ integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==
dependencies:
eslint-visitor-keys "^1.1.0"
-eslint-visitor-keys@^1.0.0, eslint-visitor-keys@^1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz#e2a82cea84ff246ad6fb57f9bde5b46621459ec2"
- integrity sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A==
+eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e"
+ integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==
-eslint@6:
- version "6.1.0"
- resolved "https://registry.yarnpkg.com/eslint/-/eslint-6.1.0.tgz#06438a4a278b1d84fb107d24eaaa35471986e646"
- integrity sha512-QhrbdRD7ofuV09IuE2ySWBz0FyXCq0rriLTZXZqaWSI79CVtHVRdkFuFTViiqzZhkCgfOh9USpriuGN2gIpZDQ==
+eslint-visitor-keys@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303"
+ integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==
+
+eslint@7:
+ version "7.28.0"
+ resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.28.0.tgz#435aa17a0b82c13bb2be9d51408b617e49c1e820"
+ integrity sha512-UMfH0VSjP0G4p3EWirscJEQ/cHqnT/iuH6oNZOB94nBjWbMnhGEPxsZm1eyIW0C/9jLI0Fow4W5DXLjEI7mn1g==
dependencies:
- "@babel/code-frame" "^7.0.0"
+ "@babel/code-frame" "7.12.11"
+ "@eslint/eslintrc" "^0.4.2"
ajv "^6.10.0"
- chalk "^2.1.0"
- cross-spawn "^6.0.5"
+ chalk "^4.0.0"
+ cross-spawn "^7.0.2"
debug "^4.0.1"
doctrine "^3.0.0"
- eslint-scope "^5.0.0"
- eslint-utils "^1.3.1"
- eslint-visitor-keys "^1.0.0"
- espree "^6.0.0"
- esquery "^1.0.1"
+ enquirer "^2.3.5"
+ escape-string-regexp "^4.0.0"
+ eslint-scope "^5.1.1"
+ eslint-utils "^2.1.0"
+ eslint-visitor-keys "^2.0.0"
+ espree "^7.3.1"
+ esquery "^1.4.0"
esutils "^2.0.2"
- file-entry-cache "^5.0.1"
+ fast-deep-equal "^3.1.3"
+ file-entry-cache "^6.0.1"
functional-red-black-tree "^1.0.1"
- glob-parent "^5.0.0"
- globals "^11.7.0"
+ glob-parent "^5.1.2"
+ globals "^13.6.0"
ignore "^4.0.6"
import-fresh "^3.0.0"
imurmurhash "^0.1.4"
- inquirer "^6.4.1"
is-glob "^4.0.0"
js-yaml "^3.13.1"
json-stable-stringify-without-jsonify "^1.0.1"
- levn "^0.3.0"
- lodash "^4.17.14"
+ levn "^0.4.1"
+ lodash.merge "^4.6.2"
minimatch "^3.0.4"
- mkdirp "^0.5.1"
natural-compare "^1.4.0"
- optionator "^0.8.2"
+ optionator "^0.9.1"
progress "^2.0.0"
- regexpp "^2.0.1"
- semver "^6.1.2"
- strip-ansi "^5.2.0"
- strip-json-comments "^3.0.1"
- table "^5.2.3"
+ regexpp "^3.1.0"
+ semver "^7.2.1"
+ strip-ansi "^6.0.0"
+ strip-json-comments "^3.1.0"
+ table "^6.0.9"
text-table "^0.2.0"
v8-compile-cache "^2.0.3"
-espree@^6.0.0:
- version "6.0.0"
- resolved "https://registry.yarnpkg.com/espree/-/espree-6.0.0.tgz#716fc1f5a245ef5b9a7fdb1d7b0d3f02322e75f6"
- integrity sha512-lJvCS6YbCn3ImT3yKkPe0+tJ+mH6ljhGNjHQH9mRtiO6gjhVAOhVXW1yjnwqGwTkK3bGbye+hb00nFNmu0l/1Q==
+espree@^7.3.0, espree@^7.3.1:
+ version "7.3.1"
+ resolved "https://registry.yarnpkg.com/espree/-/espree-7.3.1.tgz#f2df330b752c6f55019f8bd89b7660039c1bbbb6"
+ integrity sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==
dependencies:
- acorn "^6.0.7"
- acorn-jsx "^5.0.0"
- eslint-visitor-keys "^1.0.0"
+ acorn "^7.4.0"
+ acorn-jsx "^5.3.1"
+ eslint-visitor-keys "^1.3.0"
esprima@^4.0.0:
version "4.0.1"
resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71"
integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==
-esquery@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.0.1.tgz#406c51658b1f5991a5f9b62b1dc25b00e3e5c708"
- integrity sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==
+esquery@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5"
+ integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==
dependencies:
- estraverse "^4.0.0"
+ estraverse "^5.1.0"
-esrecurse@^4.1.0:
- version "4.2.1"
- resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.1.tgz#007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf"
- integrity sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==
+esrecurse@^4.3.0:
+ version "4.3.0"
+ resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921"
+ integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==
dependencies:
- estraverse "^4.1.0"
+ estraverse "^5.2.0"
-estraverse@^4.0.0, estraverse@^4.1.0, estraverse@^4.1.1:
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13"
- integrity sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=
+estraverse@^4.1.1:
+ version "4.3.0"
+ resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d"
+ integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==
-estree-walker@^0.6.1:
- version "0.6.1"
- resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-0.6.1.tgz#53049143f40c6eb918b23671d1fe3219f3a1b362"
- integrity sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==
+estraverse@^5.1.0, estraverse@^5.2.0:
+ version "5.2.0"
+ resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.2.0.tgz#307df42547e6cc7324d3cf03c155d5cdb8c53880"
+ integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==
esutils@^2.0.2:
- version "2.0.2"
- resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b"
- integrity sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=
-
-external-editor@^3.0.3:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495"
- integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==
- dependencies:
- chardet "^0.7.0"
- iconv-lite "^0.4.24"
- tmp "^0.0.33"
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64"
+ integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==
-fast-deep-equal@^2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49"
- integrity sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=
+fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3:
+ version "3.1.3"
+ resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525"
+ integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==
fast-json-stable-stringify@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2"
- integrity sha1-1RQsDK7msRifh9OnYREGT4bIu/I=
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633"
+ integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==
-fast-levenshtein@~2.0.4:
+fast-levenshtein@^2.0.6:
version "2.0.6"
resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917"
integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=
-figures@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962"
- integrity sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=
+file-entry-cache@^6.0.1:
+ version "6.0.1"
+ resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027"
+ integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==
dependencies:
- escape-string-regexp "^1.0.5"
+ flat-cache "^3.0.4"
-file-entry-cache@^5.0.1:
- version "5.0.1"
- resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-5.0.1.tgz#ca0f6efa6dd3d561333fb14515065c2fafdf439c"
- integrity sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==
+fill-range@^7.0.1:
+ version "7.0.1"
+ resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40"
+ integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==
dependencies:
- flat-cache "^2.0.1"
+ to-regex-range "^5.0.1"
-flat-cache@^2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-2.0.1.tgz#5d296d6f04bda44a4630a301413bdbc2ec085ec0"
- integrity sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==
+find-up@5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc"
+ integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==
dependencies:
- flatted "^2.0.0"
- rimraf "2.6.3"
- write "1.0.3"
-
-flatted@^2.0.0:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.1.tgz#69e57caa8f0eacbc281d2e2cb458d46fdb449e08"
- integrity sha512-a1hQMktqW9Nmqr5aktAux3JMNqaucxGcjtjWnZLHX7yyPCmlSV3M54nGYbqT8K+0GhF3NBgmJCc3ma+WOgX8Jg==
+ locate-path "^6.0.0"
+ path-exists "^4.0.0"
-for-each@~0.3.3:
- version "0.3.3"
- resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e"
- integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==
+flat-cache@^3.0.4:
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11"
+ integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==
dependencies:
- is-callable "^1.1.3"
+ flatted "^3.1.0"
+ rimraf "^3.0.2"
+
+flat@^5.0.2:
+ version "5.0.2"
+ resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241"
+ integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==
+
+flatted@^3.1.0:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.1.1.tgz#c4b489e80096d9df1dfc97c79871aea7c617c469"
+ integrity sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA==
fs.realpath@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8=
-function-bind@^1.0.2, function-bind@^1.1.1, function-bind@~1.1.1:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
- integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==
+fsevents@~2.3.1:
+ version "2.3.2"
+ resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a"
+ integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==
functional-red-black-tree@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327"
integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=
-glob-parent@^5.0.0:
- version "5.0.0"
- resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.0.0.tgz#1dc99f0f39b006d3e92c2c284068382f0c20e954"
- integrity sha512-Z2RwiujPRGluePM6j699ktJYxmPpJKCfpGA13jz2hmFZC7gKetzrWvg5KN3+OsIFmydGyZ1AVwERCq1w/ZZwRg==
+get-caller-file@^2.0.5:
+ version "2.0.5"
+ resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e"
+ integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==
+
+glob-parent@^5.1.2, glob-parent@~5.1.0:
+ version "5.1.2"
+ resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4"
+ integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==
dependencies:
is-glob "^4.0.1"
-glob@^7.1.3, glob@~7.1.4:
- version "7.1.4"
- resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.4.tgz#aa608a2f6c577ad357e1ae5a5c26d9a8d1969255"
- integrity sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==
+glob@7.1.6:
+ version "7.1.6"
+ resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6"
+ integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==
dependencies:
fs.realpath "^1.0.0"
inflight "^1.0.4"
@@ -435,44 +531,54 @@ glob@^7.1.3, glob@~7.1.4:
once "^1.3.0"
path-is-absolute "^1.0.0"
-globals@^11.7.0:
- version "11.12.0"
- resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e"
- integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==
+glob@^7.1.3:
+ version "7.1.7"
+ resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.7.tgz#3b193e9233f01d42d0b3f78294bbeeb418f94a90"
+ integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==
+ dependencies:
+ fs.realpath "^1.0.0"
+ inflight "^1.0.4"
+ inherits "2"
+ minimatch "^3.0.4"
+ once "^1.3.0"
+ path-is-absolute "^1.0.0"
+
+globals@^13.6.0, globals@^13.9.0:
+ version "13.9.0"
+ resolved "https://registry.yarnpkg.com/globals/-/globals-13.9.0.tgz#4bf2bf635b334a173fb1daf7c5e6b218ecdc06cb"
+ integrity sha512-74/FduwI/JaIrr1H8e71UbDE+5x7pIPs1C2rrwC52SszOo043CsWOZEMW7o2Y58xwm9b+0RBKDxY5n2sUpEFxA==
+ dependencies:
+ type-fest "^0.20.2"
+
+growl@1.10.5:
+ version "1.10.5"
+ resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.5.tgz#f2735dc2283674fa67478b10181059355c369e5e"
+ integrity sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==
has-flag@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0=
-has-symbols@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.0.tgz#ba1a8f1af2a0fc39650f5c850367704122063b44"
- integrity sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=
-
-has@^1.0.1, has@^1.0.3, has@~1.0.3:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796"
- integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==
- dependencies:
- function-bind "^1.1.1"
+has-flag@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b"
+ integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==
-iconv-lite@^0.4.24:
- version "0.4.24"
- resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
- integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==
- dependencies:
- safer-buffer ">= 2.1.2 < 3"
+he@1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f"
+ integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==
ignore@^4.0.6:
version "4.0.6"
resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc"
integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==
-import-fresh@^3.0.0:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.1.0.tgz#6d33fa1dcef6df930fae003446f33415af905118"
- integrity sha512-PpuksHKGt8rXfWEr9m9EHIpgyyaltBy8+eF6GJM0QCAxMgxCfucMF3mjecK2QsJr0amJW7gTqh5/wht0z2UhEQ==
+import-fresh@^3.0.0, import-fresh@^3.2.1:
+ version "3.3.0"
+ resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b"
+ integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==
dependencies:
parent-module "^1.0.0"
resolve-from "^4.0.0"
@@ -490,39 +596,17 @@ inflight@^1.0.4:
once "^1.3.0"
wrappy "1"
-inherits@2, inherits@~2.0.3, inherits@~2.0.4:
+inherits@2:
version "2.0.4"
resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
-inquirer@^6.4.1:
- version "6.5.0"
- resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.5.0.tgz#2303317efc9a4ea7ec2e2df6f86569b734accf42"
- integrity sha512-scfHejeG/lVZSpvCXpsB4j/wQNPM5JC8kiElOI0OUTwmc1RTpXr4H32/HOlQHcZiYl2z2VElwuCVDRG8vFmbnA==
- dependencies:
- ansi-escapes "^3.2.0"
- chalk "^2.4.2"
- cli-cursor "^2.1.0"
- cli-width "^2.0.0"
- external-editor "^3.0.3"
- figures "^2.0.0"
- lodash "^4.17.12"
- mute-stream "0.0.7"
- run-async "^2.2.0"
- rxjs "^6.4.0"
- string-width "^2.1.0"
- strip-ansi "^5.1.0"
- through "^2.3.6"
-
-is-callable@^1.1.3, is-callable@^1.1.4:
- version "1.1.4"
- resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.4.tgz#1e1adf219e1eeb684d691f9d6a05ff0d30a24d75"
- integrity sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==
-
-is-date-object@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16"
- integrity sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=
+is-binary-path@~2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09"
+ integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==
+ dependencies:
+ binary-extensions "^2.0.0"
is-extglob@^2.1.1:
version "2.1.1"
@@ -534,59 +618,58 @@ is-fullwidth-code-point@^2.0.0:
resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f"
integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=
-is-glob@^4.0.0, is-glob@^4.0.1:
+is-fullwidth-code-point@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d"
+ integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==
+
+is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1:
version "4.0.1"
resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc"
integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==
dependencies:
is-extglob "^2.1.1"
-is-promise@^2.1.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa"
- integrity sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=
-
-is-regex@^1.0.4:
- version "1.0.4"
- resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491"
- integrity sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=
- dependencies:
- has "^1.0.1"
-
-is-symbol@^1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.2.tgz#a055f6ae57192caee329e7a860118b497a950f38"
- integrity sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==
- dependencies:
- has-symbols "^1.0.0"
+is-number@^7.0.0:
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b"
+ integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==
-isarray@~1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
- integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=
+is-plain-obj@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287"
+ integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==
isexe@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=
-jest-worker@^24.6.0:
- version "24.6.0"
- resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-24.6.0.tgz#7f81ceae34b7cde0c9827a6980c35b7cdc0161b3"
- integrity sha512-jDwgW5W9qGNvpI1tNnvajh0a5IE/PuGLFmHk6aR/BZFz8tSgGw17GsDPXAJ6p91IvYDjOw8GpFbvvZGAK+DPQQ==
+jest-worker@^26.2.1:
+ version "26.6.2"
+ resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-26.6.2.tgz#7f72cbc4d643c365e27b9fd775f9d0eaa9c7a8ed"
+ integrity sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==
dependencies:
- merge-stream "^1.0.1"
- supports-color "^6.1.0"
+ "@types/node" "*"
+ merge-stream "^2.0.0"
+ supports-color "^7.0.0"
js-tokens@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==
+js-yaml@4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.0.0.tgz#f426bc0ff4b4051926cd588c71113183409a121f"
+ integrity sha512-pqon0s+4ScYUvX30wxQi3PogGFAlUyH0awepWvwkj4jD4v+ova3RiYw8bmA6x2rDrEaj8i/oWKoRxpVNW+Re8Q==
+ dependencies:
+ argparse "^2.0.1"
+
js-yaml@^3.13.1:
- version "3.13.1"
- resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847"
- integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==
+ version "3.14.1"
+ resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537"
+ integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==
dependencies:
argparse "^1.0.7"
esprima "^4.0.0"
@@ -596,89 +679,127 @@ json-schema-traverse@^0.4.1:
resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660"
integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==
+json-schema-traverse@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2"
+ integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==
+
json-stable-stringify-without-jsonify@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651"
integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=
-levn@^0.3.0, levn@~0.3.0:
- version "0.3.0"
- resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee"
- integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=
+levn@^0.4.1:
+ version "0.4.1"
+ resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade"
+ integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==
dependencies:
- prelude-ls "~1.1.2"
- type-check "~0.3.2"
+ prelude-ls "^1.2.1"
+ type-check "~0.4.0"
-lodash@^4.17.12, lodash@^4.17.14:
- version "4.17.15"
- resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548"
- integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==
+locate-path@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286"
+ integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==
+ dependencies:
+ p-locate "^5.0.0"
-merge-stream@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-1.0.1.tgz#4041202d508a342ba00174008df0c251b8c135e1"
- integrity sha1-QEEgLVCKNCugAXQAjfDCUbjBNeE=
+lodash.clonedeep@^4.5.0:
+ version "4.5.0"
+ resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef"
+ integrity sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=
+
+lodash.merge@^4.6.2:
+ version "4.6.2"
+ resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a"
+ integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==
+
+lodash.truncate@^4.4.2:
+ version "4.4.2"
+ resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193"
+ integrity sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=
+
+log-symbols@4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.0.0.tgz#69b3cc46d20f448eccdb75ea1fa733d9e821c920"
+ integrity sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA==
dependencies:
- readable-stream "^2.0.1"
+ chalk "^4.0.0"
-mimic-fn@^1.0.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022"
- integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==
+lru-cache@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94"
+ integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==
+ dependencies:
+ yallist "^4.0.0"
+
+merge-stream@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60"
+ integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==
-minimatch@^3.0.4:
+minimatch@3.0.4, minimatch@^3.0.4:
version "3.0.4"
resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==
dependencies:
brace-expansion "^1.1.7"
-minimist@0.0.8:
- version "0.0.8"
- resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d"
- integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=
-
-minimist@~1.2.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284"
- integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=
-
-mkdirp@^0.5.1:
- version "0.5.1"
- resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903"
- integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=
- dependencies:
- minimist "0.0.8"
-
-ms@^2.1.1:
+mocha@8:
+ version "8.4.0"
+ resolved "https://registry.yarnpkg.com/mocha/-/mocha-8.4.0.tgz#677be88bf15980a3cae03a73e10a0fc3997f0cff"
+ integrity sha512-hJaO0mwDXmZS4ghXsvPVriOhsxQ7ofcpQdm8dE+jISUOKopitvnXFQmpRR7jd2K6VBG6E26gU3IAbXXGIbu4sQ==
+ dependencies:
+ "@ungap/promise-all-settled" "1.1.2"
+ ansi-colors "4.1.1"
+ browser-stdout "1.3.1"
+ chokidar "3.5.1"
+ debug "4.3.1"
+ diff "5.0.0"
+ escape-string-regexp "4.0.0"
+ find-up "5.0.0"
+ glob "7.1.6"
+ growl "1.10.5"
+ he "1.2.0"
+ js-yaml "4.0.0"
+ log-symbols "4.0.0"
+ minimatch "3.0.4"
+ ms "2.1.3"
+ nanoid "3.1.20"
+ serialize-javascript "5.0.1"
+ strip-json-comments "3.1.1"
+ supports-color "8.1.1"
+ which "2.0.2"
+ wide-align "1.1.3"
+ workerpool "6.1.0"
+ yargs "16.2.0"
+ yargs-parser "20.2.4"
+ yargs-unparser "2.0.0"
+
+ms@2.1.2:
version "2.1.2"
resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
-mute-stream@0.0.7:
- version "0.0.7"
- resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab"
- integrity sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=
+ms@2.1.3:
+ version "2.1.3"
+ resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2"
+ integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==
+
+nanoid@3.1.20:
+ version "3.1.20"
+ resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.20.tgz#badc263c6b1dcf14b71efaa85f6ab4c1d6cfc788"
+ integrity sha512-a1cQNyczgKbLX9jwbS/+d7W8fX/RfgYR7lVWwWOGIPNgK2m0MWvrGF6/m4kk6U3QcFMnZf3RIhL0v2Jgh/0Uxw==
natural-compare@^1.4.0:
version "1.4.0"
resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=
-nice-try@^1.0.4:
- version "1.0.5"
- resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366"
- integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==
-
-object-inspect@~1.6.0:
- version "1.6.0"
- resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.6.0.tgz#c70b6cbf72f274aab4c34c0c82f5167bf82cf15b"
- integrity sha512-GJzfBZ6DgDAmnuaM3104jR4s1Myxr3Y3zfIyN4z3UdqN69oSRacNK8UhnobDdC+7J2AHCjGwxQubNJfE70SXXQ==
-
-object-keys@^1.0.12:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e"
- integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==
+normalize-path@^3.0.0, normalize-path@~3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65"
+ integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==
once@^1.3.0:
version "1.4.0"
@@ -687,29 +808,31 @@ once@^1.3.0:
dependencies:
wrappy "1"
-onetime@^2.0.0:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4"
- integrity sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=
+optionator@^0.9.1:
+ version "0.9.1"
+ resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499"
+ integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==
dependencies:
- mimic-fn "^1.0.0"
+ deep-is "^0.1.3"
+ fast-levenshtein "^2.0.6"
+ levn "^0.4.1"
+ prelude-ls "^1.2.1"
+ type-check "^0.4.0"
+ word-wrap "^1.2.3"
-optionator@^0.8.2:
- version "0.8.2"
- resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64"
- integrity sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=
+p-limit@^3.0.2:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b"
+ integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==
dependencies:
- deep-is "~0.1.3"
- fast-levenshtein "~2.0.4"
- levn "~0.3.0"
- prelude-ls "~1.1.2"
- type-check "~0.3.2"
- wordwrap "~1.0.0"
+ yocto-queue "^0.1.0"
-os-tmpdir@~1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
- integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=
+p-locate@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834"
+ integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==
+ dependencies:
+ p-limit "^3.0.2"
parent-module@^1.0.0:
version "1.0.1"
@@ -718,30 +841,30 @@ parent-module@^1.0.0:
dependencies:
callsites "^3.0.0"
+path-exists@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3"
+ integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==
+
path-is-absolute@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18=
-path-key@^2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40"
- integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=
-
-path-parse@^1.0.6:
- version "1.0.6"
- resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c"
- integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==
+path-key@^3.1.0:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375"
+ integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==
-prelude-ls@~1.1.2:
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54"
- integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=
+picomatch@^2.0.4, picomatch@^2.2.1:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.0.tgz#f1f061de8f6a4bf022892e2d128234fb98302972"
+ integrity sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==
-process-nextick-args@~2.0.0:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2"
- integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==
+prelude-ls@^1.2.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396"
+ integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==
progress@^2.0.0:
version "2.0.3"
@@ -753,169 +876,135 @@ punycode@^2.1.0:
resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec"
integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==
-readable-stream@^2.0.1:
- version "2.3.6"
- resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf"
- integrity sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==
- dependencies:
- core-util-is "~1.0.0"
- inherits "~2.0.3"
- isarray "~1.0.0"
- process-nextick-args "~2.0.0"
- safe-buffer "~5.1.1"
- string_decoder "~1.1.1"
- util-deprecate "~1.0.1"
-
-regexpp@^2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-2.0.1.tgz#8d19d31cf632482b589049f8281f93dbcba4d07f"
- integrity sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==
+randombytes@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a"
+ integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==
+ dependencies:
+ safe-buffer "^5.1.0"
+
+readdirp@~3.5.0:
+ version "3.5.0"
+ resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.5.0.tgz#9ba74c019b15d365278d2e91bb8c48d7b4d42c9e"
+ integrity sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==
+ dependencies:
+ picomatch "^2.2.1"
+
+regexpp@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.1.0.tgz#206d0ad0a5648cffbdb8ae46438f3dc51c9f78e2"
+ integrity sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==
+
+require-directory@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42"
+ integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I=
+
+require-from-string@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909"
+ integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==
resolve-from@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6"
integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==
-resolve@~1.11.1:
- version "1.11.1"
- resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.11.1.tgz#ea10d8110376982fef578df8fc30b9ac30a07a3e"
- integrity sha512-vIpgF6wfuJOZI7KKKSP+HmiKggadPQAdsp5HiC1mvqnfp0gF1vdwgBWZIdrVft9pgqoMFQN+R7BSWZiBxx+BBw==
- dependencies:
- path-parse "^1.0.6"
-
-restore-cursor@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf"
- integrity sha1-n37ih/gv0ybU/RYpI9YhKe7g368=
- dependencies:
- onetime "^2.0.0"
- signal-exit "^3.0.2"
-
-resumer@~0.0.0:
- version "0.0.0"
- resolved "https://registry.yarnpkg.com/resumer/-/resumer-0.0.0.tgz#f1e8f461e4064ba39e82af3cdc2a8c893d076759"
- integrity sha1-8ej0YeQGS6Oegq883CqMiT0HZ1k=
- dependencies:
- through "~2.3.4"
-
-rimraf@2.6.3:
- version "2.6.3"
- resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab"
- integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==
+rimraf@^3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a"
+ integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==
dependencies:
glob "^7.1.3"
-rollup-plugin-terser@5:
- version "5.1.1"
- resolved "https://registry.yarnpkg.com/rollup-plugin-terser/-/rollup-plugin-terser-5.1.1.tgz#e9d2545ec8d467f96ba99b9216d2285aad8d5b66"
- integrity sha512-McIMCDEY8EU6Y839C09UopeRR56wXHGdvKKjlfiZG/GrP6wvZQ62u2ko/Xh1MNH2M9WDL+obAAHySljIZYCuPQ==
+rollup-plugin-terser@7:
+ version "7.0.2"
+ resolved "https://registry.yarnpkg.com/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz#e8fbba4869981b2dc35ae7e8a502d5c6c04d324d"
+ integrity sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==
dependencies:
- "@babel/code-frame" "^7.0.0"
- jest-worker "^24.6.0"
- rollup-pluginutils "^2.8.1"
- serialize-javascript "^1.7.0"
- terser "^4.1.0"
+ "@babel/code-frame" "^7.10.4"
+ jest-worker "^26.2.1"
+ serialize-javascript "^4.0.0"
+ terser "^5.0.0"
-rollup-pluginutils@^2.8.1:
- version "2.8.1"
- resolved "https://registry.yarnpkg.com/rollup-pluginutils/-/rollup-pluginutils-2.8.1.tgz#8fa6dd0697344938ef26c2c09d2488ce9e33ce97"
- integrity sha512-J5oAoysWar6GuZo0s+3bZ6sVZAC0pfqKz68De7ZgDi5z63jOVZn1uJL/+z1jeKHNbGII8kAyHF5q8LnxSX5lQg==
- dependencies:
- estree-walker "^0.6.1"
+rollup@2:
+ version "2.50.6"
+ resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.50.6.tgz#24e2211caf9031081656e98a5e5e94d3b5e786e2"
+ integrity sha512-6c5CJPLVgo0iNaZWWliNu1Kl43tjP9LZcp6D/tkf2eLH2a9/WeHxg9vfTFl8QV/2SOyaJX37CEm9XuGM0rviUg==
+ optionalDependencies:
+ fsevents "~2.3.1"
-rollup@1:
- version "1.17.0"
- resolved "https://registry.yarnpkg.com/rollup/-/rollup-1.17.0.tgz#47ee8b04514544fc93b39bae06271244c8db7dfa"
- integrity sha512-k/j1m0NIsI4SYgCJR4MWPstGJOWfJyd6gycKoMhyoKPVXxm+L49XtbUwZyFsrSU2YXsOkM4u1ll9CS/ZgJBUpw==
- dependencies:
- "@types/estree" "0.0.39"
- "@types/node" "^12.6.2"
- acorn "^6.2.0"
+safe-buffer@^5.1.0:
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"
+ integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==
-run-async@^2.2.0:
- version "2.3.0"
- resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.3.0.tgz#0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0"
- integrity sha1-A3GrSuC91yDUFm19/aZP96RFpsA=
+semver@^7.2.1:
+ version "7.3.5"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7"
+ integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==
dependencies:
- is-promise "^2.1.0"
+ lru-cache "^6.0.0"
-rxjs@^6.4.0:
- version "6.5.2"
- resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.5.2.tgz#2e35ce815cd46d84d02a209fb4e5921e051dbec7"
- integrity sha512-HUb7j3kvb7p7eCUHE3FqjoDsC1xfZQ4AHFWfTKSpZ+sAhhz5X1WX0ZuUqWbzB2QhSLp3DoLUG+hMdEDKqWo2Zg==
+serialize-javascript@5.0.1:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-5.0.1.tgz#7886ec848049a462467a97d3d918ebb2aaf934f4"
+ integrity sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==
dependencies:
- tslib "^1.9.0"
-
-safe-buffer@~5.1.0, safe-buffer@~5.1.1:
- version "5.1.2"
- resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
- integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
-
-"safer-buffer@>= 2.1.2 < 3":
- version "2.1.2"
- resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
- integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
-
-semver@^5.5.0:
- version "5.7.0"
- resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.0.tgz#790a7cf6fea5459bac96110b29b60412dc8ff96b"
- integrity sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==
-
-semver@^6.1.2:
- version "6.3.0"
- resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d"
- integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==
-
-serialize-javascript@^1.7.0:
- version "1.7.0"
- resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-1.7.0.tgz#d6e0dfb2a3832a8c94468e6eb1db97e55a192a65"
- integrity sha512-ke8UG8ulpFOxO8f8gRYabHQe/ZntKlcig2Mp+8+URDP1D8vJZ0KUt7LYo07q25Z/+JVSgpr/cui9PIp5H6/+nA==
+ randombytes "^2.1.0"
-shebang-command@^1.2.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea"
- integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=
+serialize-javascript@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-4.0.0.tgz#b525e1238489a5ecfc42afacc3fe99e666f4b1aa"
+ integrity sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==
dependencies:
- shebang-regex "^1.0.0"
+ randombytes "^2.1.0"
-shebang-regex@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3"
- integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=
+shebang-command@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea"
+ integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==
+ dependencies:
+ shebang-regex "^3.0.0"
-signal-exit@^3.0.2:
- version "3.0.2"
- resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d"
- integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=
+shebang-regex@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172"
+ integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==
-slice-ansi@^2.1.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636"
- integrity sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==
+slice-ansi@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b"
+ integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==
dependencies:
- ansi-styles "^3.2.0"
- astral-regex "^1.0.0"
- is-fullwidth-code-point "^2.0.0"
+ ansi-styles "^4.0.0"
+ astral-regex "^2.0.0"
+ is-fullwidth-code-point "^3.0.0"
-source-map-support@~0.5.12:
- version "0.5.12"
- resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.12.tgz#b4f3b10d51857a5af0138d3ce8003b201613d599"
- integrity sha512-4h2Pbvyy15EE02G+JOZpUCmqWJuqrs+sEkzewTm++BPi7Hvn/HwcqLAcNxYAyI0x13CpPPn+kMjl+hplXMHITQ==
+source-map-support@~0.5.19:
+ version "0.5.19"
+ resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61"
+ integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==
dependencies:
buffer-from "^1.0.0"
source-map "^0.6.0"
-source-map@^0.6.0, source-map@~0.6.1:
+source-map@^0.6.0:
version "0.6.1"
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
+source-map@~0.7.2:
+ version "0.7.3"
+ resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383"
+ integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==
+
sprintf-js@~1.0.2:
version "1.0.3"
resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"
integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=
-string-width@^2.1.0:
+"string-width@^1.0.2 || 2":
version "2.1.1"
resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e"
integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==
@@ -923,30 +1012,14 @@ string-width@^2.1.0:
is-fullwidth-code-point "^2.0.0"
strip-ansi "^4.0.0"
-string-width@^3.0.0:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961"
- integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==
- dependencies:
- emoji-regex "^7.0.1"
- is-fullwidth-code-point "^2.0.0"
- strip-ansi "^5.1.0"
-
-string.prototype.trim@~1.1.2:
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.1.2.tgz#d04de2c89e137f4d7d206f086b5ed2fae6be8cea"
- integrity sha1-0E3iyJ4Tf019IG8Ia17S+ua+jOo=
- dependencies:
- define-properties "^1.1.2"
- es-abstract "^1.5.0"
- function-bind "^1.0.2"
-
-string_decoder@~1.1.1:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8"
- integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==
+string-width@^4.1.0, string-width@^4.2.0:
+ version "4.2.2"
+ resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.2.tgz#dafd4f9559a7585cfba529c6a0a4f73488ebd4c5"
+ integrity sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==
dependencies:
- safe-buffer "~5.1.0"
+ emoji-regex "^8.0.0"
+ is-fullwidth-code-point "^3.0.0"
+ strip-ansi "^6.0.0"
strip-ansi@^4.0.0:
version "4.0.0"
@@ -955,17 +1028,24 @@ strip-ansi@^4.0.0:
dependencies:
ansi-regex "^3.0.0"
-strip-ansi@^5.1.0, strip-ansi@^5.2.0:
- version "5.2.0"
- resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae"
- integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==
+strip-ansi@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532"
+ integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==
dependencies:
- ansi-regex "^4.1.0"
+ ansi-regex "^5.0.0"
-strip-json-comments@^3.0.1:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.0.1.tgz#85713975a91fb87bf1b305cca77395e40d2a64a7"
- integrity sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw==
+strip-json-comments@3.1.1, strip-json-comments@^3.1.0, strip-json-comments@^3.1.1:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006"
+ integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==
+
+supports-color@8.1.1:
+ version "8.1.1"
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c"
+ integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==
+ dependencies:
+ has-flag "^4.0.0"
supports-color@^5.3.0:
version "5.5.0"
@@ -974,117 +1054,152 @@ supports-color@^5.3.0:
dependencies:
has-flag "^3.0.0"
-supports-color@^6.1.0:
- version "6.1.0"
- resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3"
- integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==
+supports-color@^7.0.0, supports-color@^7.1.0:
+ version "7.2.0"
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da"
+ integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==
dependencies:
- has-flag "^3.0.0"
+ has-flag "^4.0.0"
+
+table@^6.0.9:
+ version "6.7.1"
+ resolved "https://registry.yarnpkg.com/table/-/table-6.7.1.tgz#ee05592b7143831a8c94f3cee6aae4c1ccef33e2"
+ integrity sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg==
+ dependencies:
+ ajv "^8.0.1"
+ lodash.clonedeep "^4.5.0"
+ lodash.truncate "^4.4.2"
+ slice-ansi "^4.0.0"
+ string-width "^4.2.0"
+ strip-ansi "^6.0.0"
-table@^5.2.3:
- version "5.4.4"
- resolved "https://registry.yarnpkg.com/table/-/table-5.4.4.tgz#6e0f88fdae3692793d1077fd172a4667afe986a6"
- integrity sha512-IIfEAUx5QlODLblLrGTTLJA7Tk0iLSGBvgY8essPRVNGHAzThujww1YqHLs6h3HfTg55h++RzLHH5Xw/rfv+mg==
- dependencies:
- ajv "^6.10.2"
- lodash "^4.17.14"
- slice-ansi "^2.1.0"
- string-width "^3.0.0"
-
-tape@4:
- version "4.11.0"
- resolved "https://registry.yarnpkg.com/tape/-/tape-4.11.0.tgz#63d41accd95e45a23a874473051c57fdbc58edc1"
- integrity sha512-yixvDMX7q7JIs/omJSzSZrqulOV51EC9dK8dM0TzImTIkHWfe2/kFyL5v+d9C+SrCMaICk59ujsqFAVidDqDaA==
- dependencies:
- deep-equal "~1.0.1"
- defined "~1.0.0"
- for-each "~0.3.3"
- function-bind "~1.1.1"
- glob "~7.1.4"
- has "~1.0.3"
- inherits "~2.0.4"
- minimist "~1.2.0"
- object-inspect "~1.6.0"
- resolve "~1.11.1"
- resumer "~0.0.0"
- string.prototype.trim "~1.1.2"
- through "~2.3.8"
-
-terser@^4.1.0:
- version "4.1.2"
- resolved "https://registry.yarnpkg.com/terser/-/terser-4.1.2.tgz#b2656c8a506f7ce805a3f300a2ff48db022fa391"
- integrity sha512-jvNoEQSPXJdssFwqPSgWjsOrb+ELoE+ILpHPKXC83tIxOlh2U75F1KuB2luLD/3a6/7K3Vw5pDn+hvu0C4AzSw==
+terser@^5.0.0:
+ version "5.7.0"
+ resolved "https://registry.yarnpkg.com/terser/-/terser-5.7.0.tgz#a761eeec206bc87b605ab13029876ead938ae693"
+ integrity sha512-HP5/9hp2UaZt5fYkuhNBR8YyRcT8juw8+uFbAme53iN9hblvKnLUTKkmwJG6ocWpIKf8UK4DoeWG4ty0J6S6/g==
dependencies:
commander "^2.20.0"
- source-map "~0.6.1"
- source-map-support "~0.5.12"
+ source-map "~0.7.2"
+ source-map-support "~0.5.19"
text-table@^0.2.0:
version "0.2.0"
resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4"
integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=
-through@^2.3.6, through@~2.3.4, through@~2.3.8:
- version "2.3.8"
- resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
- integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=
-
-tmp@^0.0.33:
- version "0.0.33"
- resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9"
- integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==
+to-regex-range@^5.0.1:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4"
+ integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==
dependencies:
- os-tmpdir "~1.0.2"
-
-tslib@^1.9.0:
- version "1.10.0"
- resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.10.0.tgz#c3c19f95973fb0a62973fb09d90d961ee43e5c8a"
- integrity sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==
+ is-number "^7.0.0"
-type-check@~0.3.2:
- version "0.3.2"
- resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72"
- integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=
+type-check@^0.4.0, type-check@~0.4.0:
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1"
+ integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==
dependencies:
- prelude-ls "~1.1.2"
+ prelude-ls "^1.2.1"
+
+type-fest@^0.20.2:
+ version "0.20.2"
+ resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4"
+ integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==
uri-js@^4.2.2:
- version "4.2.2"
- resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0"
- integrity sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==
+ version "4.4.1"
+ resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e"
+ integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==
dependencies:
punycode "^2.1.0"
-util-deprecate@~1.0.1:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
- integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=
-
v8-compile-cache@^2.0.3:
- version "2.0.3"
- resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.0.3.tgz#00f7494d2ae2b688cfe2899df6ed2c54bef91dbe"
- integrity sha512-CNmdbwQMBjwr9Gsmohvm0pbL954tJrNzf6gWL3K+QMQf00PF7ERGrEiLgjuU3mKreLC2MeGhUsNV9ybTbLgd3w==
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee"
+ integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==
-which@^1.2.9:
- version "1.3.1"
- resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a"
- integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==
+which@2.0.2, which@^2.0.1:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1"
+ integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==
dependencies:
isexe "^2.0.0"
-wordwrap@~1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb"
- integrity sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=
+wide-align@1.1.3:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457"
+ integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==
+ dependencies:
+ string-width "^1.0.2 || 2"
+
+word-wrap@^1.2.3:
+ version "1.2.3"
+ resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c"
+ integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==
+
+workerpool@6.1.0:
+ version "6.1.0"
+ resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.1.0.tgz#a8e038b4c94569596852de7a8ea4228eefdeb37b"
+ integrity sha512-toV7q9rWNYha963Pl/qyeZ6wG+3nnsyvolaNUS8+R5Wtw6qJPTxIlOP1ZSvcGhEJw+l3HMMmtiNo9Gl61G4GVg==
+
+wrap-ansi@^7.0.0:
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43"
+ integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==
+ dependencies:
+ ansi-styles "^4.0.0"
+ string-width "^4.1.0"
+ strip-ansi "^6.0.0"
wrappy@1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=
-write@1.0.3:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/write/-/write-1.0.3.tgz#0800e14523b923a387e415123c865616aae0f5c3"
- integrity sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==
- dependencies:
- mkdirp "^0.5.1"
+y18n@^5.0.5:
+ version "5.0.8"
+ resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55"
+ integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==
+
+yallist@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72"
+ integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==
+
+yargs-parser@20.2.4:
+ version "20.2.4"
+ resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54"
+ integrity sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==
+
+yargs-parser@^20.2.2:
+ version "20.2.7"
+ resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.7.tgz#61df85c113edfb5a7a4e36eb8aa60ef423cbc90a"
+ integrity sha512-FiNkvbeHzB/syOjIUxFDCnhSfzAL8R5vs40MgLFBorXACCOAEaWu0gRZl14vG8MR9AOJIZbmkjhusqBYZ3HTHw==
+
+yargs-unparser@2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/yargs-unparser/-/yargs-unparser-2.0.0.tgz#f131f9226911ae5d9ad38c432fe809366c2325eb"
+ integrity sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==
+ dependencies:
+ camelcase "^6.0.0"
+ decamelize "^4.0.0"
+ flat "^5.0.2"
+ is-plain-obj "^2.1.0"
+
+yargs@16.2.0:
+ version "16.2.0"
+ resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66"
+ integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==
+ dependencies:
+ cliui "^7.0.2"
+ escalade "^3.1.1"
+ get-caller-file "^2.0.5"
+ require-directory "^2.1.1"
+ string-width "^4.2.0"
+ y18n "^5.0.5"
+ yargs-parser "^20.2.2"
+
+yocto-queue@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b"
+ integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==