├── .babelrc ├── .eslintignore ├── .eslintrc.js ├── .gitignore ├── .npmignore ├── .travis.yml ├── LICENSE ├── README.md ├── package.json ├── src ├── Edge.js ├── EdgeRing.js ├── EdgeRing.test.js ├── Graph.js ├── Graph.test.js ├── Node.js ├── Node.test.js ├── bench.js ├── index.js ├── test.js └── util.js ├── test ├── in │ ├── complex.geojson │ ├── cutedge.geojson │ ├── dangle.geojson │ ├── geometry-collection-two-polygons.geojson │ ├── kinked-linestring.geojson │ ├── linestrings.geojson │ ├── multi-linestring.geojson │ └── two-polygons.geojson └── out │ ├── complex.geojson │ ├── cutedge.geojson │ ├── dangle.geojson │ ├── geometry-collection-two-polygons.geojson │ ├── kinked-linestring.geojson │ ├── linestrings.geojson │ ├── multi-linestring.geojson │ └── two-polygons.geojson └── yarn.lock /.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": [ 3 | [ 4 | "env", 5 | { "modules": "commonjs" } 6 | ] 7 | ], 8 | "plugins": [ 9 | "add-module-exports" 10 | ] 11 | } 12 | -------------------------------------------------------------------------------- /.eslintignore: -------------------------------------------------------------------------------- 1 | /node_modules 2 | /cjs 3 | /es 4 | -------------------------------------------------------------------------------- /.eslintrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | extends: 'mourner', 3 | parserOptions: { 4 | sourceType: 'module' 5 | }, 6 | rules: { 7 | indent: ['error', 2], 8 | strict: [0], 9 | camelcase: [0], 10 | 'no-return-assign': ['error', 'except-parens'], 11 | 'consistent-return': [0], 12 | 'valid-jsdoc': [2, { 13 | prefer: {'return': 'returns'}, 14 | requireReturn: false 15 | }] 16 | } 17 | }; 18 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | cjs/ 3 | .*.sw* 4 | .esm-cache/ 5 | -------------------------------------------------------------------------------- /.npmignore: -------------------------------------------------------------------------------- 1 | *test.js 2 | /test/ 3 | bench.js 4 | .babelrc 5 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: node_js 2 | node_js: 3 | - 6 4 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2017 Nickcis 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy of 6 | this software and associated documentation files (the "Software"), to deal in 7 | the Software without restriction, including without limitation the rights to 8 | use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of 9 | the Software, and to permit persons to whom the Software is furnished to do so, 10 | subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS 17 | FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR 18 | COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER 19 | IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 20 | CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 21 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Polygonize 2 | 3 | [![Build Status](https://travis-ci.org/NickCis/polygonize.svg?branch=master)](https://travis-ci.org/NickCis/polygonize) 4 | 5 | Polygonizes a set of Geometrys which contain linework that represents the edges of a planar graph. It's basically an implementation of [GEOS's Polygonizer](https://github.com/echoz/xlibspatialite/blob/master/geos/include/geos/operation/polygonize/Polygonizer.h). 6 | 7 | Although, the algorithm is the same as GEOS, it isn't a literal transcription of the C++ source code. It was rewriten in order to get a more javascript like code. 8 | 9 | ## JSDoc 10 | 11 | ```javascript 12 | /** 13 | * Polygonizes {@link LineString|(Multi)LineString(s)} into {@link Polygons}. 14 | * 15 | * Implementation of GEOSPolygonize function (`geos::operation::polygonize::Polygonizer`). 16 | * 17 | * Polygonizes a set of lines that represents edges in a planar graph. Edges must be correctly 18 | * noded, i.e., they must only meet at their endpoints. 19 | * 20 | * The implementation correctly handles: 21 | * 22 | * - Dangles: edges which have one or both ends which are not incident on another edge endpoint. 23 | * - Cut Edges (bridges): edges that are connected at both ends but which do not form part of a polygon. 24 | * 25 | * @name polygonize 26 | * @param {FeatureCollection|Geometry|Feature} geoJson Lines in order to polygonize 27 | * @returns {FeatureCollection} Polygons created 28 | * @throws {Error} if geoJson is invalid. 29 | */ 30 | ``` 31 | 32 | ## Example 33 | 34 | This example is the test found in [`test/in/complex.geojson`](https://github.com/NickCis/polygonize/blob/master/test/in/complex.geojson). 35 | 36 | 37 | ```javascript 38 | const polygonize = require('polygonize'), 39 | fs = require('fs'), 40 | input = JSON.parse(fs.readFileSync('./test/in/complex.geojson')); 41 | 42 | console.log(JSON.stringify(polygonize(input))); 43 | ``` 44 | 45 | The [input](https://github.com/NickCis/polygonize/blob/master/test/in/complex.geojson) as GeoJson LineString: 46 | 47 | ![](https://cloud.githubusercontent.com/assets/174561/26525683/c30957de-4335-11e7-8eb9-bf72f268efb8.png) 48 | 49 | Turned into [polygons](https://github.com/NickCis/polygonize/blob/master/test/out/complex.geojson): 50 | 51 | ![](https://cloud.githubusercontent.com/assets/174561/26525695/24f5270c-4336-11e7-9b62-60db8c0c9a28.png) 52 | 53 | 54 | ## Documentation 55 | 56 | Polygonizes [(Multi)LineString(s)](http://geojson.org/geojson-spec.html#linestring) into [Polygons](Polygons). 57 | 58 | Implementation of GEOSPolygonize function (`geos::operation::polygonize::Polygonizer`). 59 | 60 | Polygonizes a set of lines that represents edges in a planar graph. Edges must be correctly noded, i.e., they must only meet at their endpoints. 61 | 62 | The implementation correctly handles: 63 | 64 | - Dangles: edges which have one or both ends which are not incident on another edge endpoint. 65 | - Cut Edges (bridges): edges that are connected at both ends but which do not form part of a polygon. 66 | 67 | **Parameters** 68 | 69 | - `geojson` **([FeatureCollection](http://geojson.org/geojson-spec.html#feature-collection-objects) \| [Geometry](http://geojson.org/geojson-spec.html#geometry) \| [Feature](http://geojson.org/geojson-spec.html#feature-objects)<([LineString](http://geojson.org/geojson-spec.html#linestring) \| [MultiLineString](http://geojson.org/geojson-spec.html#multilinestring))>)** Lines in order to polygonize 70 | 71 | 72 | - Throws **[Error](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error)** if geoJson is invalid. 73 | 74 | Returns **[FeatureCollection](http://geojson.org/geojson-spec.html#feature-collection-objects)<[Polygon](http://geojson.org/geojson-spec.html#polygon)>** Polygons created 75 | 76 | ### Installation 77 | 78 | Install this module individually: 79 | 80 | ```sh 81 | $ npm install polygonize 82 | ``` 83 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "polygonize", 3 | "version": "1.0.4", 4 | "description": "Javascript implementation of GEOS's Polygonize function", 5 | "main": "cjs/index.js", 6 | "module": "src/index.js", 7 | "scripts": { 8 | "test": "npm run lint && npm run test-src && npm run bench", 9 | "test-cjs": "npm run build-cjs && tape cjs/*.test.js cjs/test.js", 10 | "test-src": "tape -r @std/esm src/*.test.js src/test.js", 11 | "lint": "eslint .", 12 | "prebuild": "rimraf cjs", 13 | "build-cjs": "babel src --out-dir cjs", 14 | "build": "npm run build-cjs", 15 | "prepublishOnly": "npm run build", 16 | "bench-src": "node -r @std/esm src/bench.js", 17 | "bench-cjs": "node cjs/bench.js", 18 | "bench": "npm run bench-src" 19 | }, 20 | "repository": { 21 | "type": "git", 22 | "url": "git://github.com/nickcis/polygonize.git" 23 | }, 24 | "keywords": [ 25 | "geojson", 26 | "gis", 27 | "polygonize", 28 | "polygon", 29 | "line", 30 | "linestring" 31 | ], 32 | "author": "Nicolas Cisco <@nickcis>", 33 | "license": "MIT", 34 | "bugs": { 35 | "url": "https://github.com/nickcis/polygonize/issues" 36 | }, 37 | "homepage": "https://github.com/nickcis/polygonize#readme", 38 | "devDependencies": { 39 | "@std/esm": "^0.11.3", 40 | "babel-cli": "^6.26.0", 41 | "babel-plugin-add-module-exports": "^0.2.1", 42 | "babel-preset-env": "^1.6.1", 43 | "benchmark": "^2.1.4", 44 | "eslint": "^3.19.0", 45 | "eslint-config-mourner": "^2.0.1", 46 | "load-json-file": "^2.0.0", 47 | "rimraf": "^2.6.2", 48 | "tape": "^4.6.3", 49 | "write-json-file": "^2.2.0" 50 | }, 51 | "dependencies": { 52 | "@turf/envelope": "*", 53 | "@turf/helpers": "*", 54 | "@turf/boolean-point-in-polygon": "*", 55 | "@turf/invariant": "*", 56 | "@turf/meta": "*" 57 | }, 58 | "@std/esm": { 59 | "esm": "js", 60 | "cjs": true 61 | } 62 | } 63 | -------------------------------------------------------------------------------- /src/Edge.js: -------------------------------------------------------------------------------- 1 | import {lineString} from '@turf/helpers'; 2 | import {orientationIndex} from './util'; 3 | 4 | /** This class is inspired by GEOS's geos::operation::polygonize::PolygonizeDirectedEdge 5 | */ 6 | class Edge { 7 | /** Creates or get the symetric Edge. 8 | * 9 | * @returns {Edge} - Symetric Edge. 10 | */ 11 | getSymetric() { 12 | if (!this.symetric) { 13 | this.symetric = new Edge(this.to, this.from); 14 | this.symetric.symetric = this; 15 | } 16 | 17 | return this.symetric; 18 | } 19 | 20 | /** 21 | * @param {Node} from - start node of the Edge 22 | * @param {Node} to - end node of the edge 23 | */ 24 | constructor(from, to) { 25 | this.from = from; //< start 26 | this.to = to; //< End 27 | 28 | this.next = undefined; //< The edge to be computed after 29 | this.label = undefined; //< Used in order to detect Cut Edges (Bridges) 30 | this.symetric = undefined; //< The symetric edge of this 31 | this.ring = undefined; //< EdgeRing in which the Edge is 32 | 33 | this.from.addOuterEdge(this); 34 | this.to.addInnerEdge(this); 35 | } 36 | 37 | /** Removes edge from from and to nodes. 38 | */ 39 | deleteEdge() { 40 | this.from.removeOuterEdge(this); 41 | this.to.removeInnerEdge(this); 42 | } 43 | 44 | /** Compares Edge equallity. 45 | * An edge is equal to another, if the from and to nodes are the same. 46 | * 47 | * @param {Edge} edge - Another Edge 48 | * @returns {Boolean} - True if Edges are equal, False otherwise 49 | */ 50 | isEqual(edge) { 51 | return this.from.id === edge.from.id && this.to.id === edge.to.id; 52 | } 53 | 54 | toString() { 55 | return `Edge { ${this.from.id} -> ${this.to.id} }`; 56 | } 57 | 58 | /** Returns a LineString representation of the Edge 59 | * 60 | * @returns {Feature} - LineString representation of the Edge 61 | */ 62 | toLineString() { 63 | return lineString([this.from.coordinates, this.to.coordinates]); 64 | } 65 | 66 | /** Comparator of two edges. 67 | * Implementation of geos::planargraph::DirectedEdge::compareTo. 68 | * 69 | * @param {Edge} edge - Another edge to compare with this one 70 | * @returns {Number} -1 if this Edge has a greater angle with the positive x-axis than b, 71 | * 0 if the Edges are colinear, 72 | * 1 otherwise 73 | */ 74 | compareTo(edge) { 75 | return orientationIndex(edge.from.coordinates, edge.to.coordinates, this.to.coordinates); 76 | } 77 | } 78 | 79 | export default Edge; 80 | -------------------------------------------------------------------------------- /src/EdgeRing.js: -------------------------------------------------------------------------------- 1 | import {orientationIndex, envelopeIsEqual, envelopeContains, coordinatesEqual} from './util'; 2 | import {multiPoint, polygon, point} from '@turf/helpers'; 3 | import envelope from '@turf/envelope'; 4 | import booleanPointInPolygon from '@turf/boolean-point-in-polygon'; 5 | 6 | /** Ring of edges which form a polygon. 7 | * The ring may be either an outer shell or a hole. 8 | * 9 | * This class is inspired in GEOS's geos::operation::polygonize::EdgeRing 10 | */ 11 | class EdgeRing { 12 | constructor() { 13 | this.edges = []; 14 | this.polygon = undefined; //< Caches Polygon representation 15 | this.envelope = undefined; //< Caches Envelope representation 16 | } 17 | 18 | /** Add an edge to the ring, inserting it in the last position. 19 | * 20 | * @param {Edge} edge - Edge to be inserted 21 | */ 22 | push(edge) { 23 | // Emulate Array getter ([]) behaviour 24 | this[this.edges.length] = edge; 25 | this.edges.push(edge); 26 | this.polygon = this.envelope = undefined; 27 | } 28 | 29 | /** Get Edge. 30 | * 31 | * @param {Number} i - Index 32 | * @returns {Edge} - Edge in the i position 33 | */ 34 | get(i) { 35 | return this.edges[i]; 36 | } 37 | 38 | /** Getter of length property. 39 | * 40 | * @returns {Number} - Length of the edge ring. 41 | */ 42 | get length() { 43 | return this.edges.length; 44 | } 45 | 46 | /** Similar to Array.prototype.forEach for the list of Edges in the EdgeRing. 47 | * 48 | * @param {Function} f - The same function to be passed to Array.prototype.forEach 49 | */ 50 | forEach(f) { 51 | this.edges.forEach(f); 52 | } 53 | 54 | /** Similar to Array.prototype.map for the list of Edges in the EdgeRing. 55 | * 56 | * @param {Function} f - The same function to be passed to Array.prototype.map 57 | * @returns {Array} - The mapped values in the function 58 | */ 59 | map(f) { 60 | return this.edges.map(f); 61 | } 62 | 63 | /** Similar to Array.prototype.some for the list of Edges in the EdgeRing. 64 | * 65 | * @param {Function} f - The same function to be passed to Array.prototype.some 66 | * @returns {Boolean} - True if an Edge check the condition 67 | */ 68 | some(f) { 69 | return this.edges.some(f); 70 | } 71 | 72 | /** Check if the ring is valid in geomtry terms. 73 | * A ring must have either 0 or 4 or more points. The first and the last must be 74 | * equal (in 2D) 75 | * geos::geom::LinearRing::validateConstruction 76 | * 77 | * @returns {Boolean} - Validity of the EdgeRing 78 | */ 79 | isValid() { 80 | // TODO: stub 81 | return true; 82 | } 83 | 84 | /** Tests whether this ring is a hole. 85 | * A ring is a hole if it is oriented counter-clockwise. 86 | * Similar implementation of geos::algorithm::CGAlgorithms::isCCW 87 | * @returns {Boolean} - true: if it is a hole 88 | */ 89 | isHole() { 90 | // XXX: Assuming Ring is valid 91 | // Find highest point 92 | const hiIndex = this.edges.reduce((high, edge, i) => { 93 | if (edge.from.coordinates[1] > this.edges[high].from.coordinates[1]) 94 | high = i; 95 | return high; 96 | }, 0), 97 | iPrev = (hiIndex === 0 ? this.length : hiIndex) - 1, 98 | iNext = (hiIndex + 1) % this.length, 99 | disc = orientationIndex(this.edges[iPrev].from.coordinates, this.edges[hiIndex].from.coordinates, this.edges[iNext].from.coordinates); 100 | 101 | if (disc === 0) 102 | return this.edges[iPrev].from.coordinates[0] > this.edges[iNext].from.coordinates[0]; 103 | return disc > 0; 104 | } 105 | 106 | /** Creates a MultiPoint representing the EdgeRing (discarts edges directions). 107 | * @returns {Feature} - Multipoint representation of the EdgeRing 108 | */ 109 | toMultiPoint() { 110 | return multiPoint(this.edges.map(edge => edge.from.coordinates)); 111 | } 112 | 113 | /** Creates a Polygon representing the EdgeRing. 114 | * @returns {Feature} - Polygon representation of the Edge Ring 115 | */ 116 | toPolygon() { 117 | if (this.polygon) 118 | return this.polygon; 119 | const coordinates = this.edges.map(edge => edge.from.coordinates); 120 | coordinates.push(this.edges[0].from.coordinates); 121 | return (this.polygon = polygon([coordinates])); 122 | } 123 | 124 | /** Calculates the envelope of the EdgeRing. 125 | * @returns {Feature} - envelope 126 | */ 127 | getEnvelope() { 128 | if (this.envelope) 129 | return this.envelope; 130 | return (this.envelope = envelope(this.toPolygon())); 131 | } 132 | 133 | /** 134 | * `geos::operation::polygonize::EdgeRing::findEdgeRingContaining` 135 | * 136 | * @param {EdgeRing} testEdgeRing - EdgeRing to look in the list 137 | * @param {EdgeRing[]} shellList - List of EdgeRing in which to search 138 | * 139 | * @returns {EdgeRing} - EdgeRing which contains the testEdgeRing 140 | */ 141 | static findEdgeRingContaining(testEdgeRing, shellList) { 142 | const testEnvelope = testEdgeRing.getEnvelope(); 143 | 144 | let minEnvelope, 145 | minShell; 146 | shellList.forEach(shell => { 147 | const tryEnvelope = shell.getEnvelope(); 148 | 149 | if (minShell) 150 | minEnvelope = minShell.getEnvelope(); 151 | 152 | // the hole envelope cannot equal the shell envelope 153 | if (envelopeIsEqual(tryEnvelope, testEnvelope)) 154 | return; 155 | 156 | if (envelopeContains(tryEnvelope, testEnvelope)) { 157 | const testPoint = testEdgeRing.map(edge => edge.from.coordinates) 158 | .find(pt => !shell.some(edge => coordinatesEqual(pt, edge.from.coordinates))); 159 | 160 | if (testPoint && shell.inside(point(testPoint))) { 161 | if (!minShell || envelopeContains(minEnvelope, tryEnvelope)) 162 | minShell = shell; 163 | } 164 | } 165 | }); 166 | 167 | return minShell; 168 | } 169 | 170 | /** Checks if the point is inside the edgeRing 171 | * 172 | * @param {Feature} point - Point to check if it is inside the edgeRing 173 | * @returns {Boolean} - True if it is inside, False otherwise 174 | */ 175 | inside(point) { 176 | return booleanPointInPolygon(point, this.toPolygon()); 177 | } 178 | } 179 | 180 | export default EdgeRing; 181 | -------------------------------------------------------------------------------- /src/EdgeRing.test.js: -------------------------------------------------------------------------------- 1 | import test from 'tape'; 2 | import EdgeRing from './EdgeRing'; 3 | import Edge from './Edge'; 4 | import Node from './Node'; 5 | 6 | test('EdgeRing.isHole', t => { 7 | let edgeRing = new EdgeRing(); 8 | edgeRing.push(new Edge(new Node([0, 0]), new Node([1, 0]))); 9 | edgeRing.push(new Edge(edgeRing[0].to, new Node([0, 1]))); 10 | edgeRing.push(new Edge(edgeRing[1].to, edgeRing[0].from)); 11 | 12 | t.ok(edgeRing.isHole(), 'A EdgeRing with elements in CCW order has to be a Hole'); 13 | 14 | edgeRing = new EdgeRing(); 15 | edgeRing.push(new Edge(new Node([0, 0]), new Node([0, 1]))); 16 | edgeRing.push(new Edge(edgeRing[0].to, new Node([1, 0]))); 17 | edgeRing.push(new Edge(edgeRing[1].to, edgeRing[0].from)); 18 | 19 | t.notOk(edgeRing.isHole(), 'A EdgeRing with elements in CW order does not have to be a Hole'); 20 | 21 | t.end(); 22 | }); 23 | -------------------------------------------------------------------------------- /src/Graph.js: -------------------------------------------------------------------------------- 1 | import Node from './Node'; 2 | import Edge from './Edge'; 3 | import EdgeRing from './EdgeRing'; 4 | import {flattenEach, coordReduce} from '@turf/meta'; 5 | import {featureOf} from '@turf/invariant'; 6 | 7 | /** Validates the geoJson. 8 | * 9 | * @param {Geojson} geoJson - input geoJson. 10 | * @throws {Error} if geoJson is invalid. 11 | */ 12 | function validateGeoJson(geoJson) { 13 | if (!geoJson) 14 | throw new Error('No geojson passed'); 15 | 16 | if (geoJson.type !== 'FeatureCollection' && 17 | geoJson.type !== 'GeometryCollection' && 18 | geoJson.type !== 'MultiLineString' && 19 | geoJson.type !== 'LineString' && 20 | geoJson.type !== 'Feature' 21 | ) 22 | throw new Error(`Invalid input type '${geoJson.type}'. Geojson must be FeatureCollection, GeometryCollection, LineString, MultiLineString or Feature`); 23 | } 24 | 25 | /** Represents a planar graph of edges and nodes that can be used to compute a 26 | * polygonization. 27 | * 28 | * Although, this class is inspired by GEOS's `geos::operation::polygonize::PolygonizeGraph`, 29 | * it isn't a rewrite. As regards algorithm, this class implements the same logic, but it 30 | * isn't a javascript transcription of the C++ source. 31 | * 32 | * This graph is directed (both directions are created) 33 | */ 34 | class Graph { 35 | /** Creates a graph from a GeoJSON. 36 | * 37 | * @param {FeatureCollection} geoJson - it must comply with the restrictions detailed in the index 38 | * @returns {Graph} - The newly created graph 39 | * @throws {Error} if geoJson is invalid. 40 | */ 41 | static fromGeoJson(geoJson) { 42 | validateGeoJson(geoJson); 43 | 44 | const graph = new Graph(); 45 | flattenEach(geoJson, feature => { 46 | featureOf(feature, 'LineString', 'Graph::fromGeoJson'); 47 | // When a LineString if formed by many segments, split them 48 | coordReduce(feature, (prev, cur) => { 49 | if (prev) { 50 | const start = graph.getNode(prev), 51 | end = graph.getNode(cur); 52 | 53 | graph.addEdge(start, end); 54 | } 55 | return cur; 56 | }); 57 | }); 58 | 59 | return graph; 60 | } 61 | 62 | /** Creates or get a Node. 63 | * 64 | * @param {Number[]} coordinates - Coordinates of the node 65 | * @returns {Node} - The created or stored node 66 | */ 67 | getNode(coordinates) { 68 | const id = Node.buildId(coordinates); 69 | let node = this.nodes[id]; 70 | if (!node) 71 | node = this.nodes[id] = new Node(coordinates); 72 | 73 | return node; 74 | } 75 | 76 | /** Adds an Edge and its symetricall. 77 | * Edges are added symetrically, i.e.: we also add its symetric 78 | * 79 | * @param {Node} from - Node which starts the Edge 80 | * @param {Node} to - Node which ends the Edge 81 | */ 82 | addEdge(from, to) { 83 | const edge = new Edge(from, to), 84 | symetricEdge = edge.getSymetric(); 85 | 86 | this.edges.push(edge); 87 | this.edges.push(symetricEdge); 88 | } 89 | 90 | constructor() { 91 | this.edges = []; //< {Edge[]} dirEdges 92 | 93 | // The key is the `id` of the Node (ie: coordinates.join(',')) 94 | this.nodes = {}; 95 | } 96 | 97 | /** Removes Dangle Nodes (nodes with grade 1). 98 | */ 99 | deleteDangles() { 100 | Object.keys(this.nodes) 101 | .map(id => this.nodes[id]) 102 | .forEach(node => this._removeIfDangle(node)); 103 | } 104 | 105 | /** Check if node is dangle, if so, remove it. 106 | * It calls itself recursively, removing a dangling node might cause another dangling node 107 | * 108 | * @param {Node} node - Node to check if it's a dangle 109 | */ 110 | _removeIfDangle(node) { 111 | // As edges are directed and symetrical, we count only innerEdges 112 | if (node.innerEdges.length <= 1) { 113 | const outerNodes = node.getOuterEdges().map(e => e.to); 114 | this.removeNode(node); 115 | outerNodes.forEach(n => this._removeIfDangle(n)); 116 | } 117 | } 118 | 119 | /** Delete cut-edges (bridge edges). 120 | * 121 | * The graph will be traversed, all the edges will be labeled according the ring 122 | * in which they are. (The label is a number incremented by 1). Edges with the same 123 | * label are cut-edges. 124 | */ 125 | deleteCutEdges() { 126 | this._computeNextCWEdges(); 127 | this._findLabeledEdgeRings(); 128 | 129 | // Cut-edges (bridges) are edges where both edges have the same label 130 | this.edges.forEach(edge => { 131 | if (edge.label === edge.symetric.label) { 132 | this.removeEdge(edge.symetric); 133 | this.removeEdge(edge); 134 | } 135 | }); 136 | } 137 | 138 | /** Set the `next` property of each Edge. 139 | * The graph will be transversed in a CW form, so, we set the next of the symetrical edge as the previous one. 140 | * OuterEdges are sorted CCW. 141 | * 142 | * @param {Node} [node] - If no node is passed, the function calls itself for every node in the Graph 143 | */ 144 | _computeNextCWEdges(node) { 145 | if (typeof node === 'undefined') { 146 | Object.keys(this.nodes) 147 | .forEach(id => this._computeNextCWEdges(this.nodes[id])); 148 | } else { 149 | node.getOuterEdges().forEach((edge, i) => { 150 | node.getOuterEdge((i === 0 ? node.getOuterEdges().length : i) - 1).symetric.next = edge; 151 | }); 152 | } 153 | } 154 | 155 | /** Computes the next edge pointers going CCW around the given node, for the given edgering label. 156 | * This algorithm has the effect of converting maximal edgerings into minimal edgerings 157 | * 158 | * XXX: method literally transcribed from `geos::operation::polygonize::PolygonizeGraph::computeNextCCWEdges`, 159 | * could be written in a more javascript way. 160 | * 161 | * @param {Node} node - Node 162 | * @param {Number} label - Ring's label 163 | */ 164 | _computeNextCCWEdges(node, label) { 165 | const edges = node.getOuterEdges(); 166 | let firstOutDE, 167 | prevInDE; 168 | 169 | for (let i = edges.length - 1; i >= 0; --i) { 170 | let de = edges[i], 171 | sym = de.symetric, 172 | outDE, 173 | inDE; 174 | 175 | if (de.label === label) 176 | outDE = de; 177 | 178 | if (sym.label === label) 179 | inDE = sym; 180 | 181 | if (!outDE || !inDE) // This edge is not in edgering 182 | continue; 183 | 184 | if (inDE) 185 | prevInDE = inDE; 186 | 187 | if (outDE) { 188 | if (prevInDE) { 189 | prevInDE.next = outDE; 190 | prevInDE = undefined; 191 | } 192 | 193 | if (!firstOutDE) 194 | firstOutDE = outDE; 195 | } 196 | } 197 | 198 | if (prevInDE) 199 | prevInDE.next = firstOutDE; 200 | } 201 | 202 | 203 | /** Finds rings and labels edges according to which rings are. 204 | * The label is a number which is increased for each ring. 205 | * 206 | * @returns {Edge[]} edges that start rings 207 | */ 208 | _findLabeledEdgeRings() { 209 | const edgeRingStarts = []; 210 | let label = 0; 211 | this.edges.forEach(edge => { 212 | if (edge.label >= 0) 213 | return; 214 | 215 | edgeRingStarts.push(edge); 216 | 217 | let e = edge; 218 | do { 219 | e.label = label; 220 | e = e.next; 221 | } while (!edge.isEqual(e)); 222 | 223 | label++; 224 | }); 225 | 226 | return edgeRingStarts; 227 | } 228 | 229 | /** Computes the EdgeRings formed by the edges in this graph. 230 | * 231 | * @returns {EdgeRing[]} - A list of all the EdgeRings in the graph. 232 | */ 233 | getEdgeRings() { 234 | this._computeNextCWEdges(); 235 | 236 | // Clear labels 237 | this.edges.forEach(edge => { 238 | edge.label = undefined; 239 | }); 240 | 241 | this._findLabeledEdgeRings().forEach(edge => { 242 | // convertMaximalToMinimalEdgeRings 243 | this._findIntersectionNodes(edge).forEach(node => { 244 | this._computeNextCCWEdges(node, edge.label); 245 | }); 246 | }); 247 | 248 | const edgeRingList = []; 249 | 250 | // find all edgerings 251 | this.edges.forEach(edge => { 252 | if (edge.ring) 253 | return; 254 | edgeRingList.push(this._findEdgeRing(edge)); 255 | }); 256 | 257 | return edgeRingList; 258 | } 259 | 260 | /** Find all nodes in a Maxima EdgeRing which are self-intersection nodes. 261 | * 262 | * @param {Node} startEdge - Start Edge of the Ring 263 | * @returns {Node[]} - intersection nodes 264 | */ 265 | _findIntersectionNodes(startEdge) { 266 | const intersectionNodes = []; 267 | let edge = startEdge; 268 | do { 269 | // getDegree 270 | let degree = 0; 271 | edge.from.getOuterEdges().forEach(e => { 272 | if (e.label === startEdge.label) 273 | ++degree; 274 | }); 275 | 276 | if (degree > 1) 277 | intersectionNodes.push(edge.from); 278 | 279 | edge = edge.next; 280 | } while (!startEdge.isEqual(edge)); 281 | 282 | return intersectionNodes; 283 | } 284 | 285 | /** Get the edge-ring which starts from the provided Edge. 286 | * 287 | * @param {Edge} startEdge - starting edge of the edge ring 288 | * @returns {EdgeRing} - EdgeRing which start Edge is the provided one. 289 | */ 290 | _findEdgeRing(startEdge) { 291 | let edge = startEdge; 292 | const edgeRing = new EdgeRing(); 293 | 294 | do { 295 | edgeRing.push(edge); 296 | edge.ring = edgeRing; 297 | edge = edge.next; 298 | } while (!startEdge.isEqual(edge)); 299 | 300 | return edgeRing; 301 | } 302 | 303 | /** Removes a node from the Graph. 304 | * 305 | * It also removes edges asociated to that node 306 | * @param {Node} node - Node to be removed 307 | */ 308 | removeNode(node) { 309 | node.getOuterEdges().forEach(edge => this.removeEdge(edge)); 310 | node.innerEdges.forEach(edge => this.removeEdge(edge)); 311 | delete this.nodes[node.id]; 312 | } 313 | 314 | /** Remove edge from the graph and deletes the edge. 315 | * 316 | * @param {Edge} edge - Edge to be removed 317 | */ 318 | removeEdge(edge) { 319 | this.edges = this.edges.filter(e => !e.isEqual(edge)); 320 | edge.deleteEdge(); 321 | } 322 | } 323 | 324 | export default Graph; 325 | -------------------------------------------------------------------------------- /src/Graph.test.js: -------------------------------------------------------------------------------- 1 | import test from 'tape'; 2 | import Graph from './Graph'; 3 | import Node from './Node'; 4 | import {featureCollection, lineString} from '@turf/helpers'; 5 | 6 | test('Graph :: fromGeoJson', t => { 7 | const geoJson = featureCollection( 8 | [ 9 | lineString([[0, 1], [0, 0]]), 10 | lineString([[1, 1], [0, 0]]), 11 | lineString([[1, 0], [0, 0]]) 12 | ] 13 | ), 14 | graph = Graph.fromGeoJson(geoJson); 15 | 16 | t.equal(Object.keys(graph.nodes).length, 4, 'The graph has to have the correct number of nodes'); 17 | 18 | // Edges are symetric 19 | t.equal(graph.edges.length, 6, 'The graph has to have the correct number of edges'); 20 | 21 | t.end(); 22 | }); 23 | 24 | test('Graph :: deleteDangles', t => { 25 | const geoJson = featureCollection( 26 | [ 27 | lineString([[0, 0], [0, 1]]), 28 | lineString([[0, 1], [0, 2]]), 29 | lineString([[0, 1], [1, 1]]), 30 | lineString([[1, 1], [1, 0]]), 31 | lineString([[1, 0], [0, 0]]) 32 | ] 33 | ), 34 | graph = Graph.fromGeoJson(geoJson); 35 | 36 | graph.deleteDangles(); 37 | 38 | t.equal(Object.keys(graph.nodes).length, 4); 39 | 40 | t.notOk(graph.nodes[Node.buildId([0, 2])], 'Dangle node has to be removed'); 41 | 42 | t.end(); 43 | }); 44 | 45 | test('Graph :: deleteCutEdges', t => { 46 | const geoJson = featureCollection( 47 | [ 48 | lineString([[0, 0], [0, 1]]), 49 | lineString([[0, 1], [1, 1]]), 50 | lineString([[0, 0], [1, 1]]), 51 | lineString([[1, 1], [2, 1]]), 52 | lineString([[2, 1], [3, 1]]), 53 | lineString([[3, 1], [3, 0]]), 54 | lineString([[2, 1], [3, 0]]) 55 | ] 56 | ), 57 | graph = Graph.fromGeoJson(geoJson); 58 | 59 | graph.deleteCutEdges(); 60 | 61 | t.equal(Object.keys(graph.nodes).length, 6); 62 | t.equal(graph.edges.length, 12); 63 | 64 | t.notOk(graph.edges.find(e => e.to.id === Node.buildId([1, 1]) && e.from.id === Node.buildId([2, 1]))); 65 | t.notOk(graph.edges.find(e => e.to.id === Node.buildId([2, 1]) && e.from.id === Node.buildId([1, 1]))); 66 | 67 | t.end(); 68 | }); 69 | 70 | test('Graph :: getEdgeRings', t => { 71 | const geoJson = featureCollection( 72 | [ 73 | lineString([[0, 0], [0, 1]]), 74 | lineString([[0, 1], [1, 1]]), 75 | lineString([[0, 0], [1, 1]]), 76 | lineString([[1, 1], [2, 1]]), 77 | lineString([[2, 1], [3, 1]]), 78 | lineString([[3, 1], [3, 0]]), 79 | lineString([[2, 1], [3, 0]]) 80 | ] 81 | ), 82 | graph = Graph.fromGeoJson(geoJson); 83 | 84 | graph.deleteCutEdges(); 85 | const edgeRings = graph.getEdgeRings(); 86 | 87 | t.equal(edgeRings.length, 4); 88 | 89 | edgeRings.forEach(edgeRing => { 90 | t.equal(edgeRing.length, 3); 91 | }); 92 | 93 | t.end(); 94 | }); 95 | -------------------------------------------------------------------------------- /src/Node.js: -------------------------------------------------------------------------------- 1 | import {orientationIndex} from './util'; 2 | 3 | class Node { 4 | static buildId(coordinates) { 5 | return coordinates.join(','); 6 | } 7 | 8 | constructor(coordinates) { 9 | this.id = Node.buildId(coordinates); 10 | this.coordinates = coordinates; //< {Number[]} 11 | this.innerEdges = []; //< {Edge[]} 12 | 13 | // We wil store to (out) edges in an CCW order as geos::planargraph::DirectedEdgeStar does 14 | this.outerEdges = []; //< {Edge[]} 15 | this.outerEdgesSorted = false; //< {Boolean} flag that stores if the outer Edges had been sorted 16 | } 17 | 18 | removeInnerEdge(edge) { 19 | this.innerEdges = this.innerEdges.filter(e => e.from.id !== edge.from.id); 20 | } 21 | 22 | removeOuterEdge(edge) { 23 | this.outerEdges = this.outerEdges.filter(e => e.to.id !== edge.to.id); 24 | } 25 | 26 | /** Outer edges are stored CCW order. 27 | * @param {Edge} edge - Edge to add as an outerEdge. 28 | */ 29 | addOuterEdge(edge) { 30 | this.outerEdges.push(edge); 31 | this.outerEdgesSorted = false; 32 | } 33 | 34 | /** Sorts outer edges in CCW way. 35 | * @private 36 | */ 37 | sortOuterEdges() { 38 | if (!this.outerEdgesSorted) { 39 | //this.outerEdges.sort((a, b) => a.compareTo(b)); 40 | // Using this comparator in order to be deterministic 41 | this.outerEdges.sort((a, b) => { 42 | const aNode = a.to, 43 | bNode = b.to; 44 | 45 | if (aNode.coordinates[0] - this.coordinates[0] >= 0 && bNode.coordinates[0] - this.coordinates[0] < 0) 46 | return 1; 47 | if (aNode.coordinates[0] - this.coordinates[0] < 0 && bNode.coordinates[0] - this.coordinates[0] >= 0) 48 | return -1; 49 | 50 | if (aNode.coordinates[0] - this.coordinates[0] === 0 && bNode.coordinates[0] - this.coordinates[0] === 0) { 51 | if (aNode.coordinates[1] - this.coordinates[1] >= 0 || bNode.coordinates[1] - this.coordinates[1] >= 0) 52 | return aNode.coordinates[1] - bNode.coordinates[1]; 53 | return bNode.coordinates[1] - aNode.coordinates[1]; 54 | } 55 | 56 | const det = orientationIndex(this.coordinates, aNode.coordinates, bNode.coordinates); 57 | if (det < 0) 58 | return 1; 59 | if (det > 0) 60 | return -1; 61 | 62 | const d1 = Math.pow(aNode.coordinates[0] - this.coordinates[0], 2) + Math.pow(aNode.coordinates[1] - this.coordinates[1], 2), 63 | d2 = Math.pow(bNode.coordinates[0] - this.coordinates[0], 2) + Math.pow(bNode.coordinates[1] - this.coordinates[1], 2); 64 | 65 | return d1 - d2; 66 | }); 67 | this.outerEdgesSorted = true; 68 | } 69 | } 70 | 71 | /** Retrieves outer edges. 72 | * They are sorted if they aren't in the CCW order. 73 | * @returns {Edge[]} - List of outer edges sorted in a CCW order. 74 | */ 75 | getOuterEdges() { 76 | this.sortOuterEdges(); 77 | return this.outerEdges; 78 | } 79 | 80 | getOuterEdge(i) { 81 | this.sortOuterEdges(); 82 | return this.outerEdges[i]; 83 | } 84 | 85 | addInnerEdge(edge) { 86 | this.innerEdges.push(edge); 87 | } 88 | } 89 | 90 | export default Node; 91 | -------------------------------------------------------------------------------- /src/Node.test.js: -------------------------------------------------------------------------------- 1 | import test from 'tape'; 2 | import Node from './Node'; 3 | import Edge from './Edge'; 4 | 5 | test('Node.outerEdges CCW order', t => { 6 | const center = new Node([0, 0]), 7 | addNode = c => new Edge(center, new Node(c)); 8 | 9 | addNode([0, 1]); 10 | addNode([1, 1]); 11 | addNode([1, 0]); 12 | addNode([1, -1]); 13 | addNode([0, -1]); 14 | addNode([-1, -1]); 15 | addNode([-1, 0]); 16 | addNode([-1, 1]); 17 | 18 | t.deepEqual( 19 | center.getOuterEdges().map(e => e.to.coordinates), 20 | [[-1, 1], [-1, 0], [-1, -1], [0, -1], [1, -1], [1, 0], [1, 1], [0, 1]], 21 | 'Outernodes have to be in CCW order' 22 | ); 23 | 24 | t.end(); 25 | }); 26 | -------------------------------------------------------------------------------- /src/bench.js: -------------------------------------------------------------------------------- 1 | import fs from 'fs'; 2 | import path from 'path'; 3 | import load from 'load-json-file'; 4 | import Benchmark from 'benchmark'; 5 | import polygonize from './'; 6 | 7 | const directory = path.join(__dirname, '..', 'test', 'in') + path.sep; 8 | const fixtures = fs.readdirSync(directory).map(filename => { 9 | return { 10 | name: path.parse(filename).name, 11 | geojson: load.sync(directory + filename) 12 | }; 13 | }); 14 | 15 | 16 | /** 17 | * Single Process Benchmark 18 | * 19 | * complex: 35.348ms 20 | * cutedge: 0.725ms 21 | * dangle: 0.166ms 22 | * geometry-collection-two-polygons: 0.455ms 23 | * kinked-linestring: 0.240ms 24 | * linestrings: 0.200ms 25 | * multi-linestring: 1.657ms 26 | * two-polygons: 0.293ms 27 | */ 28 | for (const {name, geojson} of fixtures) { 29 | console.time(name); 30 | polygonize(geojson); 31 | console.timeEnd(name); 32 | } 33 | 34 | /** 35 | * Benchmark Results 36 | * 37 | * complex x 68.00 ops/sec ±1.09% (69 runs sampled) 38 | * cutedge x 10,170 ops/sec ±1.65% (87 runs sampled) 39 | * dangle x 20,439 ops/sec ±0.74% (89 runs sampled) 40 | * geometry-collection-two-polygons x 14,530 ops/sec ±1.26% (89 runs sampled) 41 | * kinked-linestring x 17,258 ops/sec ±1.04% (91 runs sampled) 42 | * linestrings x 11,036 ops/sec ±0.56% (90 runs sampled) 43 | * multi-linestring x 20,942 ops/sec ±1.26% (91 runs sampled) 44 | * two-polygons x 14,522 ops/sec ±1.32% (91 runs sampled) 45 | */ 46 | const suite = new Benchmark.Suite('turf-transform-polygonize'); 47 | for (const {name, geojson} of fixtures) { 48 | suite.add(name, () => polygonize(geojson)); 49 | } 50 | 51 | suite 52 | .on('cycle', e => console.log(String(e.target))) 53 | .on('complete', () => {}) 54 | .run(); 55 | -------------------------------------------------------------------------------- /src/index.js: -------------------------------------------------------------------------------- 1 | import Graph from './Graph'; 2 | import EdgeRing from './EdgeRing'; 3 | import {featureCollection} from '@turf/helpers'; 4 | 5 | /** 6 | * Polygonizes {@link LineString|(Multi)LineString(s)} into {@link Polygons}. 7 | * 8 | * Implementation of GEOSPolygonize function (`geos::operation::polygonize::Polygonizer`). 9 | * 10 | * Polygonizes a set of lines that represents edges in a planar graph. Edges must be correctly 11 | * noded, i.e., they must only meet at their endpoints. 12 | * 13 | * The implementation correctly handles: 14 | * 15 | * - Dangles: edges which have one or both ends which are not incident on another edge endpoint. 16 | * - Cut Edges (bridges): edges that are connected at both ends but which do not form part of a polygon. 17 | * 18 | * @name polygonize 19 | * @param {FeatureCollection|Geometry|Feature} geoJson Lines in order to polygonize 20 | * @returns {FeatureCollection} Polygons created 21 | * @throws {Error} if geoJson is invalid. 22 | */ 23 | function polygonize(geoJson) { 24 | const graph = Graph.fromGeoJson(geoJson); 25 | 26 | // 1. Remove dangle node 27 | graph.deleteDangles(); 28 | 29 | // 2. Remove cut-edges (bridge edges) 30 | graph.deleteCutEdges(); 31 | 32 | // 3. Get all holes and shells 33 | const holes = [], 34 | shells = []; 35 | 36 | graph.getEdgeRings() 37 | .filter(edgeRing => edgeRing.isValid()) 38 | .forEach(edgeRing => { 39 | if (edgeRing.isHole()) 40 | holes.push(edgeRing); 41 | else 42 | shells.push(edgeRing); 43 | }); 44 | 45 | // 4. Assign Holes to Shells 46 | holes.forEach(hole => { 47 | if (EdgeRing.findEdgeRingContaining(hole, shells)) 48 | shells.push(hole); 49 | }); 50 | 51 | // 5. EdgeRings to Polygons 52 | return featureCollection(shells.map(shell => shell.toPolygon())); 53 | } 54 | 55 | export default polygonize; 56 | -------------------------------------------------------------------------------- /src/test.js: -------------------------------------------------------------------------------- 1 | import fs from 'fs'; 2 | import test from 'tape'; 3 | import path from 'path'; 4 | import load from 'load-json-file'; 5 | import write from 'write-json-file'; 6 | import {featureEach} from '@turf/meta'; 7 | import {featureCollection, lineString, polygon, point} from '@turf/helpers'; 8 | import polygonize from './'; 9 | 10 | const directories = { 11 | in: path.join(__dirname, '..', 'test', 'in') + path.sep, 12 | out: path.join(__dirname, '..', 'test', 'out') + path.sep 13 | }; 14 | 15 | const fixtures = fs.readdirSync(directories.in).map(filename => { 16 | return { 17 | filename, 18 | name: path.parse(filename).name, 19 | geojson: load.sync(directories.in + filename) 20 | }; 21 | }); 22 | 23 | test('turf-polygonize', t => { 24 | for (const {filename, name, geojson} of fixtures) { 25 | const polygonized = polygonize(geojson); 26 | 27 | const results = featureCollection([]); 28 | featureEach(geojson, feature => results.features.push(colorize(feature))); 29 | featureEach(polygonized, feature => results.features.push(colorize(feature, '#00F', 3))); 30 | 31 | if (process.env.REGEN) write.sync(directories.out + filename, results); 32 | t.deepEquals(results, load.sync(directories.out + filename), name); 33 | } 34 | t.end(); 35 | }); 36 | 37 | test('turf-polygonize -- Geometry Support', t => { 38 | const line = lineString([[0, 0], [1, 1], [5, 2], [0, 0]]); 39 | 40 | t.assert(polygonize(line.geometry), 'line geometry'); 41 | t.end(); 42 | }); 43 | 44 | test('turf-polygonize -- throws', t => { 45 | t.throws(() => polygonize(point([0, 0])), 'input point'); 46 | t.throws(() => polygonize(polygon([])), 'input polygon'); 47 | t.end(); 48 | }); 49 | 50 | test('turf-polygonize -- input mutation', t => { 51 | const lines = featureCollection([ 52 | lineString([[0, 0], [1, 1]]), 53 | lineString([[1, 1], [-1, -1]]), 54 | lineString([[-1, -1], [0, 0]]) 55 | ]); 56 | const linesBefore = JSON.parse(JSON.stringify(lines)); 57 | polygonize(lines); 58 | 59 | t.deepEquals(lines, linesBefore, 'input does not mutate'); 60 | t.end(); 61 | }); 62 | 63 | function colorize(feature, color = '#F00', width = 6) { 64 | feature.properties['fill'] = color; 65 | feature.properties['fill-opacity'] = 0.3; 66 | feature.properties['stroke'] = color; 67 | feature.properties['stroke-width'] = width; 68 | return feature; 69 | } 70 | -------------------------------------------------------------------------------- /src/util.js: -------------------------------------------------------------------------------- 1 | import booleanPointInPolygon from '@turf/boolean-point-in-polygon'; 2 | import {point} from '@turf/helpers'; 3 | 4 | /** Returns the direction of the point q relative to the vector p1 -> p2. 5 | * Implementation of geos::algorithm::CGAlgorithm::orientationIndex() 6 | * (same as geos::algorithm::CGAlgorithm::computeOrientation()) 7 | * 8 | * @param {Number[]} p1 - the origin point of the vector 9 | * @param {Number[]} p2 - the final point of the vector 10 | * @param {Number[]} q - the point to compute the direction to 11 | * 12 | * @returns {Number} - 1 if q is ccw (left) from p1->p2, 13 | * -1 if q is cw (right) from p1->p2, 14 | * 0 if q is colinear with p1->p2 15 | */ 16 | function orientationIndex(p1, p2, q) { 17 | const dx1 = p2[0] - p1[0], 18 | dy1 = p2[1] - p1[1], 19 | dx2 = q[0] - p2[0], 20 | dy2 = q[1] - p2[1]; 21 | 22 | return Math.sign(dx1 * dy2 - dx2 * dy1); 23 | } 24 | 25 | /** Checks if two envelopes are equal. 26 | * The function assumes that the arguments are envelopes, i.e.: Rectangular polygon 27 | * 28 | * @param {Feature} env1 - Envelope 29 | * @param {Feature} env2 - Envelope 30 | * @returns {Boolean} - True if the envelopes are equal 31 | */ 32 | function envelopeIsEqual(env1, env2) { 33 | const envX1 = env1.geometry.coordinates.map(c => c[0]), 34 | envY1 = env1.geometry.coordinates.map(c => c[1]), 35 | envX2 = env2.geometry.coordinates.map(c => c[0]), 36 | envY2 = env2.geometry.coordinates.map(c => c[1]); 37 | 38 | return Math.max(null, envX1) === Math.max(null, envX2) && 39 | Math.max(null, envY1) === Math.max(null, envY2) && 40 | Math.min(null, envX1) === Math.min(null, envX2) && 41 | Math.min(null, envY1) === Math.min(null, envY2); 42 | } 43 | 44 | /** Check if a envelope is contained in other one. 45 | * The function assumes that the arguments are envelopes, i.e.: Convex polygon 46 | * XXX: Envelopes are rectangular, checking if a point is inside a rectangule is something easy, 47 | * this could be further improved. 48 | * 49 | * @param {Feature} self - Envelope 50 | * @param {Feature} env - Envelope 51 | * @returns {Boolean} - True if env is contained in self 52 | */ 53 | function envelopeContains(self, env) { 54 | return env.geometry.coordinates[0].every(c => booleanPointInPolygon(point(c), self)); 55 | } 56 | 57 | /** Checks if two coordinates are equal. 58 | * 59 | * @param {Number[]} coord1 - First coordinate 60 | * @param {Number[]} coord2 - Second coordinate 61 | * @returns {Boolean} - True if coordinates are equal 62 | */ 63 | function coordinatesEqual(coord1, coord2) { 64 | return coord1[0] === coord2[0] && coord1[1] === coord2[1]; 65 | } 66 | 67 | export { 68 | orientationIndex, 69 | envelopeIsEqual, 70 | envelopeContains, 71 | coordinatesEqual 72 | }; 73 | -------------------------------------------------------------------------------- /test/in/cutedge.geojson: -------------------------------------------------------------------------------- 1 | { 2 | "type": "Feature", 3 | "properties": {}, 4 | "geometry": { 5 | "type": "LineString", 6 | "coordinates": [ 7 | [ 8 | -73.96706879138947, 9 | 40.798493169582244 10 | ], 11 | [ 12 | -73.96847426891327, 13 | 40.79908606273021 14 | ], 15 | [ 16 | -73.96896779537201, 17 | 40.798416011865356 18 | ], 19 | [ 20 | -73.96754086017609, 21 | 40.797851539524295 22 | ], 23 | [ 24 | -73.96706879138947, 25 | 40.798493169582244 26 | ], 27 | [ 28 | -73.96669328212738, 29 | 40.79913073254739 30 | ], 31 | [ 32 | -73.96619439125061, 33 | 40.79977641109269 34 | ], 35 | [ 36 | -73.96793782711028, 37 | 40.80045456984621 38 | ], 39 | [ 40 | -73.96809875965117, 41 | 40.79976016768429 42 | ], 43 | [ 44 | -73.96669328212738, 45 | 40.79913073254739 46 | ] 47 | ] 48 | } 49 | } -------------------------------------------------------------------------------- /test/in/dangle.geojson: -------------------------------------------------------------------------------- 1 | { 2 | "type": "Feature", 3 | "properties": {}, 4 | "geometry": { 5 | "type": "LineString", 6 | "coordinates": [ 7 | [ 8 | -73.96755695343018, 9 | 40.797867783399724 10 | ], 11 | [ 12 | -73.96667718887329, 13 | 40.7991429152196 14 | ], 15 | [ 16 | -73.96620512008666, 17 | 40.799743924271894 18 | ], 19 | [ 20 | -73.96793246269226, 21 | 40.800482995510926 22 | ], 23 | [ 24 | -73.96811485290527, 25 | 40.79971143743523 26 | ], 27 | [ 28 | -73.96667718887329, 29 | 40.7991429152196 30 | ] 31 | ] 32 | } 33 | } -------------------------------------------------------------------------------- /test/in/geometry-collection-two-polygons.geojson: -------------------------------------------------------------------------------- 1 | { 2 | "type":"GeometryCollection", 3 | "geometries":[ 4 | { 5 | "type":"LineString", 6 | "coordinates":[ 7 | [ 8 | -58.3959417, 9 | -34.8036499 10 | ], 11 | [ 12 | -58.395087, 13 | -34.8031464 14 | ] 15 | ] 16 | }, 17 | { 18 | "type":"LineString", 19 | "coordinates":[ 20 | [ 21 | -58.3964727, 22 | -34.8029764 23 | ], 24 | [ 25 | -58.3959417, 26 | -34.8036499 27 | ] 28 | ] 29 | }, 30 | { 31 | "type":"LineString", 32 | "coordinates":[ 33 | [ 34 | -58.395087, 35 | -34.8031464 36 | ], 37 | [ 38 | -58.3942164, 39 | -34.8042266 40 | ] 41 | ] 42 | }, 43 | { 44 | "type":"LineString", 45 | "coordinates":[ 46 | [ 47 | -58.3942164, 48 | -34.8042266 49 | ], 50 | [ 51 | -58.3949969, 52 | -34.8047067 53 | ] 54 | ] 55 | }, 56 | { 57 | "type":"LineString", 58 | "coordinates":[ 59 | [ 60 | -58.3949969, 61 | -34.8047067 62 | ], 63 | [ 64 | -58.3957427, 65 | -34.8051655 66 | ] 67 | ] 68 | }, 69 | { 70 | "type":"LineString", 71 | "coordinates":[ 72 | [ 73 | -58.396618, 74 | -34.8040484 75 | ], 76 | [ 77 | -58.3957427, 78 | -34.8051655 79 | ] 80 | ] 81 | }, 82 | { 83 | "type":"LineString", 84 | "coordinates":[ 85 | [ 86 | -58.3976747, 87 | -34.8036356 88 | ], 89 | [ 90 | -58.3971168, 91 | -34.8043422 92 | ] 93 | ] 94 | }, 95 | { 96 | "type":"LineString", 97 | "coordinates":[ 98 | [ 99 | -58.3976747, 100 | -34.8036356 101 | ], 102 | [ 103 | -58.3964727, 104 | -34.8029764 105 | ] 106 | ] 107 | }, 108 | { 109 | "type":"LineString", 110 | "coordinates":[ 111 | [ 112 | -58.3971168, 113 | -34.8043422 114 | ], 115 | [ 116 | -58.396618, 117 | -34.8040484 118 | ] 119 | ] 120 | }, 121 | { 122 | "type":"LineString", 123 | "coordinates":[ 124 | [ 125 | -58.396618, 126 | -34.8040484 127 | ], 128 | [ 129 | -58.3959417, 130 | -34.8036499 131 | ] 132 | ] 133 | } 134 | ] 135 | } 136 | -------------------------------------------------------------------------------- /test/in/kinked-linestring.geojson: -------------------------------------------------------------------------------- 1 | { 2 | "type": "Feature", 3 | "properties": {}, 4 | "geometry": { 5 | "type": "LineString", 6 | "coordinates": [ 7 | [ 8 | 131.9677734375, 9 | -20.550508894195637 10 | ], 11 | [ 12 | 134.2529296875, 13 | -16.59408141271846 14 | ], 15 | [ 16 | 123.3984375, 17 | -30.48655084258847 18 | ], 19 | [ 20 | 130.1220703125, 21 | -31.05293398570514 22 | ], 23 | [ 24 | 121.9482421875, 25 | -22.471954507739213 26 | ], 27 | [ 28 | 132.275390625, 29 | -25.324166525738384 30 | ], 31 | [ 32 | 129.0673828125, 33 | -16.299051014581817 34 | ], 35 | [ 36 | 133.9453125, 37 | -13.710035342476669 38 | ], 39 | [ 40 | 131.9677734375, 41 | -20.550508894195637 42 | ] 43 | ] 44 | } 45 | } -------------------------------------------------------------------------------- /test/in/linestrings.geojson: -------------------------------------------------------------------------------- 1 | { 2 | "type": "FeatureCollection", 3 | "features": [ 4 | { 5 | "type": "Feature", 6 | "properties": {}, 7 | "geometry": { 8 | "type": "LineString", 9 | "coordinates": [ 10 | [ 11 | 119.00390625, 12 | -22.024545601240337 13 | ], 14 | [ 15 | 120.58593749999999, 16 | -28.613459424004414 17 | ], 18 | [ 19 | 125.595703125, 20 | -32.99023555965107 21 | ], 22 | [ 23 | 133.330078125, 24 | -32.99023555965107 25 | ], 26 | [ 27 | 142.646484375, 28 | -30.977609093348676 29 | ], 30 | [ 31 | 142.294921875, 32 | -24.126701958681668 33 | ], 34 | [ 35 | 139.04296875, 36 | -16.299051014581817 37 | ], 38 | [ 39 | 128.84765625, 40 | -15.199386048559994 41 | ] 42 | ] 43 | } 44 | }, 45 | { 46 | "type": "Feature", 47 | "properties": {}, 48 | "geometry": { 49 | "type": "LineString", 50 | "coordinates": [ 51 | [ 52 | 142.646484375, 53 | -30.977609093348676 54 | ], 55 | [ 56 | 132.451171875, 57 | -27.449790329784214 58 | ], 59 | [ 60 | 128.671875, 61 | -23.1605633090483 62 | ], 63 | [ 64 | 119.00390625, 65 | -22.024545601240337 66 | ] 67 | ] 68 | } 69 | } 70 | ] 71 | } -------------------------------------------------------------------------------- /test/in/multi-linestring.geojson: -------------------------------------------------------------------------------- 1 | { 2 | "type": "Feature", 3 | "properties": {}, 4 | "geometry": { 5 | "type": "MultiLineString", 6 | "coordinates": [ 7 | [ 8 | [ 9 | 126.3427734375, 10 | -17.392579271057766 11 | ], 12 | [ 13 | 129.111328125, 14 | -29.19053283229457 15 | ], 16 | [ 17 | 132.890625, 18 | -31.01527898171125 19 | ], 20 | [ 21 | 136.7138671875, 22 | -29.11377539511439 23 | ] 24 | ], 25 | [ 26 | [ 27 | 126.3427734375, 28 | -17.392579271057766 29 | ], 30 | [ 31 | 132.978515625, 32 | -15.368949896534705 33 | ], 34 | [ 35 | 135.966796875, 36 | -24.126701958681668 37 | ], 38 | [ 39 | 136.7138671875, 40 | -29.11377539511439 41 | ] 42 | ] 43 | ] 44 | } 45 | } -------------------------------------------------------------------------------- /test/in/two-polygons.geojson: -------------------------------------------------------------------------------- 1 | { 2 | "type":"FeatureCollection", 3 | "features":[ 4 | { 5 | "type":"Feature", 6 | "properties":{ 7 | 8 | }, 9 | "geometry":{ 10 | "type":"LineString", 11 | "coordinates":[ 12 | [ 13 | -58.3959417, 14 | -34.8036499 15 | ], 16 | [ 17 | -58.395087, 18 | -34.8031464 19 | ] 20 | ] 21 | } 22 | }, 23 | { 24 | "type":"Feature", 25 | "properties":{ 26 | 27 | }, 28 | "geometry":{ 29 | "type":"LineString", 30 | "coordinates":[ 31 | [ 32 | -58.3964727, 33 | -34.8029764 34 | ], 35 | [ 36 | -58.3959417, 37 | -34.8036499 38 | ] 39 | ] 40 | } 41 | }, 42 | { 43 | "type":"Feature", 44 | "properties":{ 45 | 46 | }, 47 | "geometry":{ 48 | "type":"LineString", 49 | "coordinates":[ 50 | [ 51 | -58.395087, 52 | -34.8031464 53 | ], 54 | [ 55 | -58.3942164, 56 | -34.8042266 57 | ] 58 | ] 59 | } 60 | }, 61 | { 62 | "type":"Feature", 63 | "properties":{ 64 | 65 | }, 66 | "geometry":{ 67 | "type":"LineString", 68 | "coordinates":[ 69 | [ 70 | -58.3942164, 71 | -34.8042266 72 | ], 73 | [ 74 | -58.3949969, 75 | -34.8047067 76 | ] 77 | ] 78 | } 79 | }, 80 | { 81 | "type":"Feature", 82 | "properties":{ 83 | 84 | }, 85 | "geometry":{ 86 | "type":"LineString", 87 | "coordinates":[ 88 | [ 89 | -58.3949969, 90 | -34.8047067 91 | ], 92 | [ 93 | -58.3957427, 94 | -34.8051655 95 | ] 96 | ] 97 | } 98 | }, 99 | { 100 | "type":"Feature", 101 | "properties":{ 102 | 103 | }, 104 | "geometry":{ 105 | "type":"LineString", 106 | "coordinates":[ 107 | [ 108 | -58.396618, 109 | -34.8040484 110 | ], 111 | [ 112 | -58.3957427, 113 | -34.8051655 114 | ] 115 | ] 116 | } 117 | }, 118 | { 119 | "type":"Feature", 120 | "properties":{ 121 | 122 | }, 123 | "geometry":{ 124 | "type":"LineString", 125 | "coordinates":[ 126 | [ 127 | -58.3976747, 128 | -34.8036356 129 | ], 130 | [ 131 | -58.3971168, 132 | -34.8043422 133 | ] 134 | ] 135 | } 136 | }, 137 | { 138 | "type":"Feature", 139 | "properties":{ 140 | 141 | }, 142 | "geometry":{ 143 | "type":"LineString", 144 | "coordinates":[ 145 | [ 146 | -58.3976747, 147 | -34.8036356 148 | ], 149 | [ 150 | -58.3964727, 151 | -34.8029764 152 | ] 153 | ] 154 | } 155 | }, 156 | { 157 | "type":"Feature", 158 | "properties":{ 159 | 160 | }, 161 | "geometry":{ 162 | "type":"LineString", 163 | "coordinates":[ 164 | [ 165 | -58.3971168, 166 | -34.8043422 167 | ], 168 | [ 169 | -58.396618, 170 | -34.8040484 171 | ] 172 | ] 173 | } 174 | }, 175 | { 176 | "type":"Feature", 177 | "properties":{ 178 | 179 | }, 180 | "geometry":{ 181 | "type":"LineString", 182 | "coordinates":[ 183 | [ 184 | -58.396618, 185 | -34.8040484 186 | ], 187 | [ 188 | -58.3959417, 189 | -34.8036499 190 | ] 191 | ] 192 | } 193 | } 194 | ] 195 | } 196 | -------------------------------------------------------------------------------- /test/out/cutedge.geojson: -------------------------------------------------------------------------------- 1 | { 2 | "type": "FeatureCollection", 3 | "features": [ 4 | { 5 | "type": "Feature", 6 | "properties": { 7 | "fill": "#F00", 8 | "fill-opacity": 0.3, 9 | "stroke": "#F00", 10 | "stroke-width": 6 11 | }, 12 | "geometry": { 13 | "type": "LineString", 14 | "coordinates": [ 15 | [ 16 | -73.96706879138947, 17 | 40.798493169582244 18 | ], 19 | [ 20 | -73.96847426891327, 21 | 40.79908606273021 22 | ], 23 | [ 24 | -73.96896779537201, 25 | 40.798416011865356 26 | ], 27 | [ 28 | -73.96754086017609, 29 | 40.797851539524295 30 | ], 31 | [ 32 | -73.96706879138947, 33 | 40.798493169582244 34 | ], 35 | [ 36 | -73.96669328212738, 37 | 40.79913073254739 38 | ], 39 | [ 40 | -73.96619439125061, 41 | 40.79977641109269 42 | ], 43 | [ 44 | -73.96793782711028, 45 | 40.80045456984621 46 | ], 47 | [ 48 | -73.96809875965117, 49 | 40.79976016768429 50 | ], 51 | [ 52 | -73.96669328212738, 53 | 40.79913073254739 54 | ] 55 | ] 56 | } 57 | }, 58 | { 59 | "type": "Feature", 60 | "properties": { 61 | "fill": "#00F", 62 | "fill-opacity": 0.3, 63 | "stroke": "#00F", 64 | "stroke-width": 3 65 | }, 66 | "geometry": { 67 | "type": "Polygon", 68 | "coordinates": [ 69 | [ 70 | [ 71 | -73.96847426891327, 72 | 40.79908606273021 73 | ], 74 | [ 75 | -73.96706879138947, 76 | 40.798493169582244 77 | ], 78 | [ 79 | -73.96754086017609, 80 | 40.797851539524295 81 | ], 82 | [ 83 | -73.96896779537201, 84 | 40.798416011865356 85 | ], 86 | [ 87 | -73.96847426891327, 88 | 40.79908606273021 89 | ] 90 | ] 91 | ] 92 | } 93 | }, 94 | { 95 | "type": "Feature", 96 | "properties": { 97 | "fill": "#00F", 98 | "fill-opacity": 0.3, 99 | "stroke": "#00F", 100 | "stroke-width": 3 101 | }, 102 | "geometry": { 103 | "type": "Polygon", 104 | "coordinates": [ 105 | [ 106 | [ 107 | -73.96619439125061, 108 | 40.79977641109269 109 | ], 110 | [ 111 | -73.96669328212738, 112 | 40.79913073254739 113 | ], 114 | [ 115 | -73.96809875965117, 116 | 40.79976016768429 117 | ], 118 | [ 119 | -73.96793782711028, 120 | 40.80045456984621 121 | ], 122 | [ 123 | -73.96619439125061, 124 | 40.79977641109269 125 | ] 126 | ] 127 | ] 128 | } 129 | } 130 | ] 131 | } 132 | -------------------------------------------------------------------------------- /test/out/dangle.geojson: -------------------------------------------------------------------------------- 1 | { 2 | "type": "FeatureCollection", 3 | "features": [ 4 | { 5 | "type": "Feature", 6 | "properties": { 7 | "fill": "#F00", 8 | "fill-opacity": 0.3, 9 | "stroke": "#F00", 10 | "stroke-width": 6 11 | }, 12 | "geometry": { 13 | "type": "LineString", 14 | "coordinates": [ 15 | [ 16 | -73.96755695343018, 17 | 40.797867783399724 18 | ], 19 | [ 20 | -73.96667718887329, 21 | 40.7991429152196 22 | ], 23 | [ 24 | -73.96620512008666, 25 | 40.799743924271894 26 | ], 27 | [ 28 | -73.96793246269226, 29 | 40.800482995510926 30 | ], 31 | [ 32 | -73.96811485290527, 33 | 40.79971143743523 34 | ], 35 | [ 36 | -73.96667718887329, 37 | 40.7991429152196 38 | ] 39 | ] 40 | } 41 | }, 42 | { 43 | "type": "Feature", 44 | "properties": { 45 | "fill": "#00F", 46 | "fill-opacity": 0.3, 47 | "stroke": "#00F", 48 | "stroke-width": 3 49 | }, 50 | "geometry": { 51 | "type": "Polygon", 52 | "coordinates": [ 53 | [ 54 | [ 55 | -73.96620512008666, 56 | 40.799743924271894 57 | ], 58 | [ 59 | -73.96667718887329, 60 | 40.7991429152196 61 | ], 62 | [ 63 | -73.96811485290527, 64 | 40.79971143743523 65 | ], 66 | [ 67 | -73.96793246269226, 68 | 40.800482995510926 69 | ], 70 | [ 71 | -73.96620512008666, 72 | 40.799743924271894 73 | ] 74 | ] 75 | ] 76 | } 77 | } 78 | ] 79 | } 80 | -------------------------------------------------------------------------------- /test/out/geometry-collection-two-polygons.geojson: -------------------------------------------------------------------------------- 1 | { 2 | "type": "FeatureCollection", 3 | "features": [ 4 | { 5 | "type": "Feature", 6 | "properties": { 7 | "fill": "#00F", 8 | "fill-opacity": 0.3, 9 | "stroke": "#00F", 10 | "stroke-width": 3 11 | }, 12 | "geometry": { 13 | "type": "Polygon", 14 | "coordinates": [ 15 | [ 16 | [ 17 | -58.3959417, 18 | -34.8036499 19 | ], 20 | [ 21 | -58.395087, 22 | -34.8031464 23 | ], 24 | [ 25 | -58.3942164, 26 | -34.8042266 27 | ], 28 | [ 29 | -58.3949969, 30 | -34.8047067 31 | ], 32 | [ 33 | -58.3957427, 34 | -34.8051655 35 | ], 36 | [ 37 | -58.396618, 38 | -34.8040484 39 | ], 40 | [ 41 | -58.3959417, 42 | -34.8036499 43 | ] 44 | ] 45 | ] 46 | } 47 | }, 48 | { 49 | "type": "Feature", 50 | "properties": { 51 | "fill": "#00F", 52 | "fill-opacity": 0.3, 53 | "stroke": "#00F", 54 | "stroke-width": 3 55 | }, 56 | "geometry": { 57 | "type": "Polygon", 58 | "coordinates": [ 59 | [ 60 | [ 61 | -58.3964727, 62 | -34.8029764 63 | ], 64 | [ 65 | -58.3959417, 66 | -34.8036499 67 | ], 68 | [ 69 | -58.396618, 70 | -34.8040484 71 | ], 72 | [ 73 | -58.3971168, 74 | -34.8043422 75 | ], 76 | [ 77 | -58.3976747, 78 | -34.8036356 79 | ], 80 | [ 81 | -58.3964727, 82 | -34.8029764 83 | ] 84 | ] 85 | ] 86 | } 87 | } 88 | ] 89 | } 90 | -------------------------------------------------------------------------------- /test/out/kinked-linestring.geojson: -------------------------------------------------------------------------------- 1 | { 2 | "type": "FeatureCollection", 3 | "features": [ 4 | { 5 | "type": "Feature", 6 | "properties": { 7 | "fill": "#F00", 8 | "fill-opacity": 0.3, 9 | "stroke": "#F00", 10 | "stroke-width": 6 11 | }, 12 | "geometry": { 13 | "type": "LineString", 14 | "coordinates": [ 15 | [ 16 | 131.9677734375, 17 | -20.550508894195637 18 | ], 19 | [ 20 | 134.2529296875, 21 | -16.59408141271846 22 | ], 23 | [ 24 | 123.3984375, 25 | -30.48655084258847 26 | ], 27 | [ 28 | 130.1220703125, 29 | -31.05293398570514 30 | ], 31 | [ 32 | 121.9482421875, 33 | -22.471954507739213 34 | ], 35 | [ 36 | 132.275390625, 37 | -25.324166525738384 38 | ], 39 | [ 40 | 129.0673828125, 41 | -16.299051014581817 42 | ], 43 | [ 44 | 133.9453125, 45 | -13.710035342476669 46 | ], 47 | [ 48 | 131.9677734375, 49 | -20.550508894195637 50 | ] 51 | ] 52 | } 53 | }, 54 | { 55 | "type": "Feature", 56 | "properties": { 57 | "fill": "#00F", 58 | "fill-opacity": 0.3, 59 | "stroke": "#00F", 60 | "stroke-width": 3 61 | }, 62 | "geometry": { 63 | "type": "Polygon", 64 | "coordinates": [ 65 | [ 66 | [ 67 | 131.9677734375, 68 | -20.550508894195637 69 | ], 70 | [ 71 | 134.2529296875, 72 | -16.59408141271846 73 | ], 74 | [ 75 | 123.3984375, 76 | -30.48655084258847 77 | ], 78 | [ 79 | 130.1220703125, 80 | -31.05293398570514 81 | ], 82 | [ 83 | 121.9482421875, 84 | -22.471954507739213 85 | ], 86 | [ 87 | 132.275390625, 88 | -25.324166525738384 89 | ], 90 | [ 91 | 129.0673828125, 92 | -16.299051014581817 93 | ], 94 | [ 95 | 133.9453125, 96 | -13.710035342476669 97 | ], 98 | [ 99 | 131.9677734375, 100 | -20.550508894195637 101 | ] 102 | ] 103 | ] 104 | } 105 | } 106 | ] 107 | } 108 | -------------------------------------------------------------------------------- /test/out/linestrings.geojson: -------------------------------------------------------------------------------- 1 | { 2 | "type": "FeatureCollection", 3 | "features": [ 4 | { 5 | "type": "Feature", 6 | "properties": { 7 | "fill": "#F00", 8 | "fill-opacity": 0.3, 9 | "stroke": "#F00", 10 | "stroke-width": 6 11 | }, 12 | "geometry": { 13 | "type": "LineString", 14 | "coordinates": [ 15 | [ 16 | 119.00390625, 17 | -22.024545601240337 18 | ], 19 | [ 20 | 120.58593749999999, 21 | -28.613459424004414 22 | ], 23 | [ 24 | 125.595703125, 25 | -32.99023555965107 26 | ], 27 | [ 28 | 133.330078125, 29 | -32.99023555965107 30 | ], 31 | [ 32 | 142.646484375, 33 | -30.977609093348676 34 | ], 35 | [ 36 | 142.294921875, 37 | -24.126701958681668 38 | ], 39 | [ 40 | 139.04296875, 41 | -16.299051014581817 42 | ], 43 | [ 44 | 128.84765625, 45 | -15.199386048559994 46 | ] 47 | ] 48 | } 49 | }, 50 | { 51 | "type": "Feature", 52 | "properties": { 53 | "fill": "#F00", 54 | "fill-opacity": 0.3, 55 | "stroke": "#F00", 56 | "stroke-width": 6 57 | }, 58 | "geometry": { 59 | "type": "LineString", 60 | "coordinates": [ 61 | [ 62 | 142.646484375, 63 | -30.977609093348676 64 | ], 65 | [ 66 | 132.451171875, 67 | -27.449790329784214 68 | ], 69 | [ 70 | 128.671875, 71 | -23.1605633090483 72 | ], 73 | [ 74 | 119.00390625, 75 | -22.024545601240337 76 | ] 77 | ] 78 | } 79 | }, 80 | { 81 | "type": "Feature", 82 | "properties": { 83 | "fill": "#00F", 84 | "fill-opacity": 0.3, 85 | "stroke": "#00F", 86 | "stroke-width": 3 87 | }, 88 | "geometry": { 89 | "type": "Polygon", 90 | "coordinates": [ 91 | [ 92 | [ 93 | 120.58593749999999, 94 | -28.613459424004414 95 | ], 96 | [ 97 | 119.00390625, 98 | -22.024545601240337 99 | ], 100 | [ 101 | 128.671875, 102 | -23.1605633090483 103 | ], 104 | [ 105 | 132.451171875, 106 | -27.449790329784214 107 | ], 108 | [ 109 | 142.646484375, 110 | -30.977609093348676 111 | ], 112 | [ 113 | 133.330078125, 114 | -32.99023555965107 115 | ], 116 | [ 117 | 125.595703125, 118 | -32.99023555965107 119 | ], 120 | [ 121 | 120.58593749999999, 122 | -28.613459424004414 123 | ] 124 | ] 125 | ] 126 | } 127 | } 128 | ] 129 | } 130 | -------------------------------------------------------------------------------- /test/out/multi-linestring.geojson: -------------------------------------------------------------------------------- 1 | { 2 | "type": "FeatureCollection", 3 | "features": [ 4 | { 5 | "type": "Feature", 6 | "properties": { 7 | "fill": "#F00", 8 | "fill-opacity": 0.3, 9 | "stroke": "#F00", 10 | "stroke-width": 6 11 | }, 12 | "geometry": { 13 | "type": "MultiLineString", 14 | "coordinates": [ 15 | [ 16 | [ 17 | 126.3427734375, 18 | -17.392579271057766 19 | ], 20 | [ 21 | 129.111328125, 22 | -29.19053283229457 23 | ], 24 | [ 25 | 132.890625, 26 | -31.01527898171125 27 | ], 28 | [ 29 | 136.7138671875, 30 | -29.11377539511439 31 | ] 32 | ], 33 | [ 34 | [ 35 | 126.3427734375, 36 | -17.392579271057766 37 | ], 38 | [ 39 | 132.978515625, 40 | -15.368949896534705 41 | ], 42 | [ 43 | 135.966796875, 44 | -24.126701958681668 45 | ], 46 | [ 47 | 136.7138671875, 48 | -29.11377539511439 49 | ] 50 | ] 51 | ] 52 | } 53 | }, 54 | { 55 | "type": "Feature", 56 | "properties": { 57 | "fill": "#00F", 58 | "fill-opacity": 0.3, 59 | "stroke": "#00F", 60 | "stroke-width": 3 61 | }, 62 | "geometry": { 63 | "type": "Polygon", 64 | "coordinates": [ 65 | [ 66 | [ 67 | 129.111328125, 68 | -29.19053283229457 69 | ], 70 | [ 71 | 126.3427734375, 72 | -17.392579271057766 73 | ], 74 | [ 75 | 132.978515625, 76 | -15.368949896534705 77 | ], 78 | [ 79 | 135.966796875, 80 | -24.126701958681668 81 | ], 82 | [ 83 | 136.7138671875, 84 | -29.11377539511439 85 | ], 86 | [ 87 | 132.890625, 88 | -31.01527898171125 89 | ], 90 | [ 91 | 129.111328125, 92 | -29.19053283229457 93 | ] 94 | ] 95 | ] 96 | } 97 | } 98 | ] 99 | } 100 | -------------------------------------------------------------------------------- /test/out/two-polygons.geojson: -------------------------------------------------------------------------------- 1 | { 2 | "type": "FeatureCollection", 3 | "features": [ 4 | { 5 | "type": "Feature", 6 | "properties": { 7 | "fill": "#F00", 8 | "fill-opacity": 0.3, 9 | "stroke": "#F00", 10 | "stroke-width": 6 11 | }, 12 | "geometry": { 13 | "type": "LineString", 14 | "coordinates": [ 15 | [ 16 | -58.3959417, 17 | -34.8036499 18 | ], 19 | [ 20 | -58.395087, 21 | -34.8031464 22 | ] 23 | ] 24 | } 25 | }, 26 | { 27 | "type": "Feature", 28 | "properties": { 29 | "fill": "#F00", 30 | "fill-opacity": 0.3, 31 | "stroke": "#F00", 32 | "stroke-width": 6 33 | }, 34 | "geometry": { 35 | "type": "LineString", 36 | "coordinates": [ 37 | [ 38 | -58.3964727, 39 | -34.8029764 40 | ], 41 | [ 42 | -58.3959417, 43 | -34.8036499 44 | ] 45 | ] 46 | } 47 | }, 48 | { 49 | "type": "Feature", 50 | "properties": { 51 | "fill": "#F00", 52 | "fill-opacity": 0.3, 53 | "stroke": "#F00", 54 | "stroke-width": 6 55 | }, 56 | "geometry": { 57 | "type": "LineString", 58 | "coordinates": [ 59 | [ 60 | -58.395087, 61 | -34.8031464 62 | ], 63 | [ 64 | -58.3942164, 65 | -34.8042266 66 | ] 67 | ] 68 | } 69 | }, 70 | { 71 | "type": "Feature", 72 | "properties": { 73 | "fill": "#F00", 74 | "fill-opacity": 0.3, 75 | "stroke": "#F00", 76 | "stroke-width": 6 77 | }, 78 | "geometry": { 79 | "type": "LineString", 80 | "coordinates": [ 81 | [ 82 | -58.3942164, 83 | -34.8042266 84 | ], 85 | [ 86 | -58.3949969, 87 | -34.8047067 88 | ] 89 | ] 90 | } 91 | }, 92 | { 93 | "type": "Feature", 94 | "properties": { 95 | "fill": "#F00", 96 | "fill-opacity": 0.3, 97 | "stroke": "#F00", 98 | "stroke-width": 6 99 | }, 100 | "geometry": { 101 | "type": "LineString", 102 | "coordinates": [ 103 | [ 104 | -58.3949969, 105 | -34.8047067 106 | ], 107 | [ 108 | -58.3957427, 109 | -34.8051655 110 | ] 111 | ] 112 | } 113 | }, 114 | { 115 | "type": "Feature", 116 | "properties": { 117 | "fill": "#F00", 118 | "fill-opacity": 0.3, 119 | "stroke": "#F00", 120 | "stroke-width": 6 121 | }, 122 | "geometry": { 123 | "type": "LineString", 124 | "coordinates": [ 125 | [ 126 | -58.396618, 127 | -34.8040484 128 | ], 129 | [ 130 | -58.3957427, 131 | -34.8051655 132 | ] 133 | ] 134 | } 135 | }, 136 | { 137 | "type": "Feature", 138 | "properties": { 139 | "fill": "#F00", 140 | "fill-opacity": 0.3, 141 | "stroke": "#F00", 142 | "stroke-width": 6 143 | }, 144 | "geometry": { 145 | "type": "LineString", 146 | "coordinates": [ 147 | [ 148 | -58.3976747, 149 | -34.8036356 150 | ], 151 | [ 152 | -58.3971168, 153 | -34.8043422 154 | ] 155 | ] 156 | } 157 | }, 158 | { 159 | "type": "Feature", 160 | "properties": { 161 | "fill": "#F00", 162 | "fill-opacity": 0.3, 163 | "stroke": "#F00", 164 | "stroke-width": 6 165 | }, 166 | "geometry": { 167 | "type": "LineString", 168 | "coordinates": [ 169 | [ 170 | -58.3976747, 171 | -34.8036356 172 | ], 173 | [ 174 | -58.3964727, 175 | -34.8029764 176 | ] 177 | ] 178 | } 179 | }, 180 | { 181 | "type": "Feature", 182 | "properties": { 183 | "fill": "#F00", 184 | "fill-opacity": 0.3, 185 | "stroke": "#F00", 186 | "stroke-width": 6 187 | }, 188 | "geometry": { 189 | "type": "LineString", 190 | "coordinates": [ 191 | [ 192 | -58.3971168, 193 | -34.8043422 194 | ], 195 | [ 196 | -58.396618, 197 | -34.8040484 198 | ] 199 | ] 200 | } 201 | }, 202 | { 203 | "type": "Feature", 204 | "properties": { 205 | "fill": "#F00", 206 | "fill-opacity": 0.3, 207 | "stroke": "#F00", 208 | "stroke-width": 6 209 | }, 210 | "geometry": { 211 | "type": "LineString", 212 | "coordinates": [ 213 | [ 214 | -58.396618, 215 | -34.8040484 216 | ], 217 | [ 218 | -58.3959417, 219 | -34.8036499 220 | ] 221 | ] 222 | } 223 | }, 224 | { 225 | "type": "Feature", 226 | "properties": { 227 | "fill": "#00F", 228 | "fill-opacity": 0.3, 229 | "stroke": "#00F", 230 | "stroke-width": 3 231 | }, 232 | "geometry": { 233 | "type": "Polygon", 234 | "coordinates": [ 235 | [ 236 | [ 237 | -58.3959417, 238 | -34.8036499 239 | ], 240 | [ 241 | -58.395087, 242 | -34.8031464 243 | ], 244 | [ 245 | -58.3942164, 246 | -34.8042266 247 | ], 248 | [ 249 | -58.3949969, 250 | -34.8047067 251 | ], 252 | [ 253 | -58.3957427, 254 | -34.8051655 255 | ], 256 | [ 257 | -58.396618, 258 | -34.8040484 259 | ], 260 | [ 261 | -58.3959417, 262 | -34.8036499 263 | ] 264 | ] 265 | ] 266 | } 267 | }, 268 | { 269 | "type": "Feature", 270 | "properties": { 271 | "fill": "#00F", 272 | "fill-opacity": 0.3, 273 | "stroke": "#00F", 274 | "stroke-width": 3 275 | }, 276 | "geometry": { 277 | "type": "Polygon", 278 | "coordinates": [ 279 | [ 280 | [ 281 | -58.3964727, 282 | -34.8029764 283 | ], 284 | [ 285 | -58.3959417, 286 | -34.8036499 287 | ], 288 | [ 289 | -58.396618, 290 | -34.8040484 291 | ], 292 | [ 293 | -58.3971168, 294 | -34.8043422 295 | ], 296 | [ 297 | -58.3976747, 298 | -34.8036356 299 | ], 300 | [ 301 | -58.3964727, 302 | -34.8029764 303 | ] 304 | ] 305 | ] 306 | } 307 | } 308 | ] 309 | } 310 | -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@std/esm@^0.11.3": 6 | version "0.11.3" 7 | resolved "https://registry.yarnpkg.com/@std/esm/-/esm-0.11.3.tgz#78afd0edb3546e36e68e73d0128cf930e4817606" 8 | 9 | "@turf/bbox-polygon@^4.7.3": 10 | version "4.7.3" 11 | resolved "https://registry.yarnpkg.com/@turf/bbox-polygon/-/bbox-polygon-4.7.3.tgz#358890fd1f1a6cad9a9cb50799e37325fb88017a" 12 | dependencies: 13 | "@turf/helpers" "^4.7.3" 14 | 15 | "@turf/bbox@^4.7.3": 16 | version "4.7.3" 17 | resolved "https://registry.yarnpkg.com/@turf/bbox/-/bbox-4.7.3.tgz#e3ad4f10a7e9b41b522880d33083198199059067" 18 | dependencies: 19 | "@turf/meta" "^4.7.3" 20 | 21 | "@turf/boolean-point-in-polygon@*": 22 | version "5.0.4" 23 | resolved "https://registry.yarnpkg.com/@turf/boolean-point-in-polygon/-/boolean-point-in-polygon-5.0.4.tgz#70702d8a67368512d1de8c69cb71f8c7ee3747ba" 24 | dependencies: 25 | "@turf/invariant" "^5.0.4" 26 | 27 | "@turf/envelope@*": 28 | version "4.7.3" 29 | resolved "https://registry.yarnpkg.com/@turf/envelope/-/envelope-4.7.3.tgz#22642a6935e515866be075c88f03483a20c02096" 30 | dependencies: 31 | "@turf/bbox" "^4.7.3" 32 | "@turf/bbox-polygon" "^4.7.3" 33 | 34 | "@turf/helpers@*", "@turf/helpers@^5.0.0": 35 | version "5.0.0" 36 | resolved "https://registry.yarnpkg.com/@turf/helpers/-/helpers-5.0.0.tgz#732cb570e6aebca9ef7375e8e42fafa8e16e5d47" 37 | 38 | "@turf/helpers@^4.7.3": 39 | version "4.7.3" 40 | resolved "https://registry.yarnpkg.com/@turf/helpers/-/helpers-4.7.3.tgz#bc312ac43cab3c532a483151c4c382c5649429e9" 41 | 42 | "@turf/helpers@^5.0.4": 43 | version "5.0.4" 44 | resolved "https://registry.yarnpkg.com/@turf/helpers/-/helpers-5.0.4.tgz#e47a4e4f38dee3b47a3177a69de162d7a7a5837f" 45 | 46 | "@turf/invariant@*": 47 | version "5.0.0" 48 | resolved "https://registry.yarnpkg.com/@turf/invariant/-/invariant-5.0.0.tgz#da9b4d7b044cffa300d654b3e0444969fc19d850" 49 | 50 | "@turf/invariant@^5.0.4": 51 | version "5.0.4" 52 | resolved "https://registry.yarnpkg.com/@turf/invariant/-/invariant-5.0.4.tgz#1cc305f4de7c0f1bfd9d7c420aac282051262b41" 53 | dependencies: 54 | "@turf/helpers" "^5.0.4" 55 | 56 | "@turf/meta@*": 57 | version "5.0.2" 58 | resolved "https://registry.yarnpkg.com/@turf/meta/-/meta-5.0.2.tgz#712ff485cdaa6024d1f97d6fbed69d3f8e31e686" 59 | dependencies: 60 | "@turf/helpers" "^5.0.0" 61 | 62 | "@turf/meta@^4.7.3": 63 | version "4.7.4" 64 | resolved "https://registry.yarnpkg.com/@turf/meta/-/meta-4.7.4.tgz#6de2f1e9890b8f64b669e4b47c09b20893063977" 65 | 66 | abbrev@1: 67 | version "1.1.0" 68 | resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.0.tgz#d0554c2256636e2f56e7c2e5ad183f859428d81f" 69 | 70 | acorn-jsx@^3.0.0: 71 | version "3.0.1" 72 | resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-3.0.1.tgz#afdf9488fb1ecefc8348f6fb22f464e32a58b36b" 73 | dependencies: 74 | acorn "^3.0.4" 75 | 76 | acorn@^3.0.4: 77 | version "3.3.0" 78 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a" 79 | 80 | acorn@^5.0.1: 81 | version "5.0.3" 82 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.0.3.tgz#c460df08491463f028ccb82eab3730bf01087b3d" 83 | 84 | ajv-keywords@^1.0.0: 85 | version "1.5.1" 86 | resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-1.5.1.tgz#314dd0a4b3368fad3dfcdc54ede6171b886daf3c" 87 | 88 | ajv@^4.7.0, ajv@^4.9.1: 89 | version "4.11.8" 90 | resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.8.tgz#82ffb02b29e662ae53bdc20af15947706739c536" 91 | dependencies: 92 | co "^4.6.0" 93 | json-stable-stringify "^1.0.1" 94 | 95 | ansi-escapes@^1.1.0: 96 | version "1.4.0" 97 | resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-1.4.0.tgz#d3a8a83b319aa67793662b13e761c7911422306e" 98 | 99 | ansi-regex@^2.0.0: 100 | version "2.1.1" 101 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" 102 | 103 | ansi-styles@^2.2.1: 104 | version "2.2.1" 105 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" 106 | 107 | anymatch@^1.3.0: 108 | version "1.3.0" 109 | resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-1.3.0.tgz#a3e52fa39168c825ff57b0248126ce5a8ff95507" 110 | dependencies: 111 | arrify "^1.0.0" 112 | micromatch "^2.1.5" 113 | 114 | aproba@^1.0.3: 115 | version "1.1.1" 116 | resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.1.1.tgz#95d3600f07710aa0e9298c726ad5ecf2eacbabab" 117 | 118 | are-we-there-yet@~1.1.2: 119 | version "1.1.4" 120 | resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz#bb5dca382bb94f05e15194373d16fd3ba1ca110d" 121 | dependencies: 122 | delegates "^1.0.0" 123 | readable-stream "^2.0.6" 124 | 125 | argparse@^1.0.7: 126 | version "1.0.9" 127 | resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.9.tgz#73d83bc263f86e97f8cc4f6bae1b0e90a7d22c86" 128 | dependencies: 129 | sprintf-js "~1.0.2" 130 | 131 | arr-diff@^2.0.0: 132 | version "2.0.0" 133 | resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf" 134 | dependencies: 135 | arr-flatten "^1.0.1" 136 | 137 | arr-flatten@^1.0.1: 138 | version "1.0.3" 139 | resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.0.3.tgz#a274ed85ac08849b6bd7847c4580745dc51adfb1" 140 | 141 | array-union@^1.0.1: 142 | version "1.0.2" 143 | resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" 144 | dependencies: 145 | array-uniq "^1.0.1" 146 | 147 | array-uniq@^1.0.1: 148 | version "1.0.3" 149 | resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" 150 | 151 | array-unique@^0.2.1: 152 | version "0.2.1" 153 | resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53" 154 | 155 | arrify@^1.0.0: 156 | version "1.0.1" 157 | resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" 158 | 159 | asn1@~0.2.3: 160 | version "0.2.3" 161 | resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.3.tgz#dac8787713c9966849fc8180777ebe9c1ddf3b86" 162 | 163 | assert-plus@1.0.0, assert-plus@^1.0.0: 164 | version "1.0.0" 165 | resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" 166 | 167 | assert-plus@^0.2.0: 168 | version "0.2.0" 169 | resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.2.0.tgz#d74e1b87e7affc0db8aadb7021f3fe48101ab234" 170 | 171 | async-each@^1.0.0: 172 | version "1.0.1" 173 | resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d" 174 | 175 | asynckit@^0.4.0: 176 | version "0.4.0" 177 | resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" 178 | 179 | aws-sign2@~0.6.0: 180 | version "0.6.0" 181 | resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f" 182 | 183 | aws4@^1.2.1: 184 | version "1.6.0" 185 | resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.6.0.tgz#83ef5ca860b2b32e4a0deedee8c771b9db57471e" 186 | 187 | babel-cli@^6.26.0: 188 | version "6.26.0" 189 | resolved "https://registry.yarnpkg.com/babel-cli/-/babel-cli-6.26.0.tgz#502ab54874d7db88ad00b887a06383ce03d002f1" 190 | dependencies: 191 | babel-core "^6.26.0" 192 | babel-polyfill "^6.26.0" 193 | babel-register "^6.26.0" 194 | babel-runtime "^6.26.0" 195 | commander "^2.11.0" 196 | convert-source-map "^1.5.0" 197 | fs-readdir-recursive "^1.0.0" 198 | glob "^7.1.2" 199 | lodash "^4.17.4" 200 | output-file-sync "^1.1.2" 201 | path-is-absolute "^1.0.1" 202 | slash "^1.0.0" 203 | source-map "^0.5.6" 204 | v8flags "^2.1.1" 205 | optionalDependencies: 206 | chokidar "^1.6.1" 207 | 208 | babel-code-frame@^6.16.0, babel-code-frame@^6.22.0: 209 | version "6.22.0" 210 | resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.22.0.tgz#027620bee567a88c32561574e7fd0801d33118e4" 211 | dependencies: 212 | chalk "^1.1.0" 213 | esutils "^2.0.2" 214 | js-tokens "^3.0.0" 215 | 216 | babel-code-frame@^6.26.0: 217 | version "6.26.0" 218 | resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" 219 | dependencies: 220 | chalk "^1.1.3" 221 | esutils "^2.0.2" 222 | js-tokens "^3.0.2" 223 | 224 | babel-core@^6.26.0: 225 | version "6.26.0" 226 | resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.26.0.tgz#af32f78b31a6fcef119c87b0fd8d9753f03a0bb8" 227 | dependencies: 228 | babel-code-frame "^6.26.0" 229 | babel-generator "^6.26.0" 230 | babel-helpers "^6.24.1" 231 | babel-messages "^6.23.0" 232 | babel-register "^6.26.0" 233 | babel-runtime "^6.26.0" 234 | babel-template "^6.26.0" 235 | babel-traverse "^6.26.0" 236 | babel-types "^6.26.0" 237 | babylon "^6.18.0" 238 | convert-source-map "^1.5.0" 239 | debug "^2.6.8" 240 | json5 "^0.5.1" 241 | lodash "^4.17.4" 242 | minimatch "^3.0.4" 243 | path-is-absolute "^1.0.1" 244 | private "^0.1.7" 245 | slash "^1.0.0" 246 | source-map "^0.5.6" 247 | 248 | babel-generator@^6.26.0: 249 | version "6.26.0" 250 | resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.26.0.tgz#ac1ae20070b79f6e3ca1d3269613053774f20dc5" 251 | dependencies: 252 | babel-messages "^6.23.0" 253 | babel-runtime "^6.26.0" 254 | babel-types "^6.26.0" 255 | detect-indent "^4.0.0" 256 | jsesc "^1.3.0" 257 | lodash "^4.17.4" 258 | source-map "^0.5.6" 259 | trim-right "^1.0.1" 260 | 261 | babel-helper-builder-binary-assignment-operator-visitor@^6.24.1: 262 | version "6.24.1" 263 | resolved "https://registry.yarnpkg.com/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz#cce4517ada356f4220bcae8a02c2b346f9a56664" 264 | dependencies: 265 | babel-helper-explode-assignable-expression "^6.24.1" 266 | babel-runtime "^6.22.0" 267 | babel-types "^6.24.1" 268 | 269 | babel-helper-call-delegate@^6.24.1: 270 | version "6.24.1" 271 | resolved "https://registry.yarnpkg.com/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz#ece6aacddc76e41c3461f88bfc575bd0daa2df8d" 272 | dependencies: 273 | babel-helper-hoist-variables "^6.24.1" 274 | babel-runtime "^6.22.0" 275 | babel-traverse "^6.24.1" 276 | babel-types "^6.24.1" 277 | 278 | babel-helper-define-map@^6.24.1: 279 | version "6.26.0" 280 | resolved "https://registry.yarnpkg.com/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz#a5f56dab41a25f97ecb498c7ebaca9819f95be5f" 281 | dependencies: 282 | babel-helper-function-name "^6.24.1" 283 | babel-runtime "^6.26.0" 284 | babel-types "^6.26.0" 285 | lodash "^4.17.4" 286 | 287 | babel-helper-explode-assignable-expression@^6.24.1: 288 | version "6.24.1" 289 | resolved "https://registry.yarnpkg.com/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz#f25b82cf7dc10433c55f70592d5746400ac22caa" 290 | dependencies: 291 | babel-runtime "^6.22.0" 292 | babel-traverse "^6.24.1" 293 | babel-types "^6.24.1" 294 | 295 | babel-helper-function-name@^6.24.1: 296 | version "6.24.1" 297 | resolved "https://registry.yarnpkg.com/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz#d3475b8c03ed98242a25b48351ab18399d3580a9" 298 | dependencies: 299 | babel-helper-get-function-arity "^6.24.1" 300 | babel-runtime "^6.22.0" 301 | babel-template "^6.24.1" 302 | babel-traverse "^6.24.1" 303 | babel-types "^6.24.1" 304 | 305 | babel-helper-get-function-arity@^6.24.1: 306 | version "6.24.1" 307 | resolved "https://registry.yarnpkg.com/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz#8f7782aa93407c41d3aa50908f89b031b1b6853d" 308 | dependencies: 309 | babel-runtime "^6.22.0" 310 | babel-types "^6.24.1" 311 | 312 | babel-helper-hoist-variables@^6.24.1: 313 | version "6.24.1" 314 | resolved "https://registry.yarnpkg.com/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz#1ecb27689c9d25513eadbc9914a73f5408be7a76" 315 | dependencies: 316 | babel-runtime "^6.22.0" 317 | babel-types "^6.24.1" 318 | 319 | babel-helper-optimise-call-expression@^6.24.1: 320 | version "6.24.1" 321 | resolved "https://registry.yarnpkg.com/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz#f7a13427ba9f73f8f4fa993c54a97882d1244257" 322 | dependencies: 323 | babel-runtime "^6.22.0" 324 | babel-types "^6.24.1" 325 | 326 | babel-helper-regex@^6.24.1: 327 | version "6.26.0" 328 | resolved "https://registry.yarnpkg.com/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz#325c59f902f82f24b74faceed0363954f6495e72" 329 | dependencies: 330 | babel-runtime "^6.26.0" 331 | babel-types "^6.26.0" 332 | lodash "^4.17.4" 333 | 334 | babel-helper-remap-async-to-generator@^6.24.1: 335 | version "6.24.1" 336 | resolved "https://registry.yarnpkg.com/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz#5ec581827ad723fecdd381f1c928390676e4551b" 337 | dependencies: 338 | babel-helper-function-name "^6.24.1" 339 | babel-runtime "^6.22.0" 340 | babel-template "^6.24.1" 341 | babel-traverse "^6.24.1" 342 | babel-types "^6.24.1" 343 | 344 | babel-helper-replace-supers@^6.24.1: 345 | version "6.24.1" 346 | resolved "https://registry.yarnpkg.com/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz#bf6dbfe43938d17369a213ca8a8bf74b6a90ab1a" 347 | dependencies: 348 | babel-helper-optimise-call-expression "^6.24.1" 349 | babel-messages "^6.23.0" 350 | babel-runtime "^6.22.0" 351 | babel-template "^6.24.1" 352 | babel-traverse "^6.24.1" 353 | babel-types "^6.24.1" 354 | 355 | babel-helpers@^6.24.1: 356 | version "6.24.1" 357 | resolved "https://registry.yarnpkg.com/babel-helpers/-/babel-helpers-6.24.1.tgz#3471de9caec388e5c850e597e58a26ddf37602b2" 358 | dependencies: 359 | babel-runtime "^6.22.0" 360 | babel-template "^6.24.1" 361 | 362 | babel-messages@^6.23.0: 363 | version "6.23.0" 364 | resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e" 365 | dependencies: 366 | babel-runtime "^6.22.0" 367 | 368 | babel-plugin-add-module-exports@^0.2.1: 369 | version "0.2.1" 370 | resolved "https://registry.yarnpkg.com/babel-plugin-add-module-exports/-/babel-plugin-add-module-exports-0.2.1.tgz#9ae9a1f4a8dc67f0cdec4f4aeda1e43a5ff65e25" 371 | 372 | babel-plugin-check-es2015-constants@^6.22.0: 373 | version "6.22.0" 374 | resolved "https://registry.yarnpkg.com/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz#35157b101426fd2ffd3da3f75c7d1e91835bbf8a" 375 | dependencies: 376 | babel-runtime "^6.22.0" 377 | 378 | babel-plugin-syntax-async-functions@^6.8.0: 379 | version "6.13.0" 380 | resolved "https://registry.yarnpkg.com/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz#cad9cad1191b5ad634bf30ae0872391e0647be95" 381 | 382 | babel-plugin-syntax-exponentiation-operator@^6.8.0: 383 | version "6.13.0" 384 | resolved "https://registry.yarnpkg.com/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz#9ee7e8337290da95288201a6a57f4170317830de" 385 | 386 | babel-plugin-syntax-trailing-function-commas@^6.22.0: 387 | version "6.22.0" 388 | resolved "https://registry.yarnpkg.com/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz#ba0360937f8d06e40180a43fe0d5616fff532cf3" 389 | 390 | babel-plugin-transform-async-to-generator@^6.22.0: 391 | version "6.24.1" 392 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz#6536e378aff6cb1d5517ac0e40eb3e9fc8d08761" 393 | dependencies: 394 | babel-helper-remap-async-to-generator "^6.24.1" 395 | babel-plugin-syntax-async-functions "^6.8.0" 396 | babel-runtime "^6.22.0" 397 | 398 | babel-plugin-transform-es2015-arrow-functions@^6.22.0: 399 | version "6.22.0" 400 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz#452692cb711d5f79dc7f85e440ce41b9f244d221" 401 | dependencies: 402 | babel-runtime "^6.22.0" 403 | 404 | babel-plugin-transform-es2015-block-scoped-functions@^6.22.0: 405 | version "6.22.0" 406 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz#bbc51b49f964d70cb8d8e0b94e820246ce3a6141" 407 | dependencies: 408 | babel-runtime "^6.22.0" 409 | 410 | babel-plugin-transform-es2015-block-scoping@^6.23.0: 411 | version "6.26.0" 412 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz#d70f5299c1308d05c12f463813b0a09e73b1895f" 413 | dependencies: 414 | babel-runtime "^6.26.0" 415 | babel-template "^6.26.0" 416 | babel-traverse "^6.26.0" 417 | babel-types "^6.26.0" 418 | lodash "^4.17.4" 419 | 420 | babel-plugin-transform-es2015-classes@^6.23.0: 421 | version "6.24.1" 422 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz#5a4c58a50c9c9461e564b4b2a3bfabc97a2584db" 423 | dependencies: 424 | babel-helper-define-map "^6.24.1" 425 | babel-helper-function-name "^6.24.1" 426 | babel-helper-optimise-call-expression "^6.24.1" 427 | babel-helper-replace-supers "^6.24.1" 428 | babel-messages "^6.23.0" 429 | babel-runtime "^6.22.0" 430 | babel-template "^6.24.1" 431 | babel-traverse "^6.24.1" 432 | babel-types "^6.24.1" 433 | 434 | babel-plugin-transform-es2015-computed-properties@^6.22.0: 435 | version "6.24.1" 436 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz#6fe2a8d16895d5634f4cd999b6d3480a308159b3" 437 | dependencies: 438 | babel-runtime "^6.22.0" 439 | babel-template "^6.24.1" 440 | 441 | babel-plugin-transform-es2015-destructuring@^6.23.0: 442 | version "6.23.0" 443 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz#997bb1f1ab967f682d2b0876fe358d60e765c56d" 444 | dependencies: 445 | babel-runtime "^6.22.0" 446 | 447 | babel-plugin-transform-es2015-duplicate-keys@^6.22.0: 448 | version "6.24.1" 449 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz#73eb3d310ca969e3ef9ec91c53741a6f1576423e" 450 | dependencies: 451 | babel-runtime "^6.22.0" 452 | babel-types "^6.24.1" 453 | 454 | babel-plugin-transform-es2015-for-of@^6.23.0: 455 | version "6.23.0" 456 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz#f47c95b2b613df1d3ecc2fdb7573623c75248691" 457 | dependencies: 458 | babel-runtime "^6.22.0" 459 | 460 | babel-plugin-transform-es2015-function-name@^6.22.0: 461 | version "6.24.1" 462 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz#834c89853bc36b1af0f3a4c5dbaa94fd8eacaa8b" 463 | dependencies: 464 | babel-helper-function-name "^6.24.1" 465 | babel-runtime "^6.22.0" 466 | babel-types "^6.24.1" 467 | 468 | babel-plugin-transform-es2015-literals@^6.22.0: 469 | version "6.22.0" 470 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz#4f54a02d6cd66cf915280019a31d31925377ca2e" 471 | dependencies: 472 | babel-runtime "^6.22.0" 473 | 474 | babel-plugin-transform-es2015-modules-amd@^6.22.0, babel-plugin-transform-es2015-modules-amd@^6.24.1: 475 | version "6.24.1" 476 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz#3b3e54017239842d6d19c3011c4bd2f00a00d154" 477 | dependencies: 478 | babel-plugin-transform-es2015-modules-commonjs "^6.24.1" 479 | babel-runtime "^6.22.0" 480 | babel-template "^6.24.1" 481 | 482 | babel-plugin-transform-es2015-modules-commonjs@^6.23.0, babel-plugin-transform-es2015-modules-commonjs@^6.24.1: 483 | version "6.26.0" 484 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.0.tgz#0d8394029b7dc6abe1a97ef181e00758dd2e5d8a" 485 | dependencies: 486 | babel-plugin-transform-strict-mode "^6.24.1" 487 | babel-runtime "^6.26.0" 488 | babel-template "^6.26.0" 489 | babel-types "^6.26.0" 490 | 491 | babel-plugin-transform-es2015-modules-systemjs@^6.23.0: 492 | version "6.24.1" 493 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz#ff89a142b9119a906195f5f106ecf305d9407d23" 494 | dependencies: 495 | babel-helper-hoist-variables "^6.24.1" 496 | babel-runtime "^6.22.0" 497 | babel-template "^6.24.1" 498 | 499 | babel-plugin-transform-es2015-modules-umd@^6.23.0: 500 | version "6.24.1" 501 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz#ac997e6285cd18ed6176adb607d602344ad38468" 502 | dependencies: 503 | babel-plugin-transform-es2015-modules-amd "^6.24.1" 504 | babel-runtime "^6.22.0" 505 | babel-template "^6.24.1" 506 | 507 | babel-plugin-transform-es2015-object-super@^6.22.0: 508 | version "6.24.1" 509 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz#24cef69ae21cb83a7f8603dad021f572eb278f8d" 510 | dependencies: 511 | babel-helper-replace-supers "^6.24.1" 512 | babel-runtime "^6.22.0" 513 | 514 | babel-plugin-transform-es2015-parameters@^6.23.0: 515 | version "6.24.1" 516 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz#57ac351ab49caf14a97cd13b09f66fdf0a625f2b" 517 | dependencies: 518 | babel-helper-call-delegate "^6.24.1" 519 | babel-helper-get-function-arity "^6.24.1" 520 | babel-runtime "^6.22.0" 521 | babel-template "^6.24.1" 522 | babel-traverse "^6.24.1" 523 | babel-types "^6.24.1" 524 | 525 | babel-plugin-transform-es2015-shorthand-properties@^6.22.0: 526 | version "6.24.1" 527 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz#24f875d6721c87661bbd99a4622e51f14de38aa0" 528 | dependencies: 529 | babel-runtime "^6.22.0" 530 | babel-types "^6.24.1" 531 | 532 | babel-plugin-transform-es2015-spread@^6.22.0: 533 | version "6.22.0" 534 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz#d6d68a99f89aedc4536c81a542e8dd9f1746f8d1" 535 | dependencies: 536 | babel-runtime "^6.22.0" 537 | 538 | babel-plugin-transform-es2015-sticky-regex@^6.22.0: 539 | version "6.24.1" 540 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz#00c1cdb1aca71112cdf0cf6126c2ed6b457ccdbc" 541 | dependencies: 542 | babel-helper-regex "^6.24.1" 543 | babel-runtime "^6.22.0" 544 | babel-types "^6.24.1" 545 | 546 | babel-plugin-transform-es2015-template-literals@^6.22.0: 547 | version "6.22.0" 548 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz#a84b3450f7e9f8f1f6839d6d687da84bb1236d8d" 549 | dependencies: 550 | babel-runtime "^6.22.0" 551 | 552 | babel-plugin-transform-es2015-typeof-symbol@^6.23.0: 553 | version "6.23.0" 554 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz#dec09f1cddff94b52ac73d505c84df59dcceb372" 555 | dependencies: 556 | babel-runtime "^6.22.0" 557 | 558 | babel-plugin-transform-es2015-unicode-regex@^6.22.0: 559 | version "6.24.1" 560 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz#d38b12f42ea7323f729387f18a7c5ae1faeb35e9" 561 | dependencies: 562 | babel-helper-regex "^6.24.1" 563 | babel-runtime "^6.22.0" 564 | regexpu-core "^2.0.0" 565 | 566 | babel-plugin-transform-exponentiation-operator@^6.22.0: 567 | version "6.24.1" 568 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz#2ab0c9c7f3098fa48907772bb813fe41e8de3a0e" 569 | dependencies: 570 | babel-helper-builder-binary-assignment-operator-visitor "^6.24.1" 571 | babel-plugin-syntax-exponentiation-operator "^6.8.0" 572 | babel-runtime "^6.22.0" 573 | 574 | babel-plugin-transform-regenerator@^6.22.0: 575 | version "6.26.0" 576 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz#e0703696fbde27f0a3efcacf8b4dca2f7b3a8f2f" 577 | dependencies: 578 | regenerator-transform "^0.10.0" 579 | 580 | babel-plugin-transform-strict-mode@^6.24.1: 581 | version "6.24.1" 582 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz#d5faf7aa578a65bbe591cf5edae04a0c67020758" 583 | dependencies: 584 | babel-runtime "^6.22.0" 585 | babel-types "^6.24.1" 586 | 587 | babel-polyfill@^6.26.0: 588 | version "6.26.0" 589 | resolved "https://registry.yarnpkg.com/babel-polyfill/-/babel-polyfill-6.26.0.tgz#379937abc67d7895970adc621f284cd966cf2153" 590 | dependencies: 591 | babel-runtime "^6.26.0" 592 | core-js "^2.5.0" 593 | regenerator-runtime "^0.10.5" 594 | 595 | babel-preset-env@^1.6.1: 596 | version "1.6.1" 597 | resolved "https://registry.yarnpkg.com/babel-preset-env/-/babel-preset-env-1.6.1.tgz#a18b564cc9b9afdf4aae57ae3c1b0d99188e6f48" 598 | dependencies: 599 | babel-plugin-check-es2015-constants "^6.22.0" 600 | babel-plugin-syntax-trailing-function-commas "^6.22.0" 601 | babel-plugin-transform-async-to-generator "^6.22.0" 602 | babel-plugin-transform-es2015-arrow-functions "^6.22.0" 603 | babel-plugin-transform-es2015-block-scoped-functions "^6.22.0" 604 | babel-plugin-transform-es2015-block-scoping "^6.23.0" 605 | babel-plugin-transform-es2015-classes "^6.23.0" 606 | babel-plugin-transform-es2015-computed-properties "^6.22.0" 607 | babel-plugin-transform-es2015-destructuring "^6.23.0" 608 | babel-plugin-transform-es2015-duplicate-keys "^6.22.0" 609 | babel-plugin-transform-es2015-for-of "^6.23.0" 610 | babel-plugin-transform-es2015-function-name "^6.22.0" 611 | babel-plugin-transform-es2015-literals "^6.22.0" 612 | babel-plugin-transform-es2015-modules-amd "^6.22.0" 613 | babel-plugin-transform-es2015-modules-commonjs "^6.23.0" 614 | babel-plugin-transform-es2015-modules-systemjs "^6.23.0" 615 | babel-plugin-transform-es2015-modules-umd "^6.23.0" 616 | babel-plugin-transform-es2015-object-super "^6.22.0" 617 | babel-plugin-transform-es2015-parameters "^6.23.0" 618 | babel-plugin-transform-es2015-shorthand-properties "^6.22.0" 619 | babel-plugin-transform-es2015-spread "^6.22.0" 620 | babel-plugin-transform-es2015-sticky-regex "^6.22.0" 621 | babel-plugin-transform-es2015-template-literals "^6.22.0" 622 | babel-plugin-transform-es2015-typeof-symbol "^6.23.0" 623 | babel-plugin-transform-es2015-unicode-regex "^6.22.0" 624 | babel-plugin-transform-exponentiation-operator "^6.22.0" 625 | babel-plugin-transform-regenerator "^6.22.0" 626 | browserslist "^2.1.2" 627 | invariant "^2.2.2" 628 | semver "^5.3.0" 629 | 630 | babel-register@^6.26.0: 631 | version "6.26.0" 632 | resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.26.0.tgz#6ed021173e2fcb486d7acb45c6009a856f647071" 633 | dependencies: 634 | babel-core "^6.26.0" 635 | babel-runtime "^6.26.0" 636 | core-js "^2.5.0" 637 | home-or-tmp "^2.0.0" 638 | lodash "^4.17.4" 639 | mkdirp "^0.5.1" 640 | source-map-support "^0.4.15" 641 | 642 | babel-runtime@^6.18.0, babel-runtime@^6.26.0: 643 | version "6.26.0" 644 | resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" 645 | dependencies: 646 | core-js "^2.4.0" 647 | regenerator-runtime "^0.11.0" 648 | 649 | babel-runtime@^6.22.0: 650 | version "6.23.0" 651 | resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.23.0.tgz#0a9489f144de70efb3ce4300accdb329e2fc543b" 652 | dependencies: 653 | core-js "^2.4.0" 654 | regenerator-runtime "^0.10.0" 655 | 656 | babel-template@^6.24.1: 657 | version "6.24.1" 658 | resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.24.1.tgz#04ae514f1f93b3a2537f2a0f60a5a45fb8308333" 659 | dependencies: 660 | babel-runtime "^6.22.0" 661 | babel-traverse "^6.24.1" 662 | babel-types "^6.24.1" 663 | babylon "^6.11.0" 664 | lodash "^4.2.0" 665 | 666 | babel-template@^6.26.0: 667 | version "6.26.0" 668 | resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.26.0.tgz#de03e2d16396b069f46dd9fff8521fb1a0e35e02" 669 | dependencies: 670 | babel-runtime "^6.26.0" 671 | babel-traverse "^6.26.0" 672 | babel-types "^6.26.0" 673 | babylon "^6.18.0" 674 | lodash "^4.17.4" 675 | 676 | babel-traverse@^6.24.1: 677 | version "6.24.1" 678 | resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.24.1.tgz#ab36673fd356f9a0948659e7b338d5feadb31695" 679 | dependencies: 680 | babel-code-frame "^6.22.0" 681 | babel-messages "^6.23.0" 682 | babel-runtime "^6.22.0" 683 | babel-types "^6.24.1" 684 | babylon "^6.15.0" 685 | debug "^2.2.0" 686 | globals "^9.0.0" 687 | invariant "^2.2.0" 688 | lodash "^4.2.0" 689 | 690 | babel-traverse@^6.26.0: 691 | version "6.26.0" 692 | resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.26.0.tgz#46a9cbd7edcc62c8e5c064e2d2d8d0f4035766ee" 693 | dependencies: 694 | babel-code-frame "^6.26.0" 695 | babel-messages "^6.23.0" 696 | babel-runtime "^6.26.0" 697 | babel-types "^6.26.0" 698 | babylon "^6.18.0" 699 | debug "^2.6.8" 700 | globals "^9.18.0" 701 | invariant "^2.2.2" 702 | lodash "^4.17.4" 703 | 704 | babel-types@^6.19.0, babel-types@^6.26.0: 705 | version "6.26.0" 706 | resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.26.0.tgz#a3b073f94ab49eb6fa55cd65227a334380632497" 707 | dependencies: 708 | babel-runtime "^6.26.0" 709 | esutils "^2.0.2" 710 | lodash "^4.17.4" 711 | to-fast-properties "^1.0.3" 712 | 713 | babel-types@^6.24.1: 714 | version "6.24.1" 715 | resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.24.1.tgz#a136879dc15b3606bda0d90c1fc74304c2ff0975" 716 | dependencies: 717 | babel-runtime "^6.22.0" 718 | esutils "^2.0.2" 719 | lodash "^4.2.0" 720 | to-fast-properties "^1.0.1" 721 | 722 | babylon@^6.11.0, babylon@^6.15.0: 723 | version "6.17.1" 724 | resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.17.1.tgz#17f14fddf361b695981fe679385e4f1c01ebd86f" 725 | 726 | babylon@^6.18.0: 727 | version "6.18.0" 728 | resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3" 729 | 730 | balanced-match@^0.4.1: 731 | version "0.4.2" 732 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.4.2.tgz#cb3f3e3c732dc0f01ee70b403f302e61d7709838" 733 | 734 | bcrypt-pbkdf@^1.0.0: 735 | version "1.0.1" 736 | resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz#63bc5dcb61331b92bc05fd528953c33462a06f8d" 737 | dependencies: 738 | tweetnacl "^0.14.3" 739 | 740 | benchmark@^2.1.4: 741 | version "2.1.4" 742 | resolved "https://registry.yarnpkg.com/benchmark/-/benchmark-2.1.4.tgz#09f3de31c916425d498cc2ee565a0ebf3c2a5629" 743 | dependencies: 744 | lodash "^4.17.4" 745 | platform "^1.3.3" 746 | 747 | binary-extensions@^1.0.0: 748 | version "1.8.0" 749 | resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.8.0.tgz#48ec8d16df4377eae5fa5884682480af4d95c774" 750 | 751 | block-stream@*: 752 | version "0.0.9" 753 | resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a" 754 | dependencies: 755 | inherits "~2.0.0" 756 | 757 | boom@2.x.x: 758 | version "2.10.1" 759 | resolved "https://registry.yarnpkg.com/boom/-/boom-2.10.1.tgz#39c8918ceff5799f83f9492a848f625add0c766f" 760 | dependencies: 761 | hoek "2.x.x" 762 | 763 | brace-expansion@^1.1.7: 764 | version "1.1.7" 765 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.7.tgz#3effc3c50e000531fb720eaff80f0ae8ef23cf59" 766 | dependencies: 767 | balanced-match "^0.4.1" 768 | concat-map "0.0.1" 769 | 770 | braces@^1.8.2: 771 | version "1.8.5" 772 | resolved "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7" 773 | dependencies: 774 | expand-range "^1.8.1" 775 | preserve "^0.2.0" 776 | repeat-element "^1.1.2" 777 | 778 | browserslist@^2.1.2: 779 | version "2.5.1" 780 | resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-2.5.1.tgz#68e4bc536bbcc6086d62843a2ffccea8396821c6" 781 | dependencies: 782 | caniuse-lite "^1.0.30000744" 783 | electron-to-chromium "^1.3.24" 784 | 785 | buffer-shims@~1.0.0: 786 | version "1.0.0" 787 | resolved "https://registry.yarnpkg.com/buffer-shims/-/buffer-shims-1.0.0.tgz#9978ce317388c649ad8793028c3477ef044a8b51" 788 | 789 | caller-path@^0.1.0: 790 | version "0.1.0" 791 | resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-0.1.0.tgz#94085ef63581ecd3daa92444a8fe94e82577751f" 792 | dependencies: 793 | callsites "^0.2.0" 794 | 795 | callsites@^0.2.0: 796 | version "0.2.0" 797 | resolved "https://registry.yarnpkg.com/callsites/-/callsites-0.2.0.tgz#afab96262910a7f33c19a5775825c69f34e350ca" 798 | 799 | caniuse-lite@^1.0.30000744: 800 | version "1.0.30000746" 801 | resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000746.tgz#c64f95a3925cfd30207a308ed76c1ae96ea09ea0" 802 | 803 | caseless@~0.12.0: 804 | version "0.12.0" 805 | resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" 806 | 807 | chalk@^1.0.0, chalk@^1.1.0, chalk@^1.1.1, chalk@^1.1.3: 808 | version "1.1.3" 809 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" 810 | dependencies: 811 | ansi-styles "^2.2.1" 812 | escape-string-regexp "^1.0.2" 813 | has-ansi "^2.0.0" 814 | strip-ansi "^3.0.0" 815 | supports-color "^2.0.0" 816 | 817 | chokidar@^1.6.1: 818 | version "1.7.0" 819 | resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-1.7.0.tgz#798e689778151c8076b4b360e5edd28cda2bb468" 820 | dependencies: 821 | anymatch "^1.3.0" 822 | async-each "^1.0.0" 823 | glob-parent "^2.0.0" 824 | inherits "^2.0.1" 825 | is-binary-path "^1.0.0" 826 | is-glob "^2.0.0" 827 | path-is-absolute "^1.0.0" 828 | readdirp "^2.0.0" 829 | optionalDependencies: 830 | fsevents "^1.0.0" 831 | 832 | circular-json@^0.3.1: 833 | version "0.3.1" 834 | resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.1.tgz#be8b36aefccde8b3ca7aa2d6afc07a37242c0d2d" 835 | 836 | cli-cursor@^1.0.1: 837 | version "1.0.2" 838 | resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-1.0.2.tgz#64da3f7d56a54412e59794bd62dc35295e8f2987" 839 | dependencies: 840 | restore-cursor "^1.0.1" 841 | 842 | cli-width@^2.0.0: 843 | version "2.1.0" 844 | resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.1.0.tgz#b234ca209b29ef66fc518d9b98d5847b00edf00a" 845 | 846 | co@^4.6.0: 847 | version "4.6.0" 848 | resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" 849 | 850 | code-point-at@^1.0.0: 851 | version "1.1.0" 852 | resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" 853 | 854 | combined-stream@^1.0.5, combined-stream@~1.0.5: 855 | version "1.0.5" 856 | resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.5.tgz#938370a57b4a51dea2c77c15d5c5fdf895164009" 857 | dependencies: 858 | delayed-stream "~1.0.0" 859 | 860 | commander@^2.11.0: 861 | version "2.11.0" 862 | resolved "https://registry.yarnpkg.com/commander/-/commander-2.11.0.tgz#157152fd1e7a6c8d98a5b715cf376df928004563" 863 | 864 | concat-map@0.0.1: 865 | version "0.0.1" 866 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 867 | 868 | concat-stream@^1.5.2: 869 | version "1.6.0" 870 | resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.0.tgz#0aac662fd52be78964d5532f694784e70110acf7" 871 | dependencies: 872 | inherits "^2.0.3" 873 | readable-stream "^2.2.2" 874 | typedarray "^0.0.6" 875 | 876 | console-control-strings@^1.0.0, console-control-strings@~1.1.0: 877 | version "1.1.0" 878 | resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" 879 | 880 | convert-source-map@^1.5.0: 881 | version "1.5.0" 882 | resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.5.0.tgz#9acd70851c6d5dfdd93d9282e5edf94a03ff46b5" 883 | 884 | core-js@^2.4.0: 885 | version "2.4.1" 886 | resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.4.1.tgz#4de911e667b0eae9124e34254b53aea6fc618d3e" 887 | 888 | core-js@^2.5.0: 889 | version "2.5.1" 890 | resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.5.1.tgz#ae6874dc66937789b80754ff5428df66819ca50b" 891 | 892 | core-util-is@~1.0.0: 893 | version "1.0.2" 894 | resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" 895 | 896 | cryptiles@2.x.x: 897 | version "2.0.5" 898 | resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-2.0.5.tgz#3bdfecdc608147c1c67202fa291e7dca59eaa3b8" 899 | dependencies: 900 | boom "2.x.x" 901 | 902 | d@1: 903 | version "1.0.0" 904 | resolved "https://registry.yarnpkg.com/d/-/d-1.0.0.tgz#754bb5bfe55451da69a58b94d45f4c5b0462d58f" 905 | dependencies: 906 | es5-ext "^0.10.9" 907 | 908 | dashdash@^1.12.0: 909 | version "1.14.1" 910 | resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" 911 | dependencies: 912 | assert-plus "^1.0.0" 913 | 914 | debug@^2.1.1, debug@^2.2.0: 915 | version "2.6.8" 916 | resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.8.tgz#e731531ca2ede27d188222427da17821d68ff4fc" 917 | dependencies: 918 | ms "2.0.0" 919 | 920 | debug@^2.6.8: 921 | version "2.6.9" 922 | resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" 923 | dependencies: 924 | ms "2.0.0" 925 | 926 | deep-equal@~1.0.1: 927 | version "1.0.1" 928 | resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.0.1.tgz#f5d260292b660e084eff4cdbc9f08ad3247448b5" 929 | 930 | deep-extend@~0.4.0: 931 | version "0.4.2" 932 | resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.4.2.tgz#48b699c27e334bf89f10892be432f6e4c7d34a7f" 933 | 934 | deep-is@~0.1.3: 935 | version "0.1.3" 936 | resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" 937 | 938 | define-properties@^1.1.2: 939 | version "1.1.2" 940 | resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.2.tgz#83a73f2fea569898fb737193c8f873caf6d45c94" 941 | dependencies: 942 | foreach "^2.0.5" 943 | object-keys "^1.0.8" 944 | 945 | defined@~1.0.0: 946 | version "1.0.0" 947 | resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693" 948 | 949 | del@^2.0.2: 950 | version "2.2.2" 951 | resolved "https://registry.yarnpkg.com/del/-/del-2.2.2.tgz#c12c981d067846c84bcaf862cff930d907ffd1a8" 952 | dependencies: 953 | globby "^5.0.0" 954 | is-path-cwd "^1.0.0" 955 | is-path-in-cwd "^1.0.0" 956 | object-assign "^4.0.1" 957 | pify "^2.0.0" 958 | pinkie-promise "^2.0.0" 959 | rimraf "^2.2.8" 960 | 961 | delayed-stream@~1.0.0: 962 | version "1.0.0" 963 | resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" 964 | 965 | delegates@^1.0.0: 966 | version "1.0.0" 967 | resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" 968 | 969 | detect-indent@^4.0.0: 970 | version "4.0.0" 971 | resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-4.0.0.tgz#f76d064352cdf43a1cb6ce619c4ee3a9475de208" 972 | dependencies: 973 | repeating "^2.0.0" 974 | 975 | detect-indent@^5.0.0: 976 | version "5.0.0" 977 | resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-5.0.0.tgz#3871cc0a6a002e8c3e5b3cf7f336264675f06b9d" 978 | 979 | doctrine@^2.0.0: 980 | version "2.0.0" 981 | resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.0.0.tgz#c73d8d2909d22291e1a007a395804da8b665fe63" 982 | dependencies: 983 | esutils "^2.0.2" 984 | isarray "^1.0.0" 985 | 986 | ecc-jsbn@~0.1.1: 987 | version "0.1.1" 988 | resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505" 989 | dependencies: 990 | jsbn "~0.1.0" 991 | 992 | electron-to-chromium@^1.3.24: 993 | version "1.3.26" 994 | resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.26.tgz#996427294861a74d9c7c82b9260ea301e8c02d66" 995 | 996 | error-ex@^1.2.0: 997 | version "1.3.1" 998 | resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.1.tgz#f855a86ce61adc4e8621c3cda21e7a7612c3a8dc" 999 | dependencies: 1000 | is-arrayish "^0.2.1" 1001 | 1002 | es-abstract@^1.5.0: 1003 | version "1.7.0" 1004 | resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.7.0.tgz#dfade774e01bfcd97f96180298c449c8623fb94c" 1005 | dependencies: 1006 | es-to-primitive "^1.1.1" 1007 | function-bind "^1.1.0" 1008 | is-callable "^1.1.3" 1009 | is-regex "^1.0.3" 1010 | 1011 | es-to-primitive@^1.1.1: 1012 | version "1.1.1" 1013 | resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.1.1.tgz#45355248a88979034b6792e19bb81f2b7975dd0d" 1014 | dependencies: 1015 | is-callable "^1.1.1" 1016 | is-date-object "^1.0.1" 1017 | is-symbol "^1.0.1" 1018 | 1019 | es5-ext@^0.10.14, es5-ext@^0.10.9, es5-ext@~0.10.14: 1020 | version "0.10.21" 1021 | resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.21.tgz#19a725f9e51d0300bbc1e8e821109fd9daf55925" 1022 | dependencies: 1023 | es6-iterator "2" 1024 | es6-symbol "~3.1" 1025 | 1026 | es6-iterator@2, es6-iterator@^2.0.1, es6-iterator@~2.0.1: 1027 | version "2.0.1" 1028 | resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.1.tgz#8e319c9f0453bf575d374940a655920e59ca5512" 1029 | dependencies: 1030 | d "1" 1031 | es5-ext "^0.10.14" 1032 | es6-symbol "^3.1" 1033 | 1034 | es6-map@^0.1.3: 1035 | version "0.1.5" 1036 | resolved "https://registry.yarnpkg.com/es6-map/-/es6-map-0.1.5.tgz#9136e0503dcc06a301690f0bb14ff4e364e949f0" 1037 | dependencies: 1038 | d "1" 1039 | es5-ext "~0.10.14" 1040 | es6-iterator "~2.0.1" 1041 | es6-set "~0.1.5" 1042 | es6-symbol "~3.1.1" 1043 | event-emitter "~0.3.5" 1044 | 1045 | es6-set@~0.1.5: 1046 | version "0.1.5" 1047 | resolved "https://registry.yarnpkg.com/es6-set/-/es6-set-0.1.5.tgz#d2b3ec5d4d800ced818db538d28974db0a73ccb1" 1048 | dependencies: 1049 | d "1" 1050 | es5-ext "~0.10.14" 1051 | es6-iterator "~2.0.1" 1052 | es6-symbol "3.1.1" 1053 | event-emitter "~0.3.5" 1054 | 1055 | es6-symbol@3.1.1, es6-symbol@^3.1, es6-symbol@^3.1.1, es6-symbol@~3.1, es6-symbol@~3.1.1: 1056 | version "3.1.1" 1057 | resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.1.tgz#bf00ef4fdab6ba1b46ecb7b629b4c7ed5715cc77" 1058 | dependencies: 1059 | d "1" 1060 | es5-ext "~0.10.14" 1061 | 1062 | es6-weak-map@^2.0.1: 1063 | version "2.0.2" 1064 | resolved "https://registry.yarnpkg.com/es6-weak-map/-/es6-weak-map-2.0.2.tgz#5e3ab32251ffd1538a1f8e5ffa1357772f92d96f" 1065 | dependencies: 1066 | d "1" 1067 | es5-ext "^0.10.14" 1068 | es6-iterator "^2.0.1" 1069 | es6-symbol "^3.1.1" 1070 | 1071 | escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: 1072 | version "1.0.5" 1073 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" 1074 | 1075 | escope@^3.6.0: 1076 | version "3.6.0" 1077 | resolved "https://registry.yarnpkg.com/escope/-/escope-3.6.0.tgz#e01975e812781a163a6dadfdd80398dc64c889c3" 1078 | dependencies: 1079 | es6-map "^0.1.3" 1080 | es6-weak-map "^2.0.1" 1081 | esrecurse "^4.1.0" 1082 | estraverse "^4.1.1" 1083 | 1084 | eslint-config-mourner@^2.0.1: 1085 | version "2.0.1" 1086 | resolved "https://registry.yarnpkg.com/eslint-config-mourner/-/eslint-config-mourner-2.0.1.tgz#84e00f44ca373248b4d8d87fc3bbaa3b2a769a9d" 1087 | 1088 | eslint@^3.19.0: 1089 | version "3.19.0" 1090 | resolved "https://registry.yarnpkg.com/eslint/-/eslint-3.19.0.tgz#c8fc6201c7f40dd08941b87c085767386a679acc" 1091 | dependencies: 1092 | babel-code-frame "^6.16.0" 1093 | chalk "^1.1.3" 1094 | concat-stream "^1.5.2" 1095 | debug "^2.1.1" 1096 | doctrine "^2.0.0" 1097 | escope "^3.6.0" 1098 | espree "^3.4.0" 1099 | esquery "^1.0.0" 1100 | estraverse "^4.2.0" 1101 | esutils "^2.0.2" 1102 | file-entry-cache "^2.0.0" 1103 | glob "^7.0.3" 1104 | globals "^9.14.0" 1105 | ignore "^3.2.0" 1106 | imurmurhash "^0.1.4" 1107 | inquirer "^0.12.0" 1108 | is-my-json-valid "^2.10.0" 1109 | is-resolvable "^1.0.0" 1110 | js-yaml "^3.5.1" 1111 | json-stable-stringify "^1.0.0" 1112 | levn "^0.3.0" 1113 | lodash "^4.0.0" 1114 | mkdirp "^0.5.0" 1115 | natural-compare "^1.4.0" 1116 | optionator "^0.8.2" 1117 | path-is-inside "^1.0.1" 1118 | pluralize "^1.2.1" 1119 | progress "^1.1.8" 1120 | require-uncached "^1.0.2" 1121 | shelljs "^0.7.5" 1122 | strip-bom "^3.0.0" 1123 | strip-json-comments "~2.0.1" 1124 | table "^3.7.8" 1125 | text-table "~0.2.0" 1126 | user-home "^2.0.0" 1127 | 1128 | espree@^3.4.0: 1129 | version "3.4.3" 1130 | resolved "https://registry.yarnpkg.com/espree/-/espree-3.4.3.tgz#2910b5ccd49ce893c2ffffaab4fd8b3a31b82374" 1131 | dependencies: 1132 | acorn "^5.0.1" 1133 | acorn-jsx "^3.0.0" 1134 | 1135 | esprima@^3.1.1: 1136 | version "3.1.3" 1137 | resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" 1138 | 1139 | esquery@^1.0.0: 1140 | version "1.0.0" 1141 | resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.0.0.tgz#cfba8b57d7fba93f17298a8a006a04cda13d80fa" 1142 | dependencies: 1143 | estraverse "^4.0.0" 1144 | 1145 | esrecurse@^4.1.0: 1146 | version "4.1.0" 1147 | resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.1.0.tgz#4713b6536adf7f2ac4f327d559e7756bff648220" 1148 | dependencies: 1149 | estraverse "~4.1.0" 1150 | object-assign "^4.0.1" 1151 | 1152 | estraverse@^4.0.0, estraverse@^4.1.1, estraverse@^4.2.0: 1153 | version "4.2.0" 1154 | resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13" 1155 | 1156 | estraverse@~4.1.0: 1157 | version "4.1.1" 1158 | resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.1.1.tgz#f6caca728933a850ef90661d0e17982ba47111a2" 1159 | 1160 | esutils@^2.0.2: 1161 | version "2.0.2" 1162 | resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" 1163 | 1164 | event-emitter@~0.3.5: 1165 | version "0.3.5" 1166 | resolved "https://registry.yarnpkg.com/event-emitter/-/event-emitter-0.3.5.tgz#df8c69eef1647923c7157b9ce83840610b02cc39" 1167 | dependencies: 1168 | d "1" 1169 | es5-ext "~0.10.14" 1170 | 1171 | exit-hook@^1.0.0: 1172 | version "1.1.1" 1173 | resolved "https://registry.yarnpkg.com/exit-hook/-/exit-hook-1.1.1.tgz#f05ca233b48c05d54fff07765df8507e95c02ff8" 1174 | 1175 | expand-brackets@^0.1.4: 1176 | version "0.1.5" 1177 | resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b" 1178 | dependencies: 1179 | is-posix-bracket "^0.1.0" 1180 | 1181 | expand-range@^1.8.1: 1182 | version "1.8.2" 1183 | resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337" 1184 | dependencies: 1185 | fill-range "^2.1.0" 1186 | 1187 | extend@~3.0.0: 1188 | version "3.0.1" 1189 | resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444" 1190 | 1191 | extglob@^0.3.1: 1192 | version "0.3.2" 1193 | resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1" 1194 | dependencies: 1195 | is-extglob "^1.0.0" 1196 | 1197 | extsprintf@1.0.2: 1198 | version "1.0.2" 1199 | resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.0.2.tgz#e1080e0658e300b06294990cc70e1502235fd550" 1200 | 1201 | fast-levenshtein@~2.0.4: 1202 | version "2.0.6" 1203 | resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" 1204 | 1205 | figures@^1.3.5: 1206 | version "1.7.0" 1207 | resolved "https://registry.yarnpkg.com/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e" 1208 | dependencies: 1209 | escape-string-regexp "^1.0.5" 1210 | object-assign "^4.1.0" 1211 | 1212 | file-entry-cache@^2.0.0: 1213 | version "2.0.0" 1214 | resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-2.0.0.tgz#c392990c3e684783d838b8c84a45d8a048458361" 1215 | dependencies: 1216 | flat-cache "^1.2.1" 1217 | object-assign "^4.0.1" 1218 | 1219 | filename-regex@^2.0.0: 1220 | version "2.0.1" 1221 | resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26" 1222 | 1223 | fill-range@^2.1.0: 1224 | version "2.2.3" 1225 | resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.3.tgz#50b77dfd7e469bc7492470963699fe7a8485a723" 1226 | dependencies: 1227 | is-number "^2.1.0" 1228 | isobject "^2.0.0" 1229 | randomatic "^1.1.3" 1230 | repeat-element "^1.1.2" 1231 | repeat-string "^1.5.2" 1232 | 1233 | flat-cache@^1.2.1: 1234 | version "1.2.2" 1235 | resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-1.2.2.tgz#fa86714e72c21db88601761ecf2f555d1abc6b96" 1236 | dependencies: 1237 | circular-json "^0.3.1" 1238 | del "^2.0.2" 1239 | graceful-fs "^4.1.2" 1240 | write "^0.2.1" 1241 | 1242 | for-each@~0.3.2: 1243 | version "0.3.2" 1244 | resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.2.tgz#2c40450b9348e97f281322593ba96704b9abd4d4" 1245 | dependencies: 1246 | is-function "~1.0.0" 1247 | 1248 | for-in@^1.0.1: 1249 | version "1.0.2" 1250 | resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" 1251 | 1252 | for-own@^0.1.4: 1253 | version "0.1.5" 1254 | resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.5.tgz#5265c681a4f294dabbf17c9509b6763aa84510ce" 1255 | dependencies: 1256 | for-in "^1.0.1" 1257 | 1258 | foreach@^2.0.5: 1259 | version "2.0.5" 1260 | resolved "https://registry.yarnpkg.com/foreach/-/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99" 1261 | 1262 | forever-agent@~0.6.1: 1263 | version "0.6.1" 1264 | resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" 1265 | 1266 | form-data@~2.1.1: 1267 | version "2.1.4" 1268 | resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.1.4.tgz#33c183acf193276ecaa98143a69e94bfee1750d1" 1269 | dependencies: 1270 | asynckit "^0.4.0" 1271 | combined-stream "^1.0.5" 1272 | mime-types "^2.1.12" 1273 | 1274 | fs-readdir-recursive@^1.0.0: 1275 | version "1.0.0" 1276 | resolved "https://registry.yarnpkg.com/fs-readdir-recursive/-/fs-readdir-recursive-1.0.0.tgz#8cd1745c8b4f8a29c8caec392476921ba195f560" 1277 | 1278 | fs.realpath@^1.0.0: 1279 | version "1.0.0" 1280 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 1281 | 1282 | fsevents@^1.0.0: 1283 | version "1.1.1" 1284 | resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.1.1.tgz#f19fd28f43eeaf761680e519a203c4d0b3d31aff" 1285 | dependencies: 1286 | nan "^2.3.0" 1287 | node-pre-gyp "^0.6.29" 1288 | 1289 | fstream-ignore@^1.0.5: 1290 | version "1.0.5" 1291 | resolved "https://registry.yarnpkg.com/fstream-ignore/-/fstream-ignore-1.0.5.tgz#9c31dae34767018fe1d249b24dada67d092da105" 1292 | dependencies: 1293 | fstream "^1.0.0" 1294 | inherits "2" 1295 | minimatch "^3.0.0" 1296 | 1297 | fstream@^1.0.0, fstream@^1.0.10, fstream@^1.0.2: 1298 | version "1.0.11" 1299 | resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.11.tgz#5c1fb1f117477114f0632a0eb4b71b3cb0fd3171" 1300 | dependencies: 1301 | graceful-fs "^4.1.2" 1302 | inherits "~2.0.0" 1303 | mkdirp ">=0.5 0" 1304 | rimraf "2" 1305 | 1306 | function-bind@^1.0.2, function-bind@^1.1.0, function-bind@~1.1.0: 1307 | version "1.1.0" 1308 | resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.0.tgz#16176714c801798e4e8f2cf7f7529467bb4a5771" 1309 | 1310 | gauge@~2.7.3: 1311 | version "2.7.4" 1312 | resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" 1313 | dependencies: 1314 | aproba "^1.0.3" 1315 | console-control-strings "^1.0.0" 1316 | has-unicode "^2.0.0" 1317 | object-assign "^4.1.0" 1318 | signal-exit "^3.0.0" 1319 | string-width "^1.0.1" 1320 | strip-ansi "^3.0.1" 1321 | wide-align "^1.1.0" 1322 | 1323 | generate-function@^2.0.0: 1324 | version "2.0.0" 1325 | resolved "https://registry.yarnpkg.com/generate-function/-/generate-function-2.0.0.tgz#6858fe7c0969b7d4e9093337647ac79f60dfbe74" 1326 | 1327 | generate-object-property@^1.1.0: 1328 | version "1.2.0" 1329 | resolved "https://registry.yarnpkg.com/generate-object-property/-/generate-object-property-1.2.0.tgz#9c0e1c40308ce804f4783618b937fa88f99d50d0" 1330 | dependencies: 1331 | is-property "^1.0.0" 1332 | 1333 | getpass@^0.1.1: 1334 | version "0.1.7" 1335 | resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" 1336 | dependencies: 1337 | assert-plus "^1.0.0" 1338 | 1339 | glob-base@^0.3.0: 1340 | version "0.3.0" 1341 | resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4" 1342 | dependencies: 1343 | glob-parent "^2.0.0" 1344 | is-glob "^2.0.0" 1345 | 1346 | glob-parent@^2.0.0: 1347 | version "2.0.0" 1348 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28" 1349 | dependencies: 1350 | is-glob "^2.0.0" 1351 | 1352 | glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@^7.1.2, glob@~7.1.1: 1353 | version "7.1.2" 1354 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15" 1355 | dependencies: 1356 | fs.realpath "^1.0.0" 1357 | inflight "^1.0.4" 1358 | inherits "2" 1359 | minimatch "^3.0.4" 1360 | once "^1.3.0" 1361 | path-is-absolute "^1.0.0" 1362 | 1363 | globals@^9.0.0, globals@^9.14.0: 1364 | version "9.17.0" 1365 | resolved "https://registry.yarnpkg.com/globals/-/globals-9.17.0.tgz#0c0ca696d9b9bb694d2e5470bd37777caad50286" 1366 | 1367 | globals@^9.18.0: 1368 | version "9.18.0" 1369 | resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" 1370 | 1371 | globby@^5.0.0: 1372 | version "5.0.0" 1373 | resolved "https://registry.yarnpkg.com/globby/-/globby-5.0.0.tgz#ebd84667ca0dbb330b99bcfc68eac2bc54370e0d" 1374 | dependencies: 1375 | array-union "^1.0.1" 1376 | arrify "^1.0.0" 1377 | glob "^7.0.3" 1378 | object-assign "^4.0.1" 1379 | pify "^2.0.0" 1380 | pinkie-promise "^2.0.0" 1381 | 1382 | graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.4: 1383 | version "4.1.11" 1384 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" 1385 | 1386 | har-schema@^1.0.5: 1387 | version "1.0.5" 1388 | resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-1.0.5.tgz#d263135f43307c02c602afc8fe95970c0151369e" 1389 | 1390 | har-validator@~4.2.1: 1391 | version "4.2.1" 1392 | resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-4.2.1.tgz#33481d0f1bbff600dd203d75812a6a5fba002e2a" 1393 | dependencies: 1394 | ajv "^4.9.1" 1395 | har-schema "^1.0.5" 1396 | 1397 | has-ansi@^2.0.0: 1398 | version "2.0.0" 1399 | resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" 1400 | dependencies: 1401 | ansi-regex "^2.0.0" 1402 | 1403 | has-unicode@^2.0.0: 1404 | version "2.0.1" 1405 | resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" 1406 | 1407 | has@^1.0.1, has@~1.0.1: 1408 | version "1.0.1" 1409 | resolved "https://registry.yarnpkg.com/has/-/has-1.0.1.tgz#8461733f538b0837c9361e39a9ab9e9704dc2f28" 1410 | dependencies: 1411 | function-bind "^1.0.2" 1412 | 1413 | hawk@~3.1.3: 1414 | version "3.1.3" 1415 | resolved "https://registry.yarnpkg.com/hawk/-/hawk-3.1.3.tgz#078444bd7c1640b0fe540d2c9b73d59678e8e1c4" 1416 | dependencies: 1417 | boom "2.x.x" 1418 | cryptiles "2.x.x" 1419 | hoek "2.x.x" 1420 | sntp "1.x.x" 1421 | 1422 | hoek@2.x.x: 1423 | version "2.16.3" 1424 | resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed" 1425 | 1426 | home-or-tmp@^2.0.0: 1427 | version "2.0.0" 1428 | resolved "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-2.0.0.tgz#e36c3f2d2cae7d746a857e38d18d5f32a7882db8" 1429 | dependencies: 1430 | os-homedir "^1.0.0" 1431 | os-tmpdir "^1.0.1" 1432 | 1433 | http-signature@~1.1.0: 1434 | version "1.1.1" 1435 | resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.1.1.tgz#df72e267066cd0ac67fb76adf8e134a8fbcf91bf" 1436 | dependencies: 1437 | assert-plus "^0.2.0" 1438 | jsprim "^1.2.2" 1439 | sshpk "^1.7.0" 1440 | 1441 | ignore@^3.2.0: 1442 | version "3.3.3" 1443 | resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.3.tgz#432352e57accd87ab3110e82d3fea0e47812156d" 1444 | 1445 | imurmurhash@^0.1.4: 1446 | version "0.1.4" 1447 | resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" 1448 | 1449 | inflight@^1.0.4: 1450 | version "1.0.6" 1451 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 1452 | dependencies: 1453 | once "^1.3.0" 1454 | wrappy "1" 1455 | 1456 | inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.0, inherits@~2.0.1, inherits@~2.0.3: 1457 | version "2.0.3" 1458 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" 1459 | 1460 | ini@~1.3.0: 1461 | version "1.3.4" 1462 | resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.4.tgz#0537cb79daf59b59a1a517dff706c86ec039162e" 1463 | 1464 | inquirer@^0.12.0: 1465 | version "0.12.0" 1466 | resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-0.12.0.tgz#1ef2bfd63504df0bc75785fff8c2c41df12f077e" 1467 | dependencies: 1468 | ansi-escapes "^1.1.0" 1469 | ansi-regex "^2.0.0" 1470 | chalk "^1.0.0" 1471 | cli-cursor "^1.0.1" 1472 | cli-width "^2.0.0" 1473 | figures "^1.3.5" 1474 | lodash "^4.3.0" 1475 | readline2 "^1.0.1" 1476 | run-async "^0.1.0" 1477 | rx-lite "^3.1.2" 1478 | string-width "^1.0.1" 1479 | strip-ansi "^3.0.0" 1480 | through "^2.3.6" 1481 | 1482 | interpret@^1.0.0: 1483 | version "1.0.3" 1484 | resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.0.3.tgz#cbc35c62eeee73f19ab7b10a801511401afc0f90" 1485 | 1486 | invariant@^2.2.0, invariant@^2.2.2: 1487 | version "2.2.2" 1488 | resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.2.tgz#9e1f56ac0acdb6bf303306f338be3b204ae60360" 1489 | dependencies: 1490 | loose-envify "^1.0.0" 1491 | 1492 | is-arrayish@^0.2.1: 1493 | version "0.2.1" 1494 | resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" 1495 | 1496 | is-binary-path@^1.0.0: 1497 | version "1.0.1" 1498 | resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" 1499 | dependencies: 1500 | binary-extensions "^1.0.0" 1501 | 1502 | is-buffer@^1.1.5: 1503 | version "1.1.5" 1504 | resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.5.tgz#1f3b26ef613b214b88cbca23cc6c01d87961eecc" 1505 | 1506 | is-callable@^1.1.1, is-callable@^1.1.3: 1507 | version "1.1.3" 1508 | resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.3.tgz#86eb75392805ddc33af71c92a0eedf74ee7604b2" 1509 | 1510 | is-date-object@^1.0.1: 1511 | version "1.0.1" 1512 | resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16" 1513 | 1514 | is-dotfile@^1.0.0: 1515 | version "1.0.3" 1516 | resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.3.tgz#a6a2f32ffd2dfb04f5ca25ecd0f6b83cf798a1e1" 1517 | 1518 | is-equal-shallow@^0.1.3: 1519 | version "0.1.3" 1520 | resolved "https://registry.yarnpkg.com/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534" 1521 | dependencies: 1522 | is-primitive "^2.0.0" 1523 | 1524 | is-extendable@^0.1.1: 1525 | version "0.1.1" 1526 | resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" 1527 | 1528 | is-extglob@^1.0.0: 1529 | version "1.0.0" 1530 | resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0" 1531 | 1532 | is-finite@^1.0.0: 1533 | version "1.0.2" 1534 | resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa" 1535 | dependencies: 1536 | number-is-nan "^1.0.0" 1537 | 1538 | is-fullwidth-code-point@^1.0.0: 1539 | version "1.0.0" 1540 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" 1541 | dependencies: 1542 | number-is-nan "^1.0.0" 1543 | 1544 | is-fullwidth-code-point@^2.0.0: 1545 | version "2.0.0" 1546 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" 1547 | 1548 | is-function@~1.0.0: 1549 | version "1.0.1" 1550 | resolved "https://registry.yarnpkg.com/is-function/-/is-function-1.0.1.tgz#12cfb98b65b57dd3d193a3121f5f6e2f437602b5" 1551 | 1552 | is-glob@^2.0.0, is-glob@^2.0.1: 1553 | version "2.0.1" 1554 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863" 1555 | dependencies: 1556 | is-extglob "^1.0.0" 1557 | 1558 | is-my-json-valid@^2.10.0: 1559 | version "2.16.0" 1560 | resolved "https://registry.yarnpkg.com/is-my-json-valid/-/is-my-json-valid-2.16.0.tgz#f079dd9bfdae65ee2038aae8acbc86ab109e3693" 1561 | dependencies: 1562 | generate-function "^2.0.0" 1563 | generate-object-property "^1.1.0" 1564 | jsonpointer "^4.0.0" 1565 | xtend "^4.0.0" 1566 | 1567 | is-number@^2.0.2, is-number@^2.1.0: 1568 | version "2.1.0" 1569 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f" 1570 | dependencies: 1571 | kind-of "^3.0.2" 1572 | 1573 | is-path-cwd@^1.0.0: 1574 | version "1.0.0" 1575 | resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d" 1576 | 1577 | is-path-in-cwd@^1.0.0: 1578 | version "1.0.0" 1579 | resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz#6477582b8214d602346094567003be8a9eac04dc" 1580 | dependencies: 1581 | is-path-inside "^1.0.0" 1582 | 1583 | is-path-inside@^1.0.0: 1584 | version "1.0.0" 1585 | resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.0.tgz#fc06e5a1683fbda13de667aff717bbc10a48f37f" 1586 | dependencies: 1587 | path-is-inside "^1.0.1" 1588 | 1589 | is-plain-obj@^1.0.0: 1590 | version "1.1.0" 1591 | resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" 1592 | 1593 | is-posix-bracket@^0.1.0: 1594 | version "0.1.1" 1595 | resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4" 1596 | 1597 | is-primitive@^2.0.0: 1598 | version "2.0.0" 1599 | resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575" 1600 | 1601 | is-property@^1.0.0: 1602 | version "1.0.2" 1603 | resolved "https://registry.yarnpkg.com/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84" 1604 | 1605 | is-regex@^1.0.3: 1606 | version "1.0.4" 1607 | resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491" 1608 | dependencies: 1609 | has "^1.0.1" 1610 | 1611 | is-resolvable@^1.0.0: 1612 | version "1.0.0" 1613 | resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.0.0.tgz#8df57c61ea2e3c501408d100fb013cf8d6e0cc62" 1614 | dependencies: 1615 | tryit "^1.0.1" 1616 | 1617 | is-symbol@^1.0.1: 1618 | version "1.0.1" 1619 | resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.1.tgz#3cc59f00025194b6ab2e38dbae6689256b660572" 1620 | 1621 | is-typedarray@~1.0.0: 1622 | version "1.0.0" 1623 | resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" 1624 | 1625 | isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: 1626 | version "1.0.0" 1627 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" 1628 | 1629 | isobject@^2.0.0: 1630 | version "2.1.0" 1631 | resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" 1632 | dependencies: 1633 | isarray "1.0.0" 1634 | 1635 | isstream@~0.1.2: 1636 | version "0.1.2" 1637 | resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" 1638 | 1639 | jodid25519@^1.0.0: 1640 | version "1.0.2" 1641 | resolved "https://registry.yarnpkg.com/jodid25519/-/jodid25519-1.0.2.tgz#06d4912255093419477d425633606e0e90782967" 1642 | dependencies: 1643 | jsbn "~0.1.0" 1644 | 1645 | js-tokens@^3.0.0: 1646 | version "3.0.1" 1647 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.1.tgz#08e9f132484a2c45a30907e9dc4d5567b7f114d7" 1648 | 1649 | js-tokens@^3.0.2: 1650 | version "3.0.2" 1651 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" 1652 | 1653 | js-yaml@^3.5.1: 1654 | version "3.8.4" 1655 | resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.8.4.tgz#520b4564f86573ba96662af85a8cafa7b4b5a6f6" 1656 | dependencies: 1657 | argparse "^1.0.7" 1658 | esprima "^3.1.1" 1659 | 1660 | jsbn@~0.1.0: 1661 | version "0.1.1" 1662 | resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" 1663 | 1664 | jsesc@^1.3.0: 1665 | version "1.3.0" 1666 | resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b" 1667 | 1668 | jsesc@~0.5.0: 1669 | version "0.5.0" 1670 | resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" 1671 | 1672 | json-schema@0.2.3: 1673 | version "0.2.3" 1674 | resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" 1675 | 1676 | json-stable-stringify@^1.0.0, json-stable-stringify@^1.0.1: 1677 | version "1.0.1" 1678 | resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af" 1679 | dependencies: 1680 | jsonify "~0.0.0" 1681 | 1682 | json-stringify-safe@~5.0.1: 1683 | version "5.0.1" 1684 | resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" 1685 | 1686 | json5@^0.5.1: 1687 | version "0.5.1" 1688 | resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" 1689 | 1690 | jsonify@~0.0.0: 1691 | version "0.0.0" 1692 | resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" 1693 | 1694 | jsonpointer@^4.0.0: 1695 | version "4.0.1" 1696 | resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-4.0.1.tgz#4fd92cb34e0e9db3c89c8622ecf51f9b978c6cb9" 1697 | 1698 | jsprim@^1.2.2: 1699 | version "1.4.0" 1700 | resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.0.tgz#a3b87e40298d8c380552d8cc7628a0bb95a22918" 1701 | dependencies: 1702 | assert-plus "1.0.0" 1703 | extsprintf "1.0.2" 1704 | json-schema "0.2.3" 1705 | verror "1.3.6" 1706 | 1707 | kind-of@^3.0.2: 1708 | version "3.2.2" 1709 | resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" 1710 | dependencies: 1711 | is-buffer "^1.1.5" 1712 | 1713 | levn@^0.3.0, levn@~0.3.0: 1714 | version "0.3.0" 1715 | resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" 1716 | dependencies: 1717 | prelude-ls "~1.1.2" 1718 | type-check "~0.3.2" 1719 | 1720 | load-json-file@^2.0.0: 1721 | version "2.0.0" 1722 | resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8" 1723 | dependencies: 1724 | graceful-fs "^4.1.2" 1725 | parse-json "^2.2.0" 1726 | pify "^2.0.0" 1727 | strip-bom "^3.0.0" 1728 | 1729 | lodash@^4.0.0, lodash@^4.17.4, lodash@^4.2.0, lodash@^4.3.0: 1730 | version "4.17.4" 1731 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae" 1732 | 1733 | loose-envify@^1.0.0: 1734 | version "1.3.1" 1735 | resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.3.1.tgz#d1a8ad33fa9ce0e713d65fdd0ac8b748d478c848" 1736 | dependencies: 1737 | js-tokens "^3.0.0" 1738 | 1739 | make-dir@^1.0.0: 1740 | version "1.0.0" 1741 | resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.0.0.tgz#97a011751e91dd87cfadef58832ebb04936de978" 1742 | dependencies: 1743 | pify "^2.3.0" 1744 | 1745 | micromatch@^2.1.5: 1746 | version "2.3.11" 1747 | resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565" 1748 | dependencies: 1749 | arr-diff "^2.0.0" 1750 | array-unique "^0.2.1" 1751 | braces "^1.8.2" 1752 | expand-brackets "^0.1.4" 1753 | extglob "^0.3.1" 1754 | filename-regex "^2.0.0" 1755 | is-extglob "^1.0.0" 1756 | is-glob "^2.0.1" 1757 | kind-of "^3.0.2" 1758 | normalize-path "^2.0.1" 1759 | object.omit "^2.0.0" 1760 | parse-glob "^3.0.4" 1761 | regex-cache "^0.4.2" 1762 | 1763 | mime-db@~1.27.0: 1764 | version "1.27.0" 1765 | resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.27.0.tgz#820f572296bbd20ec25ed55e5b5de869e5436eb1" 1766 | 1767 | mime-types@^2.1.12, mime-types@~2.1.7: 1768 | version "2.1.15" 1769 | resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.15.tgz#a4ebf5064094569237b8cf70046776d09fc92aed" 1770 | dependencies: 1771 | mime-db "~1.27.0" 1772 | 1773 | minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.4: 1774 | version "3.0.4" 1775 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" 1776 | dependencies: 1777 | brace-expansion "^1.1.7" 1778 | 1779 | minimist@0.0.8: 1780 | version "0.0.8" 1781 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" 1782 | 1783 | minimist@^1.2.0, minimist@~1.2.0: 1784 | version "1.2.0" 1785 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" 1786 | 1787 | "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1: 1788 | version "0.5.1" 1789 | resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" 1790 | dependencies: 1791 | minimist "0.0.8" 1792 | 1793 | ms@2.0.0: 1794 | version "2.0.0" 1795 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" 1796 | 1797 | mute-stream@0.0.5: 1798 | version "0.0.5" 1799 | resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.5.tgz#8fbfabb0a98a253d3184331f9e8deb7372fac6c0" 1800 | 1801 | nan@^2.3.0: 1802 | version "2.6.2" 1803 | resolved "https://registry.yarnpkg.com/nan/-/nan-2.6.2.tgz#e4ff34e6c95fdfb5aecc08de6596f43605a7db45" 1804 | 1805 | natural-compare@^1.4.0: 1806 | version "1.4.0" 1807 | resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" 1808 | 1809 | node-pre-gyp@^0.6.29: 1810 | version "0.6.36" 1811 | resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.36.tgz#db604112cb74e0d477554e9b505b17abddfab786" 1812 | dependencies: 1813 | mkdirp "^0.5.1" 1814 | nopt "^4.0.1" 1815 | npmlog "^4.0.2" 1816 | rc "^1.1.7" 1817 | request "^2.81.0" 1818 | rimraf "^2.6.1" 1819 | semver "^5.3.0" 1820 | tar "^2.2.1" 1821 | tar-pack "^3.4.0" 1822 | 1823 | nopt@^4.0.1: 1824 | version "4.0.1" 1825 | resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d" 1826 | dependencies: 1827 | abbrev "1" 1828 | osenv "^0.1.4" 1829 | 1830 | normalize-path@^2.0.1: 1831 | version "2.1.1" 1832 | resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" 1833 | dependencies: 1834 | remove-trailing-separator "^1.0.1" 1835 | 1836 | npmlog@^4.0.2: 1837 | version "4.1.0" 1838 | resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.0.tgz#dc59bee85f64f00ed424efb2af0783df25d1c0b5" 1839 | dependencies: 1840 | are-we-there-yet "~1.1.2" 1841 | console-control-strings "~1.1.0" 1842 | gauge "~2.7.3" 1843 | set-blocking "~2.0.0" 1844 | 1845 | number-is-nan@^1.0.0: 1846 | version "1.0.1" 1847 | resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" 1848 | 1849 | oauth-sign@~0.8.1: 1850 | version "0.8.2" 1851 | resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43" 1852 | 1853 | object-assign@^4.0.1, object-assign@^4.1.0: 1854 | version "4.1.1" 1855 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" 1856 | 1857 | object-inspect@~1.2.1: 1858 | version "1.2.2" 1859 | resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.2.2.tgz#c82115e4fcc888aea14d64c22e4f17f6a70d5e5a" 1860 | 1861 | object-keys@^1.0.8: 1862 | version "1.0.11" 1863 | resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.11.tgz#c54601778ad560f1142ce0e01bcca8b56d13426d" 1864 | 1865 | object.omit@^2.0.0: 1866 | version "2.0.1" 1867 | resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa" 1868 | dependencies: 1869 | for-own "^0.1.4" 1870 | is-extendable "^0.1.1" 1871 | 1872 | once@^1.3.0, once@^1.3.3: 1873 | version "1.4.0" 1874 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 1875 | dependencies: 1876 | wrappy "1" 1877 | 1878 | onetime@^1.0.0: 1879 | version "1.1.0" 1880 | resolved "https://registry.yarnpkg.com/onetime/-/onetime-1.1.0.tgz#a1f7838f8314c516f05ecefcbc4ccfe04b4ed789" 1881 | 1882 | optionator@^0.8.2: 1883 | version "0.8.2" 1884 | resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64" 1885 | dependencies: 1886 | deep-is "~0.1.3" 1887 | fast-levenshtein "~2.0.4" 1888 | levn "~0.3.0" 1889 | prelude-ls "~1.1.2" 1890 | type-check "~0.3.2" 1891 | wordwrap "~1.0.0" 1892 | 1893 | os-homedir@^1.0.0: 1894 | version "1.0.2" 1895 | resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" 1896 | 1897 | os-tmpdir@^1.0.0, os-tmpdir@^1.0.1: 1898 | version "1.0.2" 1899 | resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" 1900 | 1901 | osenv@^0.1.4: 1902 | version "0.1.4" 1903 | resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.4.tgz#42fe6d5953df06c8064be6f176c3d05aaaa34644" 1904 | dependencies: 1905 | os-homedir "^1.0.0" 1906 | os-tmpdir "^1.0.0" 1907 | 1908 | output-file-sync@^1.1.2: 1909 | version "1.1.2" 1910 | resolved "https://registry.yarnpkg.com/output-file-sync/-/output-file-sync-1.1.2.tgz#d0a33eefe61a205facb90092e826598d5245ce76" 1911 | dependencies: 1912 | graceful-fs "^4.1.4" 1913 | mkdirp "^0.5.1" 1914 | object-assign "^4.1.0" 1915 | 1916 | parse-glob@^3.0.4: 1917 | version "3.0.4" 1918 | resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c" 1919 | dependencies: 1920 | glob-base "^0.3.0" 1921 | is-dotfile "^1.0.0" 1922 | is-extglob "^1.0.0" 1923 | is-glob "^2.0.0" 1924 | 1925 | parse-json@^2.2.0: 1926 | version "2.2.0" 1927 | resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" 1928 | dependencies: 1929 | error-ex "^1.2.0" 1930 | 1931 | path-is-absolute@^1.0.0, path-is-absolute@^1.0.1: 1932 | version "1.0.1" 1933 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 1934 | 1935 | path-is-inside@^1.0.1: 1936 | version "1.0.2" 1937 | resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" 1938 | 1939 | performance-now@^0.2.0: 1940 | version "0.2.0" 1941 | resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-0.2.0.tgz#33ef30c5c77d4ea21c5a53869d91b56d8f2555e5" 1942 | 1943 | pify@^2.0.0, pify@^2.3.0: 1944 | version "2.3.0" 1945 | resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" 1946 | 1947 | pinkie-promise@^2.0.0: 1948 | version "2.0.1" 1949 | resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" 1950 | dependencies: 1951 | pinkie "^2.0.0" 1952 | 1953 | pinkie@^2.0.0: 1954 | version "2.0.4" 1955 | resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" 1956 | 1957 | platform@^1.3.3: 1958 | version "1.3.4" 1959 | resolved "https://registry.yarnpkg.com/platform/-/platform-1.3.4.tgz#6f0fb17edaaa48f21442b3a975c063130f1c3ebd" 1960 | 1961 | pluralize@^1.2.1: 1962 | version "1.2.1" 1963 | resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-1.2.1.tgz#d1a21483fd22bb41e58a12fa3421823140897c45" 1964 | 1965 | prelude-ls@~1.1.2: 1966 | version "1.1.2" 1967 | resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" 1968 | 1969 | preserve@^0.2.0: 1970 | version "0.2.0" 1971 | resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" 1972 | 1973 | private@^0.1.6: 1974 | version "0.1.7" 1975 | resolved "https://registry.yarnpkg.com/private/-/private-0.1.7.tgz#68ce5e8a1ef0a23bb570cc28537b5332aba63ef1" 1976 | 1977 | private@^0.1.7: 1978 | version "0.1.8" 1979 | resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" 1980 | 1981 | process-nextick-args@~1.0.6: 1982 | version "1.0.7" 1983 | resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3" 1984 | 1985 | progress@^1.1.8: 1986 | version "1.1.8" 1987 | resolved "https://registry.yarnpkg.com/progress/-/progress-1.1.8.tgz#e260c78f6161cdd9b0e56cc3e0a85de17c7a57be" 1988 | 1989 | punycode@^1.4.1: 1990 | version "1.4.1" 1991 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" 1992 | 1993 | qs@~6.4.0: 1994 | version "6.4.0" 1995 | resolved "https://registry.yarnpkg.com/qs/-/qs-6.4.0.tgz#13e26d28ad6b0ffaa91312cd3bf708ed351e7233" 1996 | 1997 | randomatic@^1.1.3: 1998 | version "1.1.6" 1999 | resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-1.1.6.tgz#110dcabff397e9dcff7c0789ccc0a49adf1ec5bb" 2000 | dependencies: 2001 | is-number "^2.0.2" 2002 | kind-of "^3.0.2" 2003 | 2004 | rc@^1.1.7: 2005 | version "1.2.1" 2006 | resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.1.tgz#2e03e8e42ee450b8cb3dce65be1bf8974e1dfd95" 2007 | dependencies: 2008 | deep-extend "~0.4.0" 2009 | ini "~1.3.0" 2010 | minimist "^1.2.0" 2011 | strip-json-comments "~2.0.1" 2012 | 2013 | readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.1.4, readable-stream@^2.2.2: 2014 | version "2.2.9" 2015 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.2.9.tgz#cf78ec6f4a6d1eb43d26488cac97f042e74b7fc8" 2016 | dependencies: 2017 | buffer-shims "~1.0.0" 2018 | core-util-is "~1.0.0" 2019 | inherits "~2.0.1" 2020 | isarray "~1.0.0" 2021 | process-nextick-args "~1.0.6" 2022 | string_decoder "~1.0.0" 2023 | util-deprecate "~1.0.1" 2024 | 2025 | readdirp@^2.0.0: 2026 | version "2.1.0" 2027 | resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.1.0.tgz#4ed0ad060df3073300c48440373f72d1cc642d78" 2028 | dependencies: 2029 | graceful-fs "^4.1.2" 2030 | minimatch "^3.0.2" 2031 | readable-stream "^2.0.2" 2032 | set-immediate-shim "^1.0.1" 2033 | 2034 | readline2@^1.0.1: 2035 | version "1.0.1" 2036 | resolved "https://registry.yarnpkg.com/readline2/-/readline2-1.0.1.tgz#41059608ffc154757b715d9989d199ffbf372e35" 2037 | dependencies: 2038 | code-point-at "^1.0.0" 2039 | is-fullwidth-code-point "^1.0.0" 2040 | mute-stream "0.0.5" 2041 | 2042 | rechoir@^0.6.2: 2043 | version "0.6.2" 2044 | resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384" 2045 | dependencies: 2046 | resolve "^1.1.6" 2047 | 2048 | regenerate@^1.2.1: 2049 | version "1.3.3" 2050 | resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.3.3.tgz#0c336d3980553d755c39b586ae3b20aa49c82b7f" 2051 | 2052 | regenerator-runtime@^0.10.0, regenerator-runtime@^0.10.5: 2053 | version "0.10.5" 2054 | resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz#336c3efc1220adcedda2c9fab67b5a7955a33658" 2055 | 2056 | regenerator-runtime@^0.11.0: 2057 | version "0.11.0" 2058 | resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.0.tgz#7e54fe5b5ccd5d6624ea6255c3473be090b802e1" 2059 | 2060 | regenerator-transform@^0.10.0: 2061 | version "0.10.1" 2062 | resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.10.1.tgz#1e4996837231da8b7f3cf4114d71b5691a0680dd" 2063 | dependencies: 2064 | babel-runtime "^6.18.0" 2065 | babel-types "^6.19.0" 2066 | private "^0.1.6" 2067 | 2068 | regex-cache@^0.4.2: 2069 | version "0.4.3" 2070 | resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.3.tgz#9b1a6c35d4d0dfcef5711ae651e8e9d3d7114145" 2071 | dependencies: 2072 | is-equal-shallow "^0.1.3" 2073 | is-primitive "^2.0.0" 2074 | 2075 | regexpu-core@^2.0.0: 2076 | version "2.0.0" 2077 | resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-2.0.0.tgz#49d038837b8dcf8bfa5b9a42139938e6ea2ae240" 2078 | dependencies: 2079 | regenerate "^1.2.1" 2080 | regjsgen "^0.2.0" 2081 | regjsparser "^0.1.4" 2082 | 2083 | regjsgen@^0.2.0: 2084 | version "0.2.0" 2085 | resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.2.0.tgz#6c016adeac554f75823fe37ac05b92d5a4edb1f7" 2086 | 2087 | regjsparser@^0.1.4: 2088 | version "0.1.5" 2089 | resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.1.5.tgz#7ee8f84dc6fa792d3fd0ae228d24bd949ead205c" 2090 | dependencies: 2091 | jsesc "~0.5.0" 2092 | 2093 | remove-trailing-separator@^1.0.1: 2094 | version "1.0.1" 2095 | resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.0.1.tgz#615ebb96af559552d4bf4057c8436d486ab63cc4" 2096 | 2097 | repeat-element@^1.1.2: 2098 | version "1.1.2" 2099 | resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.2.tgz#ef089a178d1483baae4d93eb98b4f9e4e11d990a" 2100 | 2101 | repeat-string@^1.5.2: 2102 | version "1.6.1" 2103 | resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" 2104 | 2105 | repeating@^2.0.0: 2106 | version "2.0.1" 2107 | resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" 2108 | dependencies: 2109 | is-finite "^1.0.0" 2110 | 2111 | request@^2.81.0: 2112 | version "2.81.0" 2113 | resolved "https://registry.yarnpkg.com/request/-/request-2.81.0.tgz#c6928946a0e06c5f8d6f8a9333469ffda46298a0" 2114 | dependencies: 2115 | aws-sign2 "~0.6.0" 2116 | aws4 "^1.2.1" 2117 | caseless "~0.12.0" 2118 | combined-stream "~1.0.5" 2119 | extend "~3.0.0" 2120 | forever-agent "~0.6.1" 2121 | form-data "~2.1.1" 2122 | har-validator "~4.2.1" 2123 | hawk "~3.1.3" 2124 | http-signature "~1.1.0" 2125 | is-typedarray "~1.0.0" 2126 | isstream "~0.1.2" 2127 | json-stringify-safe "~5.0.1" 2128 | mime-types "~2.1.7" 2129 | oauth-sign "~0.8.1" 2130 | performance-now "^0.2.0" 2131 | qs "~6.4.0" 2132 | safe-buffer "^5.0.1" 2133 | stringstream "~0.0.4" 2134 | tough-cookie "~2.3.0" 2135 | tunnel-agent "^0.6.0" 2136 | uuid "^3.0.0" 2137 | 2138 | require-uncached@^1.0.2: 2139 | version "1.0.3" 2140 | resolved "https://registry.yarnpkg.com/require-uncached/-/require-uncached-1.0.3.tgz#4e0d56d6c9662fd31e43011c4b95aa49955421d3" 2141 | dependencies: 2142 | caller-path "^0.1.0" 2143 | resolve-from "^1.0.0" 2144 | 2145 | resolve-from@^1.0.0: 2146 | version "1.0.1" 2147 | resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-1.0.1.tgz#26cbfe935d1aeeeabb29bc3fe5aeb01e93d44226" 2148 | 2149 | resolve@^1.1.6, resolve@~1.1.7: 2150 | version "1.1.7" 2151 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" 2152 | 2153 | restore-cursor@^1.0.1: 2154 | version "1.0.1" 2155 | resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-1.0.1.tgz#34661f46886327fed2991479152252df92daa541" 2156 | dependencies: 2157 | exit-hook "^1.0.0" 2158 | onetime "^1.0.0" 2159 | 2160 | resumer@~0.0.0: 2161 | version "0.0.0" 2162 | resolved "https://registry.yarnpkg.com/resumer/-/resumer-0.0.0.tgz#f1e8f461e4064ba39e82af3cdc2a8c893d076759" 2163 | dependencies: 2164 | through "~2.3.4" 2165 | 2166 | rimraf@2, rimraf@^2.2.8, rimraf@^2.5.1, rimraf@^2.6.1: 2167 | version "2.6.1" 2168 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.1.tgz#c2338ec643df7a1b7fe5c54fa86f57428a55f33d" 2169 | dependencies: 2170 | glob "^7.0.5" 2171 | 2172 | rimraf@^2.6.2: 2173 | version "2.6.2" 2174 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36" 2175 | dependencies: 2176 | glob "^7.0.5" 2177 | 2178 | run-async@^0.1.0: 2179 | version "0.1.0" 2180 | resolved "https://registry.yarnpkg.com/run-async/-/run-async-0.1.0.tgz#c8ad4a5e110661e402a7d21b530e009f25f8e389" 2181 | dependencies: 2182 | once "^1.3.0" 2183 | 2184 | rx-lite@^3.1.2: 2185 | version "3.1.2" 2186 | resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-3.1.2.tgz#19ce502ca572665f3b647b10939f97fd1615f102" 2187 | 2188 | safe-buffer@^5.0.1: 2189 | version "5.0.1" 2190 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.0.1.tgz#d263ca54696cd8a306b5ca6551e92de57918fbe7" 2191 | 2192 | semver@^5.3.0: 2193 | version "5.3.0" 2194 | resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" 2195 | 2196 | set-blocking@~2.0.0: 2197 | version "2.0.0" 2198 | resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" 2199 | 2200 | set-immediate-shim@^1.0.1: 2201 | version "1.0.1" 2202 | resolved "https://registry.yarnpkg.com/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61" 2203 | 2204 | shelljs@^0.7.5: 2205 | version "0.7.7" 2206 | resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.7.7.tgz#b2f5c77ef97148f4b4f6e22682e10bba8667cff1" 2207 | dependencies: 2208 | glob "^7.0.0" 2209 | interpret "^1.0.0" 2210 | rechoir "^0.6.2" 2211 | 2212 | signal-exit@^3.0.0: 2213 | version "3.0.2" 2214 | resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" 2215 | 2216 | slash@^1.0.0: 2217 | version "1.0.0" 2218 | resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" 2219 | 2220 | slice-ansi@0.0.4: 2221 | version "0.0.4" 2222 | resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-0.0.4.tgz#edbf8903f66f7ce2f8eafd6ceed65e264c831b35" 2223 | 2224 | slide@^1.1.5: 2225 | version "1.1.6" 2226 | resolved "https://registry.yarnpkg.com/slide/-/slide-1.1.6.tgz#56eb027d65b4d2dce6cb2e2d32c4d4afc9e1d707" 2227 | 2228 | sntp@1.x.x: 2229 | version "1.0.9" 2230 | resolved "https://registry.yarnpkg.com/sntp/-/sntp-1.0.9.tgz#6541184cc90aeea6c6e7b35e2659082443c66198" 2231 | dependencies: 2232 | hoek "2.x.x" 2233 | 2234 | sort-keys@^1.1.1: 2235 | version "1.1.2" 2236 | resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-1.1.2.tgz#441b6d4d346798f1b4e49e8920adfba0e543f9ad" 2237 | dependencies: 2238 | is-plain-obj "^1.0.0" 2239 | 2240 | source-map-support@^0.4.15: 2241 | version "0.4.18" 2242 | resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.18.tgz#0286a6de8be42641338594e97ccea75f0a2c585f" 2243 | dependencies: 2244 | source-map "^0.5.6" 2245 | 2246 | source-map@^0.5.6: 2247 | version "0.5.6" 2248 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.6.tgz#75ce38f52bf0733c5a7f0c118d81334a2bb5f412" 2249 | 2250 | sprintf-js@~1.0.2: 2251 | version "1.0.3" 2252 | resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" 2253 | 2254 | sshpk@^1.7.0: 2255 | version "1.13.0" 2256 | resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.13.0.tgz#ff2a3e4fd04497555fed97b39a0fd82fafb3a33c" 2257 | dependencies: 2258 | asn1 "~0.2.3" 2259 | assert-plus "^1.0.0" 2260 | dashdash "^1.12.0" 2261 | getpass "^0.1.1" 2262 | optionalDependencies: 2263 | bcrypt-pbkdf "^1.0.0" 2264 | ecc-jsbn "~0.1.1" 2265 | jodid25519 "^1.0.0" 2266 | jsbn "~0.1.0" 2267 | tweetnacl "~0.14.0" 2268 | 2269 | string-width@^1.0.1, string-width@^1.0.2: 2270 | version "1.0.2" 2271 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" 2272 | dependencies: 2273 | code-point-at "^1.0.0" 2274 | is-fullwidth-code-point "^1.0.0" 2275 | strip-ansi "^3.0.0" 2276 | 2277 | string-width@^2.0.0: 2278 | version "2.0.0" 2279 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.0.0.tgz#635c5436cc72a6e0c387ceca278d4e2eec52687e" 2280 | dependencies: 2281 | is-fullwidth-code-point "^2.0.0" 2282 | strip-ansi "^3.0.0" 2283 | 2284 | string.prototype.trim@~1.1.2: 2285 | version "1.1.2" 2286 | resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.1.2.tgz#d04de2c89e137f4d7d206f086b5ed2fae6be8cea" 2287 | dependencies: 2288 | define-properties "^1.1.2" 2289 | es-abstract "^1.5.0" 2290 | function-bind "^1.0.2" 2291 | 2292 | string_decoder@~1.0.0: 2293 | version "1.0.1" 2294 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.0.1.tgz#62e200f039955a6810d8df0a33ffc0f013662d98" 2295 | dependencies: 2296 | safe-buffer "^5.0.1" 2297 | 2298 | stringstream@~0.0.4: 2299 | version "0.0.5" 2300 | resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878" 2301 | 2302 | strip-ansi@^3.0.0, strip-ansi@^3.0.1: 2303 | version "3.0.1" 2304 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" 2305 | dependencies: 2306 | ansi-regex "^2.0.0" 2307 | 2308 | strip-bom@^3.0.0: 2309 | version "3.0.0" 2310 | resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" 2311 | 2312 | strip-json-comments@~2.0.1: 2313 | version "2.0.1" 2314 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" 2315 | 2316 | supports-color@^2.0.0: 2317 | version "2.0.0" 2318 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" 2319 | 2320 | table@^3.7.8: 2321 | version "3.8.3" 2322 | resolved "https://registry.yarnpkg.com/table/-/table-3.8.3.tgz#2bbc542f0fda9861a755d3947fefd8b3f513855f" 2323 | dependencies: 2324 | ajv "^4.7.0" 2325 | ajv-keywords "^1.0.0" 2326 | chalk "^1.1.1" 2327 | lodash "^4.0.0" 2328 | slice-ansi "0.0.4" 2329 | string-width "^2.0.0" 2330 | 2331 | tape@^4.6.3: 2332 | version "4.6.3" 2333 | resolved "https://registry.yarnpkg.com/tape/-/tape-4.6.3.tgz#637e77581e9ab2ce17577e9bd4ce4f575806d8b6" 2334 | dependencies: 2335 | deep-equal "~1.0.1" 2336 | defined "~1.0.0" 2337 | for-each "~0.3.2" 2338 | function-bind "~1.1.0" 2339 | glob "~7.1.1" 2340 | has "~1.0.1" 2341 | inherits "~2.0.3" 2342 | minimist "~1.2.0" 2343 | object-inspect "~1.2.1" 2344 | resolve "~1.1.7" 2345 | resumer "~0.0.0" 2346 | string.prototype.trim "~1.1.2" 2347 | through "~2.3.8" 2348 | 2349 | tar-pack@^3.4.0: 2350 | version "3.4.0" 2351 | resolved "https://registry.yarnpkg.com/tar-pack/-/tar-pack-3.4.0.tgz#23be2d7f671a8339376cbdb0b8fe3fdebf317984" 2352 | dependencies: 2353 | debug "^2.2.0" 2354 | fstream "^1.0.10" 2355 | fstream-ignore "^1.0.5" 2356 | once "^1.3.3" 2357 | readable-stream "^2.1.4" 2358 | rimraf "^2.5.1" 2359 | tar "^2.2.1" 2360 | uid-number "^0.0.6" 2361 | 2362 | tar@^2.2.1: 2363 | version "2.2.1" 2364 | resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.1.tgz#8e4d2a256c0e2185c6b18ad694aec968b83cb1d1" 2365 | dependencies: 2366 | block-stream "*" 2367 | fstream "^1.0.2" 2368 | inherits "2" 2369 | 2370 | text-table@~0.2.0: 2371 | version "0.2.0" 2372 | resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" 2373 | 2374 | through@^2.3.6, through@~2.3.4, through@~2.3.8: 2375 | version "2.3.8" 2376 | resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" 2377 | 2378 | to-fast-properties@^1.0.1, to-fast-properties@^1.0.3: 2379 | version "1.0.3" 2380 | resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47" 2381 | 2382 | tough-cookie@~2.3.0: 2383 | version "2.3.2" 2384 | resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.2.tgz#f081f76e4c85720e6c37a5faced737150d84072a" 2385 | dependencies: 2386 | punycode "^1.4.1" 2387 | 2388 | trim-right@^1.0.1: 2389 | version "1.0.1" 2390 | resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" 2391 | 2392 | tryit@^1.0.1: 2393 | version "1.0.3" 2394 | resolved "https://registry.yarnpkg.com/tryit/-/tryit-1.0.3.tgz#393be730a9446fd1ead6da59a014308f36c289cb" 2395 | 2396 | tunnel-agent@^0.6.0: 2397 | version "0.6.0" 2398 | resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" 2399 | dependencies: 2400 | safe-buffer "^5.0.1" 2401 | 2402 | tweetnacl@^0.14.3, tweetnacl@~0.14.0: 2403 | version "0.14.5" 2404 | resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" 2405 | 2406 | type-check@~0.3.2: 2407 | version "0.3.2" 2408 | resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" 2409 | dependencies: 2410 | prelude-ls "~1.1.2" 2411 | 2412 | typedarray@^0.0.6: 2413 | version "0.0.6" 2414 | resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" 2415 | 2416 | uid-number@^0.0.6: 2417 | version "0.0.6" 2418 | resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81" 2419 | 2420 | user-home@^1.1.1: 2421 | version "1.1.1" 2422 | resolved "https://registry.yarnpkg.com/user-home/-/user-home-1.1.1.tgz#2b5be23a32b63a7c9deb8d0f28d485724a3df190" 2423 | 2424 | user-home@^2.0.0: 2425 | version "2.0.0" 2426 | resolved "https://registry.yarnpkg.com/user-home/-/user-home-2.0.0.tgz#9c70bfd8169bc1dcbf48604e0f04b8b49cde9e9f" 2427 | dependencies: 2428 | os-homedir "^1.0.0" 2429 | 2430 | util-deprecate@~1.0.1: 2431 | version "1.0.2" 2432 | resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" 2433 | 2434 | uuid@^3.0.0: 2435 | version "3.0.1" 2436 | resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.0.1.tgz#6544bba2dfda8c1cf17e629a3a305e2bb1fee6c1" 2437 | 2438 | v8flags@^2.1.1: 2439 | version "2.1.1" 2440 | resolved "https://registry.yarnpkg.com/v8flags/-/v8flags-2.1.1.tgz#aab1a1fa30d45f88dd321148875ac02c0b55e5b4" 2441 | dependencies: 2442 | user-home "^1.1.1" 2443 | 2444 | verror@1.3.6: 2445 | version "1.3.6" 2446 | resolved "https://registry.yarnpkg.com/verror/-/verror-1.3.6.tgz#cff5df12946d297d2baaefaa2689e25be01c005c" 2447 | dependencies: 2448 | extsprintf "1.0.2" 2449 | 2450 | wide-align@^1.1.0: 2451 | version "1.1.2" 2452 | resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.2.tgz#571e0f1b0604636ebc0dfc21b0339bbe31341710" 2453 | dependencies: 2454 | string-width "^1.0.2" 2455 | 2456 | wordwrap@~1.0.0: 2457 | version "1.0.0" 2458 | resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" 2459 | 2460 | wrappy@1: 2461 | version "1.0.2" 2462 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 2463 | 2464 | write-file-atomic@^2.0.0: 2465 | version "2.1.0" 2466 | resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.1.0.tgz#1769f4b551eedce419f0505deae2e26763542d37" 2467 | dependencies: 2468 | graceful-fs "^4.1.11" 2469 | imurmurhash "^0.1.4" 2470 | slide "^1.1.5" 2471 | 2472 | write-json-file@^2.2.0: 2473 | version "2.2.0" 2474 | resolved "https://registry.yarnpkg.com/write-json-file/-/write-json-file-2.2.0.tgz#51862506bbb3b619eefab7859f1fd6c6d0530876" 2475 | dependencies: 2476 | detect-indent "^5.0.0" 2477 | graceful-fs "^4.1.2" 2478 | make-dir "^1.0.0" 2479 | pify "^2.0.0" 2480 | sort-keys "^1.1.1" 2481 | write-file-atomic "^2.0.0" 2482 | 2483 | write@^0.2.1: 2484 | version "0.2.1" 2485 | resolved "https://registry.yarnpkg.com/write/-/write-0.2.1.tgz#5fc03828e264cea3fe91455476f7a3c566cb0757" 2486 | dependencies: 2487 | mkdirp "^0.5.1" 2488 | 2489 | xtend@^4.0.0: 2490 | version "4.0.1" 2491 | resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" 2492 | --------------------------------------------------------------------------------