├── .eslintrc.json ├── .github ├── eslint.json └── workflows │ └── node.js.yml ├── .gitignore ├── LICENSE ├── README.md ├── img ├── mona-lisa.jpg ├── recenter.jpg └── snapping.png ├── package.json ├── rollup.config.js ├── src ├── brush.js ├── constant.js ├── event.js ├── index.js └── noevent.js ├── test ├── .eslintrc.json └── export-test.js └── yarn.lock /.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "eslint:recommended", 3 | "parserOptions": { 4 | "sourceType": "module", 5 | "ecmaVersion": 8 6 | }, 7 | "env": { 8 | "browser": true, 9 | "node": true 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /.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 | -------------------------------------------------------------------------------- /.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 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *.sublime-workspace 2 | .DS_Store 3 | dist/ 4 | node_modules 5 | npm-debug.log 6 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright 2010-2021 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 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # d3-brush 2 | 3 | 4 | 5 | Brushing is the interactive specification a one- or two-dimensional selected region using a pointing gesture, such as by clicking and dragging the mouse. Brushing is often used to select discrete elements, such as dots in a scatterplot or files on a desktop. It can also be used to zoom-in to a region of interest, or to select continuous regions for cross-filtering data or live histograms. 6 | 7 | ## Resources 8 | 9 | - [Documentation](https://d3js.org/d3-brush) 10 | - [Examples](https://observablehq.com/collection/@d3/d3-brush) 11 | - [Releases](https://github.com/d3/d3-brush/releases) 12 | - [Getting help](https://d3js.org/community) 13 | -------------------------------------------------------------------------------- /img/mona-lisa.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/d3/d3-brush/a8e15cc4c94e300bb2f4a1e11826b36da7def9b1/img/mona-lisa.jpg -------------------------------------------------------------------------------- /img/recenter.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/d3/d3-brush/a8e15cc4c94e300bb2f4a1e11826b36da7def9b1/img/recenter.jpg -------------------------------------------------------------------------------- /img/snapping.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/d3/d3-brush/a8e15cc4c94e300bb2f4a1e11826b36da7def9b1/img/snapping.png -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "d3-brush", 3 | "version": "3.0.0", 4 | "description": "Select a one- or two-dimensional region using the mouse or touch.", 5 | "homepage": "https://d3js.org/d3-brush/", 6 | "repository": { 7 | "type": "git", 8 | "url": "https://github.com/d3/d3-brush.git" 9 | }, 10 | "keywords": [ 11 | "d3", 12 | "d3-module", 13 | "brush", 14 | "interaction" 15 | ], 16 | "license": "ISC", 17 | "author": { 18 | "name": "Mike Bostock", 19 | "url": "https://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-brush.min.js", 29 | "unpkg": "dist/d3-brush.min.js", 30 | "exports": { 31 | "umd": "./dist/d3-brush.min.js", 32 | "default": "./src/index.js" 33 | }, 34 | "dependencies": { 35 | "d3-dispatch": "1 - 3", 36 | "d3-drag": "2 - 3", 37 | "d3-interpolate": "1 - 3", 38 | "d3-selection": "3", 39 | "d3-transition": "3" 40 | }, 41 | "devDependencies": { 42 | "eslint": "7", 43 | "mocha": "9", 44 | "rollup": "2", 45 | "rollup-plugin-terser": "7" 46 | }, 47 | "scripts": { 48 | "test": "mocha 'test/**/*-test.js' && eslint src test", 49 | "prepublishOnly": "rm -rf dist && yarn test && rollup -c && git push", 50 | "postpublish": "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 -" 51 | }, 52 | "engines": { 53 | "node": ">=12" 54 | } 55 | } 56 | -------------------------------------------------------------------------------- /rollup.config.js: -------------------------------------------------------------------------------- 1 | import {readFileSync} from "fs"; 2 | import {terser} from "rollup-plugin-terser"; 3 | import * as meta from "./package.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 | -------------------------------------------------------------------------------- /src/brush.js: -------------------------------------------------------------------------------- 1 | import {dispatch} from "d3-dispatch"; 2 | import {dragDisable, dragEnable} from "d3-drag"; 3 | import {interpolate} from "d3-interpolate"; 4 | import {pointer, select} from "d3-selection"; 5 | import {interrupt} from "d3-transition"; 6 | import constant from "./constant.js"; 7 | import BrushEvent from "./event.js"; 8 | import noevent, {nopropagation} from "./noevent.js"; 9 | 10 | var MODE_DRAG = {name: "drag"}, 11 | MODE_SPACE = {name: "space"}, 12 | MODE_HANDLE = {name: "handle"}, 13 | MODE_CENTER = {name: "center"}; 14 | 15 | const {abs, max, min} = Math; 16 | 17 | function number1(e) { 18 | return [+e[0], +e[1]]; 19 | } 20 | 21 | function number2(e) { 22 | return [number1(e[0]), number1(e[1])]; 23 | } 24 | 25 | var X = { 26 | name: "x", 27 | handles: ["w", "e"].map(type), 28 | input: function(x, e) { return x == null ? null : [[+x[0], e[0][1]], [+x[1], e[1][1]]]; }, 29 | output: function(xy) { return xy && [xy[0][0], xy[1][0]]; } 30 | }; 31 | 32 | var Y = { 33 | name: "y", 34 | handles: ["n", "s"].map(type), 35 | input: function(y, e) { return y == null ? null : [[e[0][0], +y[0]], [e[1][0], +y[1]]]; }, 36 | output: function(xy) { return xy && [xy[0][1], xy[1][1]]; } 37 | }; 38 | 39 | var XY = { 40 | name: "xy", 41 | handles: ["n", "w", "e", "s", "nw", "ne", "sw", "se"].map(type), 42 | input: function(xy) { return xy == null ? null : number2(xy); }, 43 | output: function(xy) { return xy; } 44 | }; 45 | 46 | var cursors = { 47 | overlay: "crosshair", 48 | selection: "move", 49 | n: "ns-resize", 50 | e: "ew-resize", 51 | s: "ns-resize", 52 | w: "ew-resize", 53 | nw: "nwse-resize", 54 | ne: "nesw-resize", 55 | se: "nwse-resize", 56 | sw: "nesw-resize" 57 | }; 58 | 59 | var flipX = { 60 | e: "w", 61 | w: "e", 62 | nw: "ne", 63 | ne: "nw", 64 | se: "sw", 65 | sw: "se" 66 | }; 67 | 68 | var flipY = { 69 | n: "s", 70 | s: "n", 71 | nw: "sw", 72 | ne: "se", 73 | se: "ne", 74 | sw: "nw" 75 | }; 76 | 77 | var signsX = { 78 | overlay: +1, 79 | selection: +1, 80 | n: null, 81 | e: +1, 82 | s: null, 83 | w: -1, 84 | nw: -1, 85 | ne: +1, 86 | se: +1, 87 | sw: -1 88 | }; 89 | 90 | var signsY = { 91 | overlay: +1, 92 | selection: +1, 93 | n: -1, 94 | e: null, 95 | s: +1, 96 | w: null, 97 | nw: -1, 98 | ne: -1, 99 | se: +1, 100 | sw: +1 101 | }; 102 | 103 | function type(t) { 104 | return {type: t}; 105 | } 106 | 107 | // Ignore right-click, since that should open the context menu. 108 | function defaultFilter(event) { 109 | return !event.ctrlKey && !event.button; 110 | } 111 | 112 | function defaultExtent() { 113 | var svg = this.ownerSVGElement || this; 114 | if (svg.hasAttribute("viewBox")) { 115 | svg = svg.viewBox.baseVal; 116 | return [[svg.x, svg.y], [svg.x + svg.width, svg.y + svg.height]]; 117 | } 118 | return [[0, 0], [svg.width.baseVal.value, svg.height.baseVal.value]]; 119 | } 120 | 121 | function defaultTouchable() { 122 | return navigator.maxTouchPoints || ("ontouchstart" in this); 123 | } 124 | 125 | // Like d3.local, but with the name “__brush” rather than auto-generated. 126 | function local(node) { 127 | while (!node.__brush) if (!(node = node.parentNode)) return; 128 | return node.__brush; 129 | } 130 | 131 | function empty(extent) { 132 | return extent[0][0] === extent[1][0] 133 | || extent[0][1] === extent[1][1]; 134 | } 135 | 136 | export function brushSelection(node) { 137 | var state = node.__brush; 138 | return state ? state.dim.output(state.selection) : null; 139 | } 140 | 141 | export function brushX() { 142 | return brush(X); 143 | } 144 | 145 | export function brushY() { 146 | return brush(Y); 147 | } 148 | 149 | export default function() { 150 | return brush(XY); 151 | } 152 | 153 | function brush(dim) { 154 | var extent = defaultExtent, 155 | filter = defaultFilter, 156 | touchable = defaultTouchable, 157 | keys = true, 158 | listeners = dispatch("start", "brush", "end"), 159 | handleSize = 6, 160 | touchending; 161 | 162 | function brush(group) { 163 | var overlay = group 164 | .property("__brush", initialize) 165 | .selectAll(".overlay") 166 | .data([type("overlay")]); 167 | 168 | overlay.enter().append("rect") 169 | .attr("class", "overlay") 170 | .attr("pointer-events", "all") 171 | .attr("cursor", cursors.overlay) 172 | .merge(overlay) 173 | .each(function() { 174 | var extent = local(this).extent; 175 | select(this) 176 | .attr("x", extent[0][0]) 177 | .attr("y", extent[0][1]) 178 | .attr("width", extent[1][0] - extent[0][0]) 179 | .attr("height", extent[1][1] - extent[0][1]); 180 | }); 181 | 182 | group.selectAll(".selection") 183 | .data([type("selection")]) 184 | .enter().append("rect") 185 | .attr("class", "selection") 186 | .attr("cursor", cursors.selection) 187 | .attr("fill", "#777") 188 | .attr("fill-opacity", 0.3) 189 | .attr("stroke", "#fff") 190 | .attr("shape-rendering", "crispEdges"); 191 | 192 | var handle = group.selectAll(".handle") 193 | .data(dim.handles, function(d) { return d.type; }); 194 | 195 | handle.exit().remove(); 196 | 197 | handle.enter().append("rect") 198 | .attr("class", function(d) { return "handle handle--" + d.type; }) 199 | .attr("cursor", function(d) { return cursors[d.type]; }); 200 | 201 | group 202 | .each(redraw) 203 | .attr("fill", "none") 204 | .attr("pointer-events", "all") 205 | .on("mousedown.brush", started) 206 | .filter(touchable) 207 | .on("touchstart.brush", started) 208 | .on("touchmove.brush", touchmoved) 209 | .on("touchend.brush touchcancel.brush", touchended) 210 | .style("touch-action", "none") 211 | .style("-webkit-tap-highlight-color", "rgba(0,0,0,0)"); 212 | } 213 | 214 | brush.move = function(group, selection, event) { 215 | if (group.tween) { 216 | group 217 | .on("start.brush", function(event) { emitter(this, arguments).beforestart().start(event); }) 218 | .on("interrupt.brush end.brush", function(event) { emitter(this, arguments).end(event); }) 219 | .tween("brush", function() { 220 | var that = this, 221 | state = that.__brush, 222 | emit = emitter(that, arguments), 223 | selection0 = state.selection, 224 | selection1 = dim.input(typeof selection === "function" ? selection.apply(this, arguments) : selection, state.extent), 225 | i = interpolate(selection0, selection1); 226 | 227 | function tween(t) { 228 | state.selection = t === 1 && selection1 === null ? null : i(t); 229 | redraw.call(that); 230 | emit.brush(); 231 | } 232 | 233 | return selection0 !== null && selection1 !== null ? tween : tween(1); 234 | }); 235 | } else { 236 | group 237 | .each(function() { 238 | var that = this, 239 | args = arguments, 240 | state = that.__brush, 241 | selection1 = dim.input(typeof selection === "function" ? selection.apply(that, args) : selection, state.extent), 242 | emit = emitter(that, args).beforestart(); 243 | 244 | interrupt(that); 245 | state.selection = selection1 === null ? null : selection1; 246 | redraw.call(that); 247 | emit.start(event).brush(event).end(event); 248 | }); 249 | } 250 | }; 251 | 252 | brush.clear = function(group, event) { 253 | brush.move(group, null, event); 254 | }; 255 | 256 | function redraw() { 257 | var group = select(this), 258 | selection = local(this).selection; 259 | 260 | if (selection) { 261 | group.selectAll(".selection") 262 | .style("display", null) 263 | .attr("x", selection[0][0]) 264 | .attr("y", selection[0][1]) 265 | .attr("width", selection[1][0] - selection[0][0]) 266 | .attr("height", selection[1][1] - selection[0][1]); 267 | 268 | group.selectAll(".handle") 269 | .style("display", null) 270 | .attr("x", function(d) { return d.type[d.type.length - 1] === "e" ? selection[1][0] - handleSize / 2 : selection[0][0] - handleSize / 2; }) 271 | .attr("y", function(d) { return d.type[0] === "s" ? selection[1][1] - handleSize / 2 : selection[0][1] - handleSize / 2; }) 272 | .attr("width", function(d) { return d.type === "n" || d.type === "s" ? selection[1][0] - selection[0][0] + handleSize : handleSize; }) 273 | .attr("height", function(d) { return d.type === "e" || d.type === "w" ? selection[1][1] - selection[0][1] + handleSize : handleSize; }); 274 | } 275 | 276 | else { 277 | group.selectAll(".selection,.handle") 278 | .style("display", "none") 279 | .attr("x", null) 280 | .attr("y", null) 281 | .attr("width", null) 282 | .attr("height", null); 283 | } 284 | } 285 | 286 | function emitter(that, args, clean) { 287 | var emit = that.__brush.emitter; 288 | return emit && (!clean || !emit.clean) ? emit : new Emitter(that, args, clean); 289 | } 290 | 291 | function Emitter(that, args, clean) { 292 | this.that = that; 293 | this.args = args; 294 | this.state = that.__brush; 295 | this.active = 0; 296 | this.clean = clean; 297 | } 298 | 299 | Emitter.prototype = { 300 | beforestart: function() { 301 | if (++this.active === 1) this.state.emitter = this, this.starting = true; 302 | return this; 303 | }, 304 | start: function(event, mode) { 305 | if (this.starting) this.starting = false, this.emit("start", event, mode); 306 | else this.emit("brush", event); 307 | return this; 308 | }, 309 | brush: function(event, mode) { 310 | this.emit("brush", event, mode); 311 | return this; 312 | }, 313 | end: function(event, mode) { 314 | if (--this.active === 0) delete this.state.emitter, this.emit("end", event, mode); 315 | return this; 316 | }, 317 | emit: function(type, event, mode) { 318 | var d = select(this.that).datum(); 319 | listeners.call( 320 | type, 321 | this.that, 322 | new BrushEvent(type, { 323 | sourceEvent: event, 324 | target: brush, 325 | selection: dim.output(this.state.selection), 326 | mode, 327 | dispatch: listeners 328 | }), 329 | d 330 | ); 331 | } 332 | }; 333 | 334 | function started(event) { 335 | if (touchending && !event.touches) return; 336 | if (!filter.apply(this, arguments)) return; 337 | 338 | var that = this, 339 | type = event.target.__data__.type, 340 | mode = (keys && event.metaKey ? type = "overlay" : type) === "selection" ? MODE_DRAG : (keys && event.altKey ? MODE_CENTER : MODE_HANDLE), 341 | signX = dim === Y ? null : signsX[type], 342 | signY = dim === X ? null : signsY[type], 343 | state = local(that), 344 | extent = state.extent, 345 | selection = state.selection, 346 | W = extent[0][0], w0, w1, 347 | N = extent[0][1], n0, n1, 348 | E = extent[1][0], e0, e1, 349 | S = extent[1][1], s0, s1, 350 | dx = 0, 351 | dy = 0, 352 | moving, 353 | shifting = signX && signY && keys && event.shiftKey, 354 | lockX, 355 | lockY, 356 | points = Array.from(event.touches || [event], t => { 357 | const i = t.identifier; 358 | t = pointer(t, that); 359 | t.point0 = t.slice(); 360 | t.identifier = i; 361 | return t; 362 | }); 363 | 364 | interrupt(that); 365 | var emit = emitter(that, arguments, true).beforestart(); 366 | 367 | if (type === "overlay") { 368 | if (selection) moving = true; 369 | const pts = [points[0], points[1] || points[0]]; 370 | state.selection = selection = [[ 371 | w0 = dim === Y ? W : min(pts[0][0], pts[1][0]), 372 | n0 = dim === X ? N : min(pts[0][1], pts[1][1]) 373 | ], [ 374 | e0 = dim === Y ? E : max(pts[0][0], pts[1][0]), 375 | s0 = dim === X ? S : max(pts[0][1], pts[1][1]) 376 | ]]; 377 | if (points.length > 1) move(event); 378 | } else { 379 | w0 = selection[0][0]; 380 | n0 = selection[0][1]; 381 | e0 = selection[1][0]; 382 | s0 = selection[1][1]; 383 | } 384 | 385 | w1 = w0; 386 | n1 = n0; 387 | e1 = e0; 388 | s1 = s0; 389 | 390 | var group = select(that) 391 | .attr("pointer-events", "none"); 392 | 393 | var overlay = group.selectAll(".overlay") 394 | .attr("cursor", cursors[type]); 395 | 396 | if (event.touches) { 397 | emit.moved = moved; 398 | emit.ended = ended; 399 | } else { 400 | var view = select(event.view) 401 | .on("mousemove.brush", moved, true) 402 | .on("mouseup.brush", ended, true); 403 | if (keys) view 404 | .on("keydown.brush", keydowned, true) 405 | .on("keyup.brush", keyupped, true) 406 | 407 | dragDisable(event.view); 408 | } 409 | 410 | redraw.call(that); 411 | emit.start(event, mode.name); 412 | 413 | function moved(event) { 414 | for (const p of event.changedTouches || [event]) { 415 | for (const d of points) 416 | if (d.identifier === p.identifier) d.cur = pointer(p, that); 417 | } 418 | if (shifting && !lockX && !lockY && points.length === 1) { 419 | const point = points[0]; 420 | if (abs(point.cur[0] - point[0]) > abs(point.cur[1] - point[1])) 421 | lockY = true; 422 | else 423 | lockX = true; 424 | } 425 | for (const point of points) 426 | if (point.cur) point[0] = point.cur[0], point[1] = point.cur[1]; 427 | moving = true; 428 | noevent(event); 429 | move(event); 430 | } 431 | 432 | function move(event) { 433 | const point = points[0], point0 = point.point0; 434 | var t; 435 | 436 | dx = point[0] - point0[0]; 437 | dy = point[1] - point0[1]; 438 | 439 | switch (mode) { 440 | case MODE_SPACE: 441 | case MODE_DRAG: { 442 | if (signX) dx = max(W - w0, min(E - e0, dx)), w1 = w0 + dx, e1 = e0 + dx; 443 | if (signY) dy = max(N - n0, min(S - s0, dy)), n1 = n0 + dy, s1 = s0 + dy; 444 | break; 445 | } 446 | case MODE_HANDLE: { 447 | if (points[1]) { 448 | if (signX) w1 = max(W, min(E, points[0][0])), e1 = max(W, min(E, points[1][0])), signX = 1; 449 | if (signY) n1 = max(N, min(S, points[0][1])), s1 = max(N, min(S, points[1][1])), signY = 1; 450 | } else { 451 | if (signX < 0) dx = max(W - w0, min(E - w0, dx)), w1 = w0 + dx, e1 = e0; 452 | else if (signX > 0) dx = max(W - e0, min(E - e0, dx)), w1 = w0, e1 = e0 + dx; 453 | if (signY < 0) dy = max(N - n0, min(S - n0, dy)), n1 = n0 + dy, s1 = s0; 454 | else if (signY > 0) dy = max(N - s0, min(S - s0, dy)), n1 = n0, s1 = s0 + dy; 455 | } 456 | break; 457 | } 458 | case MODE_CENTER: { 459 | if (signX) w1 = max(W, min(E, w0 - dx * signX)), e1 = max(W, min(E, e0 + dx * signX)); 460 | if (signY) n1 = max(N, min(S, n0 - dy * signY)), s1 = max(N, min(S, s0 + dy * signY)); 461 | break; 462 | } 463 | } 464 | 465 | if (e1 < w1) { 466 | signX *= -1; 467 | t = w0, w0 = e0, e0 = t; 468 | t = w1, w1 = e1, e1 = t; 469 | if (type in flipX) overlay.attr("cursor", cursors[type = flipX[type]]); 470 | } 471 | 472 | if (s1 < n1) { 473 | signY *= -1; 474 | t = n0, n0 = s0, s0 = t; 475 | t = n1, n1 = s1, s1 = t; 476 | if (type in flipY) overlay.attr("cursor", cursors[type = flipY[type]]); 477 | } 478 | 479 | if (state.selection) selection = state.selection; // May be set by brush.move! 480 | if (lockX) w1 = selection[0][0], e1 = selection[1][0]; 481 | if (lockY) n1 = selection[0][1], s1 = selection[1][1]; 482 | 483 | if (selection[0][0] !== w1 484 | || selection[0][1] !== n1 485 | || selection[1][0] !== e1 486 | || selection[1][1] !== s1) { 487 | state.selection = [[w1, n1], [e1, s1]]; 488 | redraw.call(that); 489 | emit.brush(event, mode.name); 490 | } 491 | } 492 | 493 | function ended(event) { 494 | nopropagation(event); 495 | if (event.touches) { 496 | if (event.touches.length) return; 497 | if (touchending) clearTimeout(touchending); 498 | touchending = setTimeout(function() { touchending = null; }, 500); // Ghost clicks are delayed! 499 | } else { 500 | dragEnable(event.view, moving); 501 | view.on("keydown.brush keyup.brush mousemove.brush mouseup.brush", null); 502 | } 503 | group.attr("pointer-events", "all"); 504 | overlay.attr("cursor", cursors.overlay); 505 | if (state.selection) selection = state.selection; // May be set by brush.move (on start)! 506 | if (empty(selection)) state.selection = null, redraw.call(that); 507 | emit.end(event, mode.name); 508 | } 509 | 510 | function keydowned(event) { 511 | switch (event.keyCode) { 512 | case 16: { // SHIFT 513 | shifting = signX && signY; 514 | break; 515 | } 516 | case 18: { // ALT 517 | if (mode === MODE_HANDLE) { 518 | if (signX) e0 = e1 - dx * signX, w0 = w1 + dx * signX; 519 | if (signY) s0 = s1 - dy * signY, n0 = n1 + dy * signY; 520 | mode = MODE_CENTER; 521 | move(event); 522 | } 523 | break; 524 | } 525 | case 32: { // SPACE; takes priority over ALT 526 | if (mode === MODE_HANDLE || mode === MODE_CENTER) { 527 | if (signX < 0) e0 = e1 - dx; else if (signX > 0) w0 = w1 - dx; 528 | if (signY < 0) s0 = s1 - dy; else if (signY > 0) n0 = n1 - dy; 529 | mode = MODE_SPACE; 530 | overlay.attr("cursor", cursors.selection); 531 | move(event); 532 | } 533 | break; 534 | } 535 | default: return; 536 | } 537 | noevent(event); 538 | } 539 | 540 | function keyupped(event) { 541 | switch (event.keyCode) { 542 | case 16: { // SHIFT 543 | if (shifting) { 544 | lockX = lockY = shifting = false; 545 | move(event); 546 | } 547 | break; 548 | } 549 | case 18: { // ALT 550 | if (mode === MODE_CENTER) { 551 | if (signX < 0) e0 = e1; else if (signX > 0) w0 = w1; 552 | if (signY < 0) s0 = s1; else if (signY > 0) n0 = n1; 553 | mode = MODE_HANDLE; 554 | move(event); 555 | } 556 | break; 557 | } 558 | case 32: { // SPACE 559 | if (mode === MODE_SPACE) { 560 | if (event.altKey) { 561 | if (signX) e0 = e1 - dx * signX, w0 = w1 + dx * signX; 562 | if (signY) s0 = s1 - dy * signY, n0 = n1 + dy * signY; 563 | mode = MODE_CENTER; 564 | } else { 565 | if (signX < 0) e0 = e1; else if (signX > 0) w0 = w1; 566 | if (signY < 0) s0 = s1; else if (signY > 0) n0 = n1; 567 | mode = MODE_HANDLE; 568 | } 569 | overlay.attr("cursor", cursors[type]); 570 | move(event); 571 | } 572 | break; 573 | } 574 | default: return; 575 | } 576 | noevent(event); 577 | } 578 | } 579 | 580 | function touchmoved(event) { 581 | emitter(this, arguments).moved(event); 582 | } 583 | 584 | function touchended(event) { 585 | emitter(this, arguments).ended(event); 586 | } 587 | 588 | function initialize() { 589 | var state = this.__brush || {selection: null}; 590 | state.extent = number2(extent.apply(this, arguments)); 591 | state.dim = dim; 592 | return state; 593 | } 594 | 595 | brush.extent = function(_) { 596 | return arguments.length ? (extent = typeof _ === "function" ? _ : constant(number2(_)), brush) : extent; 597 | }; 598 | 599 | brush.filter = function(_) { 600 | return arguments.length ? (filter = typeof _ === "function" ? _ : constant(!!_), brush) : filter; 601 | }; 602 | 603 | brush.touchable = function(_) { 604 | return arguments.length ? (touchable = typeof _ === "function" ? _ : constant(!!_), brush) : touchable; 605 | }; 606 | 607 | brush.handleSize = function(_) { 608 | return arguments.length ? (handleSize = +_, brush) : handleSize; 609 | }; 610 | 611 | brush.keyModifiers = function(_) { 612 | return arguments.length ? (keys = !!_, brush) : keys; 613 | }; 614 | 615 | brush.on = function() { 616 | var value = listeners.on.apply(listeners, arguments); 617 | return value === listeners ? brush : value; 618 | }; 619 | 620 | return brush; 621 | } 622 | -------------------------------------------------------------------------------- /src/constant.js: -------------------------------------------------------------------------------- 1 | export default x => () => x; 2 | -------------------------------------------------------------------------------- /src/event.js: -------------------------------------------------------------------------------- 1 | export default function BrushEvent(type, { 2 | sourceEvent, 3 | target, 4 | selection, 5 | mode, 6 | dispatch 7 | }) { 8 | Object.defineProperties(this, { 9 | type: {value: type, enumerable: true, configurable: true}, 10 | sourceEvent: {value: sourceEvent, enumerable: true, configurable: true}, 11 | target: {value: target, enumerable: true, configurable: true}, 12 | selection: {value: selection, enumerable: true, configurable: true}, 13 | mode: {value: mode, enumerable: true, configurable: true}, 14 | _: {value: dispatch} 15 | }); 16 | } 17 | -------------------------------------------------------------------------------- /src/index.js: -------------------------------------------------------------------------------- 1 | export { 2 | default as brush, 3 | brushX, 4 | brushY, 5 | brushSelection 6 | } from "./brush.js"; 7 | -------------------------------------------------------------------------------- /src/noevent.js: -------------------------------------------------------------------------------- 1 | export function nopropagation(event) { 2 | event.stopImmediatePropagation(); 3 | } 4 | 5 | export default function(event) { 6 | event.preventDefault(); 7 | event.stopImmediatePropagation(); 8 | } 9 | -------------------------------------------------------------------------------- /test/.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "eslint:recommended", 3 | "parserOptions": { 4 | "sourceType": "module", 5 | "ecmaVersion": 8 6 | }, 7 | "env": { 8 | "browser": true, 9 | "node": true, 10 | "mocha": true 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /test/export-test.js: -------------------------------------------------------------------------------- 1 | import assert from "assert"; 2 | import * as d3 from "../src/index.js"; 3 | 4 | it("brush methods", () => { 5 | assert.deepStrictEqual(Object.keys(d3), [ 6 | "brush", "brushSelection", "brushX", "brushY" 7 | ]); 8 | }); 9 | -------------------------------------------------------------------------------- /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.12.11": 6 | version "7.12.11" 7 | resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.11.tgz#f4ad435aa263db935b8f10f2c552d23fb716a63f" 8 | integrity sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw== 9 | dependencies: 10 | "@babel/highlight" "^7.10.4" 11 | 12 | "@babel/code-frame@^7.10.4": 13 | version "7.14.5" 14 | resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.14.5.tgz#23b08d740e83f49c5e59945fbf1b43e80bbf4edb" 15 | integrity sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw== 16 | dependencies: 17 | "@babel/highlight" "^7.14.5" 18 | 19 | "@babel/helper-validator-identifier@^7.14.5": 20 | version "7.14.5" 21 | resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz#d0f0e277c512e0c938277faa85a3968c9a44c0e8" 22 | integrity sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg== 23 | 24 | "@babel/highlight@^7.10.4", "@babel/highlight@^7.14.5": 25 | version "7.14.5" 26 | resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.14.5.tgz#6861a52f03966405001f6aa534a01a24d99e8cd9" 27 | integrity sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg== 28 | dependencies: 29 | "@babel/helper-validator-identifier" "^7.14.5" 30 | chalk "^2.0.0" 31 | js-tokens "^4.0.0" 32 | 33 | "@eslint/eslintrc@^0.4.2": 34 | version "0.4.2" 35 | resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.4.2.tgz#f63d0ef06f5c0c57d76c4ab5f63d3835c51b0179" 36 | integrity sha512-8nmGq/4ycLpIwzvhI4tNDmQztZ8sp+hI7cyG8i1nQDhkAbRzHpXPidRAHlNvCZQpJTKw5ItIpMw9RSToGF00mg== 37 | dependencies: 38 | ajv "^6.12.4" 39 | debug "^4.1.1" 40 | espree "^7.3.0" 41 | globals "^13.9.0" 42 | ignore "^4.0.6" 43 | import-fresh "^3.2.1" 44 | js-yaml "^3.13.1" 45 | minimatch "^3.0.4" 46 | strip-json-comments "^3.1.1" 47 | 48 | "@types/node@*": 49 | version "15.12.2" 50 | resolved "https://registry.yarnpkg.com/@types/node/-/node-15.12.2.tgz#1f2b42c4be7156ff4a6f914b2fb03d05fa84e38d" 51 | integrity sha512-zjQ69G564OCIWIOHSXyQEEDpdpGl+G348RAKY0XXy9Z5kU9Vzv1GMNnkar/ZJ8dzXB3COzD9Mo9NtRZ4xfgUww== 52 | 53 | "@ungap/promise-all-settled@1.1.2": 54 | version "1.1.2" 55 | resolved "https://registry.yarnpkg.com/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz#aa58042711d6e3275dd37dc597e5d31e8c290a44" 56 | integrity sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q== 57 | 58 | acorn-jsx@^5.3.1: 59 | version "5.3.1" 60 | resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.1.tgz#fc8661e11b7ac1539c47dbfea2e72b3af34d267b" 61 | integrity sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng== 62 | 63 | acorn@^7.4.0: 64 | version "7.4.1" 65 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" 66 | integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== 67 | 68 | ajv@^6.10.0, ajv@^6.12.4: 69 | version "6.12.6" 70 | resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" 71 | integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== 72 | dependencies: 73 | fast-deep-equal "^3.1.1" 74 | fast-json-stable-stringify "^2.0.0" 75 | json-schema-traverse "^0.4.1" 76 | uri-js "^4.2.2" 77 | 78 | ajv@^8.0.1: 79 | version "8.6.0" 80 | resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.6.0.tgz#60cc45d9c46a477d80d92c48076d972c342e5720" 81 | integrity sha512-cnUG4NSBiM4YFBxgZIj/In3/6KX+rQ2l2YPRVcvAMQGWEPKuXoPIhxzwqh31jA3IPbI4qEOp/5ILI4ynioXsGQ== 82 | dependencies: 83 | fast-deep-equal "^3.1.1" 84 | json-schema-traverse "^1.0.0" 85 | require-from-string "^2.0.2" 86 | uri-js "^4.2.2" 87 | 88 | ansi-colors@4.1.1, ansi-colors@^4.1.1: 89 | version "4.1.1" 90 | resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" 91 | integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== 92 | 93 | ansi-regex@^3.0.0: 94 | version "3.0.0" 95 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" 96 | integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= 97 | 98 | ansi-regex@^5.0.0: 99 | version "5.0.0" 100 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" 101 | integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== 102 | 103 | ansi-styles@^3.2.1: 104 | version "3.2.1" 105 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" 106 | integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== 107 | dependencies: 108 | color-convert "^1.9.0" 109 | 110 | ansi-styles@^4.0.0, ansi-styles@^4.1.0: 111 | version "4.3.0" 112 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" 113 | integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== 114 | dependencies: 115 | color-convert "^2.0.1" 116 | 117 | anymatch@~3.1.1: 118 | version "3.1.2" 119 | resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" 120 | integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== 121 | dependencies: 122 | normalize-path "^3.0.0" 123 | picomatch "^2.0.4" 124 | 125 | argparse@^1.0.7: 126 | version "1.0.10" 127 | resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" 128 | integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== 129 | dependencies: 130 | sprintf-js "~1.0.2" 131 | 132 | argparse@^2.0.1: 133 | version "2.0.1" 134 | resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" 135 | integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== 136 | 137 | astral-regex@^2.0.0: 138 | version "2.0.0" 139 | resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" 140 | integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== 141 | 142 | balanced-match@^1.0.0: 143 | version "1.0.2" 144 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" 145 | integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== 146 | 147 | binary-extensions@^2.0.0: 148 | version "2.2.0" 149 | resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" 150 | integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== 151 | 152 | brace-expansion@^1.1.7: 153 | version "1.1.11" 154 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" 155 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== 156 | dependencies: 157 | balanced-match "^1.0.0" 158 | concat-map "0.0.1" 159 | 160 | braces@~3.0.2: 161 | version "3.0.2" 162 | resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" 163 | integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== 164 | dependencies: 165 | fill-range "^7.0.1" 166 | 167 | browser-stdout@1.3.1: 168 | version "1.3.1" 169 | resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" 170 | integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== 171 | 172 | buffer-from@^1.0.0: 173 | version "1.1.1" 174 | resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" 175 | integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== 176 | 177 | callsites@^3.0.0: 178 | version "3.1.0" 179 | resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" 180 | integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== 181 | 182 | camelcase@^6.0.0: 183 | version "6.2.0" 184 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.2.0.tgz#924af881c9d525ac9d87f40d964e5cea982a1809" 185 | integrity sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg== 186 | 187 | chalk@^2.0.0: 188 | version "2.4.2" 189 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" 190 | integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== 191 | dependencies: 192 | ansi-styles "^3.2.1" 193 | escape-string-regexp "^1.0.5" 194 | supports-color "^5.3.0" 195 | 196 | chalk@^4.0.0, chalk@^4.1.0: 197 | version "4.1.1" 198 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.1.tgz#c80b3fab28bf6371e6863325eee67e618b77e6ad" 199 | integrity sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg== 200 | dependencies: 201 | ansi-styles "^4.1.0" 202 | supports-color "^7.1.0" 203 | 204 | chokidar@3.5.1: 205 | version "3.5.1" 206 | resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.1.tgz#ee9ce7bbebd2b79f49f304799d5468e31e14e68a" 207 | integrity sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw== 208 | dependencies: 209 | anymatch "~3.1.1" 210 | braces "~3.0.2" 211 | glob-parent "~5.1.0" 212 | is-binary-path "~2.1.0" 213 | is-glob "~4.0.1" 214 | normalize-path "~3.0.0" 215 | readdirp "~3.5.0" 216 | optionalDependencies: 217 | fsevents "~2.3.1" 218 | 219 | cliui@^7.0.2: 220 | version "7.0.4" 221 | resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" 222 | integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== 223 | dependencies: 224 | string-width "^4.2.0" 225 | strip-ansi "^6.0.0" 226 | wrap-ansi "^7.0.0" 227 | 228 | color-convert@^1.9.0: 229 | version "1.9.3" 230 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" 231 | integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== 232 | dependencies: 233 | color-name "1.1.3" 234 | 235 | color-convert@^2.0.1: 236 | version "2.0.1" 237 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" 238 | integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== 239 | dependencies: 240 | color-name "~1.1.4" 241 | 242 | color-name@1.1.3: 243 | version "1.1.3" 244 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" 245 | integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= 246 | 247 | color-name@~1.1.4: 248 | version "1.1.4" 249 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" 250 | integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== 251 | 252 | commander@^2.20.0: 253 | version "2.20.3" 254 | resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" 255 | integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== 256 | 257 | concat-map@0.0.1: 258 | version "0.0.1" 259 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 260 | integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= 261 | 262 | cross-spawn@^7.0.2: 263 | version "7.0.3" 264 | resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" 265 | integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== 266 | dependencies: 267 | path-key "^3.1.0" 268 | shebang-command "^2.0.0" 269 | which "^2.0.1" 270 | 271 | "d3-color@1 - 3": 272 | version "3.0.1" 273 | resolved "https://registry.yarnpkg.com/d3-color/-/d3-color-3.0.1.tgz#03316e595955d1fcd39d9f3610ad41bb90194d0a" 274 | integrity sha512-6/SlHkDOBLyQSJ1j1Ghs82OIUXpKWlR0hCsw0XrLSQhuUPuCSmLQ1QPH98vpnQxMUQM2/gfAkUEWsupVpd9JGw== 275 | 276 | "d3-dispatch@1 - 3": 277 | version "3.0.1" 278 | resolved "https://registry.yarnpkg.com/d3-dispatch/-/d3-dispatch-3.0.1.tgz#5fc75284e9c2375c36c839411a0cf550cbfc4d5e" 279 | integrity sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg== 280 | 281 | "d3-drag@2 - 3": 282 | version "3.0.0" 283 | resolved "https://registry.yarnpkg.com/d3-drag/-/d3-drag-3.0.0.tgz#994aae9cd23c719f53b5e10e3a0a6108c69607ba" 284 | integrity sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg== 285 | dependencies: 286 | d3-dispatch "1 - 3" 287 | d3-selection "3" 288 | 289 | "d3-ease@1 - 3": 290 | version "3.0.1" 291 | resolved "https://registry.yarnpkg.com/d3-ease/-/d3-ease-3.0.1.tgz#9658ac38a2140d59d346160f1f6c30fda0bd12f4" 292 | integrity sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w== 293 | 294 | "d3-interpolate@1 - 3": 295 | version "3.0.1" 296 | resolved "https://registry.yarnpkg.com/d3-interpolate/-/d3-interpolate-3.0.1.tgz#3c47aa5b32c5b3dfb56ef3fd4342078a632b400d" 297 | integrity sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g== 298 | dependencies: 299 | d3-color "1 - 3" 300 | 301 | d3-selection@3: 302 | version "3.0.0" 303 | resolved "https://registry.yarnpkg.com/d3-selection/-/d3-selection-3.0.0.tgz#c25338207efa72cc5b9bd1458a1a41901f1e1b31" 304 | integrity sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ== 305 | 306 | "d3-timer@1 - 3": 307 | version "3.0.1" 308 | resolved "https://registry.yarnpkg.com/d3-timer/-/d3-timer-3.0.1.tgz#6284d2a2708285b1abb7e201eda4380af35e63b0" 309 | integrity sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA== 310 | 311 | d3-transition@3: 312 | version "3.0.1" 313 | resolved "https://registry.yarnpkg.com/d3-transition/-/d3-transition-3.0.1.tgz#6869fdde1448868077fdd5989200cb61b2a1645f" 314 | integrity sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w== 315 | dependencies: 316 | d3-color "1 - 3" 317 | d3-dispatch "1 - 3" 318 | d3-ease "1 - 3" 319 | d3-interpolate "1 - 3" 320 | d3-timer "1 - 3" 321 | 322 | debug@4.3.1, debug@^4.0.1, debug@^4.1.1: 323 | version "4.3.1" 324 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee" 325 | integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ== 326 | dependencies: 327 | ms "2.1.2" 328 | 329 | decamelize@^4.0.0: 330 | version "4.0.0" 331 | resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-4.0.0.tgz#aa472d7bf660eb15f3494efd531cab7f2a709837" 332 | integrity sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ== 333 | 334 | deep-is@^0.1.3: 335 | version "0.1.3" 336 | resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" 337 | integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= 338 | 339 | diff@5.0.0: 340 | version "5.0.0" 341 | resolved "https://registry.yarnpkg.com/diff/-/diff-5.0.0.tgz#7ed6ad76d859d030787ec35855f5b1daf31d852b" 342 | integrity sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w== 343 | 344 | doctrine@^3.0.0: 345 | version "3.0.0" 346 | resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" 347 | integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== 348 | dependencies: 349 | esutils "^2.0.2" 350 | 351 | emoji-regex@^8.0.0: 352 | version "8.0.0" 353 | resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" 354 | integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== 355 | 356 | enquirer@^2.3.5: 357 | version "2.3.6" 358 | resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" 359 | integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== 360 | dependencies: 361 | ansi-colors "^4.1.1" 362 | 363 | escalade@^3.1.1: 364 | version "3.1.1" 365 | resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" 366 | integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== 367 | 368 | escape-string-regexp@4.0.0, escape-string-regexp@^4.0.0: 369 | version "4.0.0" 370 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" 371 | integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== 372 | 373 | escape-string-regexp@^1.0.5: 374 | version "1.0.5" 375 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" 376 | integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= 377 | 378 | eslint-scope@^5.1.1: 379 | version "5.1.1" 380 | resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" 381 | integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== 382 | dependencies: 383 | esrecurse "^4.3.0" 384 | estraverse "^4.1.1" 385 | 386 | eslint-utils@^2.1.0: 387 | version "2.1.0" 388 | resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27" 389 | integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg== 390 | dependencies: 391 | eslint-visitor-keys "^1.1.0" 392 | 393 | eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.3.0: 394 | version "1.3.0" 395 | resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" 396 | integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== 397 | 398 | eslint-visitor-keys@^2.0.0: 399 | version "2.1.0" 400 | resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" 401 | integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== 402 | 403 | eslint@7: 404 | version "7.28.0" 405 | resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.28.0.tgz#435aa17a0b82c13bb2be9d51408b617e49c1e820" 406 | integrity sha512-UMfH0VSjP0G4p3EWirscJEQ/cHqnT/iuH6oNZOB94nBjWbMnhGEPxsZm1eyIW0C/9jLI0Fow4W5DXLjEI7mn1g== 407 | dependencies: 408 | "@babel/code-frame" "7.12.11" 409 | "@eslint/eslintrc" "^0.4.2" 410 | ajv "^6.10.0" 411 | chalk "^4.0.0" 412 | cross-spawn "^7.0.2" 413 | debug "^4.0.1" 414 | doctrine "^3.0.0" 415 | enquirer "^2.3.5" 416 | escape-string-regexp "^4.0.0" 417 | eslint-scope "^5.1.1" 418 | eslint-utils "^2.1.0" 419 | eslint-visitor-keys "^2.0.0" 420 | espree "^7.3.1" 421 | esquery "^1.4.0" 422 | esutils "^2.0.2" 423 | fast-deep-equal "^3.1.3" 424 | file-entry-cache "^6.0.1" 425 | functional-red-black-tree "^1.0.1" 426 | glob-parent "^5.1.2" 427 | globals "^13.6.0" 428 | ignore "^4.0.6" 429 | import-fresh "^3.0.0" 430 | imurmurhash "^0.1.4" 431 | is-glob "^4.0.0" 432 | js-yaml "^3.13.1" 433 | json-stable-stringify-without-jsonify "^1.0.1" 434 | levn "^0.4.1" 435 | lodash.merge "^4.6.2" 436 | minimatch "^3.0.4" 437 | natural-compare "^1.4.0" 438 | optionator "^0.9.1" 439 | progress "^2.0.0" 440 | regexpp "^3.1.0" 441 | semver "^7.2.1" 442 | strip-ansi "^6.0.0" 443 | strip-json-comments "^3.1.0" 444 | table "^6.0.9" 445 | text-table "^0.2.0" 446 | v8-compile-cache "^2.0.3" 447 | 448 | espree@^7.3.0, espree@^7.3.1: 449 | version "7.3.1" 450 | resolved "https://registry.yarnpkg.com/espree/-/espree-7.3.1.tgz#f2df330b752c6f55019f8bd89b7660039c1bbbb6" 451 | integrity sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g== 452 | dependencies: 453 | acorn "^7.4.0" 454 | acorn-jsx "^5.3.1" 455 | eslint-visitor-keys "^1.3.0" 456 | 457 | esprima@^4.0.0: 458 | version "4.0.1" 459 | resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" 460 | integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== 461 | 462 | esquery@^1.4.0: 463 | version "1.4.0" 464 | resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5" 465 | integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== 466 | dependencies: 467 | estraverse "^5.1.0" 468 | 469 | esrecurse@^4.3.0: 470 | version "4.3.0" 471 | resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" 472 | integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== 473 | dependencies: 474 | estraverse "^5.2.0" 475 | 476 | estraverse@^4.1.1: 477 | version "4.3.0" 478 | resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" 479 | integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== 480 | 481 | estraverse@^5.1.0, estraverse@^5.2.0: 482 | version "5.2.0" 483 | resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.2.0.tgz#307df42547e6cc7324d3cf03c155d5cdb8c53880" 484 | integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ== 485 | 486 | esutils@^2.0.2: 487 | version "2.0.3" 488 | resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" 489 | integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== 490 | 491 | fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: 492 | version "3.1.3" 493 | resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" 494 | integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== 495 | 496 | fast-json-stable-stringify@^2.0.0: 497 | version "2.1.0" 498 | resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" 499 | integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== 500 | 501 | fast-levenshtein@^2.0.6: 502 | version "2.0.6" 503 | resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" 504 | integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= 505 | 506 | file-entry-cache@^6.0.1: 507 | version "6.0.1" 508 | resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" 509 | integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== 510 | dependencies: 511 | flat-cache "^3.0.4" 512 | 513 | fill-range@^7.0.1: 514 | version "7.0.1" 515 | resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" 516 | integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== 517 | dependencies: 518 | to-regex-range "^5.0.1" 519 | 520 | find-up@5.0.0: 521 | version "5.0.0" 522 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" 523 | integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== 524 | dependencies: 525 | locate-path "^6.0.0" 526 | path-exists "^4.0.0" 527 | 528 | flat-cache@^3.0.4: 529 | version "3.0.4" 530 | resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" 531 | integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== 532 | dependencies: 533 | flatted "^3.1.0" 534 | rimraf "^3.0.2" 535 | 536 | flat@^5.0.2: 537 | version "5.0.2" 538 | resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241" 539 | integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== 540 | 541 | flatted@^3.1.0: 542 | version "3.1.1" 543 | resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.1.1.tgz#c4b489e80096d9df1dfc97c79871aea7c617c469" 544 | integrity sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA== 545 | 546 | fs.realpath@^1.0.0: 547 | version "1.0.0" 548 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 549 | integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= 550 | 551 | fsevents@~2.3.1: 552 | version "2.3.2" 553 | resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" 554 | integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== 555 | 556 | functional-red-black-tree@^1.0.1: 557 | version "1.0.1" 558 | resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" 559 | integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= 560 | 561 | get-caller-file@^2.0.5: 562 | version "2.0.5" 563 | resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" 564 | integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== 565 | 566 | glob-parent@^5.1.2, glob-parent@~5.1.0: 567 | version "5.1.2" 568 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" 569 | integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== 570 | dependencies: 571 | is-glob "^4.0.1" 572 | 573 | glob@7.1.7, glob@^7.1.3: 574 | version "7.1.7" 575 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.7.tgz#3b193e9233f01d42d0b3f78294bbeeb418f94a90" 576 | integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ== 577 | dependencies: 578 | fs.realpath "^1.0.0" 579 | inflight "^1.0.4" 580 | inherits "2" 581 | minimatch "^3.0.4" 582 | once "^1.3.0" 583 | path-is-absolute "^1.0.0" 584 | 585 | globals@^13.6.0, globals@^13.9.0: 586 | version "13.9.0" 587 | resolved "https://registry.yarnpkg.com/globals/-/globals-13.9.0.tgz#4bf2bf635b334a173fb1daf7c5e6b218ecdc06cb" 588 | integrity sha512-74/FduwI/JaIrr1H8e71UbDE+5x7pIPs1C2rrwC52SszOo043CsWOZEMW7o2Y58xwm9b+0RBKDxY5n2sUpEFxA== 589 | dependencies: 590 | type-fest "^0.20.2" 591 | 592 | growl@1.10.5: 593 | version "1.10.5" 594 | resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.5.tgz#f2735dc2283674fa67478b10181059355c369e5e" 595 | integrity sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA== 596 | 597 | has-flag@^3.0.0: 598 | version "3.0.0" 599 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" 600 | integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= 601 | 602 | has-flag@^4.0.0: 603 | version "4.0.0" 604 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" 605 | integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== 606 | 607 | he@1.2.0: 608 | version "1.2.0" 609 | resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" 610 | integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== 611 | 612 | ignore@^4.0.6: 613 | version "4.0.6" 614 | resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" 615 | integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== 616 | 617 | import-fresh@^3.0.0, import-fresh@^3.2.1: 618 | version "3.3.0" 619 | resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" 620 | integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== 621 | dependencies: 622 | parent-module "^1.0.0" 623 | resolve-from "^4.0.0" 624 | 625 | imurmurhash@^0.1.4: 626 | version "0.1.4" 627 | resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" 628 | integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= 629 | 630 | inflight@^1.0.4: 631 | version "1.0.6" 632 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 633 | integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= 634 | dependencies: 635 | once "^1.3.0" 636 | wrappy "1" 637 | 638 | inherits@2: 639 | version "2.0.4" 640 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" 641 | integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== 642 | 643 | is-binary-path@~2.1.0: 644 | version "2.1.0" 645 | resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" 646 | integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== 647 | dependencies: 648 | binary-extensions "^2.0.0" 649 | 650 | is-extglob@^2.1.1: 651 | version "2.1.1" 652 | resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" 653 | integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= 654 | 655 | is-fullwidth-code-point@^2.0.0: 656 | version "2.0.0" 657 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" 658 | integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= 659 | 660 | is-fullwidth-code-point@^3.0.0: 661 | version "3.0.0" 662 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" 663 | integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== 664 | 665 | is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1: 666 | version "4.0.1" 667 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" 668 | integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== 669 | dependencies: 670 | is-extglob "^2.1.1" 671 | 672 | is-number@^7.0.0: 673 | version "7.0.0" 674 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" 675 | integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== 676 | 677 | is-plain-obj@^2.1.0: 678 | version "2.1.0" 679 | resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" 680 | integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== 681 | 682 | is-unicode-supported@^0.1.0: 683 | version "0.1.0" 684 | resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" 685 | integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== 686 | 687 | isexe@^2.0.0: 688 | version "2.0.0" 689 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" 690 | integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= 691 | 692 | jest-worker@^26.2.1: 693 | version "26.6.2" 694 | resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-26.6.2.tgz#7f72cbc4d643c365e27b9fd775f9d0eaa9c7a8ed" 695 | integrity sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ== 696 | dependencies: 697 | "@types/node" "*" 698 | merge-stream "^2.0.0" 699 | supports-color "^7.0.0" 700 | 701 | js-tokens@^4.0.0: 702 | version "4.0.0" 703 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" 704 | integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== 705 | 706 | js-yaml@4.1.0: 707 | version "4.1.0" 708 | resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" 709 | integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== 710 | dependencies: 711 | argparse "^2.0.1" 712 | 713 | js-yaml@^3.13.1: 714 | version "3.14.1" 715 | resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" 716 | integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== 717 | dependencies: 718 | argparse "^1.0.7" 719 | esprima "^4.0.0" 720 | 721 | json-schema-traverse@^0.4.1: 722 | version "0.4.1" 723 | resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" 724 | integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== 725 | 726 | json-schema-traverse@^1.0.0: 727 | version "1.0.0" 728 | resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" 729 | integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== 730 | 731 | json-stable-stringify-without-jsonify@^1.0.1: 732 | version "1.0.1" 733 | resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" 734 | integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= 735 | 736 | levn@^0.4.1: 737 | version "0.4.1" 738 | resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" 739 | integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== 740 | dependencies: 741 | prelude-ls "^1.2.1" 742 | type-check "~0.4.0" 743 | 744 | locate-path@^6.0.0: 745 | version "6.0.0" 746 | resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" 747 | integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== 748 | dependencies: 749 | p-locate "^5.0.0" 750 | 751 | lodash.clonedeep@^4.5.0: 752 | version "4.5.0" 753 | resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" 754 | integrity sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8= 755 | 756 | lodash.merge@^4.6.2: 757 | version "4.6.2" 758 | resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" 759 | integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== 760 | 761 | lodash.truncate@^4.4.2: 762 | version "4.4.2" 763 | resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193" 764 | integrity sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM= 765 | 766 | log-symbols@4.1.0: 767 | version "4.1.0" 768 | resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" 769 | integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== 770 | dependencies: 771 | chalk "^4.1.0" 772 | is-unicode-supported "^0.1.0" 773 | 774 | lru-cache@^6.0.0: 775 | version "6.0.0" 776 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" 777 | integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== 778 | dependencies: 779 | yallist "^4.0.0" 780 | 781 | merge-stream@^2.0.0: 782 | version "2.0.0" 783 | resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" 784 | integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== 785 | 786 | minimatch@3.0.4, minimatch@^3.0.4: 787 | version "3.0.4" 788 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" 789 | integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== 790 | dependencies: 791 | brace-expansion "^1.1.7" 792 | 793 | mocha@9: 794 | version "9.0.0" 795 | resolved "https://registry.yarnpkg.com/mocha/-/mocha-9.0.0.tgz#67ce848170cb6426f9e84c57e38376dc9017bab4" 796 | integrity sha512-GRGG/q9bIaUkHJB9NL+KZNjDhMBHB30zW3bZW9qOiYr+QChyLjPzswaxFWkI1q6lGlSL28EQYzAi2vKWNkPx+g== 797 | dependencies: 798 | "@ungap/promise-all-settled" "1.1.2" 799 | ansi-colors "4.1.1" 800 | browser-stdout "1.3.1" 801 | chokidar "3.5.1" 802 | debug "4.3.1" 803 | diff "5.0.0" 804 | escape-string-regexp "4.0.0" 805 | find-up "5.0.0" 806 | glob "7.1.7" 807 | growl "1.10.5" 808 | he "1.2.0" 809 | js-yaml "4.1.0" 810 | log-symbols "4.1.0" 811 | minimatch "3.0.4" 812 | ms "2.1.3" 813 | nanoid "3.1.23" 814 | serialize-javascript "5.0.1" 815 | strip-json-comments "3.1.1" 816 | supports-color "8.1.1" 817 | which "2.0.2" 818 | wide-align "1.1.3" 819 | workerpool "6.1.4" 820 | yargs "16.2.0" 821 | yargs-parser "20.2.4" 822 | yargs-unparser "2.0.0" 823 | 824 | ms@2.1.2: 825 | version "2.1.2" 826 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" 827 | integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== 828 | 829 | ms@2.1.3: 830 | version "2.1.3" 831 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" 832 | integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== 833 | 834 | nanoid@3.1.23: 835 | version "3.1.23" 836 | resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.23.tgz#f744086ce7c2bc47ee0a8472574d5c78e4183a81" 837 | integrity sha512-FiB0kzdP0FFVGDKlRLEQ1BgDzU87dy5NnzjeW9YZNt+/c3+q82EQDUwniSAUxp/F0gFNI1ZhKU1FqYsMuqZVnw== 838 | 839 | natural-compare@^1.4.0: 840 | version "1.4.0" 841 | resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" 842 | integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= 843 | 844 | normalize-path@^3.0.0, normalize-path@~3.0.0: 845 | version "3.0.0" 846 | resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" 847 | integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== 848 | 849 | once@^1.3.0: 850 | version "1.4.0" 851 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 852 | integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= 853 | dependencies: 854 | wrappy "1" 855 | 856 | optionator@^0.9.1: 857 | version "0.9.1" 858 | resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" 859 | integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== 860 | dependencies: 861 | deep-is "^0.1.3" 862 | fast-levenshtein "^2.0.6" 863 | levn "^0.4.1" 864 | prelude-ls "^1.2.1" 865 | type-check "^0.4.0" 866 | word-wrap "^1.2.3" 867 | 868 | p-limit@^3.0.2: 869 | version "3.1.0" 870 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" 871 | integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== 872 | dependencies: 873 | yocto-queue "^0.1.0" 874 | 875 | p-locate@^5.0.0: 876 | version "5.0.0" 877 | resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" 878 | integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== 879 | dependencies: 880 | p-limit "^3.0.2" 881 | 882 | parent-module@^1.0.0: 883 | version "1.0.1" 884 | resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" 885 | integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== 886 | dependencies: 887 | callsites "^3.0.0" 888 | 889 | path-exists@^4.0.0: 890 | version "4.0.0" 891 | resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" 892 | integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== 893 | 894 | path-is-absolute@^1.0.0: 895 | version "1.0.1" 896 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 897 | integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= 898 | 899 | path-key@^3.1.0: 900 | version "3.1.1" 901 | resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" 902 | integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== 903 | 904 | picomatch@^2.0.4, picomatch@^2.2.1: 905 | version "2.3.0" 906 | resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.0.tgz#f1f061de8f6a4bf022892e2d128234fb98302972" 907 | integrity sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw== 908 | 909 | prelude-ls@^1.2.1: 910 | version "1.2.1" 911 | resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" 912 | integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== 913 | 914 | progress@^2.0.0: 915 | version "2.0.3" 916 | resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" 917 | integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== 918 | 919 | punycode@^2.1.0: 920 | version "2.1.1" 921 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" 922 | integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== 923 | 924 | randombytes@^2.1.0: 925 | version "2.1.0" 926 | resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" 927 | integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== 928 | dependencies: 929 | safe-buffer "^5.1.0" 930 | 931 | readdirp@~3.5.0: 932 | version "3.5.0" 933 | resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.5.0.tgz#9ba74c019b15d365278d2e91bb8c48d7b4d42c9e" 934 | integrity sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ== 935 | dependencies: 936 | picomatch "^2.2.1" 937 | 938 | regexpp@^3.1.0: 939 | version "3.1.0" 940 | resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.1.0.tgz#206d0ad0a5648cffbdb8ae46438f3dc51c9f78e2" 941 | integrity sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q== 942 | 943 | require-directory@^2.1.1: 944 | version "2.1.1" 945 | resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" 946 | integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= 947 | 948 | require-from-string@^2.0.2: 949 | version "2.0.2" 950 | resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" 951 | integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== 952 | 953 | resolve-from@^4.0.0: 954 | version "4.0.0" 955 | resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" 956 | integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== 957 | 958 | rimraf@^3.0.2: 959 | version "3.0.2" 960 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" 961 | integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== 962 | dependencies: 963 | glob "^7.1.3" 964 | 965 | rollup-plugin-terser@7: 966 | version "7.0.2" 967 | resolved "https://registry.yarnpkg.com/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz#e8fbba4869981b2dc35ae7e8a502d5c6c04d324d" 968 | integrity sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ== 969 | dependencies: 970 | "@babel/code-frame" "^7.10.4" 971 | jest-worker "^26.2.1" 972 | serialize-javascript "^4.0.0" 973 | terser "^5.0.0" 974 | 975 | rollup@2: 976 | version "2.51.1" 977 | resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.51.1.tgz#87bcd4095fe79b14c9bec0edc7ffa44e4827f793" 978 | integrity sha512-8xfDbAtBleXotb6qKEHWuo/jkn94a9dVqGc7Rwl3sqspCVlnCfbRek7ldhCARSi7h32H0xR4QThm1t9zHN+3uw== 979 | optionalDependencies: 980 | fsevents "~2.3.1" 981 | 982 | safe-buffer@^5.1.0: 983 | version "5.2.1" 984 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" 985 | integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== 986 | 987 | semver@^7.2.1: 988 | version "7.3.5" 989 | resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7" 990 | integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== 991 | dependencies: 992 | lru-cache "^6.0.0" 993 | 994 | serialize-javascript@5.0.1: 995 | version "5.0.1" 996 | resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-5.0.1.tgz#7886ec848049a462467a97d3d918ebb2aaf934f4" 997 | integrity sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA== 998 | dependencies: 999 | randombytes "^2.1.0" 1000 | 1001 | serialize-javascript@^4.0.0: 1002 | version "4.0.0" 1003 | resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-4.0.0.tgz#b525e1238489a5ecfc42afacc3fe99e666f4b1aa" 1004 | integrity sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw== 1005 | dependencies: 1006 | randombytes "^2.1.0" 1007 | 1008 | shebang-command@^2.0.0: 1009 | version "2.0.0" 1010 | resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" 1011 | integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== 1012 | dependencies: 1013 | shebang-regex "^3.0.0" 1014 | 1015 | shebang-regex@^3.0.0: 1016 | version "3.0.0" 1017 | resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" 1018 | integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== 1019 | 1020 | slice-ansi@^4.0.0: 1021 | version "4.0.0" 1022 | resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" 1023 | integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== 1024 | dependencies: 1025 | ansi-styles "^4.0.0" 1026 | astral-regex "^2.0.0" 1027 | is-fullwidth-code-point "^3.0.0" 1028 | 1029 | source-map-support@~0.5.19: 1030 | version "0.5.19" 1031 | resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61" 1032 | integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw== 1033 | dependencies: 1034 | buffer-from "^1.0.0" 1035 | source-map "^0.6.0" 1036 | 1037 | source-map@^0.6.0: 1038 | version "0.6.1" 1039 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" 1040 | integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== 1041 | 1042 | source-map@~0.7.2: 1043 | version "0.7.3" 1044 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" 1045 | integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== 1046 | 1047 | sprintf-js@~1.0.2: 1048 | version "1.0.3" 1049 | resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" 1050 | integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= 1051 | 1052 | "string-width@^1.0.2 || 2": 1053 | version "2.1.1" 1054 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" 1055 | integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== 1056 | dependencies: 1057 | is-fullwidth-code-point "^2.0.0" 1058 | strip-ansi "^4.0.0" 1059 | 1060 | string-width@^4.1.0, string-width@^4.2.0: 1061 | version "4.2.2" 1062 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.2.tgz#dafd4f9559a7585cfba529c6a0a4f73488ebd4c5" 1063 | integrity sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA== 1064 | dependencies: 1065 | emoji-regex "^8.0.0" 1066 | is-fullwidth-code-point "^3.0.0" 1067 | strip-ansi "^6.0.0" 1068 | 1069 | strip-ansi@^4.0.0: 1070 | version "4.0.0" 1071 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" 1072 | integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= 1073 | dependencies: 1074 | ansi-regex "^3.0.0" 1075 | 1076 | strip-ansi@^6.0.0: 1077 | version "6.0.0" 1078 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" 1079 | integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== 1080 | dependencies: 1081 | ansi-regex "^5.0.0" 1082 | 1083 | strip-json-comments@3.1.1, strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: 1084 | version "3.1.1" 1085 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" 1086 | integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== 1087 | 1088 | supports-color@8.1.1: 1089 | version "8.1.1" 1090 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" 1091 | integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== 1092 | dependencies: 1093 | has-flag "^4.0.0" 1094 | 1095 | supports-color@^5.3.0: 1096 | version "5.5.0" 1097 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" 1098 | integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== 1099 | dependencies: 1100 | has-flag "^3.0.0" 1101 | 1102 | supports-color@^7.0.0, supports-color@^7.1.0: 1103 | version "7.2.0" 1104 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" 1105 | integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== 1106 | dependencies: 1107 | has-flag "^4.0.0" 1108 | 1109 | table@^6.0.9: 1110 | version "6.7.1" 1111 | resolved "https://registry.yarnpkg.com/table/-/table-6.7.1.tgz#ee05592b7143831a8c94f3cee6aae4c1ccef33e2" 1112 | integrity sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg== 1113 | dependencies: 1114 | ajv "^8.0.1" 1115 | lodash.clonedeep "^4.5.0" 1116 | lodash.truncate "^4.4.2" 1117 | slice-ansi "^4.0.0" 1118 | string-width "^4.2.0" 1119 | strip-ansi "^6.0.0" 1120 | 1121 | terser@^5.0.0: 1122 | version "5.7.0" 1123 | resolved "https://registry.yarnpkg.com/terser/-/terser-5.7.0.tgz#a761eeec206bc87b605ab13029876ead938ae693" 1124 | integrity sha512-HP5/9hp2UaZt5fYkuhNBR8YyRcT8juw8+uFbAme53iN9hblvKnLUTKkmwJG6ocWpIKf8UK4DoeWG4ty0J6S6/g== 1125 | dependencies: 1126 | commander "^2.20.0" 1127 | source-map "~0.7.2" 1128 | source-map-support "~0.5.19" 1129 | 1130 | text-table@^0.2.0: 1131 | version "0.2.0" 1132 | resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" 1133 | integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= 1134 | 1135 | to-regex-range@^5.0.1: 1136 | version "5.0.1" 1137 | resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" 1138 | integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== 1139 | dependencies: 1140 | is-number "^7.0.0" 1141 | 1142 | type-check@^0.4.0, type-check@~0.4.0: 1143 | version "0.4.0" 1144 | resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" 1145 | integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== 1146 | dependencies: 1147 | prelude-ls "^1.2.1" 1148 | 1149 | type-fest@^0.20.2: 1150 | version "0.20.2" 1151 | resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" 1152 | integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== 1153 | 1154 | uri-js@^4.2.2: 1155 | version "4.4.1" 1156 | resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" 1157 | integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== 1158 | dependencies: 1159 | punycode "^2.1.0" 1160 | 1161 | v8-compile-cache@^2.0.3: 1162 | version "2.3.0" 1163 | resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" 1164 | integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== 1165 | 1166 | which@2.0.2, which@^2.0.1: 1167 | version "2.0.2" 1168 | resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" 1169 | integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== 1170 | dependencies: 1171 | isexe "^2.0.0" 1172 | 1173 | wide-align@1.1.3: 1174 | version "1.1.3" 1175 | resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" 1176 | integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA== 1177 | dependencies: 1178 | string-width "^1.0.2 || 2" 1179 | 1180 | word-wrap@^1.2.3: 1181 | version "1.2.3" 1182 | resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" 1183 | integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== 1184 | 1185 | workerpool@6.1.4: 1186 | version "6.1.4" 1187 | resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.1.4.tgz#6a972b6df82e38d50248ee2820aa98e2d0ad3090" 1188 | integrity sha512-jGWPzsUqzkow8HoAvqaPWTUPCrlPJaJ5tY8Iz7n1uCz3tTp6s3CDG0FF1NsX42WNlkRSW6Mr+CDZGnNoSsKa7g== 1189 | 1190 | wrap-ansi@^7.0.0: 1191 | version "7.0.0" 1192 | resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" 1193 | integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== 1194 | dependencies: 1195 | ansi-styles "^4.0.0" 1196 | string-width "^4.1.0" 1197 | strip-ansi "^6.0.0" 1198 | 1199 | wrappy@1: 1200 | version "1.0.2" 1201 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 1202 | integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= 1203 | 1204 | y18n@^5.0.5: 1205 | version "5.0.8" 1206 | resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" 1207 | integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== 1208 | 1209 | yallist@^4.0.0: 1210 | version "4.0.0" 1211 | resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" 1212 | integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== 1213 | 1214 | yargs-parser@20.2.4: 1215 | version "20.2.4" 1216 | resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54" 1217 | integrity sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA== 1218 | 1219 | yargs-parser@^20.2.2: 1220 | version "20.2.7" 1221 | resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.7.tgz#61df85c113edfb5a7a4e36eb8aa60ef423cbc90a" 1222 | integrity sha512-FiNkvbeHzB/syOjIUxFDCnhSfzAL8R5vs40MgLFBorXACCOAEaWu0gRZl14vG8MR9AOJIZbmkjhusqBYZ3HTHw== 1223 | 1224 | yargs-unparser@2.0.0: 1225 | version "2.0.0" 1226 | resolved "https://registry.yarnpkg.com/yargs-unparser/-/yargs-unparser-2.0.0.tgz#f131f9226911ae5d9ad38c432fe809366c2325eb" 1227 | integrity sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA== 1228 | dependencies: 1229 | camelcase "^6.0.0" 1230 | decamelize "^4.0.0" 1231 | flat "^5.0.2" 1232 | is-plain-obj "^2.1.0" 1233 | 1234 | yargs@16.2.0: 1235 | version "16.2.0" 1236 | resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" 1237 | integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== 1238 | dependencies: 1239 | cliui "^7.0.2" 1240 | escalade "^3.1.1" 1241 | get-caller-file "^2.0.5" 1242 | require-directory "^2.1.1" 1243 | string-width "^4.2.0" 1244 | y18n "^5.0.5" 1245 | yargs-parser "^20.2.2" 1246 | 1247 | yocto-queue@^0.1.0: 1248 | version "0.1.0" 1249 | resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" 1250 | integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== 1251 | --------------------------------------------------------------------------------