├── src ├── constant.js ├── noop.js ├── ascending.js ├── array.js ├── index.js ├── area.js ├── contains.js ├── density.js └── contours.js ├── img ├── clouds.png ├── diamonds.png ├── faithful.png ├── sin-cos.png ├── volcano.gif ├── temperature.png ├── reprojection.png └── goldstein-price.png ├── test ├── .eslintrc.json ├── asserts.js ├── jsdom.js ├── snapshot.js ├── snapshots │ └── index.js ├── data │ └── faithful.tsv ├── density-test.js └── contours-test.js ├── .gitignore ├── .github ├── eslint.json └── workflows │ └── node.js.yml ├── .eslintrc.json ├── README.md ├── LICENSE ├── rollup.config.js ├── package.json └── yarn.lock /src/constant.js: -------------------------------------------------------------------------------- 1 | export default x => () => x; 2 | -------------------------------------------------------------------------------- /src/noop.js: -------------------------------------------------------------------------------- 1 | export default function() {} 2 | -------------------------------------------------------------------------------- /img/clouds.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/d3/d3-contour/HEAD/img/clouds.png -------------------------------------------------------------------------------- /src/ascending.js: -------------------------------------------------------------------------------- 1 | export default function(a, b) { 2 | return a - b; 3 | } 4 | -------------------------------------------------------------------------------- /test/.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "env": { 3 | "mocha": true 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /img/diamonds.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/d3/d3-contour/HEAD/img/diamonds.png -------------------------------------------------------------------------------- /img/faithful.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/d3/d3-contour/HEAD/img/faithful.png -------------------------------------------------------------------------------- /img/sin-cos.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/d3/d3-contour/HEAD/img/sin-cos.png -------------------------------------------------------------------------------- /img/volcano.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/d3/d3-contour/HEAD/img/volcano.gif -------------------------------------------------------------------------------- /img/temperature.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/d3/d3-contour/HEAD/img/temperature.png -------------------------------------------------------------------------------- /src/array.js: -------------------------------------------------------------------------------- 1 | var array = Array.prototype; 2 | 3 | export var slice = array.slice; 4 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *.sublime-workspace 2 | .DS_Store 3 | dist/ 4 | node_modules 5 | npm-debug.log 6 | -------------------------------------------------------------------------------- /img/reprojection.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/d3/d3-contour/HEAD/img/reprojection.png -------------------------------------------------------------------------------- /img/goldstein-price.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/d3/d3-contour/HEAD/img/goldstein-price.png -------------------------------------------------------------------------------- /src/index.js: -------------------------------------------------------------------------------- 1 | export {default as contours} from "./contours.js"; 2 | export {default as contourDensity} from "./density.js"; 3 | -------------------------------------------------------------------------------- /src/area.js: -------------------------------------------------------------------------------- 1 | export default function(ring) { 2 | var i = 0, n = ring.length, area = ring[n - 1][1] * ring[0][0] - ring[n - 1][0] * ring[0][1]; 3 | while (++i < n) area += ring[i - 1][1] * ring[i][0] - ring[i - 1][0] * ring[i][1]; 4 | return area; 5 | } 6 | -------------------------------------------------------------------------------- /.github/eslint.json: -------------------------------------------------------------------------------- 1 | { 2 | "problemMatcher": [ 3 | { 4 | "owner": "eslint-compact", 5 | "pattern": [ 6 | { 7 | "regexp": "^(.+):\\sline\\s(\\d+),\\scol\\s(\\d+),\\s(Error|Warning|Info)\\s-\\s(.+)\\s\\((.+)\\)$", 8 | "file": 1, 9 | "line": 2, 10 | "column": 3, 11 | "severity": 4, 12 | "message": 5, 13 | "code": 6 14 | } 15 | ] 16 | } 17 | ] 18 | } 19 | -------------------------------------------------------------------------------- /.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "eslint:recommended", 3 | "parserOptions": { 4 | "sourceType": "module", 5 | "ecmaVersion": 2020 6 | }, 7 | "env": { 8 | "es6": true, 9 | "node": true, 10 | "browser": true 11 | }, 12 | "rules": { 13 | "no-cond-assign": 0, 14 | "no-constant-condition": 0, 15 | "no-sparse-arrays": 0, 16 | "no-unexpected-multiline": 0, 17 | "comma-dangle": ["error", "never"], 18 | "semi": [2, "always"] 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # d3-contour 2 | 3 | 4 | 5 | This module computes contour polygons by applying [marching squares](https://en.wikipedia.org/wiki/Marching_squares) to a rectangular array of numeric values. 6 | 7 | ## Resources 8 | 9 | - [Documentation](https://d3js.org/d3-contour) 10 | - [Examples](https://observablehq.com/collection/@d3/d3-contour) 11 | - [Releases](https://github.com/d3/d3-contour/releases) 12 | - [Getting help](https://d3js.org/community) 13 | -------------------------------------------------------------------------------- /test/asserts.js: -------------------------------------------------------------------------------- 1 | import assert from "assert"; 2 | 3 | export function assertInDelta(actual, expected, delta = 1e-6) { 4 | assert(inDelta(actual, expected, delta)); 5 | } 6 | 7 | function inDelta(actual, expected, delta) { 8 | return (Array.isArray(expected) ? inDeltaArray : inDeltaNumber)(actual, expected, delta); 9 | } 10 | 11 | function inDeltaArray(actual, expected, delta) { 12 | const n = expected.length; 13 | if (actual.length !== n) return false; 14 | for (let i = 0; i < n; ++i) if (!inDelta(actual[i], expected[i], delta)) return false; 15 | return true; 16 | } 17 | 18 | function inDeltaNumber(actual, expected, delta) { 19 | return actual >= expected - delta && actual <= expected + delta; 20 | } 21 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright 2012-2023 Mike Bostock 2 | 3 | Permission to use, copy, modify, and/or distribute this software for any purpose 4 | with or without fee is hereby granted, provided that the above copyright notice 5 | and this permission notice appear in all copies. 6 | 7 | THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH 8 | REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND 9 | FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, 10 | INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS 11 | OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER 12 | TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF 13 | THIS SOFTWARE. 14 | -------------------------------------------------------------------------------- /.github/workflows/node.js.yml: -------------------------------------------------------------------------------- 1 | # https://help.github.com/actions/language-and-framework-guides/using-nodejs-with-github-actions 2 | 3 | name: Node.js CI 4 | 5 | on: 6 | push: 7 | branches: [ main ] 8 | pull_request: 9 | branches: [ main ] 10 | 11 | jobs: 12 | build: 13 | 14 | runs-on: ubuntu-latest 15 | 16 | strategy: 17 | matrix: 18 | node-version: [14.x] 19 | 20 | steps: 21 | - uses: actions/checkout@v2 22 | - name: Use Node.js ${{ matrix.node-version }} 23 | uses: actions/setup-node@v1 24 | with: 25 | node-version: ${{ matrix.node-version }} 26 | - run: yarn --frozen-lockfile 27 | - run: | 28 | echo ::add-matcher::.github/eslint.json 29 | yarn run eslint src test --format=compact 30 | - run: yarn test 31 | -------------------------------------------------------------------------------- /src/contains.js: -------------------------------------------------------------------------------- 1 | export default function(ring, hole) { 2 | var i = -1, n = hole.length, c; 3 | while (++i < n) if (c = ringContains(ring, hole[i])) return c; 4 | return 0; 5 | } 6 | 7 | function ringContains(ring, point) { 8 | var x = point[0], y = point[1], contains = -1; 9 | for (var i = 0, n = ring.length, j = n - 1; i < n; j = i++) { 10 | var pi = ring[i], xi = pi[0], yi = pi[1], pj = ring[j], xj = pj[0], yj = pj[1]; 11 | if (segmentContains(pi, pj, point)) return 0; 12 | if (((yi > y) !== (yj > y)) && ((x < (xj - xi) * (y - yi) / (yj - yi) + xi))) contains = -contains; 13 | } 14 | return contains; 15 | } 16 | 17 | function segmentContains(a, b, c) { 18 | var i; return collinear(a, b, c) && within(a[i = +(a[0] === b[0])], c[i], b[i]); 19 | } 20 | 21 | function collinear(a, b, c) { 22 | return (b[0] - a[0]) * (c[1] - a[1]) === (c[0] - a[0]) * (b[1] - a[1]); 23 | } 24 | 25 | function within(p, q, r) { 26 | return p <= q && q <= r || r <= q && q <= p; 27 | } 28 | -------------------------------------------------------------------------------- /rollup.config.js: -------------------------------------------------------------------------------- 1 | import {readFileSync} from "fs"; 2 | import {terser} from "rollup-plugin-terser"; 3 | import meta from "./package.json" assert {type: "json"}; 4 | 5 | // Extract copyrights from the LICENSE. 6 | const copyright = readFileSync("./LICENSE", "utf-8") 7 | .split(/\n/g) 8 | .filter(line => /^Copyright\s+/.test(line)) 9 | .map(line => line.replace(/^Copyright\s+/, "")) 10 | .join(", "); 11 | 12 | const config = { 13 | input: "src/index.js", 14 | external: Object.keys(meta.dependencies || {}).filter(key => /^d3-/.test(key)), 15 | output: { 16 | file: `dist/${meta.name}.js`, 17 | name: "d3", 18 | format: "umd", 19 | indent: false, 20 | extend: true, 21 | banner: `// ${meta.homepage} v${meta.version} Copyright ${copyright}`, 22 | globals: Object.assign({}, ...Object.keys(meta.dependencies || {}).filter(key => /^d3-/.test(key)).map(key => ({[key]: "d3"}))) 23 | }, 24 | plugins: [] 25 | }; 26 | 27 | export default [ 28 | config, 29 | { 30 | ...config, 31 | output: { 32 | ...config.output, 33 | file: `dist/${meta.name}.min.js` 34 | }, 35 | plugins: [ 36 | ...config.plugins, 37 | terser({ 38 | output: { 39 | preamble: config.output.banner 40 | } 41 | }) 42 | ] 43 | } 44 | ]; 45 | -------------------------------------------------------------------------------- /test/jsdom.js: -------------------------------------------------------------------------------- 1 | import {promises as fs} from "fs"; 2 | import * as path from "path"; 3 | import {JSDOM} from "jsdom"; 4 | 5 | export default function jsdomit(description, run) { 6 | return it(description, withJsdom(run)); 7 | } 8 | 9 | jsdomit.skip = (description, run) => { 10 | return it.skip(description, withJsdom(run)); 11 | }; 12 | 13 | jsdomit.only = (description, run) => { 14 | return it.only(description, withJsdom(run)); 15 | }; 16 | 17 | function withJsdom(run) { 18 | return async () => { 19 | const jsdom = new JSDOM(""); 20 | global.window = jsdom.window; 21 | global.document = jsdom.window.document; 22 | global.navigator = jsdom.window.navigator; 23 | global.Event = jsdom.window.Event; 24 | global.Node = jsdom.window.Node; 25 | global.NodeList = jsdom.window.NodeList; 26 | global.HTMLCollection = jsdom.window.HTMLCollection; 27 | global.fetch = async (href) => new Response(path.resolve("./test", href)); 28 | try { 29 | return await run(); 30 | } finally { 31 | delete global.window; 32 | delete global.document; 33 | delete global.navigator; 34 | delete global.Event; 35 | delete global.Node; 36 | delete global.NodeList; 37 | delete global.HTMLCollection; 38 | delete global.fetch; 39 | } 40 | }; 41 | } 42 | 43 | class Response { 44 | constructor(href) { 45 | this._href = href; 46 | this.ok = true; 47 | this.status = 200; 48 | } 49 | async text() { 50 | return fs.readFile(this._href, {encoding: "utf-8"}); 51 | } 52 | async json() { 53 | return JSON.parse(await this.text()); 54 | } 55 | } 56 | -------------------------------------------------------------------------------- /test/snapshot.js: -------------------------------------------------------------------------------- 1 | import assert from "assert"; 2 | import {promises as fs} from "fs"; 3 | import * as path from "path"; 4 | import beautify from "js-beautify"; 5 | import it from "./jsdom.js"; 6 | import * as snapshots from "./snapshots/index.js"; 7 | 8 | for (const [name, snapshot] of Object.entries(snapshots)) { 9 | it(`snapshot ${name}`, async () => { 10 | const svg = await snapshot(); 11 | svg.setAttributeNS("http://www.w3.org/2000/xmlns/", "xmlns", "http://www.w3.org/2000/svg"); 12 | svg.setAttributeNS("http://www.w3.org/2000/xmlns/", "xmlns:xlink", "http://www.w3.org/1999/xlink"); 13 | const actual = beautify.html(svg.outerHTML, {indent_size: 2}); 14 | const outfile = path.resolve("./test/output", `${path.basename(name, ".js")}.svg`); 15 | const diffile = path.resolve("./test/output", `${path.basename(name, ".js")}-changed.svg`); 16 | let expected; 17 | 18 | try { 19 | expected = await fs.readFile(outfile, "utf8"); 20 | } catch (error) { 21 | if (error.code === "ENOENT" && process.env.CI !== "true") { 22 | console.warn(`! generating ${outfile}`); 23 | await fs.writeFile(outfile, actual, "utf8"); 24 | return; 25 | } else { 26 | throw error; 27 | } 28 | } 29 | 30 | if (actual === expected) { 31 | if (process.env.CI !== "true") { 32 | try { 33 | await fs.unlink(diffile); 34 | console.warn(`! deleted ${diffile}`); 35 | } catch (error) { 36 | if (error.code !== "ENOENT") { 37 | throw error; 38 | } 39 | } 40 | } 41 | } else { 42 | console.warn(`! generating ${diffile}`); 43 | await fs.writeFile(diffile, actual, "utf8"); 44 | } 45 | 46 | assert(actual === expected, `${name} must match snapshot`); 47 | }); 48 | } 49 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "d3-contour", 3 | "version": "4.0.2", 4 | "description": "Compute contour polygons using marching squares.", 5 | "homepage": "https://d3js.org/d3-contour/", 6 | "repository": { 7 | "type": "git", 8 | "url": "https://github.com/d3/d3-contour.git" 9 | }, 10 | "keywords": [ 11 | "d3", 12 | "d3-module", 13 | "contour", 14 | "isoline" 15 | ], 16 | "license": "ISC", 17 | "author": { 18 | "name": "Mike Bostock", 19 | "url": "http://bost.ocks.org/mike" 20 | }, 21 | "type": "module", 22 | "files": [ 23 | "dist/**/*.js", 24 | "src/**/*.js" 25 | ], 26 | "module": "src/index.js", 27 | "main": "src/index.js", 28 | "jsdelivr": "dist/d3-contour.min.js", 29 | "unpkg": "dist/d3-contour.min.js", 30 | "exports": { 31 | "umd": "./dist/d3-contour.min.js", 32 | "default": "./src/index.js" 33 | }, 34 | "_moduleAliases": { 35 | "d3-contour": "./src/index.js" 36 | }, 37 | "sideEffects": false, 38 | "dependencies": { 39 | "d3-array": "^3.2.0" 40 | }, 41 | "devDependencies": { 42 | "d3-axis": "3", 43 | "d3-dsv": "3", 44 | "d3-fetch": "3", 45 | "d3-geo": "3", 46 | "d3-polygon": "3", 47 | "d3-scale": "4", 48 | "d3-selection": "3", 49 | "eslint": "8", 50 | "htl": "^0.3.1", 51 | "js-beautify": "1", 52 | "jsdom": "20", 53 | "mocha": "10", 54 | "module-alias": "2", 55 | "rollup": "3", 56 | "rollup-plugin-terser": "7" 57 | }, 58 | "scripts": { 59 | "test": "mkdir -p test/output && mocha -r module-alias/register 'test/**/*-test.js' test/snapshot.js && eslint src test", 60 | "prepublishOnly": "rm -rf dist && rollup -c", 61 | "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 -" 62 | }, 63 | "engines": { 64 | "node": ">=12" 65 | } 66 | } 67 | -------------------------------------------------------------------------------- /test/snapshots/index.js: -------------------------------------------------------------------------------- 1 | import {extent, ticks} from "d3-array"; 2 | import {axisBottom, axisLeft} from "d3-axis"; 3 | import {autoType} from "d3-dsv"; 4 | import {tsv} from "d3-fetch"; 5 | import {geoPath} from "d3-geo"; 6 | import {scaleLinear} from "d3-scale"; 7 | import {select} from "d3-selection"; 8 | import {svg} from "htl"; 9 | import {contourDensity} from "d3-contour"; 10 | 11 | export async function faithfulContours() { 12 | const faithful = await tsv("data/faithful.tsv", autoType); 13 | 14 | const width = 960, 15 | height = 500, 16 | marginTop = 20, 17 | marginRight = 30, 18 | marginBottom = 30, 19 | marginLeft = 40; 20 | 21 | const x = scaleLinear() 22 | .domain(extent(faithful, d => d.waiting)).nice() 23 | .rangeRound([marginLeft, width - marginRight]); 24 | 25 | const y = scaleLinear() 26 | .domain(extent(faithful, d => d.eruptions)).nice() 27 | .rangeRound([height - marginBottom, marginTop]); 28 | 29 | const contours = contourDensity() 30 | .x(d => x(d.waiting)) 31 | .y(d => y(d.eruptions)) 32 | .size([width, height]) 33 | .bandwidth(30) 34 | .thresholds(30) 35 | (faithful); 36 | 37 | const path = geoPath(); 38 | 39 | return svg` 40 | ${select(svg``).call(axisLeft(y)).call(g => g.select(".domain").remove())} 41 | ${select(svg``).call(axisBottom(x)).call(g => g.select(".domain").remove())} 42 | ${faithful.map(d => svg``)} 43 | ${contours.map(c => svg``)} 44 | `; 45 | } 46 | 47 | export async function faithfulContour() { 48 | const faithful = await tsv("data/faithful.tsv", autoType); 49 | 50 | const width = 960, 51 | height = 500, 52 | marginTop = 20, 53 | marginRight = 30, 54 | marginBottom = 30, 55 | marginLeft = 40; 56 | 57 | const x = scaleLinear() 58 | .domain(extent(faithful, d => d.waiting)).nice() 59 | .rangeRound([marginLeft, width - marginRight]); 60 | 61 | const y = scaleLinear() 62 | .domain(extent(faithful, d => d.eruptions)).nice() 63 | .rangeRound([height - marginBottom, marginTop]); 64 | 65 | const contour = contourDensity() 66 | .x(d => x(d.waiting)) 67 | .y(d => y(d.eruptions)) 68 | .size([width, height]) 69 | .bandwidth(30) 70 | .contours(faithful); 71 | 72 | const thresholds = ticks(0, contour.max, 30).slice(1); 73 | 74 | const path = geoPath(); 75 | 76 | return svg` 77 | ${select(svg``).call(axisLeft(y)).call(g => g.select(".domain").remove())} 78 | ${select(svg``).call(axisBottom(x)).call(g => g.select(".domain").remove())} 79 | ${faithful.map(d => svg``)} 80 | ${thresholds.map(t => svg``)} 81 | `; 82 | } 83 | -------------------------------------------------------------------------------- /test/data/faithful.tsv: -------------------------------------------------------------------------------- 1 | eruptions waiting 2 | 3.600 79 3 | 1.800 54 4 | 3.333 74 5 | 2.283 62 6 | 4.533 85 7 | 2.883 55 8 | 4.700 88 9 | 3.600 85 10 | 1.950 51 11 | 4.350 85 12 | 1.833 54 13 | 3.917 84 14 | 4.200 78 15 | 1.750 47 16 | 4.700 83 17 | 2.167 52 18 | 1.750 62 19 | 4.800 84 20 | 1.600 52 21 | 4.250 79 22 | 1.800 51 23 | 1.750 47 24 | 3.450 78 25 | 3.067 69 26 | 4.533 74 27 | 3.600 83 28 | 1.967 55 29 | 4.083 76 30 | 3.850 78 31 | 4.433 79 32 | 4.300 73 33 | 4.467 77 34 | 3.367 66 35 | 4.033 80 36 | 3.833 74 37 | 2.017 52 38 | 1.867 48 39 | 4.833 80 40 | 1.833 59 41 | 4.783 90 42 | 4.350 80 43 | 1.883 58 44 | 4.567 84 45 | 1.750 58 46 | 4.533 73 47 | 3.317 83 48 | 3.833 64 49 | 2.100 53 50 | 4.633 82 51 | 2.000 59 52 | 4.800 75 53 | 4.716 90 54 | 1.833 54 55 | 4.833 80 56 | 1.733 54 57 | 4.883 83 58 | 3.717 71 59 | 1.667 64 60 | 4.567 77 61 | 4.317 81 62 | 2.233 59 63 | 4.500 84 64 | 1.750 48 65 | 4.800 82 66 | 1.817 60 67 | 4.400 92 68 | 4.167 78 69 | 4.700 78 70 | 2.067 65 71 | 4.700 73 72 | 4.033 82 73 | 1.967 56 74 | 4.500 79 75 | 4.000 71 76 | 1.983 62 77 | 5.067 76 78 | 2.017 60 79 | 4.567 78 80 | 3.883 76 81 | 3.600 83 82 | 4.133 75 83 | 4.333 82 84 | 4.100 70 85 | 2.633 65 86 | 4.067 73 87 | 4.933 88 88 | 3.950 76 89 | 4.517 80 90 | 2.167 48 91 | 4.000 86 92 | 2.200 60 93 | 4.333 90 94 | 1.867 50 95 | 4.817 78 96 | 1.833 63 97 | 4.300 72 98 | 4.667 84 99 | 3.750 75 100 | 1.867 51 101 | 4.900 82 102 | 2.483 62 103 | 4.367 88 104 | 2.100 49 105 | 4.500 83 106 | 4.050 81 107 | 1.867 47 108 | 4.700 84 109 | 1.783 52 110 | 4.850 86 111 | 3.683 81 112 | 4.733 75 113 | 2.300 59 114 | 4.900 89 115 | 4.417 79 116 | 1.700 59 117 | 4.633 81 118 | 2.317 50 119 | 4.600 85 120 | 1.817 59 121 | 4.417 87 122 | 2.617 53 123 | 4.067 69 124 | 4.250 77 125 | 1.967 56 126 | 4.600 88 127 | 3.767 81 128 | 1.917 45 129 | 4.500 82 130 | 2.267 55 131 | 4.650 90 132 | 1.867 45 133 | 4.167 83 134 | 2.800 56 135 | 4.333 89 136 | 1.833 46 137 | 4.383 82 138 | 1.883 51 139 | 4.933 86 140 | 2.033 53 141 | 3.733 79 142 | 4.233 81 143 | 2.233 60 144 | 4.533 82 145 | 4.817 77 146 | 4.333 76 147 | 1.983 59 148 | 4.633 80 149 | 2.017 49 150 | 5.100 96 151 | 1.800 53 152 | 5.033 77 153 | 4.000 77 154 | 2.400 65 155 | 4.600 81 156 | 3.567 71 157 | 4.000 70 158 | 4.500 81 159 | 4.083 93 160 | 1.800 53 161 | 3.967 89 162 | 2.200 45 163 | 4.150 86 164 | 2.000 58 165 | 3.833 78 166 | 3.500 66 167 | 4.583 76 168 | 2.367 63 169 | 5.000 88 170 | 1.933 52 171 | 4.617 93 172 | 1.917 49 173 | 2.083 57 174 | 4.583 77 175 | 3.333 68 176 | 4.167 81 177 | 4.333 81 178 | 4.500 73 179 | 2.417 50 180 | 4.000 85 181 | 4.167 74 182 | 1.883 55 183 | 4.583 77 184 | 4.250 83 185 | 3.767 83 186 | 2.033 51 187 | 4.433 78 188 | 4.083 84 189 | 1.833 46 190 | 4.417 83 191 | 2.183 55 192 | 4.800 81 193 | 1.833 57 194 | 4.800 76 195 | 4.100 84 196 | 3.966 77 197 | 4.233 81 198 | 3.500 87 199 | 4.366 77 200 | 2.250 51 201 | 4.667 78 202 | 2.100 60 203 | 4.350 82 204 | 4.133 91 205 | 1.867 53 206 | 4.600 78 207 | 1.783 46 208 | 4.367 77 209 | 3.850 84 210 | 1.933 49 211 | 4.500 83 212 | 2.383 71 213 | 4.700 80 214 | 1.867 49 215 | 3.833 75 216 | 3.417 64 217 | 4.233 76 218 | 2.400 53 219 | 4.800 94 220 | 2.000 55 221 | 4.150 76 222 | 1.867 50 223 | 4.267 82 224 | 1.750 54 225 | 4.483 75 226 | 4.000 78 227 | 4.117 79 228 | 4.083 78 229 | 4.267 78 230 | 3.917 70 231 | 4.550 79 232 | 4.083 70 233 | 2.417 54 234 | 4.183 86 235 | 2.217 50 236 | 4.450 90 237 | 1.883 54 238 | 1.850 54 239 | 4.283 77 240 | 3.950 79 241 | 2.333 64 242 | 4.150 75 243 | 2.350 47 244 | 4.933 86 245 | 2.900 63 246 | 4.583 85 247 | 3.833 82 248 | 2.083 57 249 | 4.367 82 250 | 2.133 67 251 | 4.350 74 252 | 2.200 54 253 | 4.450 83 254 | 3.567 73 255 | 4.500 73 256 | 4.150 88 257 | 3.817 80 258 | 3.917 71 259 | 4.450 83 260 | 2.000 56 261 | 4.283 79 262 | 4.767 78 263 | 4.533 84 264 | 1.850 58 265 | 4.250 83 266 | 1.983 43 267 | 2.250 60 268 | 4.750 75 269 | 4.117 81 270 | 2.150 46 271 | 4.417 90 272 | 1.817 46 273 | 4.467 74 274 | -------------------------------------------------------------------------------- /test/density-test.js: -------------------------------------------------------------------------------- 1 | import assert from "assert"; 2 | import {extent, ticks} from "d3-array"; 3 | import {autoType} from "d3-dsv"; 4 | import {tsv} from "d3-fetch"; 5 | import {polygonCentroid} from "d3-polygon"; 6 | import {scaleLinear} from "d3-scale"; 7 | import {contourDensity} from "../src/index.js"; 8 | import {assertInDelta} from "./asserts.js"; 9 | import it from "./jsdom.js"; 10 | 11 | it("density.size(…) validates the specified size", () => { 12 | assert.deepStrictEqual(contourDensity().size([1, 2]).size(), [1, 2]); 13 | assert.deepStrictEqual(contourDensity().size([0, 0]).size(), [0, 0]); 14 | assert.deepStrictEqual(contourDensity().size([1.5, 2.5]).size(), [1.5, 2.5]); 15 | assert.throws(() => void contourDensity().size([0, -1]), /invalid size/); 16 | }); 17 | 18 | it("contourDensity(data) returns the expected result for empty data", () => { 19 | const c = contourDensity(); 20 | assert.deepStrictEqual(c([]), []); 21 | }); 22 | 23 | it("contourDensity(data) returns contours centered on a point", () => { 24 | const c = contourDensity().thresholds([0.00001, 0.0001]); 25 | for (const p of [[100, 100], [100.5, 102]]) { 26 | const contour = c([p]); 27 | assert.strictEqual(contour.length, 2); 28 | for (const b of contour) { 29 | const a = polygonCentroid(b.coordinates[0][0]); 30 | assertInDelta(a[0], p[0], 0.1); 31 | assertInDelta(a[1], p[1], 0.1); 32 | } 33 | } 34 | }); 35 | 36 | it("contourDensity.thresholds(values[])(data) returns contours for the given values", () => { 37 | const points = [[1, 0], [0, 1], [1, 1]]; 38 | const c = contourDensity(); 39 | const c1 = c(points); 40 | const values1 = c1.map(d => d.value); 41 | const c2 = c.thresholds(values1)(points); 42 | const values2 = c2.map(d => d.value); 43 | assert.deepStrictEqual(values1, values2); 44 | }); 45 | 46 | it("contourDensity.weight(…) accepts NaN weights", () => { 47 | const points = [[1, 0, 1], [0, 1, -2], [1, 1, NaN]]; 48 | const c = contourDensity().weight(d => d[2])(points); 49 | assert.strictEqual(c.length, 24); 50 | }); 51 | 52 | it("contourDensity.thresholds(values[])(data) returns contours for the given values at a different cellSize", () => { 53 | const points = [[1, 0], [0, 1], [1, 1]]; 54 | const c = contourDensity().cellSize(16); 55 | const c1 = c(points); 56 | const values1 = c1.map(d => d.value); 57 | const c2 = c.thresholds(values1)(points); 58 | const values2 = c2.map(d => d.value); 59 | assert.deepStrictEqual(values1, values2); 60 | }); 61 | 62 | it("contourDensity(data) returns nice default thresholds", async () => { 63 | const faithful = await tsv("data/faithful.tsv", autoType); 64 | 65 | const width = 960, 66 | height = 500, 67 | marginTop = 20, 68 | marginRight = 30, 69 | marginBottom = 30, 70 | marginLeft = 40; 71 | 72 | const x = scaleLinear() 73 | .domain(extent(faithful, d => d.waiting)).nice() 74 | .rangeRound([marginLeft, width - marginRight]); 75 | 76 | const y = scaleLinear() 77 | .domain(extent(faithful, d => d.eruptions)).nice() 78 | .rangeRound([height - marginBottom, marginTop]); 79 | 80 | const contour = contourDensity() 81 | .x(d => x(d.waiting)) 82 | .y(d => y(d.eruptions)) 83 | .size([width, height]) 84 | .bandwidth(30) 85 | (faithful); 86 | 87 | assert.deepStrictEqual(contour.map(c => c.value), ticks(0.0002, 0.0059, 30)); 88 | }); 89 | 90 | it("contourDensity.contours(data) preserves the specified threshold exactly", async () => { 91 | const faithful = await tsv("data/faithful.tsv", autoType); 92 | 93 | const width = 960, 94 | height = 500, 95 | marginTop = 20, 96 | marginRight = 30, 97 | marginBottom = 30, 98 | marginLeft = 40; 99 | 100 | const x = scaleLinear() 101 | .domain(extent(faithful, d => d.waiting)).nice() 102 | .rangeRound([marginLeft, width - marginRight]); 103 | 104 | const y = scaleLinear() 105 | .domain(extent(faithful, d => d.eruptions)).nice() 106 | .rangeRound([height - marginBottom, marginTop]); 107 | 108 | const contour = contourDensity() 109 | .x(d => x(d.waiting)) 110 | .y(d => y(d.eruptions)) 111 | .size([width, height]) 112 | .bandwidth(30) 113 | .contours(faithful); 114 | 115 | for (const value of ticks(0.0002, 0.006, 30)) { 116 | assert.strictEqual(contour(value).value, value); 117 | } 118 | }); 119 | -------------------------------------------------------------------------------- /src/density.js: -------------------------------------------------------------------------------- 1 | import {blur2, max, ticks} from "d3-array"; 2 | import {slice} from "./array.js"; 3 | import constant from "./constant.js"; 4 | import Contours from "./contours.js"; 5 | 6 | function defaultX(d) { 7 | return d[0]; 8 | } 9 | 10 | function defaultY(d) { 11 | return d[1]; 12 | } 13 | 14 | function defaultWeight() { 15 | return 1; 16 | } 17 | 18 | export default function() { 19 | var x = defaultX, 20 | y = defaultY, 21 | weight = defaultWeight, 22 | dx = 960, 23 | dy = 500, 24 | r = 20, // blur radius 25 | k = 2, // log2(grid cell size) 26 | o = r * 3, // grid offset, to pad for blur 27 | n = (dx + o * 2) >> k, // grid width 28 | m = (dy + o * 2) >> k, // grid height 29 | threshold = constant(20); 30 | 31 | function grid(data) { 32 | var values = new Float32Array(n * m), 33 | pow2k = Math.pow(2, -k), 34 | i = -1; 35 | 36 | for (const d of data) { 37 | var xi = (x(d, ++i, data) + o) * pow2k, 38 | yi = (y(d, i, data) + o) * pow2k, 39 | wi = +weight(d, i, data); 40 | if (wi && xi >= 0 && xi < n && yi >= 0 && yi < m) { 41 | var x0 = Math.floor(xi), 42 | y0 = Math.floor(yi), 43 | xt = xi - x0 - 0.5, 44 | yt = yi - y0 - 0.5; 45 | values[x0 + y0 * n] += (1 - xt) * (1 - yt) * wi; 46 | values[x0 + 1 + y0 * n] += xt * (1 - yt) * wi; 47 | values[x0 + 1 + (y0 + 1) * n] += xt * yt * wi; 48 | values[x0 + (y0 + 1) * n] += (1 - xt) * yt * wi; 49 | } 50 | } 51 | 52 | blur2({data: values, width: n, height: m}, r * pow2k); 53 | return values; 54 | } 55 | 56 | function density(data) { 57 | var values = grid(data), 58 | tz = threshold(values), 59 | pow4k = Math.pow(2, 2 * k); 60 | 61 | // Convert number of thresholds into uniform thresholds. 62 | if (!Array.isArray(tz)) { 63 | tz = ticks(Number.MIN_VALUE, max(values) / pow4k, tz); 64 | } 65 | 66 | return Contours() 67 | .size([n, m]) 68 | .thresholds(tz.map(d => d * pow4k)) 69 | (values) 70 | .map((c, i) => (c.value = +tz[i], transform(c))); 71 | } 72 | 73 | density.contours = function(data) { 74 | var values = grid(data), 75 | contours = Contours().size([n, m]), 76 | pow4k = Math.pow(2, 2 * k), 77 | contour = value => { 78 | value = +value; 79 | var c = transform(contours.contour(values, value * pow4k)); 80 | c.value = value; // preserve exact threshold value 81 | return c; 82 | }; 83 | Object.defineProperty(contour, "max", {get: () => max(values) / pow4k}); 84 | return contour; 85 | }; 86 | 87 | function transform(geometry) { 88 | geometry.coordinates.forEach(transformPolygon); 89 | return geometry; 90 | } 91 | 92 | function transformPolygon(coordinates) { 93 | coordinates.forEach(transformRing); 94 | } 95 | 96 | function transformRing(coordinates) { 97 | coordinates.forEach(transformPoint); 98 | } 99 | 100 | // TODO Optimize. 101 | function transformPoint(coordinates) { 102 | coordinates[0] = coordinates[0] * Math.pow(2, k) - o; 103 | coordinates[1] = coordinates[1] * Math.pow(2, k) - o; 104 | } 105 | 106 | function resize() { 107 | o = r * 3; 108 | n = (dx + o * 2) >> k; 109 | m = (dy + o * 2) >> k; 110 | return density; 111 | } 112 | 113 | density.x = function(_) { 114 | return arguments.length ? (x = typeof _ === "function" ? _ : constant(+_), density) : x; 115 | }; 116 | 117 | density.y = function(_) { 118 | return arguments.length ? (y = typeof _ === "function" ? _ : constant(+_), density) : y; 119 | }; 120 | 121 | density.weight = function(_) { 122 | return arguments.length ? (weight = typeof _ === "function" ? _ : constant(+_), density) : weight; 123 | }; 124 | 125 | density.size = function(_) { 126 | if (!arguments.length) return [dx, dy]; 127 | var _0 = +_[0], _1 = +_[1]; 128 | if (!(_0 >= 0 && _1 >= 0)) throw new Error("invalid size"); 129 | return dx = _0, dy = _1, resize(); 130 | }; 131 | 132 | density.cellSize = function(_) { 133 | if (!arguments.length) return 1 << k; 134 | if (!((_ = +_) >= 1)) throw new Error("invalid cell size"); 135 | return k = Math.floor(Math.log(_) / Math.LN2), resize(); 136 | }; 137 | 138 | density.thresholds = function(_) { 139 | return arguments.length ? (threshold = typeof _ === "function" ? _ : Array.isArray(_) ? constant(slice.call(_)) : constant(_), density) : threshold; 140 | }; 141 | 142 | density.bandwidth = function(_) { 143 | if (!arguments.length) return Math.sqrt(r * (r + 1)); 144 | if (!((_ = +_) >= 0)) throw new Error("invalid bandwidth"); 145 | return r = (Math.sqrt(4 * _ * _ + 1) - 1) / 2, resize(); 146 | }; 147 | 148 | return density; 149 | } 150 | -------------------------------------------------------------------------------- /src/contours.js: -------------------------------------------------------------------------------- 1 | import {extent, nice, thresholdSturges, ticks} from "d3-array"; 2 | import {slice} from "./array.js"; 3 | import ascending from "./ascending.js"; 4 | import area from "./area.js"; 5 | import constant from "./constant.js"; 6 | import contains from "./contains.js"; 7 | import noop from "./noop.js"; 8 | 9 | var cases = [ 10 | [], 11 | [[[1.0, 1.5], [0.5, 1.0]]], 12 | [[[1.5, 1.0], [1.0, 1.5]]], 13 | [[[1.5, 1.0], [0.5, 1.0]]], 14 | [[[1.0, 0.5], [1.5, 1.0]]], 15 | [[[1.0, 1.5], [0.5, 1.0]], [[1.0, 0.5], [1.5, 1.0]]], 16 | [[[1.0, 0.5], [1.0, 1.5]]], 17 | [[[1.0, 0.5], [0.5, 1.0]]], 18 | [[[0.5, 1.0], [1.0, 0.5]]], 19 | [[[1.0, 1.5], [1.0, 0.5]]], 20 | [[[0.5, 1.0], [1.0, 0.5]], [[1.5, 1.0], [1.0, 1.5]]], 21 | [[[1.5, 1.0], [1.0, 0.5]]], 22 | [[[0.5, 1.0], [1.5, 1.0]]], 23 | [[[1.0, 1.5], [1.5, 1.0]]], 24 | [[[0.5, 1.0], [1.0, 1.5]]], 25 | [] 26 | ]; 27 | 28 | export default function() { 29 | var dx = 1, 30 | dy = 1, 31 | threshold = thresholdSturges, 32 | smooth = smoothLinear; 33 | 34 | function contours(values) { 35 | var tz = threshold(values); 36 | 37 | // Convert number of thresholds into uniform thresholds. 38 | if (!Array.isArray(tz)) { 39 | const e = extent(values, finite); 40 | tz = ticks(...nice(e[0], e[1], tz), tz); 41 | while (tz[tz.length - 1] >= e[1]) tz.pop(); 42 | while (tz[1] < e[0]) tz.shift(); 43 | } else { 44 | tz = tz.slice().sort(ascending); 45 | } 46 | 47 | return tz.map(value => contour(values, value)); 48 | } 49 | 50 | // Accumulate, smooth contour rings, assign holes to exterior rings. 51 | // Based on https://github.com/mbostock/shapefile/blob/v0.6.2/shp/polygon.js 52 | function contour(values, value) { 53 | const v = value == null ? NaN : +value; 54 | if (isNaN(v)) throw new Error(`invalid value: ${value}`); 55 | 56 | var polygons = [], 57 | holes = []; 58 | 59 | isorings(values, v, function(ring) { 60 | smooth(ring, values, v); 61 | if (area(ring) > 0) polygons.push([ring]); 62 | else holes.push(ring); 63 | }); 64 | 65 | holes.forEach(function(hole) { 66 | for (var i = 0, n = polygons.length, polygon; i < n; ++i) { 67 | if (contains((polygon = polygons[i])[0], hole) !== -1) { 68 | polygon.push(hole); 69 | return; 70 | } 71 | } 72 | }); 73 | 74 | return { 75 | type: "MultiPolygon", 76 | value: value, 77 | coordinates: polygons 78 | }; 79 | } 80 | 81 | // Marching squares with isolines stitched into rings. 82 | // Based on https://github.com/topojson/topojson-client/blob/v3.0.0/src/stitch.js 83 | function isorings(values, value, callback) { 84 | var fragmentByStart = new Array, 85 | fragmentByEnd = new Array, 86 | x, y, t0, t1, t2, t3; 87 | 88 | // Special case for the first row (y = -1, t2 = t3 = 0). 89 | x = y = -1; 90 | t1 = above(values[0], value); 91 | cases[t1 << 1].forEach(stitch); 92 | while (++x < dx - 1) { 93 | t0 = t1, t1 = above(values[x + 1], value); 94 | cases[t0 | t1 << 1].forEach(stitch); 95 | } 96 | cases[t1 << 0].forEach(stitch); 97 | 98 | // General case for the intermediate rows. 99 | while (++y < dy - 1) { 100 | x = -1; 101 | t1 = above(values[y * dx + dx], value); 102 | t2 = above(values[y * dx], value); 103 | cases[t1 << 1 | t2 << 2].forEach(stitch); 104 | while (++x < dx - 1) { 105 | t0 = t1, t1 = above(values[y * dx + dx + x + 1], value); 106 | t3 = t2, t2 = above(values[y * dx + x + 1], value); 107 | cases[t0 | t1 << 1 | t2 << 2 | t3 << 3].forEach(stitch); 108 | } 109 | cases[t1 | t2 << 3].forEach(stitch); 110 | } 111 | 112 | // Special case for the last row (y = dy - 1, t0 = t1 = 0). 113 | x = -1; 114 | t2 = values[y * dx] >= value; 115 | cases[t2 << 2].forEach(stitch); 116 | while (++x < dx - 1) { 117 | t3 = t2, t2 = above(values[y * dx + x + 1], value); 118 | cases[t2 << 2 | t3 << 3].forEach(stitch); 119 | } 120 | cases[t2 << 3].forEach(stitch); 121 | 122 | function stitch(line) { 123 | var start = [line[0][0] + x, line[0][1] + y], 124 | end = [line[1][0] + x, line[1][1] + y], 125 | startIndex = index(start), 126 | endIndex = index(end), 127 | f, g; 128 | if (f = fragmentByEnd[startIndex]) { 129 | if (g = fragmentByStart[endIndex]) { 130 | delete fragmentByEnd[f.end]; 131 | delete fragmentByStart[g.start]; 132 | if (f === g) { 133 | f.ring.push(end); 134 | callback(f.ring); 135 | } else { 136 | fragmentByStart[f.start] = fragmentByEnd[g.end] = {start: f.start, end: g.end, ring: f.ring.concat(g.ring)}; 137 | } 138 | } else { 139 | delete fragmentByEnd[f.end]; 140 | f.ring.push(end); 141 | fragmentByEnd[f.end = endIndex] = f; 142 | } 143 | } else if (f = fragmentByStart[endIndex]) { 144 | if (g = fragmentByEnd[startIndex]) { 145 | delete fragmentByStart[f.start]; 146 | delete fragmentByEnd[g.end]; 147 | if (f === g) { 148 | f.ring.push(end); 149 | callback(f.ring); 150 | } else { 151 | fragmentByStart[g.start] = fragmentByEnd[f.end] = {start: g.start, end: f.end, ring: g.ring.concat(f.ring)}; 152 | } 153 | } else { 154 | delete fragmentByStart[f.start]; 155 | f.ring.unshift(start); 156 | fragmentByStart[f.start = startIndex] = f; 157 | } 158 | } else { 159 | fragmentByStart[startIndex] = fragmentByEnd[endIndex] = {start: startIndex, end: endIndex, ring: [start, end]}; 160 | } 161 | } 162 | } 163 | 164 | function index(point) { 165 | return point[0] * 2 + point[1] * (dx + 1) * 4; 166 | } 167 | 168 | function smoothLinear(ring, values, value) { 169 | ring.forEach(function(point) { 170 | var x = point[0], 171 | y = point[1], 172 | xt = x | 0, 173 | yt = y | 0, 174 | v1 = valid(values[yt * dx + xt]); 175 | if (x > 0 && x < dx && xt === x) { 176 | point[0] = smooth1(x, valid(values[yt * dx + xt - 1]), v1, value); 177 | } 178 | if (y > 0 && y < dy && yt === y) { 179 | point[1] = smooth1(y, valid(values[(yt - 1) * dx + xt]), v1, value); 180 | } 181 | }); 182 | } 183 | 184 | contours.contour = contour; 185 | 186 | contours.size = function(_) { 187 | if (!arguments.length) return [dx, dy]; 188 | var _0 = Math.floor(_[0]), _1 = Math.floor(_[1]); 189 | if (!(_0 >= 0 && _1 >= 0)) throw new Error("invalid size"); 190 | return dx = _0, dy = _1, contours; 191 | }; 192 | 193 | contours.thresholds = function(_) { 194 | return arguments.length ? (threshold = typeof _ === "function" ? _ : Array.isArray(_) ? constant(slice.call(_)) : constant(_), contours) : threshold; 195 | }; 196 | 197 | contours.smooth = function(_) { 198 | return arguments.length ? (smooth = _ ? smoothLinear : noop, contours) : smooth === smoothLinear; 199 | }; 200 | 201 | return contours; 202 | } 203 | 204 | // When computing the extent, ignore infinite values (as well as invalid ones). 205 | function finite(x) { 206 | return isFinite(x) ? x : NaN; 207 | } 208 | 209 | // Is the (possibly invalid) x greater than or equal to the (known valid) value? 210 | // Treat any invalid value as below negative infinity. 211 | function above(x, value) { 212 | return x == null ? false : +x >= value; 213 | } 214 | 215 | // During smoothing, treat any invalid value as negative infinity. 216 | function valid(v) { 217 | return v == null || isNaN(v = +v) ? -Infinity : v; 218 | } 219 | 220 | function smooth1(x, v0, v1, value) { 221 | const a = value - v0; 222 | const b = v1 - v0; 223 | const d = isFinite(a) || isFinite(b) ? a / b : Math.sign(a) / Math.sign(b); 224 | return isNaN(d) ? x : x + d - 0.5; 225 | } 226 | -------------------------------------------------------------------------------- /test/contours-test.js: -------------------------------------------------------------------------------- 1 | import assert from "assert"; 2 | import {contours} from "../src/index.js"; 3 | 4 | it("contours(values) returns the expected result for an empty polygon", () => { 5 | const c = contours().size([10, 10]).thresholds([0.5]); 6 | assert.deepStrictEqual(c([ 7 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 17 | ]), [ 18 | { 19 | "type": "MultiPolygon", 20 | "value": 0.5, 21 | "coordinates": [] 22 | } 23 | ]); 24 | }); 25 | 26 | it("contours(values) returns the expected result for a simple polygon", () => { 27 | const c = contours().size([10, 10]).thresholds([0.5]); 28 | assert.deepStrictEqual(c([ 29 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32 | 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 33 | 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 34 | 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 35 | 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 36 | 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 37 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 38 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 39 | ]), [ 40 | { 41 | "type": "MultiPolygon", 42 | "value": 0.5, 43 | "coordinates": [ 44 | [ 45 | [[6, 7.5], [6, 6.5], [6, 5.5], [6, 4.5], [6, 3.5], [5.5, 3], [4.5, 3], 46 | [3.5, 3], [3, 3.5], [3, 4.5], [3, 5.5], [3, 6.5], [3, 7.5], [3.5, 8], 47 | [4.5, 8], [5.5, 8], [6, 7.5]] 48 | ] 49 | ] 50 | } 51 | ]); 52 | }); 53 | 54 | it("contours(values).contour(value) returns the expected result for a simple polygon", () => { 55 | const c = contours().size([10, 10]); 56 | assert.deepStrictEqual(c.contour([ 57 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 58 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 59 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60 | 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 61 | 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 62 | 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 63 | 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 64 | 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 65 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 67 | ], 0.5), { 68 | "type": "MultiPolygon", 69 | "value": 0.5, 70 | "coordinates": [ 71 | [ 72 | [[6, 7.5], [6, 6.5], [6, 5.5], [6, 4.5], [6, 3.5], [5.5, 3], [4.5, 3], 73 | [3.5, 3], [3, 3.5], [3, 4.5], [3, 5.5], [3, 6.5], [3, 7.5], [3.5, 8], 74 | [4.5, 8], [5.5, 8], [6, 7.5]] 75 | ] 76 | ] 77 | }); 78 | }); 79 | 80 | it("contours.smooth(false)(values) returns the expected result for a simple polygon", () => { 81 | const c = contours().smooth(false).size([10, 10]).thresholds([0.5]); 82 | assert.deepStrictEqual(c([ 83 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86 | 0, 0, 0, 2, 1, 2, 0, 0, 0, 0, 87 | 0, 0, 0, 2, 2, 2, 0, 0, 0, 0, 88 | 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 89 | 0, 0, 0, 2, 2, 2, 0, 0, 0, 0, 90 | 0, 0, 0, 2, 1, 2, 0, 0, 0, 0, 91 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 93 | ]), [ 94 | { 95 | "type": "MultiPolygon", 96 | "value": 0.5, 97 | "coordinates": [ 98 | [ 99 | [[6, 7.5], [6, 6.5], [6, 5.5], [6, 4.5], [6, 3.5], [5.5, 3], [4.5, 3], 100 | [3.5, 3], [3, 3.5], [3, 4.5], [3, 5.5], [3, 6.5], [3, 7.5], [3.5, 8], 101 | [4.5, 8], [5.5, 8], [6, 7.5]] 102 | ] 103 | ] 104 | } 105 | ]); 106 | }); 107 | 108 | it("contours(values) returns the expected result for a polygon with a hole", () => { 109 | const c = contours().size([10, 10]).thresholds([0.5]); 110 | assert.deepStrictEqual(c([ 111 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 113 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 114 | 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 115 | 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 116 | 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 117 | 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 118 | 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 119 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 120 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 121 | ]), [ 122 | { 123 | "type": "MultiPolygon", 124 | "value": 0.5, 125 | "coordinates": [ 126 | [ 127 | [[6, 7.5], [6, 6.5], [6, 5.5], [6, 4.5], [6, 3.5], [5.5, 3], [4.5, 3], 128 | [3.5, 3], [3, 3.5], [3, 4.5], [3, 5.5], [3, 6.5], [3, 7.5], [3.5, 8], 129 | [4.5, 8], [5.5, 8], [6, 7.5]], 130 | [[4.5, 7], [4, 6.5], [4, 5.5], [4, 4.5], [4.5, 4], [5, 4.5], [5, 5.5], 131 | [5, 6.5], [4.5, 7]] 132 | ] 133 | ] 134 | } 135 | ]); 136 | }); 137 | 138 | it("contours(values) returns the expected result for a multipolygon", () => { 139 | const c = contours().size([10, 10]).thresholds([0.5]); 140 | assert.deepStrictEqual(c([ 141 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 142 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 143 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 144 | 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 145 | 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 146 | 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 147 | 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 148 | 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 149 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 150 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 151 | ]), [ 152 | { 153 | "type": "MultiPolygon", 154 | "value": 0.5, 155 | "coordinates": [ 156 | [ 157 | [[5, 7.5], [5, 6.5], [5, 5.5], [5, 4.5], [5, 3.5], [4.5, 3], [3.5, 3], 158 | [3, 3.5], [3, 4.5], [3, 5.5], [3, 6.5], [3, 7.5], [3.5, 8], [4.5, 8], 159 | [5, 7.5]] 160 | ], 161 | [ 162 | [[7, 7.5], [7, 6.5], [7, 5.5], [7, 4.5], [7, 3.5], [6.5, 3], [6, 3.5], 163 | [6, 4.5], [6, 5.5], [6, 6.5], [6, 7.5], [6.5, 8], [7, 7.5]] 164 | ] 165 | ] 166 | } 167 | ]); 168 | }); 169 | 170 | it("contours(values) returns the expected result for a multipolygon with holes", () => { 171 | const c = contours().size([10, 10]).thresholds([0.5]); 172 | assert.deepStrictEqual(c([ 173 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 174 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 175 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 176 | 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 177 | 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 178 | 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 179 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 180 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 181 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 182 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 183 | ]), [ 184 | { 185 | "type": "MultiPolygon", 186 | "value": 0.5, 187 | "coordinates": [ 188 | [ 189 | [[4, 5.5], [4, 4.5], [4, 3.5], [3.5, 3], [2.5, 3], [1.5, 3], [1, 3.5], 190 | [1, 4.5], [1, 5.5], [1.5, 6], [2.5, 6], [3.5, 6], [4, 5.5]], 191 | [[2.5, 5], [2, 4.5], [2.5, 4], [3, 4.5], [2.5, 5]] 192 | ], 193 | [ 194 | [[8, 5.5], [8, 4.5], [8, 3.5], [7.5, 3], [6.5, 3], [5.5, 3], [5, 3.5], 195 | [5, 4.5], [5, 5.5], [5.5, 6], [6.5, 6], [7.5, 6], [8, 5.5]], 196 | [[6.5, 5], [6, 4.5], [6.5, 4], [7, 4.5], [6.5, 5]] 197 | ] 198 | ] 199 | } 200 | ]); 201 | }); 202 | 203 | it("contours.size(…) validates the specified size", () => { 204 | assert.deepStrictEqual(contours().size([1, 2]).size(), [1, 2]); 205 | assert.deepStrictEqual(contours().size([0, 0]).size(), [0, 0]); 206 | assert.deepStrictEqual(contours().size([1.5, 2.5]).size(), [1, 2]); 207 | assert.throws(() => void contours().size([0, -1]), /invalid size/); 208 | }); 209 | 210 | it("contours(values) returns the expected thresholds", () => { 211 | const c = contours().size([10, 10]).thresholds(20); 212 | assert.deepStrictEqual(c([ 213 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 214 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 215 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 216 | 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 217 | 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 218 | 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 219 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 220 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 223 | ]).map(d => d.value), [0, 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95]); 224 | }); 225 | 226 | it("contours(values) ignores infinite values when computing the thresholds", () => { 227 | const c = contours().size([10, 10]).thresholds(20); 228 | assert.deepStrictEqual(c([ 229 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 230 | 0, -Infinity, 0, 0, 0, 0, 0, 0, 0, 0, 231 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 232 | 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 233 | 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 234 | 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 235 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 236 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 237 | 0, 0, 0, 0, 0, 0, 0, 0, Infinity, 0, 238 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 239 | ]).map(d => d.value), [0, 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95]); 240 | }); 241 | 242 | it("contours(values) treats null, undefined, NaN and -Infinity as holes", () => { 243 | const c = contours().size([10, 10]); 244 | assert.deepStrictEqual(c.contour([ 245 | 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 246 | 1, -Infinity, 1, 1, 1, 1, 1, 1, 1, 1, 247 | 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 248 | 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 249 | 1, 1, 1, null, 1, 1, 1, 1, 1, 1, 250 | 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 251 | 1, 1, 1, 1, 1, 1, 2, 2, 2, 1, 252 | 1, 1, NaN, 1, 1, 1, 2, -Infinity, 2, 1, 253 | 1, 1, 1, 1, 1, 1, 2, 2, 2, 1, 254 | 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 255 | ], 0), {"type":"MultiPolygon","value":0,"coordinates":[[[[10,9.5],[10,8.5],[10,7.5],[10,6.5],[10,5.5],[10,4.5],[10,3.5],[10,2.5],[10,1.5],[10,0.5],[9.5,0],[8.5,0],[7.5,0],[6.5,0],[5.5,0],[4.5,0],[3.5,0],[2.5,0],[1.5,0],[0.5,0],[0,0.5],[0,1.5],[0,2.5],[0,3.5],[0,4.5],[0,5.5],[0,6.5],[0,7.5],[0,8.5],[0,9.5],[0.5,10],[1.5,10],[2.5,10],[3.5,10],[4.5,10],[5.5,10],[6.5,10],[7.5,10],[8.5,10],[9.5,10],[10,9.5]],[[1.5,2.5],[0.5,1.5],[1.5,0.5],[2.5,1.5],[1.5,2.5]],[[3.5,5.5],[2.5,4.5],[3.5,3.5],[4.5,4.5],[3.5,5.5]],[[2.5,8.5],[1.5,7.5],[2.5,6.5],[3.5,7.5],[2.5,8.5]],[[7.5,8.5],[6.5,7.5],[7.5,6.5],[8.5,7.5],[7.5,8.5]]]]}); 256 | }); 257 | 258 | it("contours(values) returns the expected result for a +Infinity value", () => { 259 | const c = contours().size([10, 10]).thresholds([0.5]); 260 | assert.deepStrictEqual(c([ 261 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 262 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 263 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 264 | 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 265 | 0, 0, 0, 1, +Infinity, 1, 0, 0, 0, 0, 266 | 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 267 | 0, 0, 0, 1, +Infinity, 1, 0, 0, 0, 0, 268 | 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 269 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 270 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 271 | ]), [ 272 | { 273 | "type": "MultiPolygon", 274 | "value": 0.5, 275 | "coordinates": [ 276 | [ 277 | [[6, 7.5], [6, 6.5], [6, 5.5], [6, 4.5], [6, 3.5], [5.5, 3], [4.5, 3], 278 | [3.5, 3], [3, 3.5], [3, 4.5], [3, 5.5], [3, 6.5], [3, 7.5], [3.5, 8], 279 | [4.5, 8], [5.5, 8], [6, 7.5]] 280 | ] 281 | ] 282 | } 283 | ]); 284 | }); 285 | 286 | it("contour(values, invalid value) throws an error", () => { 287 | for (const value of [NaN, null, undefined, "a string"]) { 288 | assert.throws(() => contours().size([3, 3]).contour([1, 2, 3, 4, 5, 6, 7, 8, 9], value), /invalid value/); 289 | } 290 | }); 291 | 292 | it("contours(values) uses the expected nice thresholds", () => { 293 | assert.deepStrictEqual(contours().size([2, 1]).thresholds(14)([-149.76192742819748, 321.19300631539585]).map((c) => c.value), [-150, -100, -50, 0, 50, 100, 150, 200, 250, 300]); 294 | assert.deepStrictEqual(contours().size([2, 1]).thresholds(5)([-149.76192742819748, 321.19300631539585]).map((c) => c.value), [-200, -100, 0, 100, 200, 300]); 295 | assert.deepStrictEqual(contours().size([2, 1]).thresholds(14)([149.76192742819748, -321.19300631539585]).map((c) => c.value), [-350, -300, -250, -200, -150, -100, -50, 0, 50, 100]); 296 | assert.deepStrictEqual(contours().size([2, 1]).thresholds(5)([149.76192742819748, -321.19300631539585]).map((c) => c.value), [-400, -300, -200, -100, 0, 100]); 297 | assert.deepStrictEqual(contours().size([2, 1]).thresholds(12)([-29, 50]).map((c) => c.value), [-30, -25, -20, -15, -10, -5, 0, 5, 10, 15, 20, 25, 30, 35, 40, 45]); 298 | assert.deepStrictEqual(contours().size([2, 1]).thresholds(10)([-41, 245]).map((c) => c.value), [-50, 0, 50, 100, 150, 200]); 299 | assert.deepStrictEqual(contours().size([2, 1]).thresholds(9)([-22, 242]).map((c) => c.value), [-50, 0, 50, 100, 150, 200]); 300 | }); 301 | -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@babel/code-frame@^7.10.4": 6 | version "7.18.6" 7 | resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.18.6.tgz#3b25d38c89600baa2dcc219edfa88a74eb2c427a" 8 | integrity sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q== 9 | dependencies: 10 | "@babel/highlight" "^7.18.6" 11 | 12 | "@babel/helper-validator-identifier@^7.18.6": 13 | version "7.19.1" 14 | resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz#7eea834cf32901ffdc1a7ee555e2f9c27e249ca2" 15 | integrity sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w== 16 | 17 | "@babel/highlight@^7.18.6": 18 | version "7.18.6" 19 | resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.18.6.tgz#81158601e93e2563795adcbfbdf5d64be3f2ecdf" 20 | integrity sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g== 21 | dependencies: 22 | "@babel/helper-validator-identifier" "^7.18.6" 23 | chalk "^2.0.0" 24 | js-tokens "^4.0.0" 25 | 26 | "@eslint/eslintrc@^1.4.1": 27 | version "1.4.1" 28 | resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.4.1.tgz#af58772019a2d271b7e2d4c23ff4ddcba3ccfb3e" 29 | integrity sha512-XXrH9Uarn0stsyldqDYq8r++mROmWRI1xKMXa640Bb//SY1+ECYX6VzT6Lcx5frD0V30XieqJ0oX9I2Xj5aoMA== 30 | dependencies: 31 | ajv "^6.12.4" 32 | debug "^4.3.2" 33 | espree "^9.4.0" 34 | globals "^13.19.0" 35 | ignore "^5.2.0" 36 | import-fresh "^3.2.1" 37 | js-yaml "^4.1.0" 38 | minimatch "^3.1.2" 39 | strip-json-comments "^3.1.1" 40 | 41 | "@humanwhocodes/config-array@^0.11.8": 42 | version "0.11.8" 43 | resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.8.tgz#03595ac2075a4dc0f191cc2131de14fbd7d410b9" 44 | integrity sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g== 45 | dependencies: 46 | "@humanwhocodes/object-schema" "^1.2.1" 47 | debug "^4.1.1" 48 | minimatch "^3.0.5" 49 | 50 | "@humanwhocodes/module-importer@^1.0.1": 51 | version "1.0.1" 52 | resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" 53 | integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== 54 | 55 | "@humanwhocodes/object-schema@^1.2.1": 56 | version "1.2.1" 57 | resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" 58 | integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== 59 | 60 | "@jridgewell/gen-mapping@^0.3.0": 61 | version "0.3.2" 62 | resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz#c1aedc61e853f2bb9f5dfe6d4442d3b565b253b9" 63 | integrity sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A== 64 | dependencies: 65 | "@jridgewell/set-array" "^1.0.1" 66 | "@jridgewell/sourcemap-codec" "^1.4.10" 67 | "@jridgewell/trace-mapping" "^0.3.9" 68 | 69 | "@jridgewell/resolve-uri@3.1.0": 70 | version "3.1.0" 71 | resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78" 72 | integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== 73 | 74 | "@jridgewell/set-array@^1.0.1": 75 | version "1.1.2" 76 | resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" 77 | integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== 78 | 79 | "@jridgewell/source-map@^0.3.2": 80 | version "0.3.2" 81 | resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.2.tgz#f45351aaed4527a298512ec72f81040c998580fb" 82 | integrity sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw== 83 | dependencies: 84 | "@jridgewell/gen-mapping" "^0.3.0" 85 | "@jridgewell/trace-mapping" "^0.3.9" 86 | 87 | "@jridgewell/sourcemap-codec@1.4.14", "@jridgewell/sourcemap-codec@^1.4.10": 88 | version "1.4.14" 89 | resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" 90 | integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== 91 | 92 | "@jridgewell/trace-mapping@^0.3.9": 93 | version "0.3.17" 94 | resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz#793041277af9073b0951a7fe0f0d8c4c98c36985" 95 | integrity sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g== 96 | dependencies: 97 | "@jridgewell/resolve-uri" "3.1.0" 98 | "@jridgewell/sourcemap-codec" "1.4.14" 99 | 100 | "@nodelib/fs.scandir@2.1.5": 101 | version "2.1.5" 102 | resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" 103 | integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== 104 | dependencies: 105 | "@nodelib/fs.stat" "2.0.5" 106 | run-parallel "^1.1.9" 107 | 108 | "@nodelib/fs.stat@2.0.5": 109 | version "2.0.5" 110 | resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" 111 | integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== 112 | 113 | "@nodelib/fs.walk@^1.2.8": 114 | version "1.2.8" 115 | resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" 116 | integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== 117 | dependencies: 118 | "@nodelib/fs.scandir" "2.1.5" 119 | fastq "^1.6.0" 120 | 121 | "@tootallnate/once@2": 122 | version "2.0.0" 123 | resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-2.0.0.tgz#f544a148d3ab35801c1f633a7441fd87c2e484bf" 124 | integrity sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A== 125 | 126 | "@types/node@*": 127 | version "18.11.18" 128 | resolved "https://registry.yarnpkg.com/@types/node/-/node-18.11.18.tgz#8dfb97f0da23c2293e554c5a50d61ef134d7697f" 129 | integrity sha512-DHQpWGjyQKSHj3ebjFI/wRKcqQcdR+MoFBygntYOZytCqNfkd2ZC4ARDJ2DQqhjH5p85Nnd3jhUJIXrszFX/JA== 130 | 131 | abab@^2.0.6: 132 | version "2.0.6" 133 | resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.6.tgz#41b80f2c871d19686216b82309231cfd3cb3d291" 134 | integrity sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA== 135 | 136 | abbrev@^1.0.0: 137 | version "1.1.1" 138 | resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" 139 | integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== 140 | 141 | acorn-globals@^7.0.0: 142 | version "7.0.1" 143 | resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-7.0.1.tgz#0dbf05c44fa7c94332914c02066d5beff62c40c3" 144 | integrity sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q== 145 | dependencies: 146 | acorn "^8.1.0" 147 | acorn-walk "^8.0.2" 148 | 149 | acorn-jsx@^5.3.2: 150 | version "5.3.2" 151 | resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" 152 | integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== 153 | 154 | acorn-walk@^8.0.2: 155 | version "8.2.0" 156 | resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1" 157 | integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== 158 | 159 | acorn@^8.1.0, acorn@^8.5.0, acorn@^8.8.0, acorn@^8.8.1: 160 | version "8.8.1" 161 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.1.tgz#0a3f9cbecc4ec3bea6f0a80b66ae8dd2da250b73" 162 | integrity sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA== 163 | 164 | agent-base@6: 165 | version "6.0.2" 166 | resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" 167 | integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== 168 | dependencies: 169 | debug "4" 170 | 171 | ajv@^6.10.0, ajv@^6.12.4: 172 | version "6.12.6" 173 | resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" 174 | integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== 175 | dependencies: 176 | fast-deep-equal "^3.1.1" 177 | fast-json-stable-stringify "^2.0.0" 178 | json-schema-traverse "^0.4.1" 179 | uri-js "^4.2.2" 180 | 181 | ansi-colors@4.1.1: 182 | version "4.1.1" 183 | resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" 184 | integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== 185 | 186 | ansi-regex@^5.0.1: 187 | version "5.0.1" 188 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" 189 | integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== 190 | 191 | ansi-styles@^3.2.1: 192 | version "3.2.1" 193 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" 194 | integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== 195 | dependencies: 196 | color-convert "^1.9.0" 197 | 198 | ansi-styles@^4.0.0, ansi-styles@^4.1.0: 199 | version "4.3.0" 200 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" 201 | integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== 202 | dependencies: 203 | color-convert "^2.0.1" 204 | 205 | anymatch@~3.1.2: 206 | version "3.1.3" 207 | resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" 208 | integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== 209 | dependencies: 210 | normalize-path "^3.0.0" 211 | picomatch "^2.0.4" 212 | 213 | argparse@^2.0.1: 214 | version "2.0.1" 215 | resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" 216 | integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== 217 | 218 | asynckit@^0.4.0: 219 | version "0.4.0" 220 | resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" 221 | integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== 222 | 223 | balanced-match@^1.0.0: 224 | version "1.0.2" 225 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" 226 | integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== 227 | 228 | binary-extensions@^2.0.0: 229 | version "2.2.0" 230 | resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" 231 | integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== 232 | 233 | brace-expansion@^1.1.7: 234 | version "1.1.11" 235 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" 236 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== 237 | dependencies: 238 | balanced-match "^1.0.0" 239 | concat-map "0.0.1" 240 | 241 | brace-expansion@^2.0.1: 242 | version "2.0.1" 243 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" 244 | integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== 245 | dependencies: 246 | balanced-match "^1.0.0" 247 | 248 | braces@~3.0.2: 249 | version "3.0.2" 250 | resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" 251 | integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== 252 | dependencies: 253 | fill-range "^7.0.1" 254 | 255 | browser-stdout@1.3.1: 256 | version "1.3.1" 257 | resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" 258 | integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== 259 | 260 | buffer-from@^1.0.0: 261 | version "1.1.2" 262 | resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" 263 | integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== 264 | 265 | callsites@^3.0.0: 266 | version "3.1.0" 267 | resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" 268 | integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== 269 | 270 | camelcase@^6.0.0: 271 | version "6.3.0" 272 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" 273 | integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== 274 | 275 | chalk@^2.0.0: 276 | version "2.4.2" 277 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" 278 | integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== 279 | dependencies: 280 | ansi-styles "^3.2.1" 281 | escape-string-regexp "^1.0.5" 282 | supports-color "^5.3.0" 283 | 284 | chalk@^4.0.0, chalk@^4.1.0: 285 | version "4.1.2" 286 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" 287 | integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== 288 | dependencies: 289 | ansi-styles "^4.1.0" 290 | supports-color "^7.1.0" 291 | 292 | chokidar@3.5.3: 293 | version "3.5.3" 294 | resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" 295 | integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== 296 | dependencies: 297 | anymatch "~3.1.2" 298 | braces "~3.0.2" 299 | glob-parent "~5.1.2" 300 | is-binary-path "~2.1.0" 301 | is-glob "~4.0.1" 302 | normalize-path "~3.0.0" 303 | readdirp "~3.6.0" 304 | optionalDependencies: 305 | fsevents "~2.3.2" 306 | 307 | cliui@^7.0.2: 308 | version "7.0.4" 309 | resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" 310 | integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== 311 | dependencies: 312 | string-width "^4.2.0" 313 | strip-ansi "^6.0.0" 314 | wrap-ansi "^7.0.0" 315 | 316 | color-convert@^1.9.0: 317 | version "1.9.3" 318 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" 319 | integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== 320 | dependencies: 321 | color-name "1.1.3" 322 | 323 | color-convert@^2.0.1: 324 | version "2.0.1" 325 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" 326 | integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== 327 | dependencies: 328 | color-name "~1.1.4" 329 | 330 | color-name@1.1.3: 331 | version "1.1.3" 332 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" 333 | integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== 334 | 335 | color-name@~1.1.4: 336 | version "1.1.4" 337 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" 338 | integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== 339 | 340 | combined-stream@^1.0.8: 341 | version "1.0.8" 342 | resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" 343 | integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== 344 | dependencies: 345 | delayed-stream "~1.0.0" 346 | 347 | commander@7: 348 | version "7.2.0" 349 | resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7" 350 | integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw== 351 | 352 | commander@^2.19.0, commander@^2.20.0: 353 | version "2.20.3" 354 | resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" 355 | integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== 356 | 357 | concat-map@0.0.1: 358 | version "0.0.1" 359 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 360 | integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== 361 | 362 | config-chain@^1.1.13: 363 | version "1.1.13" 364 | resolved "https://registry.yarnpkg.com/config-chain/-/config-chain-1.1.13.tgz#fad0795aa6a6cdaff9ed1b68e9dff94372c232f4" 365 | integrity sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ== 366 | dependencies: 367 | ini "^1.3.4" 368 | proto-list "~1.2.1" 369 | 370 | cross-spawn@^7.0.2: 371 | version "7.0.3" 372 | resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" 373 | integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== 374 | dependencies: 375 | path-key "^3.1.0" 376 | shebang-command "^2.0.0" 377 | which "^2.0.1" 378 | 379 | cssom@^0.5.0: 380 | version "0.5.0" 381 | resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.5.0.tgz#d254fa92cd8b6fbd83811b9fbaed34663cc17c36" 382 | integrity sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw== 383 | 384 | cssom@~0.3.6: 385 | version "0.3.8" 386 | resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a" 387 | integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg== 388 | 389 | cssstyle@^2.3.0: 390 | version "2.3.0" 391 | resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-2.3.0.tgz#ff665a0ddbdc31864b09647f34163443d90b0852" 392 | integrity sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A== 393 | dependencies: 394 | cssom "~0.3.6" 395 | 396 | "d3-array@2 - 3", "d3-array@2.10.0 - 3", "d3-array@2.5.0 - 3", d3-array@^3.2.0: 397 | version "3.2.1" 398 | resolved "https://registry.yarnpkg.com/d3-array/-/d3-array-3.2.1.tgz#39331ea706f5709417d31bbb6ec152e0328b39b3" 399 | integrity sha512-gUY/qeHq/yNqqoCKNq4vtpFLdoCdvyNpWoC/KNjhGbhDuQpAM9sIQQKkXSNpXa9h5KySs/gzm7R88WkUutgwWQ== 400 | dependencies: 401 | internmap "1 - 2" 402 | 403 | d3-axis@3: 404 | version "3.0.0" 405 | resolved "https://registry.yarnpkg.com/d3-axis/-/d3-axis-3.0.0.tgz#c42a4a13e8131d637b745fc2973824cfeaf93322" 406 | integrity sha512-IH5tgjV4jE/GhHkRV0HiVYPDtvfjHQlQfJHs0usq7M30XcSBvOotpmH1IgkcXsO/5gEQZD43B//fc7SRT5S+xw== 407 | 408 | "d3-color@1 - 3": 409 | version "3.1.0" 410 | resolved "https://registry.yarnpkg.com/d3-color/-/d3-color-3.1.0.tgz#395b2833dfac71507f12ac2f7af23bf819de24e2" 411 | integrity sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA== 412 | 413 | "d3-dsv@1 - 3", d3-dsv@3: 414 | version "3.0.1" 415 | resolved "https://registry.yarnpkg.com/d3-dsv/-/d3-dsv-3.0.1.tgz#c63af978f4d6a0d084a52a673922be2160789b73" 416 | integrity sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q== 417 | dependencies: 418 | commander "7" 419 | iconv-lite "0.6" 420 | rw "1" 421 | 422 | d3-fetch@3: 423 | version "3.0.1" 424 | resolved "https://registry.yarnpkg.com/d3-fetch/-/d3-fetch-3.0.1.tgz#83141bff9856a0edb5e38de89cdcfe63d0a60a22" 425 | integrity sha512-kpkQIM20n3oLVBKGg6oHrUchHM3xODkTzjMoj7aWQFq5QEM+R6E4WkzT5+tojDY7yjez8KgCBRoj4aEr99Fdqw== 426 | dependencies: 427 | d3-dsv "1 - 3" 428 | 429 | "d3-format@1 - 3": 430 | version "3.1.0" 431 | resolved "https://registry.yarnpkg.com/d3-format/-/d3-format-3.1.0.tgz#9260e23a28ea5cb109e93b21a06e24e2ebd55641" 432 | integrity sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA== 433 | 434 | d3-geo@3: 435 | version "3.1.0" 436 | resolved "https://registry.yarnpkg.com/d3-geo/-/d3-geo-3.1.0.tgz#74fd54e1f4cebd5185ac2039217a98d39b0a4c0e" 437 | integrity sha512-JEo5HxXDdDYXCaWdwLRt79y7giK8SbhZJbFWXqbRTolCHFI5jRqteLzCsq51NKbUoX0PjBVSohxrx+NoOUujYA== 438 | dependencies: 439 | d3-array "2.5.0 - 3" 440 | 441 | "d3-interpolate@1.2.0 - 3": 442 | version "3.0.1" 443 | resolved "https://registry.yarnpkg.com/d3-interpolate/-/d3-interpolate-3.0.1.tgz#3c47aa5b32c5b3dfb56ef3fd4342078a632b400d" 444 | integrity sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g== 445 | dependencies: 446 | d3-color "1 - 3" 447 | 448 | d3-polygon@3: 449 | version "3.0.1" 450 | resolved "https://registry.yarnpkg.com/d3-polygon/-/d3-polygon-3.0.1.tgz#0b45d3dd1c48a29c8e057e6135693ec80bf16398" 451 | integrity sha512-3vbA7vXYwfe1SYhED++fPUQlWSYTTGmFmQiany/gdbiWgU/iEyQzyymwL9SkJjFFuCS4902BSzewVGsHHmHtXg== 452 | 453 | d3-scale@4: 454 | version "4.0.2" 455 | resolved "https://registry.yarnpkg.com/d3-scale/-/d3-scale-4.0.2.tgz#82b38e8e8ff7080764f8dcec77bd4be393689396" 456 | integrity sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ== 457 | dependencies: 458 | d3-array "2.10.0 - 3" 459 | d3-format "1 - 3" 460 | d3-interpolate "1.2.0 - 3" 461 | d3-time "2.1.1 - 3" 462 | d3-time-format "2 - 4" 463 | 464 | d3-selection@3: 465 | version "3.0.0" 466 | resolved "https://registry.yarnpkg.com/d3-selection/-/d3-selection-3.0.0.tgz#c25338207efa72cc5b9bd1458a1a41901f1e1b31" 467 | integrity sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ== 468 | 469 | "d3-time-format@2 - 4": 470 | version "4.1.0" 471 | resolved "https://registry.yarnpkg.com/d3-time-format/-/d3-time-format-4.1.0.tgz#7ab5257a5041d11ecb4fe70a5c7d16a195bb408a" 472 | integrity sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg== 473 | dependencies: 474 | d3-time "1 - 3" 475 | 476 | "d3-time@1 - 3", "d3-time@2.1.1 - 3": 477 | version "3.1.0" 478 | resolved "https://registry.yarnpkg.com/d3-time/-/d3-time-3.1.0.tgz#9310db56e992e3c0175e1ef385e545e48a9bb5c7" 479 | integrity sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q== 480 | dependencies: 481 | d3-array "2 - 3" 482 | 483 | data-urls@^3.0.2: 484 | version "3.0.2" 485 | resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-3.0.2.tgz#9cf24a477ae22bcef5cd5f6f0bfbc1d2d3be9143" 486 | integrity sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ== 487 | dependencies: 488 | abab "^2.0.6" 489 | whatwg-mimetype "^3.0.0" 490 | whatwg-url "^11.0.0" 491 | 492 | debug@4, debug@4.3.4, debug@^4.1.1, debug@^4.3.2: 493 | version "4.3.4" 494 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" 495 | integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== 496 | dependencies: 497 | ms "2.1.2" 498 | 499 | decamelize@^4.0.0: 500 | version "4.0.0" 501 | resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-4.0.0.tgz#aa472d7bf660eb15f3494efd531cab7f2a709837" 502 | integrity sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ== 503 | 504 | decimal.js@^10.4.2: 505 | version "10.4.3" 506 | resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.4.3.tgz#1044092884d245d1b7f65725fa4ad4c6f781cc23" 507 | integrity sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA== 508 | 509 | deep-is@^0.1.3, deep-is@~0.1.3: 510 | version "0.1.4" 511 | resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" 512 | integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== 513 | 514 | delayed-stream@~1.0.0: 515 | version "1.0.0" 516 | resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" 517 | integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== 518 | 519 | diff@5.0.0: 520 | version "5.0.0" 521 | resolved "https://registry.yarnpkg.com/diff/-/diff-5.0.0.tgz#7ed6ad76d859d030787ec35855f5b1daf31d852b" 522 | integrity sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w== 523 | 524 | doctrine@^3.0.0: 525 | version "3.0.0" 526 | resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" 527 | integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== 528 | dependencies: 529 | esutils "^2.0.2" 530 | 531 | domexception@^4.0.0: 532 | version "4.0.0" 533 | resolved "https://registry.yarnpkg.com/domexception/-/domexception-4.0.0.tgz#4ad1be56ccadc86fc76d033353999a8037d03673" 534 | integrity sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw== 535 | dependencies: 536 | webidl-conversions "^7.0.0" 537 | 538 | editorconfig@^0.15.3: 539 | version "0.15.3" 540 | resolved "https://registry.yarnpkg.com/editorconfig/-/editorconfig-0.15.3.tgz#bef84c4e75fb8dcb0ce5cee8efd51c15999befc5" 541 | integrity sha512-M9wIMFx96vq0R4F+gRpY3o2exzb8hEj/n9S8unZtHSvYjibBp/iMufSzvmOcV/laG0ZtuTVGtiJggPOSW2r93g== 542 | dependencies: 543 | commander "^2.19.0" 544 | lru-cache "^4.1.5" 545 | semver "^5.6.0" 546 | sigmund "^1.0.1" 547 | 548 | emoji-regex@^8.0.0: 549 | version "8.0.0" 550 | resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" 551 | integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== 552 | 553 | entities@^4.4.0: 554 | version "4.4.0" 555 | resolved "https://registry.yarnpkg.com/entities/-/entities-4.4.0.tgz#97bdaba170339446495e653cfd2db78962900174" 556 | integrity sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA== 557 | 558 | escalade@^3.1.1: 559 | version "3.1.1" 560 | resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" 561 | integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== 562 | 563 | escape-string-regexp@4.0.0, escape-string-regexp@^4.0.0: 564 | version "4.0.0" 565 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" 566 | integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== 567 | 568 | escape-string-regexp@^1.0.5: 569 | version "1.0.5" 570 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" 571 | integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== 572 | 573 | escodegen@^2.0.0: 574 | version "2.0.0" 575 | resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-2.0.0.tgz#5e32b12833e8aa8fa35e1bf0befa89380484c7dd" 576 | integrity sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw== 577 | dependencies: 578 | esprima "^4.0.1" 579 | estraverse "^5.2.0" 580 | esutils "^2.0.2" 581 | optionator "^0.8.1" 582 | optionalDependencies: 583 | source-map "~0.6.1" 584 | 585 | eslint-scope@^7.1.1: 586 | version "7.1.1" 587 | resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.1.1.tgz#fff34894c2f65e5226d3041ac480b4513a163642" 588 | integrity sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw== 589 | dependencies: 590 | esrecurse "^4.3.0" 591 | estraverse "^5.2.0" 592 | 593 | eslint-utils@^3.0.0: 594 | version "3.0.0" 595 | resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-3.0.0.tgz#8aebaface7345bb33559db0a1f13a1d2d48c3672" 596 | integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA== 597 | dependencies: 598 | eslint-visitor-keys "^2.0.0" 599 | 600 | eslint-visitor-keys@^2.0.0: 601 | version "2.1.0" 602 | resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" 603 | integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== 604 | 605 | eslint-visitor-keys@^3.3.0: 606 | version "3.3.0" 607 | resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz#f6480fa6b1f30efe2d1968aa8ac745b862469826" 608 | integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA== 609 | 610 | eslint@8: 611 | version "8.31.0" 612 | resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.31.0.tgz#75028e77cbcff102a9feae1d718135931532d524" 613 | integrity sha512-0tQQEVdmPZ1UtUKXjX7EMm9BlgJ08G90IhWh0PKDCb3ZLsgAOHI8fYSIzYVZej92zsgq+ft0FGsxhJ3xo2tbuA== 614 | dependencies: 615 | "@eslint/eslintrc" "^1.4.1" 616 | "@humanwhocodes/config-array" "^0.11.8" 617 | "@humanwhocodes/module-importer" "^1.0.1" 618 | "@nodelib/fs.walk" "^1.2.8" 619 | ajv "^6.10.0" 620 | chalk "^4.0.0" 621 | cross-spawn "^7.0.2" 622 | debug "^4.3.2" 623 | doctrine "^3.0.0" 624 | escape-string-regexp "^4.0.0" 625 | eslint-scope "^7.1.1" 626 | eslint-utils "^3.0.0" 627 | eslint-visitor-keys "^3.3.0" 628 | espree "^9.4.0" 629 | esquery "^1.4.0" 630 | esutils "^2.0.2" 631 | fast-deep-equal "^3.1.3" 632 | file-entry-cache "^6.0.1" 633 | find-up "^5.0.0" 634 | glob-parent "^6.0.2" 635 | globals "^13.19.0" 636 | grapheme-splitter "^1.0.4" 637 | ignore "^5.2.0" 638 | import-fresh "^3.0.0" 639 | imurmurhash "^0.1.4" 640 | is-glob "^4.0.0" 641 | is-path-inside "^3.0.3" 642 | js-sdsl "^4.1.4" 643 | js-yaml "^4.1.0" 644 | json-stable-stringify-without-jsonify "^1.0.1" 645 | levn "^0.4.1" 646 | lodash.merge "^4.6.2" 647 | minimatch "^3.1.2" 648 | natural-compare "^1.4.0" 649 | optionator "^0.9.1" 650 | regexpp "^3.2.0" 651 | strip-ansi "^6.0.1" 652 | strip-json-comments "^3.1.0" 653 | text-table "^0.2.0" 654 | 655 | espree@^9.4.0: 656 | version "9.4.1" 657 | resolved "https://registry.yarnpkg.com/espree/-/espree-9.4.1.tgz#51d6092615567a2c2cff7833445e37c28c0065bd" 658 | integrity sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg== 659 | dependencies: 660 | acorn "^8.8.0" 661 | acorn-jsx "^5.3.2" 662 | eslint-visitor-keys "^3.3.0" 663 | 664 | esprima@^4.0.1: 665 | version "4.0.1" 666 | resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" 667 | integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== 668 | 669 | esquery@^1.4.0: 670 | version "1.4.0" 671 | resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5" 672 | integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== 673 | dependencies: 674 | estraverse "^5.1.0" 675 | 676 | esrecurse@^4.3.0: 677 | version "4.3.0" 678 | resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" 679 | integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== 680 | dependencies: 681 | estraverse "^5.2.0" 682 | 683 | estraverse@^5.1.0, estraverse@^5.2.0: 684 | version "5.3.0" 685 | resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" 686 | integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== 687 | 688 | esutils@^2.0.2: 689 | version "2.0.3" 690 | resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" 691 | integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== 692 | 693 | fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: 694 | version "3.1.3" 695 | resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" 696 | integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== 697 | 698 | fast-json-stable-stringify@^2.0.0: 699 | version "2.1.0" 700 | resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" 701 | integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== 702 | 703 | fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6: 704 | version "2.0.6" 705 | resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" 706 | integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== 707 | 708 | fastq@^1.6.0: 709 | version "1.15.0" 710 | resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.15.0.tgz#d04d07c6a2a68fe4599fea8d2e103a937fae6b3a" 711 | integrity sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw== 712 | dependencies: 713 | reusify "^1.0.4" 714 | 715 | file-entry-cache@^6.0.1: 716 | version "6.0.1" 717 | resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" 718 | integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== 719 | dependencies: 720 | flat-cache "^3.0.4" 721 | 722 | fill-range@^7.0.1: 723 | version "7.0.1" 724 | resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" 725 | integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== 726 | dependencies: 727 | to-regex-range "^5.0.1" 728 | 729 | find-up@5.0.0, find-up@^5.0.0: 730 | version "5.0.0" 731 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" 732 | integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== 733 | dependencies: 734 | locate-path "^6.0.0" 735 | path-exists "^4.0.0" 736 | 737 | flat-cache@^3.0.4: 738 | version "3.0.4" 739 | resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" 740 | integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== 741 | dependencies: 742 | flatted "^3.1.0" 743 | rimraf "^3.0.2" 744 | 745 | flat@^5.0.2: 746 | version "5.0.2" 747 | resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241" 748 | integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== 749 | 750 | flatted@^3.1.0: 751 | version "3.2.7" 752 | resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.7.tgz#609f39207cb614b89d0765b477cb2d437fbf9787" 753 | integrity sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ== 754 | 755 | form-data@^4.0.0: 756 | version "4.0.0" 757 | resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" 758 | integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== 759 | dependencies: 760 | asynckit "^0.4.0" 761 | combined-stream "^1.0.8" 762 | mime-types "^2.1.12" 763 | 764 | fs.realpath@^1.0.0: 765 | version "1.0.0" 766 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 767 | integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== 768 | 769 | fsevents@~2.3.2: 770 | version "2.3.2" 771 | resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" 772 | integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== 773 | 774 | get-caller-file@^2.0.5: 775 | version "2.0.5" 776 | resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" 777 | integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== 778 | 779 | glob-parent@^6.0.2: 780 | version "6.0.2" 781 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" 782 | integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== 783 | dependencies: 784 | is-glob "^4.0.3" 785 | 786 | glob-parent@~5.1.2: 787 | version "5.1.2" 788 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" 789 | integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== 790 | dependencies: 791 | is-glob "^4.0.1" 792 | 793 | glob@7.2.0: 794 | version "7.2.0" 795 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" 796 | integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== 797 | dependencies: 798 | fs.realpath "^1.0.0" 799 | inflight "^1.0.4" 800 | inherits "2" 801 | minimatch "^3.0.4" 802 | once "^1.3.0" 803 | path-is-absolute "^1.0.0" 804 | 805 | glob@^7.1.3: 806 | version "7.2.3" 807 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" 808 | integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== 809 | dependencies: 810 | fs.realpath "^1.0.0" 811 | inflight "^1.0.4" 812 | inherits "2" 813 | minimatch "^3.1.1" 814 | once "^1.3.0" 815 | path-is-absolute "^1.0.0" 816 | 817 | glob@^8.0.3: 818 | version "8.0.3" 819 | resolved "https://registry.yarnpkg.com/glob/-/glob-8.0.3.tgz#415c6eb2deed9e502c68fa44a272e6da6eeca42e" 820 | integrity sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ== 821 | dependencies: 822 | fs.realpath "^1.0.0" 823 | inflight "^1.0.4" 824 | inherits "2" 825 | minimatch "^5.0.1" 826 | once "^1.3.0" 827 | 828 | globals@^13.19.0: 829 | version "13.19.0" 830 | resolved "https://registry.yarnpkg.com/globals/-/globals-13.19.0.tgz#7a42de8e6ad4f7242fbcca27ea5b23aca367b5c8" 831 | integrity sha512-dkQ957uSRWHw7CFXLUtUHQI3g3aWApYhfNR2O6jn/907riyTYKVBmxYVROkBcY614FSSeSJh7Xm7SrUWCxvJMQ== 832 | dependencies: 833 | type-fest "^0.20.2" 834 | 835 | grapheme-splitter@^1.0.4: 836 | version "1.0.4" 837 | resolved "https://registry.yarnpkg.com/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz#9cf3a665c6247479896834af35cf1dbb4400767e" 838 | integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ== 839 | 840 | has-flag@^3.0.0: 841 | version "3.0.0" 842 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" 843 | integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== 844 | 845 | has-flag@^4.0.0: 846 | version "4.0.0" 847 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" 848 | integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== 849 | 850 | he@1.2.0: 851 | version "1.2.0" 852 | resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" 853 | integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== 854 | 855 | htl@^0.3.1: 856 | version "0.3.1" 857 | resolved "https://registry.yarnpkg.com/htl/-/htl-0.3.1.tgz#13c5a32fa46434f33b84d4553dd37e58a80e8d8a" 858 | integrity sha512-1LBtd+XhSc+++jpOOt0lCcEycXs/zTQSupOISnVAUmvGBpV7DH+C2M6hwV7zWYfpTMMg9ch4NO0lHiOTAMHdVA== 859 | 860 | html-encoding-sniffer@^3.0.0: 861 | version "3.0.0" 862 | resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz#2cb1a8cf0db52414776e5b2a7a04d5dd98158de9" 863 | integrity sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA== 864 | dependencies: 865 | whatwg-encoding "^2.0.0" 866 | 867 | http-proxy-agent@^5.0.0: 868 | version "5.0.0" 869 | resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz#5129800203520d434f142bc78ff3c170800f2b43" 870 | integrity sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w== 871 | dependencies: 872 | "@tootallnate/once" "2" 873 | agent-base "6" 874 | debug "4" 875 | 876 | https-proxy-agent@^5.0.1: 877 | version "5.0.1" 878 | resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" 879 | integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== 880 | dependencies: 881 | agent-base "6" 882 | debug "4" 883 | 884 | iconv-lite@0.6, iconv-lite@0.6.3: 885 | version "0.6.3" 886 | resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" 887 | integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== 888 | dependencies: 889 | safer-buffer ">= 2.1.2 < 3.0.0" 890 | 891 | ignore@^5.2.0: 892 | version "5.2.4" 893 | resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324" 894 | integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== 895 | 896 | import-fresh@^3.0.0, import-fresh@^3.2.1: 897 | version "3.3.0" 898 | resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" 899 | integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== 900 | dependencies: 901 | parent-module "^1.0.0" 902 | resolve-from "^4.0.0" 903 | 904 | imurmurhash@^0.1.4: 905 | version "0.1.4" 906 | resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" 907 | integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== 908 | 909 | inflight@^1.0.4: 910 | version "1.0.6" 911 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 912 | integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== 913 | dependencies: 914 | once "^1.3.0" 915 | wrappy "1" 916 | 917 | inherits@2: 918 | version "2.0.4" 919 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" 920 | integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== 921 | 922 | ini@^1.3.4: 923 | version "1.3.8" 924 | resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" 925 | integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== 926 | 927 | "internmap@1 - 2": 928 | version "2.0.3" 929 | resolved "https://registry.yarnpkg.com/internmap/-/internmap-2.0.3.tgz#6685f23755e43c524e251d29cbc97248e3061009" 930 | integrity sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg== 931 | 932 | is-binary-path@~2.1.0: 933 | version "2.1.0" 934 | resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" 935 | integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== 936 | dependencies: 937 | binary-extensions "^2.0.0" 938 | 939 | is-extglob@^2.1.1: 940 | version "2.1.1" 941 | resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" 942 | integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== 943 | 944 | is-fullwidth-code-point@^3.0.0: 945 | version "3.0.0" 946 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" 947 | integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== 948 | 949 | is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: 950 | version "4.0.3" 951 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" 952 | integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== 953 | dependencies: 954 | is-extglob "^2.1.1" 955 | 956 | is-number@^7.0.0: 957 | version "7.0.0" 958 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" 959 | integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== 960 | 961 | is-path-inside@^3.0.3: 962 | version "3.0.3" 963 | resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" 964 | integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== 965 | 966 | is-plain-obj@^2.1.0: 967 | version "2.1.0" 968 | resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" 969 | integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== 970 | 971 | is-potential-custom-element-name@^1.0.1: 972 | version "1.0.1" 973 | resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz#171ed6f19e3ac554394edf78caa05784a45bebb5" 974 | integrity sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ== 975 | 976 | is-unicode-supported@^0.1.0: 977 | version "0.1.0" 978 | resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" 979 | integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== 980 | 981 | isexe@^2.0.0: 982 | version "2.0.0" 983 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" 984 | integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== 985 | 986 | jest-worker@^26.2.1: 987 | version "26.6.2" 988 | resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-26.6.2.tgz#7f72cbc4d643c365e27b9fd775f9d0eaa9c7a8ed" 989 | integrity sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ== 990 | dependencies: 991 | "@types/node" "*" 992 | merge-stream "^2.0.0" 993 | supports-color "^7.0.0" 994 | 995 | js-beautify@1: 996 | version "1.14.7" 997 | resolved "https://registry.yarnpkg.com/js-beautify/-/js-beautify-1.14.7.tgz#9206296de33f86dc106d3e50a35b7cf8729703b2" 998 | integrity sha512-5SOX1KXPFKx+5f6ZrPsIPEY7NwKeQz47n3jm2i+XeHx9MoRsfQenlOP13FQhWvg8JRS0+XLO6XYUQ2GX+q+T9A== 999 | dependencies: 1000 | config-chain "^1.1.13" 1001 | editorconfig "^0.15.3" 1002 | glob "^8.0.3" 1003 | nopt "^6.0.0" 1004 | 1005 | js-sdsl@^4.1.4: 1006 | version "4.2.0" 1007 | resolved "https://registry.yarnpkg.com/js-sdsl/-/js-sdsl-4.2.0.tgz#278e98b7bea589b8baaf048c20aeb19eb7ad09d0" 1008 | integrity sha512-dyBIzQBDkCqCu+0upx25Y2jGdbTGxE9fshMsCdK0ViOongpV+n5tXRcZY9v7CaVQ79AGS9KA1KHtojxiM7aXSQ== 1009 | 1010 | js-tokens@^4.0.0: 1011 | version "4.0.0" 1012 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" 1013 | integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== 1014 | 1015 | js-yaml@4.1.0, js-yaml@^4.1.0: 1016 | version "4.1.0" 1017 | resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" 1018 | integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== 1019 | dependencies: 1020 | argparse "^2.0.1" 1021 | 1022 | jsdom@20: 1023 | version "20.0.3" 1024 | resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-20.0.3.tgz#886a41ba1d4726f67a8858028c99489fed6ad4db" 1025 | integrity sha512-SYhBvTh89tTfCD/CRdSOm13mOBa42iTaTyfyEWBdKcGdPxPtLFBXuHR8XHb33YNYaP+lLbmSvBTsnoesCNJEsQ== 1026 | dependencies: 1027 | abab "^2.0.6" 1028 | acorn "^8.8.1" 1029 | acorn-globals "^7.0.0" 1030 | cssom "^0.5.0" 1031 | cssstyle "^2.3.0" 1032 | data-urls "^3.0.2" 1033 | decimal.js "^10.4.2" 1034 | domexception "^4.0.0" 1035 | escodegen "^2.0.0" 1036 | form-data "^4.0.0" 1037 | html-encoding-sniffer "^3.0.0" 1038 | http-proxy-agent "^5.0.0" 1039 | https-proxy-agent "^5.0.1" 1040 | is-potential-custom-element-name "^1.0.1" 1041 | nwsapi "^2.2.2" 1042 | parse5 "^7.1.1" 1043 | saxes "^6.0.0" 1044 | symbol-tree "^3.2.4" 1045 | tough-cookie "^4.1.2" 1046 | w3c-xmlserializer "^4.0.0" 1047 | webidl-conversions "^7.0.0" 1048 | whatwg-encoding "^2.0.0" 1049 | whatwg-mimetype "^3.0.0" 1050 | whatwg-url "^11.0.0" 1051 | ws "^8.11.0" 1052 | xml-name-validator "^4.0.0" 1053 | 1054 | json-schema-traverse@^0.4.1: 1055 | version "0.4.1" 1056 | resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" 1057 | integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== 1058 | 1059 | json-stable-stringify-without-jsonify@^1.0.1: 1060 | version "1.0.1" 1061 | resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" 1062 | integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== 1063 | 1064 | levn@^0.4.1: 1065 | version "0.4.1" 1066 | resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" 1067 | integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== 1068 | dependencies: 1069 | prelude-ls "^1.2.1" 1070 | type-check "~0.4.0" 1071 | 1072 | levn@~0.3.0: 1073 | version "0.3.0" 1074 | resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" 1075 | integrity sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA== 1076 | dependencies: 1077 | prelude-ls "~1.1.2" 1078 | type-check "~0.3.2" 1079 | 1080 | locate-path@^6.0.0: 1081 | version "6.0.0" 1082 | resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" 1083 | integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== 1084 | dependencies: 1085 | p-locate "^5.0.0" 1086 | 1087 | lodash.merge@^4.6.2: 1088 | version "4.6.2" 1089 | resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" 1090 | integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== 1091 | 1092 | log-symbols@4.1.0: 1093 | version "4.1.0" 1094 | resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" 1095 | integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== 1096 | dependencies: 1097 | chalk "^4.1.0" 1098 | is-unicode-supported "^0.1.0" 1099 | 1100 | lru-cache@^4.1.5: 1101 | version "4.1.5" 1102 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" 1103 | integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g== 1104 | dependencies: 1105 | pseudomap "^1.0.2" 1106 | yallist "^2.1.2" 1107 | 1108 | merge-stream@^2.0.0: 1109 | version "2.0.0" 1110 | resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" 1111 | integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== 1112 | 1113 | mime-db@1.52.0: 1114 | version "1.52.0" 1115 | resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" 1116 | integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== 1117 | 1118 | mime-types@^2.1.12: 1119 | version "2.1.35" 1120 | resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" 1121 | integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== 1122 | dependencies: 1123 | mime-db "1.52.0" 1124 | 1125 | minimatch@5.0.1: 1126 | version "5.0.1" 1127 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.0.1.tgz#fb9022f7528125187c92bd9e9b6366be1cf3415b" 1128 | integrity sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g== 1129 | dependencies: 1130 | brace-expansion "^2.0.1" 1131 | 1132 | minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: 1133 | version "3.1.2" 1134 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" 1135 | integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== 1136 | dependencies: 1137 | brace-expansion "^1.1.7" 1138 | 1139 | minimatch@^5.0.1: 1140 | version "5.1.2" 1141 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.2.tgz#0939d7d6f0898acbd1508abe534d1929368a8fff" 1142 | integrity sha512-bNH9mmM9qsJ2X4r2Nat1B//1dJVcn3+iBLa3IgqJ7EbGaDNepL9QSHOxN4ng33s52VMMhhIfgCYDk3C4ZmlDAg== 1143 | dependencies: 1144 | brace-expansion "^2.0.1" 1145 | 1146 | mocha@10: 1147 | version "10.2.0" 1148 | resolved "https://registry.yarnpkg.com/mocha/-/mocha-10.2.0.tgz#1fd4a7c32ba5ac372e03a17eef435bd00e5c68b8" 1149 | integrity sha512-IDY7fl/BecMwFHzoqF2sg/SHHANeBoMMXFlS9r0OXKDssYE1M5O43wUY/9BVPeIvfH2zmEbBfseqN9gBQZzXkg== 1150 | dependencies: 1151 | ansi-colors "4.1.1" 1152 | browser-stdout "1.3.1" 1153 | chokidar "3.5.3" 1154 | debug "4.3.4" 1155 | diff "5.0.0" 1156 | escape-string-regexp "4.0.0" 1157 | find-up "5.0.0" 1158 | glob "7.2.0" 1159 | he "1.2.0" 1160 | js-yaml "4.1.0" 1161 | log-symbols "4.1.0" 1162 | minimatch "5.0.1" 1163 | ms "2.1.3" 1164 | nanoid "3.3.3" 1165 | serialize-javascript "6.0.0" 1166 | strip-json-comments "3.1.1" 1167 | supports-color "8.1.1" 1168 | workerpool "6.2.1" 1169 | yargs "16.2.0" 1170 | yargs-parser "20.2.4" 1171 | yargs-unparser "2.0.0" 1172 | 1173 | module-alias@2: 1174 | version "2.2.2" 1175 | resolved "https://registry.yarnpkg.com/module-alias/-/module-alias-2.2.2.tgz#151cdcecc24e25739ff0aa6e51e1c5716974c0e0" 1176 | integrity sha512-A/78XjoX2EmNvppVWEhM2oGk3x4lLxnkEA4jTbaK97QKSDjkIoOsKQlfylt/d3kKKi596Qy3NP5XrXJ6fZIC9Q== 1177 | 1178 | ms@2.1.2: 1179 | version "2.1.2" 1180 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" 1181 | integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== 1182 | 1183 | ms@2.1.3: 1184 | version "2.1.3" 1185 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" 1186 | integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== 1187 | 1188 | nanoid@3.3.3: 1189 | version "3.3.3" 1190 | resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.3.tgz#fd8e8b7aa761fe807dba2d1b98fb7241bb724a25" 1191 | integrity sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w== 1192 | 1193 | natural-compare@^1.4.0: 1194 | version "1.4.0" 1195 | resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" 1196 | integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== 1197 | 1198 | nopt@^6.0.0: 1199 | version "6.0.0" 1200 | resolved "https://registry.yarnpkg.com/nopt/-/nopt-6.0.0.tgz#245801d8ebf409c6df22ab9d95b65e1309cdb16d" 1201 | integrity sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g== 1202 | dependencies: 1203 | abbrev "^1.0.0" 1204 | 1205 | normalize-path@^3.0.0, normalize-path@~3.0.0: 1206 | version "3.0.0" 1207 | resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" 1208 | integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== 1209 | 1210 | nwsapi@^2.2.2: 1211 | version "2.2.2" 1212 | resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.2.tgz#e5418863e7905df67d51ec95938d67bf801f0bb0" 1213 | integrity sha512-90yv+6538zuvUMnN+zCr8LuV6bPFdq50304114vJYJ8RDyK8D5O9Phpbd6SZWgI7PwzmmfN1upeOJlvybDSgCw== 1214 | 1215 | once@^1.3.0: 1216 | version "1.4.0" 1217 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 1218 | integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== 1219 | dependencies: 1220 | wrappy "1" 1221 | 1222 | optionator@^0.8.1: 1223 | version "0.8.3" 1224 | resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" 1225 | integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== 1226 | dependencies: 1227 | deep-is "~0.1.3" 1228 | fast-levenshtein "~2.0.6" 1229 | levn "~0.3.0" 1230 | prelude-ls "~1.1.2" 1231 | type-check "~0.3.2" 1232 | word-wrap "~1.2.3" 1233 | 1234 | optionator@^0.9.1: 1235 | version "0.9.1" 1236 | resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" 1237 | integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== 1238 | dependencies: 1239 | deep-is "^0.1.3" 1240 | fast-levenshtein "^2.0.6" 1241 | levn "^0.4.1" 1242 | prelude-ls "^1.2.1" 1243 | type-check "^0.4.0" 1244 | word-wrap "^1.2.3" 1245 | 1246 | p-limit@^3.0.2: 1247 | version "3.1.0" 1248 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" 1249 | integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== 1250 | dependencies: 1251 | yocto-queue "^0.1.0" 1252 | 1253 | p-locate@^5.0.0: 1254 | version "5.0.0" 1255 | resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" 1256 | integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== 1257 | dependencies: 1258 | p-limit "^3.0.2" 1259 | 1260 | parent-module@^1.0.0: 1261 | version "1.0.1" 1262 | resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" 1263 | integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== 1264 | dependencies: 1265 | callsites "^3.0.0" 1266 | 1267 | parse5@^7.1.1: 1268 | version "7.1.2" 1269 | resolved "https://registry.yarnpkg.com/parse5/-/parse5-7.1.2.tgz#0736bebbfd77793823240a23b7fc5e010b7f8e32" 1270 | integrity sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw== 1271 | dependencies: 1272 | entities "^4.4.0" 1273 | 1274 | path-exists@^4.0.0: 1275 | version "4.0.0" 1276 | resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" 1277 | integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== 1278 | 1279 | path-is-absolute@^1.0.0: 1280 | version "1.0.1" 1281 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 1282 | integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== 1283 | 1284 | path-key@^3.1.0: 1285 | version "3.1.1" 1286 | resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" 1287 | integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== 1288 | 1289 | picomatch@^2.0.4, picomatch@^2.2.1: 1290 | version "2.3.1" 1291 | resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" 1292 | integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== 1293 | 1294 | prelude-ls@^1.2.1: 1295 | version "1.2.1" 1296 | resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" 1297 | integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== 1298 | 1299 | prelude-ls@~1.1.2: 1300 | version "1.1.2" 1301 | resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" 1302 | integrity sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w== 1303 | 1304 | proto-list@~1.2.1: 1305 | version "1.2.4" 1306 | resolved "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849" 1307 | integrity sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA== 1308 | 1309 | pseudomap@^1.0.2: 1310 | version "1.0.2" 1311 | resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" 1312 | integrity sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ== 1313 | 1314 | psl@^1.1.33: 1315 | version "1.9.0" 1316 | resolved "https://registry.yarnpkg.com/psl/-/psl-1.9.0.tgz#d0df2a137f00794565fcaf3b2c00cd09f8d5a5a7" 1317 | integrity sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag== 1318 | 1319 | punycode@^2.1.0, punycode@^2.1.1: 1320 | version "2.1.1" 1321 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" 1322 | integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== 1323 | 1324 | querystringify@^2.1.1: 1325 | version "2.2.0" 1326 | resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6" 1327 | integrity sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ== 1328 | 1329 | queue-microtask@^1.2.2: 1330 | version "1.2.3" 1331 | resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" 1332 | integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== 1333 | 1334 | randombytes@^2.1.0: 1335 | version "2.1.0" 1336 | resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" 1337 | integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== 1338 | dependencies: 1339 | safe-buffer "^5.1.0" 1340 | 1341 | readdirp@~3.6.0: 1342 | version "3.6.0" 1343 | resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" 1344 | integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== 1345 | dependencies: 1346 | picomatch "^2.2.1" 1347 | 1348 | regexpp@^3.2.0: 1349 | version "3.2.0" 1350 | resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" 1351 | integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== 1352 | 1353 | require-directory@^2.1.1: 1354 | version "2.1.1" 1355 | resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" 1356 | integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== 1357 | 1358 | requires-port@^1.0.0: 1359 | version "1.0.0" 1360 | resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" 1361 | integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== 1362 | 1363 | resolve-from@^4.0.0: 1364 | version "4.0.0" 1365 | resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" 1366 | integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== 1367 | 1368 | reusify@^1.0.4: 1369 | version "1.0.4" 1370 | resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" 1371 | integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== 1372 | 1373 | rimraf@^3.0.2: 1374 | version "3.0.2" 1375 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" 1376 | integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== 1377 | dependencies: 1378 | glob "^7.1.3" 1379 | 1380 | rollup-plugin-terser@7: 1381 | version "7.0.2" 1382 | resolved "https://registry.yarnpkg.com/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz#e8fbba4869981b2dc35ae7e8a502d5c6c04d324d" 1383 | integrity sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ== 1384 | dependencies: 1385 | "@babel/code-frame" "^7.10.4" 1386 | jest-worker "^26.2.1" 1387 | serialize-javascript "^4.0.0" 1388 | terser "^5.0.0" 1389 | 1390 | rollup@3: 1391 | version "3.9.1" 1392 | resolved "https://registry.yarnpkg.com/rollup/-/rollup-3.9.1.tgz#27501d3d026418765fe379d5620d25954ff2a011" 1393 | integrity sha512-GswCYHXftN8ZKGVgQhTFUJB/NBXxrRGgO2NCy6E8s1rwEJ4Q9/VttNqcYfEvx4dTo4j58YqdC3OVztPzlKSX8w== 1394 | optionalDependencies: 1395 | fsevents "~2.3.2" 1396 | 1397 | run-parallel@^1.1.9: 1398 | version "1.2.0" 1399 | resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" 1400 | integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== 1401 | dependencies: 1402 | queue-microtask "^1.2.2" 1403 | 1404 | rw@1: 1405 | version "1.3.3" 1406 | resolved "https://registry.yarnpkg.com/rw/-/rw-1.3.3.tgz#3f862dfa91ab766b14885ef4d01124bfda074fb4" 1407 | integrity sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ== 1408 | 1409 | safe-buffer@^5.1.0: 1410 | version "5.2.1" 1411 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" 1412 | integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== 1413 | 1414 | "safer-buffer@>= 2.1.2 < 3.0.0": 1415 | version "2.1.2" 1416 | resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" 1417 | integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== 1418 | 1419 | saxes@^6.0.0: 1420 | version "6.0.0" 1421 | resolved "https://registry.yarnpkg.com/saxes/-/saxes-6.0.0.tgz#fe5b4a4768df4f14a201b1ba6a65c1f3d9988cc5" 1422 | integrity sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA== 1423 | dependencies: 1424 | xmlchars "^2.2.0" 1425 | 1426 | semver@^5.6.0: 1427 | version "5.7.1" 1428 | resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" 1429 | integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== 1430 | 1431 | serialize-javascript@6.0.0: 1432 | version "6.0.0" 1433 | resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.0.tgz#efae5d88f45d7924141da8b5c3a7a7e663fefeb8" 1434 | integrity sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag== 1435 | dependencies: 1436 | randombytes "^2.1.0" 1437 | 1438 | serialize-javascript@^4.0.0: 1439 | version "4.0.0" 1440 | resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-4.0.0.tgz#b525e1238489a5ecfc42afacc3fe99e666f4b1aa" 1441 | integrity sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw== 1442 | dependencies: 1443 | randombytes "^2.1.0" 1444 | 1445 | shebang-command@^2.0.0: 1446 | version "2.0.0" 1447 | resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" 1448 | integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== 1449 | dependencies: 1450 | shebang-regex "^3.0.0" 1451 | 1452 | shebang-regex@^3.0.0: 1453 | version "3.0.0" 1454 | resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" 1455 | integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== 1456 | 1457 | sigmund@^1.0.1: 1458 | version "1.0.1" 1459 | resolved "https://registry.yarnpkg.com/sigmund/-/sigmund-1.0.1.tgz#3ff21f198cad2175f9f3b781853fd94d0d19b590" 1460 | integrity sha512-fCvEXfh6NWpm+YSuY2bpXb/VIihqWA6hLsgboC+0nl71Q7N7o2eaCW8mJa/NLvQhs6jpd3VZV4UiUQlV6+lc8g== 1461 | 1462 | source-map-support@~0.5.20: 1463 | version "0.5.21" 1464 | resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" 1465 | integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== 1466 | dependencies: 1467 | buffer-from "^1.0.0" 1468 | source-map "^0.6.0" 1469 | 1470 | source-map@^0.6.0, source-map@~0.6.1: 1471 | version "0.6.1" 1472 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" 1473 | integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== 1474 | 1475 | string-width@^4.1.0, string-width@^4.2.0: 1476 | version "4.2.3" 1477 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" 1478 | integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== 1479 | dependencies: 1480 | emoji-regex "^8.0.0" 1481 | is-fullwidth-code-point "^3.0.0" 1482 | strip-ansi "^6.0.1" 1483 | 1484 | strip-ansi@^6.0.0, strip-ansi@^6.0.1: 1485 | version "6.0.1" 1486 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" 1487 | integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== 1488 | dependencies: 1489 | ansi-regex "^5.0.1" 1490 | 1491 | strip-json-comments@3.1.1, strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: 1492 | version "3.1.1" 1493 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" 1494 | integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== 1495 | 1496 | supports-color@8.1.1: 1497 | version "8.1.1" 1498 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" 1499 | integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== 1500 | dependencies: 1501 | has-flag "^4.0.0" 1502 | 1503 | supports-color@^5.3.0: 1504 | version "5.5.0" 1505 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" 1506 | integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== 1507 | dependencies: 1508 | has-flag "^3.0.0" 1509 | 1510 | supports-color@^7.0.0, supports-color@^7.1.0: 1511 | version "7.2.0" 1512 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" 1513 | integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== 1514 | dependencies: 1515 | has-flag "^4.0.0" 1516 | 1517 | symbol-tree@^3.2.4: 1518 | version "3.2.4" 1519 | resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" 1520 | integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== 1521 | 1522 | terser@^5.0.0: 1523 | version "5.16.1" 1524 | resolved "https://registry.yarnpkg.com/terser/-/terser-5.16.1.tgz#5af3bc3d0f24241c7fb2024199d5c461a1075880" 1525 | integrity sha512-xvQfyfA1ayT0qdK47zskQgRZeWLoOQ8JQ6mIgRGVNwZKdQMU+5FkCBjmv4QjcrTzyZquRw2FVtlJSRUmMKQslw== 1526 | dependencies: 1527 | "@jridgewell/source-map" "^0.3.2" 1528 | acorn "^8.5.0" 1529 | commander "^2.20.0" 1530 | source-map-support "~0.5.20" 1531 | 1532 | text-table@^0.2.0: 1533 | version "0.2.0" 1534 | resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" 1535 | integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== 1536 | 1537 | to-regex-range@^5.0.1: 1538 | version "5.0.1" 1539 | resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" 1540 | integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== 1541 | dependencies: 1542 | is-number "^7.0.0" 1543 | 1544 | tough-cookie@^4.1.2: 1545 | version "4.1.2" 1546 | resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.1.2.tgz#e53e84b85f24e0b65dd526f46628db6c85f6b874" 1547 | integrity sha512-G9fqXWoYFZgTc2z8Q5zaHy/vJMjm+WV0AkAeHxVCQiEB1b+dGvWzFW6QV07cY5jQ5gRkeid2qIkzkxUnmoQZUQ== 1548 | dependencies: 1549 | psl "^1.1.33" 1550 | punycode "^2.1.1" 1551 | universalify "^0.2.0" 1552 | url-parse "^1.5.3" 1553 | 1554 | tr46@^3.0.0: 1555 | version "3.0.0" 1556 | resolved "https://registry.yarnpkg.com/tr46/-/tr46-3.0.0.tgz#555c4e297a950617e8eeddef633c87d4d9d6cbf9" 1557 | integrity sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA== 1558 | dependencies: 1559 | punycode "^2.1.1" 1560 | 1561 | type-check@^0.4.0, type-check@~0.4.0: 1562 | version "0.4.0" 1563 | resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" 1564 | integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== 1565 | dependencies: 1566 | prelude-ls "^1.2.1" 1567 | 1568 | type-check@~0.3.2: 1569 | version "0.3.2" 1570 | resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" 1571 | integrity sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg== 1572 | dependencies: 1573 | prelude-ls "~1.1.2" 1574 | 1575 | type-fest@^0.20.2: 1576 | version "0.20.2" 1577 | resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" 1578 | integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== 1579 | 1580 | universalify@^0.2.0: 1581 | version "0.2.0" 1582 | resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.2.0.tgz#6451760566fa857534745ab1dde952d1b1761be0" 1583 | integrity sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg== 1584 | 1585 | uri-js@^4.2.2: 1586 | version "4.4.1" 1587 | resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" 1588 | integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== 1589 | dependencies: 1590 | punycode "^2.1.0" 1591 | 1592 | url-parse@^1.5.3: 1593 | version "1.5.10" 1594 | resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.10.tgz#9d3c2f736c1d75dd3bd2be507dcc111f1e2ea9c1" 1595 | integrity sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ== 1596 | dependencies: 1597 | querystringify "^2.1.1" 1598 | requires-port "^1.0.0" 1599 | 1600 | w3c-xmlserializer@^4.0.0: 1601 | version "4.0.0" 1602 | resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-4.0.0.tgz#aebdc84920d806222936e3cdce408e32488a3073" 1603 | integrity sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw== 1604 | dependencies: 1605 | xml-name-validator "^4.0.0" 1606 | 1607 | webidl-conversions@^7.0.0: 1608 | version "7.0.0" 1609 | resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-7.0.0.tgz#256b4e1882be7debbf01d05f0aa2039778ea080a" 1610 | integrity sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g== 1611 | 1612 | whatwg-encoding@^2.0.0: 1613 | version "2.0.0" 1614 | resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz#e7635f597fd87020858626805a2729fa7698ac53" 1615 | integrity sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg== 1616 | dependencies: 1617 | iconv-lite "0.6.3" 1618 | 1619 | whatwg-mimetype@^3.0.0: 1620 | version "3.0.0" 1621 | resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz#5fa1a7623867ff1af6ca3dc72ad6b8a4208beba7" 1622 | integrity sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q== 1623 | 1624 | whatwg-url@^11.0.0: 1625 | version "11.0.0" 1626 | resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-11.0.0.tgz#0a849eebb5faf2119b901bb76fd795c2848d4018" 1627 | integrity sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ== 1628 | dependencies: 1629 | tr46 "^3.0.0" 1630 | webidl-conversions "^7.0.0" 1631 | 1632 | which@^2.0.1: 1633 | version "2.0.2" 1634 | resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" 1635 | integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== 1636 | dependencies: 1637 | isexe "^2.0.0" 1638 | 1639 | word-wrap@^1.2.3, word-wrap@~1.2.3: 1640 | version "1.2.3" 1641 | resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" 1642 | integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== 1643 | 1644 | workerpool@6.2.1: 1645 | version "6.2.1" 1646 | resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.2.1.tgz#46fc150c17d826b86a008e5a4508656777e9c343" 1647 | integrity sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw== 1648 | 1649 | wrap-ansi@^7.0.0: 1650 | version "7.0.0" 1651 | resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" 1652 | integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== 1653 | dependencies: 1654 | ansi-styles "^4.0.0" 1655 | string-width "^4.1.0" 1656 | strip-ansi "^6.0.0" 1657 | 1658 | wrappy@1: 1659 | version "1.0.2" 1660 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 1661 | integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== 1662 | 1663 | ws@^8.11.0: 1664 | version "8.12.0" 1665 | resolved "https://registry.yarnpkg.com/ws/-/ws-8.12.0.tgz#485074cc392689da78e1828a9ff23585e06cddd8" 1666 | integrity sha512-kU62emKIdKVeEIOIKVegvqpXMSTAMLJozpHZaJNDYqBjzlSYXQGviYwN1osDLJ9av68qHd4a2oSjd7yD4pacig== 1667 | 1668 | xml-name-validator@^4.0.0: 1669 | version "4.0.0" 1670 | resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-4.0.0.tgz#79a006e2e63149a8600f15430f0a4725d1524835" 1671 | integrity sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw== 1672 | 1673 | xmlchars@^2.2.0: 1674 | version "2.2.0" 1675 | resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" 1676 | integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== 1677 | 1678 | y18n@^5.0.5: 1679 | version "5.0.8" 1680 | resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" 1681 | integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== 1682 | 1683 | yallist@^2.1.2: 1684 | version "2.1.2" 1685 | resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" 1686 | integrity sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A== 1687 | 1688 | yargs-parser@20.2.4: 1689 | version "20.2.4" 1690 | resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54" 1691 | integrity sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA== 1692 | 1693 | yargs-parser@^20.2.2: 1694 | version "20.2.9" 1695 | resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" 1696 | integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== 1697 | 1698 | yargs-unparser@2.0.0: 1699 | version "2.0.0" 1700 | resolved "https://registry.yarnpkg.com/yargs-unparser/-/yargs-unparser-2.0.0.tgz#f131f9226911ae5d9ad38c432fe809366c2325eb" 1701 | integrity sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA== 1702 | dependencies: 1703 | camelcase "^6.0.0" 1704 | decamelize "^4.0.0" 1705 | flat "^5.0.2" 1706 | is-plain-obj "^2.1.0" 1707 | 1708 | yargs@16.2.0: 1709 | version "16.2.0" 1710 | resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" 1711 | integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== 1712 | dependencies: 1713 | cliui "^7.0.2" 1714 | escalade "^3.1.1" 1715 | get-caller-file "^2.0.5" 1716 | require-directory "^2.1.1" 1717 | string-width "^4.2.0" 1718 | y18n "^5.0.5" 1719 | yargs-parser "^20.2.2" 1720 | 1721 | yocto-queue@^0.1.0: 1722 | version "0.1.0" 1723 | resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" 1724 | integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== 1725 | --------------------------------------------------------------------------------