├── .eslintrc.json ├── .gitignore ├── LICENSE ├── README.md ├── d3-tile.sublime-project ├── package.json ├── rollup.config.js ├── src ├── index.js ├── tile.js └── wrap.js ├── test ├── tile-test.js └── wrap-test.js └── yarn.lock /.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "eslint:recommended", 3 | "parserOptions": { 4 | "sourceType": "module", 5 | "ecmaVersion": 8 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 | } 16 | } 17 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *.sublime-workspace 2 | .DS_Store 3 | dist/ 4 | node_modules 5 | npm-debug.log 6 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright 2016 Mike Bostock 2 | All rights reserved. 3 | 4 | Redistribution and use in source and binary forms, with or without modification, 5 | are permitted provided that the following conditions are met: 6 | 7 | * Redistributions of source code must retain the above copyright notice, this 8 | list of conditions and the following disclaimer. 9 | 10 | * Redistributions in binary form must reproduce the above copyright notice, 11 | this list of conditions and the following disclaimer in the documentation 12 | and/or other materials provided with the distribution. 13 | 14 | * Neither the name of the author nor the names of contributors may be used to 15 | endorse or promote products derived from this software without specific prior 16 | written permission. 17 | 18 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 19 | ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 20 | WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 21 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR 22 | ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 23 | (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 24 | LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 25 | ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 26 | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 27 | SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # d3-tile 2 | 3 | Quadtree tiles are common for representing large, multi-resolution geometry and images, as in “slippy” maps. d3.tile provides a convenient mechanism for computing which tile coordinates should be visible in the given viewport. Unlike dedicated libraries for slippy maps, such as [Leaflet](https://leafletjs.com/), d3.tile’s tiny, low-level API is agnostic about how the tiles are presented and offers greater flexibility. d3.tile works well with [d3-geo](https://github.com/d3/d3-geo) for geographic maps and [d3-zoom](https://github.com/d3/d3-zoom) for interaction. 4 | 5 | For examples, see the [d3-tile collection](https://observablehq.com/collection/@d3/d3-tile) on Observable. 6 | 7 | ## Installing 8 | 9 | If you use NPM, `npm install d3-tile`. Otherwise, download the [latest release](https://github.com/d3/d3-tile/releases/latest). You can also load directly as a [standalone library](https://cdn.jsdelivr.net/npm/d3-tile). ES modules, AMD, CommonJS, and vanilla environments are supported. In vanilla, a `d3` global is exported: 10 | 11 | ```html 12 | 13 | 19 | ``` 20 | 21 | ## API Reference 22 | 23 | # d3.tile() · [Source](https://github.com/d3/d3-tile/blob/master/src/tile.js), [Examples](https://observablehq.com/collection/@d3/d3-tile) 24 | 25 | Constructs a new tile layout with the default settings. 26 | 27 | ```js 28 | const tile = d3.tile(); 29 | ``` 30 | 31 | # tile(…*arguments*) · [Source](https://github.com/d3/d3-tile/blob/master/src/tile.js), [Examples](https://observablehq.com/collection/@d3/d3-tile) 32 | 33 | Computes the set of tiles to display given the current settings, computing the [scale](#tile_scale) and [translate](#tile_translate) by invoking the corresponding accessors with the given *arguments*. Returns an array of [*x*, *y*, *z*] arrays representing the *x*- (horizontal), *y*- (vertical) and *z*- (zoom) integer coordinates of any tiles which intersect the current viewport; these are the “visible” tiles. The returned tiles array also has tiles.*scale* and tiles.*translate* properties which together with an individual tile’s *x* and *y* determine the intended location of the tile in the viewport. 34 | 35 | For example, the following function computes the pixel coordinates of the top-left corner of the given tile in the current viewport: 36 | 37 | ```js 38 | function position(tile, tiles) { 39 | const [x, y] = tile; 40 | const {translate: [tx, ty], scale: k} = tiles; 41 | return [(x + tx) * k, (y + ty) * k]; 42 | } 43 | ``` 44 | 45 | And in use: 46 | 47 | ```js 48 | const tile = d3.tile(); 49 | const tiles = tile({k: 256, x: 480, y: 250}); 50 | for (const t of tiles) { 51 | console.log(`tile ${t} is at ${position(t, tiles)}`); 52 | } 53 | ``` 54 | 55 | See [Zoomable Tiles](https://observablehq.com/@d3/zoomable-tiles) for more information on tile coordinates. 56 | 57 | # tile.extent([extent]) · [Source](https://github.com/d3/d3-tile/blob/master/src/tile.js) 58 | 59 | If *extent* is specified, sets this tile layout’s viewport extent to the specified array [[*x0*, *y0*], [*x1*, *y1*]], where [*x0*, *y0*] is the top-left corner and [*x1*, *y1*] is the bottom-right corner, and returns this tile layout. If *extent* is not specified, returns the current viewport extent, which defaults to [[0, 0], [960, 500]]. 60 | 61 | ```js 62 | const tile = d3.tile().extent([[100, 200], [300, 400]]); 63 | ``` 64 | 65 | Setting the viewport extent implicitly sets the [viewport size](#tile_size). 66 | 67 | # tile.size([size]) · [Source](https://github.com/d3/d3-tile/blob/master/src/tile.js) 68 | 69 | If *size* is specified, sets this tile layout’s viewport size to the specified array of numbers [*width*, *height*] and returns this tile layout. If *size* is not specified, returns the current viewport size, which defaults to [960, 500]. 70 | 71 | ```js 72 | const tile = d3.tile().size([200, 200]); 73 | ``` 74 | 75 | This is a convenience method for setting the [viewport extent](#tile_extent) to [[0, 0], [*width*, *height*]]. 76 | 77 | # tile.scale([scale]) · [Source](https://github.com/d3/d3-tile/blob/master/src/tile.js) 78 | 79 | If *scale* is specified, sets this tile layout’s scale function and returns this tile layout. If *scale* is a function, it is invoked when the [tile layout](#_tile) is invoked, being passed the same arguments as the tile layout; this function must return a number indicating the desired width and height of the world tile [0, 0, 0]. 80 | 81 | ```js 82 | const tile = d3.tile().scale(t => t.scale).translate(t => t.translate); 83 | const tiles = tile({scale: 1024, translate: [100, 200]}); 84 | ``` 85 | 86 | If *scale* is not a function, it assumed to be a constant number, and is wrapped in a function. 87 | 88 | ```js 89 | const tile = d3.tile().scale(1024).translate([100, 200]); 90 | ``` 91 | 92 | If *scale* is not specified, returns the current layout scale function, which defaults to: 93 | 94 | ```js 95 | function scale(transform) { 96 | return transform.k; 97 | } 98 | ``` 99 | 100 | This default is compatible with a [d3-zoom transform](https://github.com/d3/d3-zoom/blob/master/README.md#zoom-transforms). 101 | 102 | # tile.translate([translate]) · [Source](https://github.com/d3/d3-tile/blob/master/src/tile.js) 103 | 104 | If *translate* is specified, sets this tile layout’s translate function and returns this tile layout. If *translate* is a function, it is invoked when the [tile layout](#_tile) is invoked, being passed the same arguments as the tile layout; this function must return an array of numbers [*x*, *y*] indicating the desired coordinates the center of the world tile [0, 0, 0]. 105 | 106 | ```js 107 | const tile = d3.tile().scale(t => t.scale).translate(t => t.translate); 108 | const tiles = tile({scale: 1024, translate: [100, 200]}); 109 | ``` 110 | 111 | If *translate* is not a function, it is assumed to be a constant array [*x*, *y*] and is wrapped in a function. 112 | 113 | ```js 114 | const tile = d3.tile().scale(1024).translate([100, 200]); 115 | ``` 116 | 117 | If *translate* is not specified, returns the current layout translate function, which defaults to: 118 | 119 | ```js 120 | function translate(transform) { 121 | return [transform.x, transform.y]; 122 | } 123 | ``` 124 | 125 | This default is compatible with a [d3-zoom transform](https://github.com/d3/d3-zoom/blob/master/README.md#zoom-transforms). 126 | 127 | # tile.clampX([clamp]) · [Source](https://github.com/d3/d3-tile/blob/master/src/tile.js), [Examples](https://observablehq.com/@d3/wrapped-tiles) 128 | 129 | If *clamp* is specified, sets whether or not the visible tiles will be clamped in the *x*-dimension and returns this tile layout. If *clamp* is not specified, returns whether *x*-clamping is enabled, which defaults to true. If *x*-clamping is disabled, then the tile layout may return tiles that are outside the normal bounds 0 ≤ *x* < 2^*z* of the “world” tile [0, 0, 0]. 130 | 131 | ```js 132 | const tile = d3.tile().clampX(false); 133 | ``` 134 | 135 | See [d3.tileWrap](#tileWrap) for converting these coordinates to wrapped in-world coordinates, and [Wrapped Tiles](https://observablehq.com/@d3/wrapped-tiles) for example. 136 | 137 | # tile.clampY([clamp]) · [Source](https://github.com/d3/d3-tile/blob/master/src/tile.js) 138 | 139 | If *clamp* is specified, sets whether or not the visible tiles will be clamped in the *y*-dimension and returns this tile layout. If *clamp* is not specified, returns whether *y*-clamping is enabled, which defaults to true. If *y*-clamping is disabled, then the tile layout may return tiles that are outside the normal bounds 0 ≤ *y* < 2^*z* of the “world” tile [0, 0, 0]. 140 | 141 | ```js 142 | const tile = d3.tile().clampY(false); 143 | ``` 144 | 145 | See [d3.tileWrap](#tileWrap) for converting these coordinates to wrapped in-world coordinates, and [Wrapped Tiles](https://observablehq.com/@d3/wrapped-tiles) for example. See also [*tile*.clampX](#tile_clampX). 146 | 147 | 148 | # tile.clamp([clamp]) · [Source](https://github.com/d3/d3-tile/blob/master/src/tile.js) 149 | 150 | If *clamp* is specified, sets [*tile*.clampX](#tile_clampX) and [*tile*.clampY](#tile_clampY) to the specified boolean *clamp* and returns this tile layout. If *clamp* is not specified, returns true if *tile*.clampX and *tile*.clampY are both true, and false otherwise. 151 | 152 | ```js 153 | const tile = d3.tile().clamp(false); 154 | ``` 155 | 156 | # tile.tileSize([tileSize]) · [Source](https://github.com/d3/d3-tile/blob/master/src/tile.js), [Examples](https://observablehq.com/@d3/tile-tilesize) 157 | 158 | If *tileSize* is specified, sets this tile layout’s tile width and height to the specified number *tileSize* and returns this tile layout. If *tileSize* is not specified, returns the current layout tile size, which defaults to 256. 256 and 512 are the most common tile sizes. 159 | 160 | ```js 161 | const tile = d3.tile().tileSize(512); 162 | ``` 163 | 164 | # tile.zoomDelta([zoomDelta]) · [Source](https://github.com/d3/d3-tile/blob/master/src/tile.js), [Examples](https://observablehq.com/@d3/tile-zoomdelta) 165 | 166 | If *zoomDelta* is specified, sets this tile layout’s zoom offset to the specified number *zoomDelta* and returns this tile layout. If *zoomDelta* is not specified, returns the current zoom offset, which defaults to 0. The zoom offset affects which *z*-coordinate is chosen based on the current [scale](#tile_scale); the default zoom offset of 0 will choose the *z* that is closest the displayed size; a zoom offset of -1 will use *z* - 1, giving tiles that are twice as big (lower resolution); a zoom offset of +1 will use *z* + 1, giving tiles that are twice as small (higher resolution). The latter might be appropriate for showing 256×256 tiles in a 128×128 space on a high-resolution screen. 167 | 168 | ```js 169 | const tile = d3.tile().zoomDelta(2); 170 | ``` 171 | 172 | # d3.tileWrap(*tile*) · [Source](https://github.com/d3/d3-tile/blob/master/src/wrap.js), [Examples](https://observablehq.com/@d3/wrapped-tiles) 173 | 174 | Given *tile* coordinates [*x*, *y*, *z*], where *x* and *y* may be outside the “world” tile [0, 0, 0], returns the wrapped tile coordinates [*x′*, *y′*, *z*] where *j* = 2 ^ *z*, *x′* = *x* - ⌊*x* / *j*⌋ * *j* and *y′* = *y* - ⌊*y* / *j*⌋ * *j*. This function is most commonly used in conjunction with [*tile*.clampX](#tile_clampX) to allow horizontal wrapping of web Mercator tiles. 175 | 176 | ```js 177 | d3.tileWrap([-1, 0, 1]) // [1, 0, 1] 178 | d3.tileWrap([-1, 0, 2]) // [3, 0, 2] 179 | ``` 180 | 181 | See [Wrapped Tiles](https://observablehq.com/@d3/wrapped-tiles) for example. 182 | -------------------------------------------------------------------------------- /d3-tile.sublime-project: -------------------------------------------------------------------------------- 1 | { 2 | "folders": [ 3 | { 4 | "path": ".", 5 | "file_exclude_patterns": ["*.sublime-workspace"], 6 | "folder_exclude_patterns": ["dist"] 7 | } 8 | ], 9 | "build_systems": [ 10 | { 11 | "name": "yarn test", 12 | "cmd": ["yarn", "test"], 13 | "file_regex": "\\((...*?):([0-9]*):([0-9]*)\\)", 14 | "working_dir": "$project_path" 15 | } 16 | ] 17 | } 18 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "d3-tile", 3 | "version": "1.0.0", 4 | "description": "Compute the quadtree tiles to display in a rectangular viewport.", 5 | "keywords": [ 6 | "d3", 7 | "d3-module" 8 | ], 9 | "homepage": "https://d3js.org/d3-tile/", 10 | "license": "BSD-3-Clause", 11 | "author": { 12 | "name": "Mike Bostock", 13 | "url": "http://bost.ocks.org/mike" 14 | }, 15 | "main": "dist/d3-tile.js", 16 | "unpkg": "dist/d3-tile.min.js", 17 | "module": "src/index.js", 18 | "repository": { 19 | "type": "git", 20 | "url": "https://github.com/d3/d3-tile.git" 21 | }, 22 | "files": [ 23 | "dist/**/*.js", 24 | "src/**/*.js" 25 | ], 26 | "scripts": { 27 | "test": "tape -r esm 'test/**/*-test.js' && eslint src", 28 | "prepublishOnly": "rm -rf dist && yarn test && rollup -c", 29 | "postpublish": "git push && git push --tags && zip -j dist/${npm_package_name}.zip -- LICENSE README.md dist/${npm_package_name}.js dist/${npm_package_name}.min.js" 30 | }, 31 | "devDependencies": { 32 | "eslint": "6", 33 | "esm": "3", 34 | "rollup": "1", 35 | "rollup-plugin-terser": "5", 36 | "tape": "4", 37 | "tape-await": "0.1" 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /rollup.config.js: -------------------------------------------------------------------------------- 1 | import {terser} from "rollup-plugin-terser"; 2 | import * as meta from "./package.json"; 3 | 4 | const config = { 5 | input: "src/index.js", 6 | external: Object.keys(meta.dependencies || {}).filter(key => /^d3-/.test(key)), 7 | output: { 8 | file: `dist/${meta.name}.js`, 9 | name: "d3", 10 | format: "umd", 11 | indent: false, 12 | extend: true, 13 | banner: `// ${meta.homepage} v${meta.version} Copyright ${(new Date).getFullYear()} ${meta.author.name}`, 14 | globals: Object.assign({}, ...Object.keys(meta.dependencies || {}).filter(key => /^d3-/.test(key)).map(key => ({[key]: "d3"}))) 15 | }, 16 | plugins: [] 17 | }; 18 | 19 | export default [ 20 | config, 21 | { 22 | ...config, 23 | output: { 24 | ...config.output, 25 | file: `dist/${meta.name}.min.js` 26 | }, 27 | plugins: [ 28 | ...config.plugins, 29 | terser({ 30 | output: { 31 | preamble: config.output.banner 32 | } 33 | }) 34 | ] 35 | } 36 | ]; 37 | -------------------------------------------------------------------------------- /src/index.js: -------------------------------------------------------------------------------- 1 | export {default as tile} from "./tile.js"; 2 | export {default as tileWrap} from "./wrap.js"; 3 | -------------------------------------------------------------------------------- /src/tile.js: -------------------------------------------------------------------------------- 1 | function defaultScale(t) { 2 | return t.k; 3 | } 4 | 5 | function defaultTranslate(t) { 6 | return [t.x, t.y]; 7 | } 8 | 9 | function constant(x) { 10 | return function() { 11 | return x; 12 | }; 13 | } 14 | 15 | export default function() { 16 | let x0 = 0, y0 = 0, x1 = 960, y1 = 500; 17 | let clampX = true, clampY = true; 18 | let tileSize = 256; 19 | let scale = defaultScale; 20 | let translate = defaultTranslate; 21 | let zoomDelta = 0; 22 | 23 | function tile() { 24 | const scale_ = +scale.apply(this, arguments); 25 | const translate_ = translate.apply(this, arguments); 26 | const z = Math.log2(scale_ / tileSize); 27 | const z0 = Math.round(Math.max(z + zoomDelta, 0)); 28 | const k = Math.pow(2, z - z0) * tileSize; 29 | const x = +translate_[0] - scale_ / 2; 30 | const y = +translate_[1] - scale_ / 2; 31 | const xmin = Math.max(clampX ? 0 : -Infinity, Math.floor((x0 - x) / k)); 32 | const xmax = Math.min(clampX ? 1 << z0 : Infinity, Math.ceil((x1 - x) / k)); 33 | const ymin = Math.max(clampY ? 0 : -Infinity, Math.floor((y0 - y) / k)); 34 | const ymax = Math.min(clampY ? 1 << z0 : Infinity, Math.ceil((y1 - y) / k)); 35 | const tiles = []; 36 | for (let y = ymin; y < ymax; ++y) { 37 | for (let x = xmin; x < xmax; ++x) { 38 | tiles.push([x, y, z0]); 39 | } 40 | } 41 | tiles.translate = [x / k, y / k]; 42 | tiles.scale = k; 43 | return tiles; 44 | } 45 | 46 | tile.size = function(_) { 47 | return arguments.length ? (x0 = y0 = 0, x1 = +_[0], y1 = +_[1], tile) : [x1 - x0, y1 - y0]; 48 | }; 49 | 50 | tile.extent = function(_) { 51 | return arguments.length ? (x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1], tile) : [[x0, y0], [x1, y1]]; 52 | }; 53 | 54 | tile.scale = function(_) { 55 | return arguments.length ? (scale = typeof _ === "function" ? _ : constant(+_), tile) : scale; 56 | }; 57 | 58 | tile.translate = function(_) { 59 | return arguments.length ? (translate = typeof _ === "function" ? _ : constant([+_[0], +_[1]]), tile) : translate; 60 | }; 61 | 62 | tile.zoomDelta = function(_) { 63 | return arguments.length ? (zoomDelta = +_, tile) : zoomDelta; 64 | }; 65 | 66 | tile.tileSize = function(_) { 67 | return arguments.length ? (tileSize = +_, tile) : tileSize; 68 | }; 69 | 70 | tile.clamp = function(_) { 71 | return arguments.length ? (clampX = clampY = !!_, tile) : clampX && clampY; 72 | }; 73 | 74 | tile.clampX = function(_) { 75 | return arguments.length ? (clampX = !!_, tile) : clampX; 76 | }; 77 | 78 | tile.clampY = function(_) { 79 | return arguments.length ? (clampY = !!_, tile) : clampY; 80 | }; 81 | 82 | return tile; 83 | } 84 | -------------------------------------------------------------------------------- /src/wrap.js: -------------------------------------------------------------------------------- 1 | export default function tileWrap([x, y, z]) { 2 | const j = 1 << z; 3 | return [x - Math.floor(x / j) * j, y - Math.floor(y / j) * j, z]; 4 | } 5 | -------------------------------------------------------------------------------- /test/tile-test.js: -------------------------------------------------------------------------------- 1 | import tape from "tape-await"; 2 | import * as d3 from "../src/index.js"; 3 | 4 | tape("d3.tile() has the expected defaults", test => { 5 | const tile = d3.tile(); 6 | test.deepEqual(tile.size(), [960, 500]); 7 | test.deepEqual(tile.extent(), [[0, 0], [960, 500]]); 8 | test.deepEqual(tile.scale()({k: 256}), 256); 9 | test.deepEqual(tile.translate()({x: 480, y: 250}), [480, 250]); 10 | test.deepEqual(tile.zoomDelta(), 0); 11 | test.deepEqual(tile.tileSize(), 256); 12 | test.deepEqual(tile.clampX(), true); 13 | test.deepEqual(tile.clampY(), true); 14 | test.deepEqual(tile({k: 256, x: 480, y: 250}), Object.assign([ 15 | [0, 0, 0] 16 | ], { 17 | translate: [1.375, 0.4765625], 18 | scale: 256 19 | })); 20 | }); 21 | 22 | tape("tile.size(…) sets the viewport", test => { 23 | const tile = d3.tile().extent([[100, 200], [300, 500]]).size([200, 400]); 24 | test.deepEqual(tile.size(), [200, 400]); 25 | test.deepEqual(tile.extent(), [[0, 0], [200, 400]]); 26 | test.strictEqual(tile.size([256, 256]), tile); 27 | test.deepEqual(tile.size(), [256, 256]); 28 | }); 29 | 30 | tape("tile(…) observes the size", test => { 31 | test.deepEqual(d3.tile().size([256, 256])({k: 256, x: 128, y: 128}), Object.assign([[0, 0, 0]], {translate: [0, 0], scale: 256})); 32 | test.deepEqual(d3.tile().size([256, 256])({k: 512, x: 128, y: 128}), Object.assign([[0, 0, 1], [1, 0, 1], [0, 1, 1], [1, 1, 1]], {translate: [-0.5, -0.5], scale: 256})); 33 | }); 34 | 35 | tape("tile.size(…) coerces the input to numbers", test => { 36 | const tile = d3.tile().size([" 200 ", " 400 "]); 37 | test.strictEqual(tile.size()[0], 200); 38 | test.strictEqual(tile.size()[1], 400); 39 | }); 40 | 41 | tape("tile.extent(…) sets the viewport", test => { 42 | const tile = d3.tile().size([200, 400]).extent([[100, 200], [300, 500]]); 43 | test.deepEqual(tile.size(), [200, 300]); 44 | test.deepEqual(tile.extent(), [[100, 200], [300, 500]]); 45 | }); 46 | 47 | tape("tile(…) observes the extent", test => { 48 | test.deepEqual(d3.tile().extent([[256, 256], [512, 512]])({k: 512, x: 256, y: 256}), Object.assign([[1, 1, 1]], {translate: [0, 0], scale: 256})); 49 | test.deepEqual(d3.tile().extent([[0, 256], [256, 512]])({k: 512, x: 256, y: 256}), Object.assign([[0, 1, 1]], {translate: [0, 0], scale: 256})); 50 | }); 51 | 52 | tape("tile.extent(…) coerces the input to numbers", test => { 53 | const tile = d3.tile().extent([[" 100 ", " 200 "], [" 300 ", " 500 "]]); 54 | test.strictEqual(tile.extent()[0][0], 100); 55 | test.strictEqual(tile.extent()[0][1], 200); 56 | test.strictEqual(tile.extent()[1][0], 300); 57 | test.strictEqual(tile.extent()[1][1], 500); 58 | }); 59 | 60 | tape("tile.scale(…) sets the scale function", test => { 61 | test.deepEqual(d3.tile().scale(42).scale()(), 42); 62 | test.deepEqual(d3.tile().scale(t => t.scale).scale()({scale: 42}), 42); 63 | }); 64 | 65 | tape("tile(…) observes the scale", test => { 66 | test.deepEqual(d3.tile().scale(512).translate([256, 256]).size([512, 512])(), Object.assign([[0, 0, 1], [1, 0, 1], [0, 1, 1], [1, 1, 1]], {translate: [0, 0], scale: 256})); 67 | test.deepEqual(d3.tile().scale(256).translate([256, 256]).size([512, 512])(), Object.assign([[0, 0, 0]], {translate: [0.5, 0.5], scale: 256})); 68 | }); 69 | 70 | tape("tile.scale(…) coerces the input to numbers", test => { 71 | test.deepEqual(d3.tile().scale(" 512 ").translate([256, 256]).size([512, 512])(), Object.assign([[0, 0, 1], [1, 0, 1], [0, 1, 1], [1, 1, 1]], {translate: [0, 0], scale: 256})); 72 | }); 73 | 74 | tape("tile.scale(…) can be less than the tile size", test => { 75 | const tile = d3.tile(); 76 | test.deepEqual(tile({k: 128, x: 480, y: 250}), Object.assign([ 77 | [0, 0, 0] 78 | ], { 79 | translate: [3.25, 1.453125], 80 | scale: 128 81 | })); 82 | }); 83 | 84 | tape("tile.translate(…) sets the translate function", test => { 85 | test.deepEqual(d3.tile().translate([100, 200]).translate()(), [100, 200]); 86 | test.deepEqual(d3.tile().translate(t => t.translate).translate()({translate: [100, 200]}), [100, 200]); 87 | }); 88 | 89 | tape("tile(…) observes the translate", test => { 90 | test.deepEqual(d3.tile().size([512, 512])({k: 512, x: 256, y: 256}), Object.assign([[0, 0, 1], [1, 0, 1], [0, 1, 1], [1, 1, 1]], {translate: [0, 0], scale: 256})); 91 | test.deepEqual(d3.tile().size([512, 512])({k: 512, x: 0, y: 0}), Object.assign([[1, 1, 1]], {translate: [-1, -1], scale: 256})); 92 | }); 93 | 94 | tape("tile.translate(…) coerces the input to numbers", test => { 95 | test.deepEqual(d3.tile().size([512, 512])({k: 512, x: " 256 ", y: " 256 "}), Object.assign([[0, 0, 1], [1, 0, 1], [0, 1, 1], [1, 1, 1]], {translate: [0, 0], scale: 256})); 96 | }); 97 | 98 | tape("tile.zoomDelta(…) sets the zoom offset", test => { 99 | const tile = d3.tile().zoomDelta(1); 100 | test.deepEqual(tile.zoomDelta(), 1); 101 | }); 102 | 103 | tape("tile.zoomDelta(…) coerces the input to numbers", test => { 104 | const tile = d3.tile().zoomDelta(" 2 "); 105 | test.strictEqual(tile.zoomDelta(), 2); 106 | }); 107 | 108 | tape("tile(…) observes the zoom delta", test => { 109 | test.deepEqual(d3.tile().scale(512).translate([256, 256]).size([256, 256]).zoomDelta(-1)(), Object.assign([[0, 0, 0]], {translate: [0, 0], scale: 512})); 110 | test.deepEqual(d3.tile().scale(512).translate([256, 256]).size([256, 256]).zoomDelta(1)(), Object.assign([[0, 0, 2], [1, 0, 2], [0, 1, 2], [1, 1, 2]], {translate: [0, 0], scale: 128})); 111 | }); 112 | 113 | tape("tile.tileSize(…) sets the tile size", test => { 114 | const tile = d3.tile().tileSize(1000); 115 | test.deepEqual(tile.tileSize(), 1000); 116 | }); 117 | 118 | tape("tile.tileSize(…) coerces the input to numbers", test => { 119 | const tile = d3.tile().tileSize(" 512 "); 120 | test.strictEqual(tile.tileSize(), 512); 121 | }); 122 | 123 | tape("tile(…) observes the tile size", test => { 124 | test.deepEqual(d3.tile().scale(512).translate([256, 256]).size([256, 256]).tileSize(512)(), Object.assign([[0, 0, 0]], {translate: [0, 0], scale: 512})); 125 | test.deepEqual(d3.tile().scale(512).translate([256, 256]).size([256, 256]).tileSize(128)(), Object.assign([[0, 0, 2], [1, 0, 2], [0, 1, 2], [1, 1, 2]], {translate: [0, 0], scale: 128})); 126 | }); 127 | 128 | tape("tile.clampX(…) sets the x-clampt", test => { 129 | const tile = d3.tile().clampX(false); 130 | test.deepEqual(tile.clampX(), false); 131 | test.deepEqual(tile({k: 256, x: 480, y: 250}), Object.assign([ 132 | [-2, 0, 0], [-1, 0, 0], [0, 0, 0], [+1, 0, 0], [+2, 0, 0], 133 | ], { 134 | translate: [1.375, 0.4765625], 135 | scale: 256 136 | })); 137 | }); 138 | 139 | tape("tile(…) observes the x-clamp", test => { 140 | test.deepEqual(d3.tile().scale(256).translate([0, 0]).size([256, 256]).clampX(false)(), Object.assign([[0, 0, 0], [1, 0, 0]], {translate: [-0.5, -0.5], scale: 256})); 141 | }); 142 | 143 | tape("tile.clampY(…) sets the y-clampt", test => { 144 | const tile = d3.tile().clampY(false); 145 | test.deepEqual(tile.clampY(), false); 146 | test.deepEqual(tile({k: 256, x: 480, y: 250}), Object.assign([ 147 | [0, -1, 0], 148 | [0, 0, 0], 149 | [0, +1, 0] 150 | ], { 151 | translate: [1.375, 0.4765625], 152 | scale: 256 153 | })); 154 | }); 155 | 156 | tape("tile(…) observes the y-clamp", test => { 157 | test.deepEqual(d3.tile().scale(256).translate([0, 0]).size([256, 256]).clampY(false)(), Object.assign([[0, 0, 0], [0, 1, 0]], {translate: [-0.5, -0.5], scale: 256})); 158 | }); 159 | 160 | tape("tile.clamp(…) disables both clamps", test => { 161 | const tile = d3.tile().clamp(false); 162 | test.deepEqual(tile.clampX(), false); 163 | test.deepEqual(tile.clampY(), false); 164 | test.deepEqual(tile({k: 256, x: 480, y: 250}), Object.assign([ 165 | [-2, -1, 0], [-1, -1, 0], [0, -1, 0], [+1, -1, 0], [+2, -1, 0], 166 | [-2, 0, 0], [-1, 0, 0], [0, 0, 0], [+1, 0, 0], [+2, 0, 0], 167 | [-2, +1, 0], [-1, +1, 0], [0, +1, 0], [+1, +1, 0], [+2, +1, 0] 168 | ], { 169 | translate: [1.375, 0.4765625], 170 | scale: 256 171 | })); 172 | }); 173 | 174 | tape("tile(…) observes the clamp", test => { 175 | test.deepEqual(d3.tile().scale(256).translate([0, 0]).size([256, 256]).clamp(false)(), Object.assign([[0, 0, 0], [1, 0, 0], [0, 1, 0], [1, 1, 0]], {translate: [-0.5, -0.5], scale: 256})); 176 | }); 177 | -------------------------------------------------------------------------------- /test/wrap-test.js: -------------------------------------------------------------------------------- 1 | import tape from "tape-await"; 2 | import * as d3 from "../src/index.js"; 3 | 4 | tape("d3.tileWrap([x, y, z]) can wrap in x", test => { 5 | test.deepEqual(d3.tileWrap([-1, 0, 1]), [1, 0, 1]); 6 | test.deepEqual(d3.tileWrap([-1, 0, 2]), [3, 0, 2]); 7 | }); 8 | 9 | tape("d3.tileWrap([x, y, z]) can wrap in y", test => { 10 | test.deepEqual(d3.tileWrap([1, -1, 1]), [1, 1, 1]); 11 | test.deepEqual(d3.tileWrap([1, -1, 2]), [1, 3, 2]); 12 | }); 13 | 14 | tape("d3.tileWrap([x, y, z]) can wrap in x and y", test => { 15 | test.deepEqual(d3.tileWrap([-1, -1, 1]), [1, 1, 1]); 16 | test.deepEqual(d3.tileWrap([-1, -1, 2]), [3, 3, 2]); 17 | }); 18 | -------------------------------------------------------------------------------- /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.0.0": 6 | version "7.5.5" 7 | resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.5.5.tgz#bc0782f6d69f7b7d49531219699b988f669a8f9d" 8 | integrity sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw== 9 | dependencies: 10 | "@babel/highlight" "^7.0.0" 11 | 12 | "@babel/highlight@^7.0.0": 13 | version "7.5.0" 14 | resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.5.0.tgz#56d11312bd9248fa619591d02472be6e8cb32540" 15 | integrity sha512-7dV4eu9gBxoM0dAnj/BCFDW9LFU0zvTrkq0ugM7pnHEgguOEeOz1so2ZghEdzviYzQEED0r4EAgpsBChKy1TRQ== 16 | dependencies: 17 | chalk "^2.0.0" 18 | esutils "^2.0.2" 19 | js-tokens "^4.0.0" 20 | 21 | "@types/estree@0.0.39": 22 | version "0.0.39" 23 | resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f" 24 | integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw== 25 | 26 | "@types/node@^12.6.2": 27 | version "12.6.8" 28 | resolved "https://registry.yarnpkg.com/@types/node/-/node-12.6.8.tgz#e469b4bf9d1c9832aee4907ba8a051494357c12c" 29 | integrity sha512-aX+gFgA5GHcDi89KG5keey2zf0WfZk/HAQotEamsK2kbey+8yGKcson0hbK8E+v0NArlCJQCqMP161YhV6ZXLg== 30 | 31 | acorn-jsx@^5.0.0: 32 | version "5.0.1" 33 | resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.0.1.tgz#32a064fd925429216a09b141102bfdd185fae40e" 34 | integrity sha512-HJ7CfNHrfJLlNTzIEUTj43LNWGkqpRLxm3YjAlcD0ACydk9XynzYsCBHxut+iqt+1aBXkx9UP/w/ZqMr13XIzg== 35 | 36 | acorn@^6.0.7, acorn@^6.2.0: 37 | version "6.2.1" 38 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.2.1.tgz#3ed8422d6dec09e6121cc7a843ca86a330a86b51" 39 | integrity sha512-JD0xT5FCRDNyjDda3Lrg/IxFscp9q4tiYtxE1/nOzlKCk7hIRuYjhq1kCNkbPjMRMZuFq20HNQn1I9k8Oj0E+Q== 40 | 41 | ajv@^6.10.0, ajv@^6.10.2: 42 | version "6.10.2" 43 | resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.10.2.tgz#d3cea04d6b017b2894ad69040fec8b623eb4bd52" 44 | integrity sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw== 45 | dependencies: 46 | fast-deep-equal "^2.0.1" 47 | fast-json-stable-stringify "^2.0.0" 48 | json-schema-traverse "^0.4.1" 49 | uri-js "^4.2.2" 50 | 51 | ansi-escapes@^3.2.0: 52 | version "3.2.0" 53 | resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" 54 | integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ== 55 | 56 | ansi-regex@^3.0.0: 57 | version "3.0.0" 58 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" 59 | integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= 60 | 61 | ansi-regex@^4.1.0: 62 | version "4.1.0" 63 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" 64 | integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== 65 | 66 | ansi-styles@^3.2.0, ansi-styles@^3.2.1: 67 | version "3.2.1" 68 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" 69 | integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== 70 | dependencies: 71 | color-convert "^1.9.0" 72 | 73 | argparse@^1.0.7: 74 | version "1.0.10" 75 | resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" 76 | integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== 77 | dependencies: 78 | sprintf-js "~1.0.2" 79 | 80 | astral-regex@^1.0.0: 81 | version "1.0.0" 82 | resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" 83 | integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg== 84 | 85 | balanced-match@^1.0.0: 86 | version "1.0.0" 87 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" 88 | integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= 89 | 90 | brace-expansion@^1.1.7: 91 | version "1.1.11" 92 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" 93 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== 94 | dependencies: 95 | balanced-match "^1.0.0" 96 | concat-map "0.0.1" 97 | 98 | buffer-from@^1.0.0: 99 | version "1.1.1" 100 | resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" 101 | integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== 102 | 103 | callsites@^3.0.0: 104 | version "3.1.0" 105 | resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" 106 | integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== 107 | 108 | chalk@^2.0.0, chalk@^2.1.0, chalk@^2.4.2: 109 | version "2.4.2" 110 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" 111 | integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== 112 | dependencies: 113 | ansi-styles "^3.2.1" 114 | escape-string-regexp "^1.0.5" 115 | supports-color "^5.3.0" 116 | 117 | chardet@^0.7.0: 118 | version "0.7.0" 119 | resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" 120 | integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== 121 | 122 | cli-cursor@^2.1.0: 123 | version "2.1.0" 124 | resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" 125 | integrity sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU= 126 | dependencies: 127 | restore-cursor "^2.0.0" 128 | 129 | cli-width@^2.0.0: 130 | version "2.2.0" 131 | resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639" 132 | integrity sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk= 133 | 134 | color-convert@^1.9.0: 135 | version "1.9.3" 136 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" 137 | integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== 138 | dependencies: 139 | color-name "1.1.3" 140 | 141 | color-name@1.1.3: 142 | version "1.1.3" 143 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" 144 | integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= 145 | 146 | commander@^2.20.0: 147 | version "2.20.0" 148 | resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.0.tgz#d58bb2b5c1ee8f87b0d340027e9e94e222c5a422" 149 | integrity sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ== 150 | 151 | concat-map@0.0.1: 152 | version "0.0.1" 153 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 154 | integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= 155 | 156 | core-util-is@~1.0.0: 157 | version "1.0.2" 158 | resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" 159 | integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= 160 | 161 | cross-spawn@^6.0.5: 162 | version "6.0.5" 163 | resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" 164 | integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== 165 | dependencies: 166 | nice-try "^1.0.4" 167 | path-key "^2.0.1" 168 | semver "^5.5.0" 169 | shebang-command "^1.2.0" 170 | which "^1.2.9" 171 | 172 | debug@^4.0.1: 173 | version "4.1.1" 174 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" 175 | integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== 176 | dependencies: 177 | ms "^2.1.1" 178 | 179 | deep-equal@~1.0.1: 180 | version "1.0.1" 181 | resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.0.1.tgz#f5d260292b660e084eff4cdbc9f08ad3247448b5" 182 | integrity sha1-9dJgKStmDghO/0zbyfCK0yR0SLU= 183 | 184 | deep-is@~0.1.3: 185 | version "0.1.3" 186 | resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" 187 | integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= 188 | 189 | define-properties@^1.1.2: 190 | version "1.1.3" 191 | resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" 192 | integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== 193 | dependencies: 194 | object-keys "^1.0.12" 195 | 196 | defined@~1.0.0: 197 | version "1.0.0" 198 | resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693" 199 | integrity sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM= 200 | 201 | doctrine@^3.0.0: 202 | version "3.0.0" 203 | resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" 204 | integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== 205 | dependencies: 206 | esutils "^2.0.2" 207 | 208 | emoji-regex@^7.0.1: 209 | version "7.0.3" 210 | resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" 211 | integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== 212 | 213 | es-abstract@^1.5.0: 214 | version "1.13.0" 215 | resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.13.0.tgz#ac86145fdd5099d8dd49558ccba2eaf9b88e24e9" 216 | integrity sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg== 217 | dependencies: 218 | es-to-primitive "^1.2.0" 219 | function-bind "^1.1.1" 220 | has "^1.0.3" 221 | is-callable "^1.1.4" 222 | is-regex "^1.0.4" 223 | object-keys "^1.0.12" 224 | 225 | es-to-primitive@^1.2.0: 226 | version "1.2.0" 227 | resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.0.tgz#edf72478033456e8dda8ef09e00ad9650707f377" 228 | integrity sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg== 229 | dependencies: 230 | is-callable "^1.1.4" 231 | is-date-object "^1.0.1" 232 | is-symbol "^1.0.2" 233 | 234 | escape-string-regexp@^1.0.5: 235 | version "1.0.5" 236 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" 237 | integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= 238 | 239 | eslint-scope@^5.0.0: 240 | version "5.0.0" 241 | resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.0.0.tgz#e87c8887c73e8d1ec84f1ca591645c358bfc8fb9" 242 | integrity sha512-oYrhJW7S0bxAFDvWqzvMPRm6pcgcnWc4QnofCAqRTRfQC0JcwenzGglTtsLyIuuWFfkqDG9vz67cnttSd53djw== 243 | dependencies: 244 | esrecurse "^4.1.0" 245 | estraverse "^4.1.1" 246 | 247 | eslint-utils@^1.3.1: 248 | version "1.4.0" 249 | resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.4.0.tgz#e2c3c8dba768425f897cf0f9e51fe2e241485d4c" 250 | integrity sha512-7ehnzPaP5IIEh1r1tkjuIrxqhNkzUJa9z3R92tLJdZIVdWaczEhr3EbhGtsMrVxi1KeR8qA7Off6SWc5WNQqyQ== 251 | dependencies: 252 | eslint-visitor-keys "^1.0.0" 253 | 254 | eslint-visitor-keys@^1.0.0: 255 | version "1.0.0" 256 | resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#3f3180fb2e291017716acb4c9d6d5b5c34a6a81d" 257 | integrity sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ== 258 | 259 | eslint@6: 260 | version "6.1.0" 261 | resolved "https://registry.yarnpkg.com/eslint/-/eslint-6.1.0.tgz#06438a4a278b1d84fb107d24eaaa35471986e646" 262 | integrity sha512-QhrbdRD7ofuV09IuE2ySWBz0FyXCq0rriLTZXZqaWSI79CVtHVRdkFuFTViiqzZhkCgfOh9USpriuGN2gIpZDQ== 263 | dependencies: 264 | "@babel/code-frame" "^7.0.0" 265 | ajv "^6.10.0" 266 | chalk "^2.1.0" 267 | cross-spawn "^6.0.5" 268 | debug "^4.0.1" 269 | doctrine "^3.0.0" 270 | eslint-scope "^5.0.0" 271 | eslint-utils "^1.3.1" 272 | eslint-visitor-keys "^1.0.0" 273 | espree "^6.0.0" 274 | esquery "^1.0.1" 275 | esutils "^2.0.2" 276 | file-entry-cache "^5.0.1" 277 | functional-red-black-tree "^1.0.1" 278 | glob-parent "^5.0.0" 279 | globals "^11.7.0" 280 | ignore "^4.0.6" 281 | import-fresh "^3.0.0" 282 | imurmurhash "^0.1.4" 283 | inquirer "^6.4.1" 284 | is-glob "^4.0.0" 285 | js-yaml "^3.13.1" 286 | json-stable-stringify-without-jsonify "^1.0.1" 287 | levn "^0.3.0" 288 | lodash "^4.17.14" 289 | minimatch "^3.0.4" 290 | mkdirp "^0.5.1" 291 | natural-compare "^1.4.0" 292 | optionator "^0.8.2" 293 | progress "^2.0.0" 294 | regexpp "^2.0.1" 295 | semver "^6.1.2" 296 | strip-ansi "^5.2.0" 297 | strip-json-comments "^3.0.1" 298 | table "^5.2.3" 299 | text-table "^0.2.0" 300 | v8-compile-cache "^2.0.3" 301 | 302 | esm@3: 303 | version "3.2.25" 304 | resolved "https://registry.yarnpkg.com/esm/-/esm-3.2.25.tgz#342c18c29d56157688ba5ce31f8431fbb795cc10" 305 | integrity sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA== 306 | 307 | espree@^6.0.0: 308 | version "6.0.0" 309 | resolved "https://registry.yarnpkg.com/espree/-/espree-6.0.0.tgz#716fc1f5a245ef5b9a7fdb1d7b0d3f02322e75f6" 310 | integrity sha512-lJvCS6YbCn3ImT3yKkPe0+tJ+mH6ljhGNjHQH9mRtiO6gjhVAOhVXW1yjnwqGwTkK3bGbye+hb00nFNmu0l/1Q== 311 | dependencies: 312 | acorn "^6.0.7" 313 | acorn-jsx "^5.0.0" 314 | eslint-visitor-keys "^1.0.0" 315 | 316 | esprima@^4.0.0: 317 | version "4.0.1" 318 | resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" 319 | integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== 320 | 321 | esquery@^1.0.1: 322 | version "1.0.1" 323 | resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.0.1.tgz#406c51658b1f5991a5f9b62b1dc25b00e3e5c708" 324 | integrity sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA== 325 | dependencies: 326 | estraverse "^4.0.0" 327 | 328 | esrecurse@^4.1.0: 329 | version "4.2.1" 330 | resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.1.tgz#007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf" 331 | integrity sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ== 332 | dependencies: 333 | estraverse "^4.1.0" 334 | 335 | estraverse@^4.0.0, estraverse@^4.1.0, estraverse@^4.1.1: 336 | version "4.2.0" 337 | resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13" 338 | integrity sha1-De4/7TH81GlhjOc0IJn8GvoL2xM= 339 | 340 | estree-walker@^0.6.1: 341 | version "0.6.1" 342 | resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-0.6.1.tgz#53049143f40c6eb918b23671d1fe3219f3a1b362" 343 | integrity sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w== 344 | 345 | esutils@^2.0.2: 346 | version "2.0.2" 347 | resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" 348 | integrity sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs= 349 | 350 | external-editor@^3.0.3: 351 | version "3.1.0" 352 | resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" 353 | integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== 354 | dependencies: 355 | chardet "^0.7.0" 356 | iconv-lite "^0.4.24" 357 | tmp "^0.0.33" 358 | 359 | fast-deep-equal@^2.0.1: 360 | version "2.0.1" 361 | resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49" 362 | integrity sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk= 363 | 364 | fast-json-stable-stringify@^2.0.0: 365 | version "2.0.0" 366 | resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" 367 | integrity sha1-1RQsDK7msRifh9OnYREGT4bIu/I= 368 | 369 | fast-levenshtein@~2.0.4: 370 | version "2.0.6" 371 | resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" 372 | integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= 373 | 374 | figures@^2.0.0: 375 | version "2.0.0" 376 | resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" 377 | integrity sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI= 378 | dependencies: 379 | escape-string-regexp "^1.0.5" 380 | 381 | file-entry-cache@^5.0.1: 382 | version "5.0.1" 383 | resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-5.0.1.tgz#ca0f6efa6dd3d561333fb14515065c2fafdf439c" 384 | integrity sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g== 385 | dependencies: 386 | flat-cache "^2.0.1" 387 | 388 | flat-cache@^2.0.1: 389 | version "2.0.1" 390 | resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-2.0.1.tgz#5d296d6f04bda44a4630a301413bdbc2ec085ec0" 391 | integrity sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA== 392 | dependencies: 393 | flatted "^2.0.0" 394 | rimraf "2.6.3" 395 | write "1.0.3" 396 | 397 | flatted@^2.0.0: 398 | version "2.0.1" 399 | resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.1.tgz#69e57caa8f0eacbc281d2e2cb458d46fdb449e08" 400 | integrity sha512-a1hQMktqW9Nmqr5aktAux3JMNqaucxGcjtjWnZLHX7yyPCmlSV3M54nGYbqT8K+0GhF3NBgmJCc3ma+WOgX8Jg== 401 | 402 | for-each@~0.3.3: 403 | version "0.3.3" 404 | resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" 405 | integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== 406 | dependencies: 407 | is-callable "^1.1.3" 408 | 409 | fs.realpath@^1.0.0: 410 | version "1.0.0" 411 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 412 | integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= 413 | 414 | function-bind@^1.0.2, function-bind@^1.1.1, function-bind@~1.1.1: 415 | version "1.1.1" 416 | resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" 417 | integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== 418 | 419 | functional-red-black-tree@^1.0.1: 420 | version "1.0.1" 421 | resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" 422 | integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= 423 | 424 | glob-parent@^5.0.0: 425 | version "5.0.0" 426 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.0.0.tgz#1dc99f0f39b006d3e92c2c284068382f0c20e954" 427 | integrity sha512-Z2RwiujPRGluePM6j699ktJYxmPpJKCfpGA13jz2hmFZC7gKetzrWvg5KN3+OsIFmydGyZ1AVwERCq1w/ZZwRg== 428 | dependencies: 429 | is-glob "^4.0.1" 430 | 431 | glob@^7.1.3, glob@~7.1.4: 432 | version "7.1.4" 433 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.4.tgz#aa608a2f6c577ad357e1ae5a5c26d9a8d1969255" 434 | integrity sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A== 435 | dependencies: 436 | fs.realpath "^1.0.0" 437 | inflight "^1.0.4" 438 | inherits "2" 439 | minimatch "^3.0.4" 440 | once "^1.3.0" 441 | path-is-absolute "^1.0.0" 442 | 443 | globals@^11.7.0: 444 | version "11.12.0" 445 | resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" 446 | integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== 447 | 448 | has-flag@^3.0.0: 449 | version "3.0.0" 450 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" 451 | integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= 452 | 453 | has-symbols@^1.0.0: 454 | version "1.0.0" 455 | resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.0.tgz#ba1a8f1af2a0fc39650f5c850367704122063b44" 456 | integrity sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q= 457 | 458 | has@^1.0.1, has@^1.0.3, has@~1.0.3: 459 | version "1.0.3" 460 | resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" 461 | integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== 462 | dependencies: 463 | function-bind "^1.1.1" 464 | 465 | iconv-lite@^0.4.24: 466 | version "0.4.24" 467 | resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" 468 | integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== 469 | dependencies: 470 | safer-buffer ">= 2.1.2 < 3" 471 | 472 | ignore@^4.0.6: 473 | version "4.0.6" 474 | resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" 475 | integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== 476 | 477 | import-fresh@^3.0.0: 478 | version "3.1.0" 479 | resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.1.0.tgz#6d33fa1dcef6df930fae003446f33415af905118" 480 | integrity sha512-PpuksHKGt8rXfWEr9m9EHIpgyyaltBy8+eF6GJM0QCAxMgxCfucMF3mjecK2QsJr0amJW7gTqh5/wht0z2UhEQ== 481 | dependencies: 482 | parent-module "^1.0.0" 483 | resolve-from "^4.0.0" 484 | 485 | imurmurhash@^0.1.4: 486 | version "0.1.4" 487 | resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" 488 | integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= 489 | 490 | inflight@^1.0.4: 491 | version "1.0.6" 492 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 493 | integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= 494 | dependencies: 495 | once "^1.3.0" 496 | wrappy "1" 497 | 498 | inherits@2, inherits@~2.0.3, inherits@~2.0.4: 499 | version "2.0.4" 500 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" 501 | integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== 502 | 503 | inquirer@^6.4.1: 504 | version "6.5.0" 505 | resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.5.0.tgz#2303317efc9a4ea7ec2e2df6f86569b734accf42" 506 | integrity sha512-scfHejeG/lVZSpvCXpsB4j/wQNPM5JC8kiElOI0OUTwmc1RTpXr4H32/HOlQHcZiYl2z2VElwuCVDRG8vFmbnA== 507 | dependencies: 508 | ansi-escapes "^3.2.0" 509 | chalk "^2.4.2" 510 | cli-cursor "^2.1.0" 511 | cli-width "^2.0.0" 512 | external-editor "^3.0.3" 513 | figures "^2.0.0" 514 | lodash "^4.17.12" 515 | mute-stream "0.0.7" 516 | run-async "^2.2.0" 517 | rxjs "^6.4.0" 518 | string-width "^2.1.0" 519 | strip-ansi "^5.1.0" 520 | through "^2.3.6" 521 | 522 | is-callable@^1.1.3, is-callable@^1.1.4: 523 | version "1.1.4" 524 | resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.4.tgz#1e1adf219e1eeb684d691f9d6a05ff0d30a24d75" 525 | integrity sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA== 526 | 527 | is-date-object@^1.0.1: 528 | version "1.0.1" 529 | resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16" 530 | integrity sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY= 531 | 532 | is-extglob@^2.1.1: 533 | version "2.1.1" 534 | resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" 535 | integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= 536 | 537 | is-fullwidth-code-point@^2.0.0: 538 | version "2.0.0" 539 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" 540 | integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= 541 | 542 | is-glob@^4.0.0, is-glob@^4.0.1: 543 | version "4.0.1" 544 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" 545 | integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== 546 | dependencies: 547 | is-extglob "^2.1.1" 548 | 549 | is-promise@^2.1.0: 550 | version "2.1.0" 551 | resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa" 552 | integrity sha1-eaKp7OfwlugPNtKy87wWwf9L8/o= 553 | 554 | is-regex@^1.0.4: 555 | version "1.0.4" 556 | resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491" 557 | integrity sha1-VRdIm1RwkbCTDglWVM7SXul+lJE= 558 | dependencies: 559 | has "^1.0.1" 560 | 561 | is-symbol@^1.0.2: 562 | version "1.0.2" 563 | resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.2.tgz#a055f6ae57192caee329e7a860118b497a950f38" 564 | integrity sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw== 565 | dependencies: 566 | has-symbols "^1.0.0" 567 | 568 | isarray@~1.0.0: 569 | version "1.0.0" 570 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" 571 | integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= 572 | 573 | isexe@^2.0.0: 574 | version "2.0.0" 575 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" 576 | integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= 577 | 578 | jest-worker@^24.6.0: 579 | version "24.6.0" 580 | resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-24.6.0.tgz#7f81ceae34b7cde0c9827a6980c35b7cdc0161b3" 581 | integrity sha512-jDwgW5W9qGNvpI1tNnvajh0a5IE/PuGLFmHk6aR/BZFz8tSgGw17GsDPXAJ6p91IvYDjOw8GpFbvvZGAK+DPQQ== 582 | dependencies: 583 | merge-stream "^1.0.1" 584 | supports-color "^6.1.0" 585 | 586 | js-tokens@^4.0.0: 587 | version "4.0.0" 588 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" 589 | integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== 590 | 591 | js-yaml@^3.13.1: 592 | version "3.13.1" 593 | resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847" 594 | integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw== 595 | dependencies: 596 | argparse "^1.0.7" 597 | esprima "^4.0.0" 598 | 599 | json-schema-traverse@^0.4.1: 600 | version "0.4.1" 601 | resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" 602 | integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== 603 | 604 | json-stable-stringify-without-jsonify@^1.0.1: 605 | version "1.0.1" 606 | resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" 607 | integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= 608 | 609 | levn@^0.3.0, levn@~0.3.0: 610 | version "0.3.0" 611 | resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" 612 | integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= 613 | dependencies: 614 | prelude-ls "~1.1.2" 615 | type-check "~0.3.2" 616 | 617 | lodash@^4.17.12, lodash@^4.17.14: 618 | version "4.17.15" 619 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" 620 | integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== 621 | 622 | merge-stream@^1.0.1: 623 | version "1.0.1" 624 | resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-1.0.1.tgz#4041202d508a342ba00174008df0c251b8c135e1" 625 | integrity sha1-QEEgLVCKNCugAXQAjfDCUbjBNeE= 626 | dependencies: 627 | readable-stream "^2.0.1" 628 | 629 | mimic-fn@^1.0.0: 630 | version "1.2.0" 631 | resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" 632 | integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== 633 | 634 | minimatch@^3.0.4: 635 | version "3.0.4" 636 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" 637 | integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== 638 | dependencies: 639 | brace-expansion "^1.1.7" 640 | 641 | minimist@0.0.8: 642 | version "0.0.8" 643 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" 644 | integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0= 645 | 646 | minimist@~1.2.0: 647 | version "1.2.0" 648 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" 649 | integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ= 650 | 651 | mkdirp@^0.5.1: 652 | version "0.5.1" 653 | resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" 654 | integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM= 655 | dependencies: 656 | minimist "0.0.8" 657 | 658 | ms@^2.1.1: 659 | version "2.1.2" 660 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" 661 | integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== 662 | 663 | mute-stream@0.0.7: 664 | version "0.0.7" 665 | resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" 666 | integrity sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s= 667 | 668 | natural-compare@^1.4.0: 669 | version "1.4.0" 670 | resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" 671 | integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= 672 | 673 | nice-try@^1.0.4: 674 | version "1.0.5" 675 | resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" 676 | integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== 677 | 678 | object-inspect@~1.6.0: 679 | version "1.6.0" 680 | resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.6.0.tgz#c70b6cbf72f274aab4c34c0c82f5167bf82cf15b" 681 | integrity sha512-GJzfBZ6DgDAmnuaM3104jR4s1Myxr3Y3zfIyN4z3UdqN69oSRacNK8UhnobDdC+7J2AHCjGwxQubNJfE70SXXQ== 682 | 683 | object-keys@^1.0.12: 684 | version "1.1.1" 685 | resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" 686 | integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== 687 | 688 | once@^1.3.0: 689 | version "1.4.0" 690 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 691 | integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= 692 | dependencies: 693 | wrappy "1" 694 | 695 | onetime@^2.0.0: 696 | version "2.0.1" 697 | resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" 698 | integrity sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ= 699 | dependencies: 700 | mimic-fn "^1.0.0" 701 | 702 | optionator@^0.8.2: 703 | version "0.8.2" 704 | resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64" 705 | integrity sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q= 706 | dependencies: 707 | deep-is "~0.1.3" 708 | fast-levenshtein "~2.0.4" 709 | levn "~0.3.0" 710 | prelude-ls "~1.1.2" 711 | type-check "~0.3.2" 712 | wordwrap "~1.0.0" 713 | 714 | os-tmpdir@~1.0.2: 715 | version "1.0.2" 716 | resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" 717 | integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= 718 | 719 | parent-module@^1.0.0: 720 | version "1.0.1" 721 | resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" 722 | integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== 723 | dependencies: 724 | callsites "^3.0.0" 725 | 726 | path-is-absolute@^1.0.0: 727 | version "1.0.1" 728 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 729 | integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= 730 | 731 | path-key@^2.0.1: 732 | version "2.0.1" 733 | resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" 734 | integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= 735 | 736 | path-parse@^1.0.6: 737 | version "1.0.6" 738 | resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" 739 | integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== 740 | 741 | prelude-ls@~1.1.2: 742 | version "1.1.2" 743 | resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" 744 | integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= 745 | 746 | process-nextick-args@~2.0.0: 747 | version "2.0.1" 748 | resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" 749 | integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== 750 | 751 | progress@^2.0.0: 752 | version "2.0.3" 753 | resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" 754 | integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== 755 | 756 | punycode@^2.1.0: 757 | version "2.1.1" 758 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" 759 | integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== 760 | 761 | readable-stream@^2.0.1: 762 | version "2.3.6" 763 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" 764 | integrity sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw== 765 | dependencies: 766 | core-util-is "~1.0.0" 767 | inherits "~2.0.3" 768 | isarray "~1.0.0" 769 | process-nextick-args "~2.0.0" 770 | safe-buffer "~5.1.1" 771 | string_decoder "~1.1.1" 772 | util-deprecate "~1.0.1" 773 | 774 | regexpp@^2.0.1: 775 | version "2.0.1" 776 | resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-2.0.1.tgz#8d19d31cf632482b589049f8281f93dbcba4d07f" 777 | integrity sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw== 778 | 779 | resolve-from@^4.0.0: 780 | version "4.0.0" 781 | resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" 782 | integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== 783 | 784 | resolve@~1.11.1: 785 | version "1.11.1" 786 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.11.1.tgz#ea10d8110376982fef578df8fc30b9ac30a07a3e" 787 | integrity sha512-vIpgF6wfuJOZI7KKKSP+HmiKggadPQAdsp5HiC1mvqnfp0gF1vdwgBWZIdrVft9pgqoMFQN+R7BSWZiBxx+BBw== 788 | dependencies: 789 | path-parse "^1.0.6" 790 | 791 | restore-cursor@^2.0.0: 792 | version "2.0.0" 793 | resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" 794 | integrity sha1-n37ih/gv0ybU/RYpI9YhKe7g368= 795 | dependencies: 796 | onetime "^2.0.0" 797 | signal-exit "^3.0.2" 798 | 799 | resumer@~0.0.0: 800 | version "0.0.0" 801 | resolved "https://registry.yarnpkg.com/resumer/-/resumer-0.0.0.tgz#f1e8f461e4064ba39e82af3cdc2a8c893d076759" 802 | integrity sha1-8ej0YeQGS6Oegq883CqMiT0HZ1k= 803 | dependencies: 804 | through "~2.3.4" 805 | 806 | rimraf@2.6.3: 807 | version "2.6.3" 808 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" 809 | integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== 810 | dependencies: 811 | glob "^7.1.3" 812 | 813 | rollup-plugin-terser@5: 814 | version "5.1.1" 815 | resolved "https://registry.yarnpkg.com/rollup-plugin-terser/-/rollup-plugin-terser-5.1.1.tgz#e9d2545ec8d467f96ba99b9216d2285aad8d5b66" 816 | integrity sha512-McIMCDEY8EU6Y839C09UopeRR56wXHGdvKKjlfiZG/GrP6wvZQ62u2ko/Xh1MNH2M9WDL+obAAHySljIZYCuPQ== 817 | dependencies: 818 | "@babel/code-frame" "^7.0.0" 819 | jest-worker "^24.6.0" 820 | rollup-pluginutils "^2.8.1" 821 | serialize-javascript "^1.7.0" 822 | terser "^4.1.0" 823 | 824 | rollup-pluginutils@^2.8.1: 825 | version "2.8.1" 826 | resolved "https://registry.yarnpkg.com/rollup-pluginutils/-/rollup-pluginutils-2.8.1.tgz#8fa6dd0697344938ef26c2c09d2488ce9e33ce97" 827 | integrity sha512-J5oAoysWar6GuZo0s+3bZ6sVZAC0pfqKz68De7ZgDi5z63jOVZn1uJL/+z1jeKHNbGII8kAyHF5q8LnxSX5lQg== 828 | dependencies: 829 | estree-walker "^0.6.1" 830 | 831 | rollup@1: 832 | version "1.17.0" 833 | resolved "https://registry.yarnpkg.com/rollup/-/rollup-1.17.0.tgz#47ee8b04514544fc93b39bae06271244c8db7dfa" 834 | integrity sha512-k/j1m0NIsI4SYgCJR4MWPstGJOWfJyd6gycKoMhyoKPVXxm+L49XtbUwZyFsrSU2YXsOkM4u1ll9CS/ZgJBUpw== 835 | dependencies: 836 | "@types/estree" "0.0.39" 837 | "@types/node" "^12.6.2" 838 | acorn "^6.2.0" 839 | 840 | run-async@^2.2.0: 841 | version "2.3.0" 842 | resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.3.0.tgz#0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0" 843 | integrity sha1-A3GrSuC91yDUFm19/aZP96RFpsA= 844 | dependencies: 845 | is-promise "^2.1.0" 846 | 847 | rxjs@^6.4.0: 848 | version "6.5.2" 849 | resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.5.2.tgz#2e35ce815cd46d84d02a209fb4e5921e051dbec7" 850 | integrity sha512-HUb7j3kvb7p7eCUHE3FqjoDsC1xfZQ4AHFWfTKSpZ+sAhhz5X1WX0ZuUqWbzB2QhSLp3DoLUG+hMdEDKqWo2Zg== 851 | dependencies: 852 | tslib "^1.9.0" 853 | 854 | safe-buffer@~5.1.0, safe-buffer@~5.1.1: 855 | version "5.1.2" 856 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" 857 | integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== 858 | 859 | "safer-buffer@>= 2.1.2 < 3": 860 | version "2.1.2" 861 | resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" 862 | integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== 863 | 864 | semver@^5.5.0: 865 | version "5.7.0" 866 | resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.0.tgz#790a7cf6fea5459bac96110b29b60412dc8ff96b" 867 | integrity sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA== 868 | 869 | semver@^6.1.2: 870 | version "6.3.0" 871 | resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" 872 | integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== 873 | 874 | serialize-javascript@^1.7.0: 875 | version "1.7.0" 876 | resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-1.7.0.tgz#d6e0dfb2a3832a8c94468e6eb1db97e55a192a65" 877 | integrity sha512-ke8UG8ulpFOxO8f8gRYabHQe/ZntKlcig2Mp+8+URDP1D8vJZ0KUt7LYo07q25Z/+JVSgpr/cui9PIp5H6/+nA== 878 | 879 | shebang-command@^1.2.0: 880 | version "1.2.0" 881 | resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" 882 | integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= 883 | dependencies: 884 | shebang-regex "^1.0.0" 885 | 886 | shebang-regex@^1.0.0: 887 | version "1.0.0" 888 | resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" 889 | integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= 890 | 891 | signal-exit@^3.0.2: 892 | version "3.0.2" 893 | resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" 894 | integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0= 895 | 896 | slice-ansi@^2.1.0: 897 | version "2.1.0" 898 | resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636" 899 | integrity sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ== 900 | dependencies: 901 | ansi-styles "^3.2.0" 902 | astral-regex "^1.0.0" 903 | is-fullwidth-code-point "^2.0.0" 904 | 905 | source-map-support@~0.5.12: 906 | version "0.5.12" 907 | resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.12.tgz#b4f3b10d51857a5af0138d3ce8003b201613d599" 908 | integrity sha512-4h2Pbvyy15EE02G+JOZpUCmqWJuqrs+sEkzewTm++BPi7Hvn/HwcqLAcNxYAyI0x13CpPPn+kMjl+hplXMHITQ== 909 | dependencies: 910 | buffer-from "^1.0.0" 911 | source-map "^0.6.0" 912 | 913 | source-map@^0.6.0, source-map@~0.6.1: 914 | version "0.6.1" 915 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" 916 | integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== 917 | 918 | sprintf-js@~1.0.2: 919 | version "1.0.3" 920 | resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" 921 | integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= 922 | 923 | string-width@^2.1.0: 924 | version "2.1.1" 925 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" 926 | integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== 927 | dependencies: 928 | is-fullwidth-code-point "^2.0.0" 929 | strip-ansi "^4.0.0" 930 | 931 | string-width@^3.0.0: 932 | version "3.1.0" 933 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" 934 | integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== 935 | dependencies: 936 | emoji-regex "^7.0.1" 937 | is-fullwidth-code-point "^2.0.0" 938 | strip-ansi "^5.1.0" 939 | 940 | string.prototype.trim@~1.1.2: 941 | version "1.1.2" 942 | resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.1.2.tgz#d04de2c89e137f4d7d206f086b5ed2fae6be8cea" 943 | integrity sha1-0E3iyJ4Tf019IG8Ia17S+ua+jOo= 944 | dependencies: 945 | define-properties "^1.1.2" 946 | es-abstract "^1.5.0" 947 | function-bind "^1.0.2" 948 | 949 | string_decoder@~1.1.1: 950 | version "1.1.1" 951 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" 952 | integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== 953 | dependencies: 954 | safe-buffer "~5.1.0" 955 | 956 | strip-ansi@^4.0.0: 957 | version "4.0.0" 958 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" 959 | integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= 960 | dependencies: 961 | ansi-regex "^3.0.0" 962 | 963 | strip-ansi@^5.1.0, strip-ansi@^5.2.0: 964 | version "5.2.0" 965 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" 966 | integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== 967 | dependencies: 968 | ansi-regex "^4.1.0" 969 | 970 | strip-json-comments@^3.0.1: 971 | version "3.0.1" 972 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.0.1.tgz#85713975a91fb87bf1b305cca77395e40d2a64a7" 973 | integrity sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw== 974 | 975 | supports-color@^5.3.0: 976 | version "5.5.0" 977 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" 978 | integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== 979 | dependencies: 980 | has-flag "^3.0.0" 981 | 982 | supports-color@^6.1.0: 983 | version "6.1.0" 984 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3" 985 | integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ== 986 | dependencies: 987 | has-flag "^3.0.0" 988 | 989 | table@^5.2.3: 990 | version "5.4.4" 991 | resolved "https://registry.yarnpkg.com/table/-/table-5.4.4.tgz#6e0f88fdae3692793d1077fd172a4667afe986a6" 992 | integrity sha512-IIfEAUx5QlODLblLrGTTLJA7Tk0iLSGBvgY8essPRVNGHAzThujww1YqHLs6h3HfTg55h++RzLHH5Xw/rfv+mg== 993 | dependencies: 994 | ajv "^6.10.2" 995 | lodash "^4.17.14" 996 | slice-ansi "^2.1.0" 997 | string-width "^3.0.0" 998 | 999 | tape-await@0.1: 1000 | version "0.1.2" 1001 | resolved "https://registry.yarnpkg.com/tape-await/-/tape-await-0.1.2.tgz#41f99110a2bc4728732d8bc058278b2fbf3c0bec" 1002 | integrity sha512-Gt1bXilp9uRTVj+DecLDs37tP1XwGXfFzWVqQEfW7foO9TNacy+aN5TdT0Kv6LI5t/9l3iOE4nX2hr2SQ4+OSg== 1003 | 1004 | tape@4: 1005 | version "4.11.0" 1006 | resolved "https://registry.yarnpkg.com/tape/-/tape-4.11.0.tgz#63d41accd95e45a23a874473051c57fdbc58edc1" 1007 | integrity sha512-yixvDMX7q7JIs/omJSzSZrqulOV51EC9dK8dM0TzImTIkHWfe2/kFyL5v+d9C+SrCMaICk59ujsqFAVidDqDaA== 1008 | dependencies: 1009 | deep-equal "~1.0.1" 1010 | defined "~1.0.0" 1011 | for-each "~0.3.3" 1012 | function-bind "~1.1.1" 1013 | glob "~7.1.4" 1014 | has "~1.0.3" 1015 | inherits "~2.0.4" 1016 | minimist "~1.2.0" 1017 | object-inspect "~1.6.0" 1018 | resolve "~1.11.1" 1019 | resumer "~0.0.0" 1020 | string.prototype.trim "~1.1.2" 1021 | through "~2.3.8" 1022 | 1023 | terser@^4.1.0: 1024 | version "4.1.2" 1025 | resolved "https://registry.yarnpkg.com/terser/-/terser-4.1.2.tgz#b2656c8a506f7ce805a3f300a2ff48db022fa391" 1026 | integrity sha512-jvNoEQSPXJdssFwqPSgWjsOrb+ELoE+ILpHPKXC83tIxOlh2U75F1KuB2luLD/3a6/7K3Vw5pDn+hvu0C4AzSw== 1027 | dependencies: 1028 | commander "^2.20.0" 1029 | source-map "~0.6.1" 1030 | source-map-support "~0.5.12" 1031 | 1032 | text-table@^0.2.0: 1033 | version "0.2.0" 1034 | resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" 1035 | integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= 1036 | 1037 | through@^2.3.6, through@~2.3.4, through@~2.3.8: 1038 | version "2.3.8" 1039 | resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" 1040 | integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= 1041 | 1042 | tmp@^0.0.33: 1043 | version "0.0.33" 1044 | resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" 1045 | integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== 1046 | dependencies: 1047 | os-tmpdir "~1.0.2" 1048 | 1049 | tslib@^1.9.0: 1050 | version "1.10.0" 1051 | resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.10.0.tgz#c3c19f95973fb0a62973fb09d90d961ee43e5c8a" 1052 | integrity sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ== 1053 | 1054 | type-check@~0.3.2: 1055 | version "0.3.2" 1056 | resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" 1057 | integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I= 1058 | dependencies: 1059 | prelude-ls "~1.1.2" 1060 | 1061 | uri-js@^4.2.2: 1062 | version "4.2.2" 1063 | resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" 1064 | integrity sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ== 1065 | dependencies: 1066 | punycode "^2.1.0" 1067 | 1068 | util-deprecate@~1.0.1: 1069 | version "1.0.2" 1070 | resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" 1071 | integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= 1072 | 1073 | v8-compile-cache@^2.0.3: 1074 | version "2.0.3" 1075 | resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.0.3.tgz#00f7494d2ae2b688cfe2899df6ed2c54bef91dbe" 1076 | integrity sha512-CNmdbwQMBjwr9Gsmohvm0pbL954tJrNzf6gWL3K+QMQf00PF7ERGrEiLgjuU3mKreLC2MeGhUsNV9ybTbLgd3w== 1077 | 1078 | which@^1.2.9: 1079 | version "1.3.1" 1080 | resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" 1081 | integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== 1082 | dependencies: 1083 | isexe "^2.0.0" 1084 | 1085 | wordwrap@~1.0.0: 1086 | version "1.0.0" 1087 | resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" 1088 | integrity sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus= 1089 | 1090 | wrappy@1: 1091 | version "1.0.2" 1092 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 1093 | integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= 1094 | 1095 | write@1.0.3: 1096 | version "1.0.3" 1097 | resolved "https://registry.yarnpkg.com/write/-/write-1.0.3.tgz#0800e14523b923a387e415123c865616aae0f5c3" 1098 | integrity sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig== 1099 | dependencies: 1100 | mkdirp "^0.5.1" 1101 | --------------------------------------------------------------------------------