├── .gitignore ├── .vscode └── launch.json ├── Procfile ├── README.md ├── bin └── main ├── central_old.geojson ├── convertToGraph.js ├── data ├── central.geojson ├── central2.geojson └── cleaned.geojson ├── geojson-cleaner └── geojson-cleaner.go ├── go.mod ├── go.sum ├── graph.go ├── out.json ├── package.json ├── parse-geojson.go ├── priority-queue.go ├── routing_test.go ├── tests ├── close_but_useless.json ├── intersection.json ├── shortest_distance.json ├── shortest_hops.json ├── straight_line.json ├── test01.json ├── three_roads.json ├── three_routes.json └── two_points.json ├── travel-api.go └── yarn.lock /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | data/greater-london-latest.osm 3 | data/greater-london-latest.geojson 4 | data/greater-london-latest.osm.bz2 5 | -------------------------------------------------------------------------------- /.vscode/launch.json: -------------------------------------------------------------------------------- 1 | { 2 | // Use IntelliSense to learn about possible attributes. 3 | // Hover to view descriptions of existing attributes. 4 | // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 5 | "version": "0.2.0", 6 | "configurations": [ 7 | { 8 | "name": "Launch test function", 9 | "type": "go", 10 | "request": "launch", 11 | "mode": "test", 12 | "program": "${workspaceFolder}", 13 | "args": ["-test.run", "TestPaths"] 14 | }, 15 | { 16 | "name": "Launch test package", 17 | "type": "go", 18 | "request": "launch", 19 | "mode": "test", 20 | "program": "${workspaceFolder}" 21 | }, 22 | { 23 | "name": "Launch", 24 | "type": "go", 25 | "request": "launch", 26 | "mode": "auto", 27 | "program": "${fileDirname}", 28 | "env": {}, 29 | "args": [] 30 | } 31 | ] 32 | } 33 | -------------------------------------------------------------------------------- /Procfile: -------------------------------------------------------------------------------- 1 | web: bin/main 2 | 3 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Brightpath 2 | 3 | ## Demo 4 | 5 | ### Using the demo 6 | - [Demo can be found here](https://brightpath-fe.web.app) 7 | - Click two points anywhere on the map of London. 8 | - The animation between points is just an animation, the response from the server is instant. 9 | - Limited to London due to memory constraints of the free tier of heroku. 10 | - Your live location will be updated regularly if you are walking or cycling. 11 | 12 | [ 13 | 14 | ](https://brightpath-fe.web.app)[ 15 | brightpath-demo 16 | ](https://brightpath-fe.web.app) 17 | 18 |

19 | brightpath-demo 20 |

21 | 22 | ## Mission 23 | 24 | To provide the safest well lit walking route between two locations. 25 | 26 | ## Problem 27 | 28 | - Google maps can often provide unsafe walking routes. 29 | - If you are new to a city or travelling you are highly dependent on google maps for navigating safely between locations and you will often be on foot. 30 | - There has been a surge of people vying for a product which provides safe walking paths. Here are some [examples](https://twitter.com/Chlojob_/status/1181279485901099008?s=19) from twitter. 31 | 32 | 33 | 34 | 35 | ## Blogs 36 | 37 | These were written as a follow up to the hackathon about our experience. 38 | 39 | - [Building an Algorithm to Find the Safest Route Home, (David)](https://www.crowdform.co.uk/blog/how-to-lead-people-home-safer-with-routing-algorithms) 40 | - [My first Hackathon as a UX/UI Designer, (Aristos)](https://medium.com/@aristos.michaelides/my-first-hackathon-as-a-ux-ui-designer-d7fbd7c34602) 41 | - [Route finder app in Golang, (Quynh)](https://medium.com/@dataqween/route-finder-app-100-days-of-golang-day-10-20-bb5f61e21535) 42 | - [LinkedIn post, (Aristos)](https://www.linkedin.com/posts/aristos-michaelides-0639b593_last-weekend-i-participated-in-the-global-activity-6584769414229557248-rPaP/) 43 | 44 | 45 | 46 | ## Presentation 47 | 48 | [Presentation slides can be found here](https://docs.google.com/presentation/d/e/2PACX-1vQI5T6knTUv9CPph-cnrhaS_v2JavzzSXZUsJ3H7ZK7uYJaJCTFg4jkwZA7ZjEFGw/pub?start=false&loop=false&delayms=3000) 49 | 50 | 51 | [ 52 | 53 | ](https://docs.google.com/presentation/d/e/2PACX-1vQI5T6knTUv9CPph-cnrhaS_v2JavzzSXZUsJ3H7ZK7uYJaJCTFg4jkwZA7ZjEFGw/pub?start=false&loop=false&delayms=3000) 54 | 55 | 56 | ## Solution 57 | 58 | Brightpath finds walking routes through the city that are well lit, avoiding dark pathways. Later we could incorporate many other kinds of data such as safe checkpoints trivially. The core technical challenge was wrangling the data and writing our own custom routing algorithm. For this hackathon we used data about whether a street is lit or not from [Open Street Map](<[https://www.openstreetmap.org/#map=10/51.4835/-0.1265](https://www.openstreetmap.org/#map=10/51.4835/-0.1265)>). Later we could incorporate official [UK gov data about street lighting](https://data.gov.uk/search?q=Street+Light) or even incorporate satellite imaging data. 59 | 60 | [To test the routing algorithm in the wild, click any two locations on the map of London.](https://brightpath-fe.web.app) Note this is limited to London because of the limitations of heroku free plan. While we did optimize for space complexity there are over 5 million edges in London. 61 | 62 | ### Our approach 63 | 64 | Our MVP has focused on using brightness as an objective measure for how safe one might feel. As a society we all need to be more conscious and critical of apps that ‘think for us’, and the data they use. Other ‘objective’ metrics we considered for the future include shop density, heat maps and traffic. We strive to give the power back to the user and allow them to select the safety metrics which are right for them. 65 | 66 | 67 | ## Source code 68 | 69 | 70 | ### Backend 71 | 72 | [Backend github repository](https://github.com/mfbx9da4/brightpath-backend). Built in Go, hosted on heroku. https://brightpath.herokuapp.com 73 | 74 | Steps taken to create backend 75 | 76 | 1. Get a dump of London data from Open Street Map 77 | 2. Convert OSM format to geojson. 78 | 3. [Clean geojson](https://github.com/mfbx9da4/brightpath-backend/blob/master/geojson-cleaner/geojson-cleaner.go) to remove dark pathways. 79 | 4. [Write algorithm](https://github.com/mfbx9da4/brightpath-backend/blob/master/parse-geojson.go#L43) to load geojson into graph representation in memory in Go. 80 | 5. Create Go API server. 81 | 6. Write algorithm for [finding closest known](https://github.com/mfbx9da4/brightpath-backend/blob/master/graph.go#L136) node to user requested start and end coordinates. 82 | 7. Write [A\* routing algorithm](https://github.com/mfbx9da4/brightpath-backend/blob/master/graph.go#L164) to find shortest path between two nodes in optimal time. 83 | 8. Write [unit tests](https://github.com/mfbx9da4/brightpath-backend/blob/master/routing_test.go) and test cases for shortest path edge cases. 84 | 85 | ### Frontend 1 86 | 87 | - [Frontend 1 github repository](https://github.com/mfbx9da4/brightpath-frontend) 88 | - [Hosted on firebase](https://brightpath-fe.web.app). 89 | - Written in Vanilla JS. 90 | - Originally written for testing purposes. 91 | - Uses mapbox for map. 92 | - Connects to backend hosted on [heroku](https://brightpath.herokuapp.com/). 93 | 94 | ### Frontend 2 95 | 96 | - [Frontend 2 github repository](https://github.com/river-honer/lightpath) 97 | - Uses vuejs 98 | - Uses mapbox geolocation API to get start and end destination. 99 | - Uses leaflet to render map. 100 | - Connects to backend hosted on [heroku](https://brightpath.herokuapp.com/) 101 | 102 | 103 | ## Design Proposal 104 | 105 | We put together some [high fidelity mockups](https://www.behance.net/gallery/86223243/BrightPath-Safe-route-finder) of what the app could look like later on. 106 | 107 |

108 | 109 |

110 | 111 | ## How it relates to Accessibility and Community 112 | 113 | - Our solution is especially useful for those who are travelling and are not familiar with their new surroundings and therefore highly dependent on navigation apps. 114 | 115 | - Our solution makes travel more accessible for everyone. We made sure to inlcude minorities which are often overlooked. Our solution does not discriminate - it is for anyone that does not currently feel safe enough to go out at night (whether they are in a different continent, country, city or even an area they are not used to).  These can be individuals with ‘protected characteristics’ under the Equality Act (such as those that are disabled such as partially visually impaired, those with visible differences (such as ethnic minorities or gender) and invisible differences (such as LGBQT+)), but it can also be for any one else that feels vulnerable. 116 | 117 | - Our solution also empowers users to engage more with the local community.  For example, from our research there are a number of travellers who will ‘go out at night’, however they will use taxis to get from A to B because they do not feel safe to walk from the hotel to the venue (and/or back again).  I’m sure we all have stories of having some of the best nights when wander freely around a local area, meeting locals serendipitously.  Our app gives more people the opportunity to have impromptu connections with the local community, in more locations. 118 | 119 | 120 | ## Run Backend 121 | 122 | ``` 123 | 124 | go build -v -o bin/main . && ./bin/main 125 | 126 | ``` 127 | 128 | ## Run Frontend 129 | 130 | ``` 131 | 132 | yarn install 133 | yarn start 134 | 135 | ``` 136 | -------------------------------------------------------------------------------- /bin/main: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mfbx9da4/brightpath-backend/3d0333fc5f9a0a801d8d1812f2b6e76605dad8a8/bin/main -------------------------------------------------------------------------------- /convertToGraph.js: -------------------------------------------------------------------------------- 1 | const Parser = require("geojson-path-finder"); 2 | const geojson = require("./london.geo.json"); 3 | const pathFinder = new Parser(geojson); 4 | console.log(JSON.stringify(pathFinder._graph, null, 2)); 5 | -------------------------------------------------------------------------------- /data/central2.geojson: -------------------------------------------------------------------------------- 1 | { 2 | "type": "FeatureCollection", 3 | "features": [ 4 | {"a": 1} 5 | ], 6 | "blah": {"id": 1} 7 | 8 | } 9 | -------------------------------------------------------------------------------- /geojson-cleaner/geojson-cleaner.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import ( 4 | "encoding/json" 5 | "fmt" 6 | "io/ioutil" 7 | "os" 8 | ) 9 | 10 | type Property struct { 11 | ID string `json:"id"` 12 | Type string `json:"type"` 13 | Highway string `json:"highway"` 14 | Access string `json:"access"` 15 | Lit string `json:"lit"` 16 | Sidewalk string `json:"sidewalk"` 17 | } 18 | 19 | type Coordinate = [2]float64 20 | 21 | type Geometry struct { 22 | Type string `json:"type"` 23 | Coordinates []Coordinate `json:"coordinates"` 24 | } 25 | 26 | type Feature struct { 27 | Type string `json:"type"` 28 | ID string `json:"id"` 29 | Properties Property `json:"properties"` 30 | Geometry Geometry `json:"geometry"` 31 | } 32 | 33 | type GeoJson struct { 34 | Type string `json:"type"` 35 | Features []Feature `json:"features"` 36 | } 37 | 38 | func main() { 39 | fmt.Println("geojson Graph created with") 40 | jsonFile, err := os.Open("../data/greater-london-latest.geojson") 41 | // jsonFile, err := os.Open("../data/central.geojson") 42 | if err != nil { 43 | fmt.Println(err) 44 | } 45 | fmt.Println("Successfully Opened geojson") 46 | byteValue, _ := ioutil.ReadAll(jsonFile) 47 | fmt.Println("Successfully ReadAll geojson", len(byteValue)) 48 | var geojson GeoJson 49 | json.Unmarshal(byteValue, &geojson) 50 | 51 | var output = GeoJson{Type: geojson.Type, Features: make([]Feature, 0)} 52 | 53 | // var topLeftX = -0.158044 54 | // var topLeftY = 51.546690 55 | // var bottomRightX = -0.072729 56 | // var bottomRightY = 51.494244 57 | 58 | var topLeftX = -0.37096096607623963 59 | var topLeftY = 51.61806539427627 60 | var bottomRightX = 0.06096137589867112 61 | var bottomRightY = 51.3982880896219 62 | 63 | for i := 0; i < len(geojson.Features); i++ { 64 | isLineString := geojson.Features[i].Geometry.Type == "LineString" 65 | isHighway := geojson.Features[i].Properties.Highway != "" 66 | hasSidewalk := geojson.Features[i].Properties.Sidewalk == "" || geojson.Features[i].Properties.Sidewalk != "none" 67 | isPath := geojson.Features[i].Properties.Highway == "path" 68 | isPathWithAccess := geojson.Features[i].Properties.Highway == "path" && (geojson.Features[i].Properties.Access == "no" || geojson.Features[i].Properties.Access == "private") 69 | isNotPathOrIsValidPath := !isPath || isPathWithAccess 70 | isLit := geojson.Features[i].Properties.Lit != "" || geojson.Features[i].Properties.Lit == "yes" 71 | shouldInclude := isHighway && isLineString && hasSidewalk && isNotPathOrIsValidPath && isLit 72 | // TODO: exclude footways for cycling 73 | // isFootway := geojson.Features[i].Properties.Highway == "footway" 74 | // shouldInclude := true 75 | var feature = geojson.Features[i] 76 | if shouldInclude && len(feature.Geometry.Coordinates) > 0 { 77 | var coord = feature.Geometry.Coordinates[0] 78 | // arbitrary central area to reduce total geojson size 79 | if coord[0] > topLeftX && coord[0] < bottomRightX && coord[1] < topLeftY && coord[1] > bottomRightY { 80 | output.Features = append(output.Features, feature) 81 | } 82 | } 83 | } 84 | serialized, _ := json.Marshal(&output) 85 | err2 := ioutil.WriteFile("../data/cleaned.geojson", serialized, 0644) 86 | fmt.Println("Reduced features from, to", len(geojson.Features), len(output.Features)) 87 | check(err2) 88 | defer jsonFile.Close() 89 | } 90 | 91 | func check(e error) { 92 | if e != nil { 93 | panic(e) 94 | } 95 | } 96 | -------------------------------------------------------------------------------- /go.mod: -------------------------------------------------------------------------------- 1 | module example.com/main 2 | 3 | go 1.13 4 | 5 | require github.com/gorilla/mux v1.7.3 6 | -------------------------------------------------------------------------------- /go.sum: -------------------------------------------------------------------------------- 1 | github.com/gorilla/mux v1.7.3 h1:gnP5JzjVOuiZD07fKKToCAOjS0yOpj/qPETTXCCS6hw= 2 | github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= 3 | -------------------------------------------------------------------------------- /graph.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import ( 4 | "container/heap" 5 | "fmt" 6 | "math" 7 | "sync" 8 | ) 9 | 10 | // Node a single node that composes the tree 11 | type Node Coordinate 12 | 13 | // Graph Basic graph complete with concurrency safe lock 14 | type Graph struct { 15 | edges Edges 16 | numEdges int64 17 | lock sync.RWMutex 18 | } 19 | 20 | // Edges maps nodes to set of other pointers to other nodes 21 | type Edges map[Node]SetOfNodes 22 | 23 | // SetOfNodes Set of nodes 24 | type SetOfNodes = map[*Node]Exists 25 | 26 | // Exists null value for sets 27 | type Exists struct{} 28 | 29 | var exists Exists 30 | 31 | // Init initialize maps 32 | func (graph *Graph) Init() { 33 | graph.lock.Lock() 34 | graph.edges = make(Edges) 35 | graph.numEdges = 0 36 | graph.lock.Unlock() 37 | } 38 | 39 | func (n *Node) String() string { 40 | return fmt.Sprintf("%v", *n) 41 | } 42 | 43 | // AddEdge adds an edge to the graph 44 | func (graph *Graph) AddEdge(n1 Node, n2 *Node) { 45 | graph.lock.Lock() 46 | if graph.edges[n1] == nil { 47 | graph.edges[n1] = make(SetOfNodes) 48 | } 49 | if graph.edges[*n2] == nil { 50 | graph.edges[*n2] = make(SetOfNodes) 51 | } 52 | graph.edges[n1][n2] = exists 53 | graph.numEdges++ 54 | graph.lock.Unlock() 55 | } 56 | 57 | func (graph *Graph) String() string { 58 | s := "" 59 | for node, edges := range graph.edges { 60 | s += node.String() + " -> " 61 | for child := range edges { 62 | s += child.String() + " " 63 | } 64 | s += "\n" 65 | } 66 | return s 67 | } 68 | 69 | // Print graph 70 | func (graph *Graph) Print() { 71 | graph.lock.RLock() 72 | fmt.Println(graph.String()) 73 | graph.lock.RUnlock() 74 | } 75 | 76 | // QueueItemValue Best Path to node 77 | type QueueItemValue struct { 78 | Node *Node 79 | Path []Node 80 | Distance float64 81 | } 82 | 83 | // NodeQueue sorted queue of paths 84 | type NodeQueue struct { 85 | items []QueueItemValue 86 | lock sync.RWMutex 87 | } 88 | 89 | // New creates a new NodeQueue 90 | func (s *NodeQueue) New() *NodeQueue { 91 | s.lock.Lock() 92 | s.items = []QueueItemValue{} 93 | s.lock.Unlock() 94 | return s 95 | } 96 | 97 | // Enqueue adds an Node to the end of the queue 98 | func (s *NodeQueue) Enqueue(t QueueItemValue) { 99 | s.lock.Lock() 100 | s.items = append(s.items, t) 101 | s.lock.Unlock() 102 | } 103 | 104 | // Dequeue removes an Node from the start of the queue 105 | func (s *NodeQueue) Dequeue() *QueueItemValue { 106 | s.lock.Lock() 107 | item := s.items[0] 108 | s.items = s.items[1:len(s.items)] 109 | s.lock.Unlock() 110 | return &item 111 | } 112 | 113 | // Front returns the item next in the queue, without removing it 114 | func (s *NodeQueue) Front() *QueueItemValue { 115 | s.lock.RLock() 116 | item := s.items[0] 117 | s.lock.RUnlock() 118 | return &item 119 | } 120 | 121 | // IsEmpty returns true if the queue is empty 122 | func (s *NodeQueue) IsEmpty() bool { 123 | s.lock.RLock() 124 | defer s.lock.RUnlock() 125 | return len(s.items) == 0 126 | } 127 | 128 | // Size returns the number of Nodes in the queue 129 | func (s *NodeQueue) Size() int { 130 | s.lock.RLock() 131 | defer s.lock.RUnlock() 132 | return len(s.items) 133 | } 134 | 135 | // FindNode find node from graph 136 | func (graph *Graph) FindNode(coords Coordinate) Node { 137 | var closest = Node{coords[0], coords[1]} 138 | if graph.edges[closest] == nil { 139 | var minDistance float64 = math.MaxFloat64 140 | // Probably there is a better algo for this, just doing the brute force sorry :( 141 | for node := range graph.edges { 142 | dx := coords[0] - node[0] 143 | dy := coords[1] - node[1] 144 | distance := math.Sqrt(dx*dx + dy*dy) 145 | if distance < minDistance { 146 | closest = node 147 | minDistance = distance 148 | } 149 | } 150 | } 151 | return closest 152 | } 153 | 154 | // Route Best route and distance of route 155 | type Route struct { 156 | Path []Node 157 | Distance float64 158 | } 159 | 160 | // calcDistance between coords in coords unit 161 | func calcDistance(src, dest *Node) float64 { 162 | dx := src[0] - dest[0] 163 | dy := src[1] - dest[1] 164 | return math.Sqrt(dx*dx + dy*dy) 165 | } 166 | 167 | /* 168 | FindPath Uses A* routing to find shortest path 169 | (Keeps a min heap sorted by elapsed + remaing distance). 170 | */ 171 | func (graph *Graph) FindPath(src, dest Node) Route { 172 | graph.lock.RLock() 173 | 174 | // Init priority queue 175 | var pqueue = make(PriorityQueue, 1) 176 | var rootPath = []Node{src} 177 | var rootValue = QueueItemValue{&src, rootPath, 0} 178 | pqueue[0] = &QueueItem{ 179 | Value: &rootValue, 180 | Priority: 0, 181 | Index: 0, 182 | } 183 | heap.Init(&pqueue) 184 | 185 | // Keep track of visited 186 | visited := make(map[*Node]bool) 187 | for { 188 | if pqueue.Len() == 0 { 189 | break 190 | } 191 | // pqueue.Print() 192 | pqitem := heap.Pop(&pqueue).(*QueueItem) 193 | cur := pqitem.Value 194 | node := cur.Node 195 | visited[node] = true 196 | 197 | for child := range graph.edges[*node] { 198 | elapsed := calcDistance(node, child) + cur.Distance 199 | remaining := calcDistance(child, &dest) 200 | 201 | if *child == dest { 202 | path := append(cur.Path, *child) 203 | return Route{path, elapsed} 204 | } 205 | 206 | if !visited[child] { 207 | // TODO: Only add to path if different gradient 208 | path := make([]Node, len(cur.Path)) 209 | copy(path, cur.Path) 210 | path = append(path, *child) 211 | queueItem := QueueItemValue{child, path, elapsed} 212 | newItem := QueueItem{ 213 | Value: &queueItem, 214 | Priority: elapsed + remaining, 215 | } 216 | heap.Push(&pqueue, &newItem) 217 | pqueue.update(&newItem, newItem.Value, newItem.Priority) 218 | visited[child] = true 219 | } 220 | } 221 | } 222 | graph.lock.RUnlock() 223 | // No path 224 | return Route{[]Node{}, -1} 225 | } 226 | 227 | // CalculatePath Finds closest nodes to start and end 228 | func (graph *Graph) CalculatePath(startCoords Coordinate, endCoords Coordinate) Route { 229 | nodeStart := graph.FindNode(startCoords) 230 | nodeEnd := graph.FindNode(endCoords) 231 | pathFound := graph.FindPath(nodeStart, nodeEnd) 232 | return pathFound 233 | } 234 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "dependencies": { 3 | "geojson-path-finder": "^1.5.2", 4 | "osmtogeojson": "^3.0.0-beta.3" 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /parse-geojson.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import ( 4 | "encoding/json" 5 | "fmt" 6 | "io/ioutil" 7 | "os" 8 | ) 9 | 10 | // Property Geojson Property 11 | type Property struct { 12 | ID string `json:"id"` 13 | Type string `json:"type"` 14 | Highway string `json:"highway"` 15 | Access string `json:"access"` 16 | Lit string `json:"lit"` 17 | Sidewalk string `json:"sidewalk"` 18 | } 19 | 20 | // Coordinate pair of lng, lat 21 | type Coordinate [2]float64 22 | 23 | // Geometry Geojson Geometry 24 | type Geometry struct { 25 | Type string `json:"type"` 26 | Coordinates []Coordinate `json:"coordinates"` 27 | } 28 | 29 | // Feature Geojson Feature 30 | type Feature struct { 31 | Type string `json:"type"` 32 | ID string `json:"id"` 33 | Properties Property `json:"properties"` 34 | Geometry Geometry `json:"geometry"` 35 | } 36 | 37 | // GeoJSON data structure 38 | type GeoJSON struct { 39 | Type string `json:"type"` 40 | Features []Feature `json:"features"` 41 | } 42 | 43 | func createGraph(geojson GeoJSON) Graph { 44 | var graph Graph 45 | graph.Init() 46 | for i := 0; i < len(geojson.Features); i++ { 47 | var feature = geojson.Features[i] 48 | var prev *Node 49 | for j := 0; j < len(feature.Geometry.Coordinates); j++ { 50 | var coords = feature.Geometry.Coordinates[j] 51 | node := Node{coords[0], coords[1]} 52 | if j != 0 { 53 | graph.AddEdge(node, prev) 54 | graph.AddEdge(*prev, &node) 55 | } 56 | prev = &node 57 | } 58 | } 59 | fmt.Println("geojson Graph created with", len(graph.edges), "nodes and", graph.numEdges, "edges") 60 | return graph 61 | } 62 | 63 | func loadGeoJSON(filename string) Graph { 64 | // GeoJSON for Greater London 65 | // from http://download.geofabrik.de/europe/great-britain/england/greater-london.html 66 | // geoJsonDownloadLink := "https://ucb7e1be7e59700bb615fc052d06.dl.dropboxusercontent.com/cd/0/get/ApeoomlSroMi4LLrd88j2O1YyfZcz-fnOcR-BMu7Ca3F-aclMpnyLmlzJPZtgze6QSfiGh_SZAcCl-TzGSrcNR14iFsaOBl-vs7CsUzWnL6UbsaH7V_CR-apDThjG8fUH78/file?dl=1DownloadLink" 67 | // resp, err := http.Get(geoJsonDownloadLink) 68 | // if err != nil { 69 | // // handle error 70 | // } 71 | // defer resp.Body.Close() 72 | // jsonFile := resp.Body 73 | // GeoJSON for central london around highbury islington 74 | // jsonFile, err := os.Open("./data/central.geojson") 75 | // jsonFile, err := os.Open("./data/greater-london-latest.geojson") 76 | // 2.73GB 77 | jsonFile, err := os.Open(filename) 78 | if err != nil { 79 | fmt.Println(err) 80 | } 81 | fmt.Println("Successfully Opened geojson") 82 | byteValue, _ := ioutil.ReadAll(jsonFile) 83 | fmt.Println("Successfully ReadAll geojson") 84 | var geojson GeoJSON 85 | json.Unmarshal(byteValue, &geojson) 86 | fmt.Println("Successfully Unmarshalled geojson with N features", len(geojson.Features)) 87 | 88 | defer jsonFile.Close() 89 | return createGraph(geojson) 90 | } 91 | -------------------------------------------------------------------------------- /priority-queue.go: -------------------------------------------------------------------------------- 1 | // This example demonstrates a priority queue built using the heap interface. 2 | package main 3 | 4 | import ( 5 | "container/heap" 6 | "fmt" 7 | ) 8 | 9 | // An QueueItem is something we manage in a priority queue. 10 | type QueueItem struct { 11 | Value *QueueItemValue // The value of the item; arbitrary. 12 | Priority float64 // The priority of the item in the queue. 13 | // The index is needed by update and is maintained by the heap.Interface methods. 14 | Index int // The index of the item in the heap. 15 | } 16 | 17 | // A PriorityQueue implements heap.Interface and holds Items. 18 | type PriorityQueue []*QueueItem 19 | 20 | func (pq PriorityQueue) Len() int { return len(pq) } 21 | 22 | func (pq PriorityQueue) Less(i, j int) bool { 23 | // We want Pop to give us the lowest 24 | return pq[i].Priority < pq[j].Priority 25 | } 26 | 27 | func (pq PriorityQueue) Swap(i, j int) { 28 | pq[i], pq[j] = pq[j], pq[i] 29 | pq[i].Index = i 30 | pq[j].Index = j 31 | } 32 | 33 | // Push pushes item onto priority queue 34 | func (pq *PriorityQueue) Push(x interface{}) { 35 | n := len(*pq) 36 | item := x.(*QueueItem) 37 | item.Index = n 38 | *pq = append(*pq, item) 39 | } 40 | 41 | // Pop item from priority queue 42 | func (pq *PriorityQueue) Pop() interface{} { 43 | old := *pq 44 | n := len(old) 45 | item := old[n-1] 46 | old[n-1] = nil // avoid memory leak 47 | item.Index = -1 // for safety 48 | *pq = old[0 : n-1] 49 | return item 50 | } 51 | 52 | // Print prints items 53 | func (pq *PriorityQueue) Print() { 54 | pqueue := *pq 55 | fmt.Println("* Printing priority queue of length", len(pqueue)) 56 | for i := 0; i < len(pqueue); i++ { 57 | item := pqueue[i] 58 | fmt.Println(item.Value.Node, "prio, dista", item.Priority, item.Value.Distance, item.Value.Path) 59 | } 60 | } 61 | 62 | // update modifies the priority and value of an Item in the queue. 63 | func (pq *PriorityQueue) update(item *QueueItem, value *QueueItemValue, priority float64) { 64 | item.Value = value 65 | item.Priority = priority 66 | heap.Fix(pq, item.Index) 67 | } 68 | 69 | // This example creates a PriorityQueue with some items, adds and manipulates an item, 70 | // and then removes the items in priority order. 71 | // func test() { 72 | // // Some items and their priorities. 73 | // var coords = Coordinate{1.0, 1.0} 74 | // var QueueItem3 = CreateNode(coords) 75 | 76 | // items := map[int]Node{ 77 | // 3: node3, 78 | // 2: node3, 79 | // 4: node3, 80 | // } 81 | 82 | // // Create a priority queue, put the items in it, and 83 | // // establish the priority queue (heap) invariants. 84 | // pq := make(PriorityQueue, len(items)) 85 | // i := 0 86 | // for priority, value := range items { 87 | // pq[i] = &Item{ 88 | // Value: &value, 89 | // Priority: priority, 90 | // Index: i, 91 | // } 92 | // i++ 93 | // } 94 | // heap.Init(&pq) 95 | 96 | // // Insert a new item and then modify its priority. 97 | // item := &Item{ 98 | // Value: &node3, 99 | // Priority: 1, 100 | // } 101 | // heap.Push(&pq, item) 102 | // pq.update(item, item.Value, 5) 103 | 104 | // // Take the items out; they arrive in decreasing priority order. 105 | // for pq.Len() > 0 { 106 | // item := heap.Pop(&pq).(*Item) 107 | // fmt.Printf("%.2d:%s ", item.Priority, item.Value) 108 | // } 109 | // } 110 | -------------------------------------------------------------------------------- /routing_test.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import ( 4 | "encoding/json" 5 | "fmt" 6 | "io/ioutil" 7 | "os" 8 | "testing" 9 | ) 10 | 11 | type TestData struct { 12 | GeoJSON GeoJSON `json:"geojson"` 13 | From Coordinate `json:"from"` 14 | To Coordinate `json:"to"` 15 | Distance float64 `json:"distance"` 16 | ShortestPath []Coordinate `json:"shortestPath"` 17 | } 18 | 19 | func LoadFile(filename string) TestData { 20 | jsonFile, err := os.Open(filename) 21 | if err != nil { 22 | fmt.Println(err) 23 | } 24 | byteValue, _ := ioutil.ReadAll(jsonFile) 25 | var testData TestData 26 | json.Unmarshal(byteValue, &testData) 27 | defer jsonFile.Close() 28 | return testData 29 | } 30 | 31 | func equal(coords1 []Coordinate, coords2 []Coordinate) bool { 32 | if len(coords1) != len(coords2) { 33 | return false 34 | } 35 | for i := 0; i < len(coords1); i++ { 36 | if coords1[i] != coords2[i] { 37 | return false 38 | } 39 | } 40 | return true 41 | } 42 | 43 | func TestCreateNode(t *testing.T) { 44 | var graph Graph 45 | graph.Init() 46 | fmt.Println("node1 := graph.GetOrCreateNode([2]float64{0, 0})") 47 | node1 := Node{0, 0} 48 | node2 := Node{0, 0} 49 | node3 := Node{1, 1} 50 | graph.AddEdge(node2, &node3) 51 | graph.AddEdge(node3, &node2) 52 | fmt.Println("graph.Print()") 53 | graph.Print() 54 | if len(graph.edges) > 2 { 55 | t.Errorf("Created too many nodes Got %v", graph.edges) 56 | } 57 | if node1 != node2 { 58 | t.Errorf("Recreating nodes %v %v are not equal", node1, node2) 59 | } 60 | if len(graph.edges[node2]) != 1 { 61 | t.Errorf("Wrong num edges") 62 | } 63 | if len(graph.edges[node3]) != 1 { 64 | t.Errorf("Wrong num edges") 65 | } 66 | } 67 | 68 | func TestPaths(t *testing.T) { 69 | filenames := []string{ 70 | "./tests/two_points.json", 71 | "./tests/straight_line.json", 72 | "./tests/three_roads.json", 73 | "./tests/shortest_hops.json", 74 | "./tests/intersection.json", 75 | "./tests/three_routes.json", 76 | "./tests/close_but_useless.json", 77 | "./tests/test01.json", 78 | } 79 | 80 | for i := 0; i < len(filenames); i++ { 81 | fmt.Println("===>", filenames[i]) 82 | var expected = LoadFile(filenames[i]) 83 | var graph = createGraph(expected.GeoJSON) 84 | var route = graph.CalculatePath(expected.From, expected.To) 85 | var path = getCoordinates(route.Path) 86 | if !equal(path, expected.ShortestPath) { 87 | t.Errorf("Incorrect path. Got: %v Expected: %v -- %s", path, expected.ShortestPath, filenames[i]) 88 | } 89 | if route.Distance != expected.Distance { 90 | t.Errorf("Incorrect distance. Got: %.11f Want: %.11f -- %s", route.Distance, expected.Distance, filenames[i]) 91 | } 92 | } 93 | 94 | } 95 | 96 | // type Vertex [2]float64 97 | // type GraphType struct { 98 | // vertices Vertices 99 | // edges Edges 100 | // } 101 | // type Vertices map[Vertex]*Vertex 102 | // type Edges map[*Vertex]BagOfVertices 103 | // type BagOfVertices map[*Vertex]bool 104 | 105 | // func (graph *GraphType) Init() { 106 | // graph.vertices = make(Vertices) 107 | // graph.edges = make(Edges) 108 | // } 109 | // func (graph *GraphType) GetOrCreateVertex(vertex Vertex) *Vertex { 110 | // if val, ok := graph.vertices[vertex]; ok { 111 | // fmt.Println("Found val") 112 | // return val 113 | // } 114 | // graph.vertices[vertex] = &vertex 115 | // graph.edges[&vertex] = make(BagOfVertices) 116 | // fmt.Println("Create val") 117 | // return &vertex 118 | // } 119 | 120 | // func TestEdges(t *testing.T) { 121 | // var graph GraphType 122 | // graph.Init() 123 | // // Create vertex 0 and vertex 1 124 | // graph.GetOrCreateVertex(Vertex{0, 0}) 125 | // graph.GetOrCreateVertex(Vertex{1, 1}) 126 | 127 | // // Create edge from vertex 0 to vertex 1 128 | // v0 := graph.GetOrCreateVertex(Vertex{0, 0}) 129 | // v1 := graph.GetOrCreateVertex(Vertex{1, 1}) 130 | // graph.edges[v0][v1] = true 131 | 132 | // // Check edge exist from vertex 0 to vertex 1 133 | // v0 = graph.GetOrCreateVertex(Vertex{0, 0}) 134 | // v1 = graph.GetOrCreateVertex(Vertex{1, 1}) 135 | // if _, ok := graph.edges[v0][v1]; !ok { 136 | // t.Errorf("Edge from %v to %v does not exist", v0, v1) 137 | // } 138 | // } 139 | 140 | // func TestPointers2(t *testing.T) { 141 | // var edges Edges = make(map[Vertex]BagOfVertices) 142 | // var vertex1 = Vertex{0, 0} 143 | // var _vertex1 = Vertex{0, 0} 144 | // pointer1 := edges.GetOrCreateVertex(vertex1) 145 | // _pointer1 := edges.GetOrCreateVertex(_vertex1) 146 | // if vertex1 != _vertex1 { 147 | // // Pass 148 | // t.Errorf("Values %v %v are not equal", vertex1, _vertex1) 149 | // } 150 | // if *pointer1 != *_pointer1 { 151 | // // Pass 152 | // t.Errorf("Values %v %v are not equal", *pointer1, *_pointer1) 153 | // } 154 | // if pointer1 != _pointer1 { 155 | // // Fail, expect to pass 156 | // t.Errorf("Pointers %p %p are not equal", pointer1, _pointer1) 157 | // } 158 | // } 159 | -------------------------------------------------------------------------------- /tests/close_but_useless.json: -------------------------------------------------------------------------------- 1 | { 2 | "from": [0, 0], 3 | "to": [0, 10], 4 | "distance": 1790, 5 | "shortestPath": [[0, 0], [0, 800], [0, 900], [0, 10]], 6 | "geojson": { 7 | "type": "FeatureCollection", 8 | "features": [ 9 | { 10 | "geometry": { 11 | "coordinates": [[0, 0], [0, 800], [0, 900], [0, 10]] 12 | } 13 | }, 14 | { 15 | "geometry": { 16 | "coordinates": [ 17 | [0, 0], 18 | [0.1, 1], 19 | [0.1, 2], 20 | [0.1, 3], 21 | [0.1, 4], 22 | [0.1, 5], 23 | [0.1, 6], 24 | [0.1, 7], 25 | [0.1, 8], 26 | [0.1, 9], 27 | [0.1, 10] 28 | ] 29 | } 30 | } 31 | ] 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /tests/intersection.json: -------------------------------------------------------------------------------- 1 | { 2 | "from": [0, 0], 3 | "to": [1, 1], 4 | "distance": 2, 5 | "shortestPath": [[0, 0], [0, 1], [1, 1]], 6 | "geojson": { 7 | "type": "FeatureCollection", 8 | "features": [ 9 | { 10 | "geometry": { 11 | "coordinates": [[0, 0], [0, 1]] 12 | } 13 | }, 14 | { 15 | "geometry": { 16 | "coordinates": [[-1, 1], [0, 1], [1, 1]] 17 | } 18 | } 19 | ] 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /tests/shortest_distance.json: -------------------------------------------------------------------------------- 1 | { 2 | "from": [0, 0], 3 | "to": [0, 3], 4 | "distance": 3, 5 | "shortestPath": [[0, 0], [0, 3]], 6 | "geojson": { 7 | "type": "FeatureCollection", 8 | "features": [ 9 | { 10 | "geometry": { 11 | "coordinates": [[0, 0], [0, 1]] 12 | } 13 | }, 14 | { 15 | "geometry": { 16 | "coordinates": [[0, 1], [0, 2]] 17 | } 18 | }, 19 | { 20 | "geometry": { 21 | "coordinates": [[0, 2], [0, 3]] 22 | } 23 | }, 24 | { 25 | "geometry": { 26 | "coordinates": [[0, 0], [2, 2]] 27 | } 28 | }, 29 | { 30 | "geometry": { 31 | "coordinates": [[2, 2], [0, 3]] 32 | } 33 | } 34 | ] 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /tests/shortest_hops.json: -------------------------------------------------------------------------------- 1 | { 2 | "from": [0, 0], 3 | "to": [1, 0], 4 | "distance": 1, 5 | "shortestPath": [[0, 0], [1, 0]], 6 | "geojson": { 7 | "type": "FeatureCollection", 8 | "features": [ 9 | { 10 | "geometry": { 11 | "coordinates": [[0, 0], [0, 1]] 12 | } 13 | }, 14 | { 15 | "geometry": { 16 | "coordinates": [[0, 1], [1, 1]] 17 | } 18 | }, 19 | { 20 | "geometry": { 21 | "coordinates": [[1, 1], [1, 0]] 22 | } 23 | }, 24 | { 25 | "geometry": { 26 | "coordinates": [[0, 0], [1, 0]] 27 | } 28 | } 29 | ] 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /tests/straight_line.json: -------------------------------------------------------------------------------- 1 | { 2 | "from": [0, 0], 3 | "to": [0, 3], 4 | "shortestPath": [[0, 0], [0, 1], [0, 2], [0, 3]], 5 | "distance": 3, 6 | "geojson": { 7 | "type": "FeatureCollection", 8 | "features": [ 9 | { 10 | "geometry": { 11 | "coordinates": [[0, 0], [0, 1], [0, 2], [0, 3]] 12 | } 13 | } 14 | ] 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /tests/test01.json: -------------------------------------------------------------------------------- 1 | { 2 | "from": [0, 0], 3 | "to": [4, 4], 4 | "distance": 8, 5 | "shortestPath": [[0, 0], [0, 1], [0, 3], [0, 4], [4, 4]], 6 | "geojson": { 7 | "type": "FeatureCollection", 8 | "features": [ 9 | { 10 | "geometry": { 11 | "coordinates": [[0, 0], [-3, 0]] 12 | } 13 | }, 14 | { 15 | "geometry": { 16 | "coordinates": [[0, 0], [0, 1]] 17 | } 18 | }, 19 | { 20 | "geometry": { 21 | "coordinates": [[0, 1], [1, 1]] 22 | } 23 | }, 24 | { 25 | "geometry": { 26 | "coordinates": [[0, 3], [1, 3]] 27 | } 28 | }, 29 | { 30 | "geometry": { 31 | "coordinates": [[0, 1], [0, 3]] 32 | } 33 | }, 34 | { 35 | "geometry": { 36 | "coordinates": [[0, 1], [1, 1]] 37 | } 38 | }, 39 | { 40 | "geometry": { 41 | "coordinates": [[1, 1], [1, 3]] 42 | } 43 | }, 44 | { 45 | "geometry": { 46 | "coordinates": [[-3, 0], [-3, -3]] 47 | } 48 | }, 49 | { 50 | "geometry": { 51 | "coordinates": [[-3, -3], [0, 3]] 52 | } 53 | }, 54 | { 55 | "geometry": { 56 | "coordinates": [[0, 3], [0, 4]] 57 | } 58 | }, 59 | { 60 | "geometry": { 61 | "coordinates": [[0, 4], [4, 4]] 62 | } 63 | } 64 | ] 65 | } 66 | } 67 | -------------------------------------------------------------------------------- /tests/three_roads.json: -------------------------------------------------------------------------------- 1 | { 2 | "from": [0, 0], 3 | "to": [1, 0], 4 | "distance": 3, 5 | "shortestPath": [[0, 0], [0, 1], [1, 1], [1, 0]], 6 | "geojson": { 7 | "type": "FeatureCollection", 8 | "features": [ 9 | { 10 | "geometry": { 11 | "coordinates": [[0, 0], [0, 1]] 12 | } 13 | }, 14 | { 15 | "geometry": { 16 | "coordinates": [[0, 1], [1, 1]] 17 | } 18 | }, 19 | { 20 | "geometry": { 21 | "coordinates": [[1, 1], [1, 0]] 22 | } 23 | } 24 | ] 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /tests/three_routes.json: -------------------------------------------------------------------------------- 1 | { 2 | "from": [0, 0], 3 | "to": [0, 2], 4 | "distance": 2, 5 | "shortestPath": [[0, 0], [0, 1], [0, 2]], 6 | "geojson": { 7 | "type": "FeatureCollection", 8 | "features": [ 9 | { 10 | "geometry": { 11 | "coordinates": [[0, 0], [0, 1], [0, 2]] 12 | } 13 | }, 14 | { 15 | "geometry": { 16 | "coordinates": [ 17 | [0, 0], 18 | [0, 1], 19 | [0, 3], 20 | [0, 4], 21 | [0, 5], 22 | [0, 6], 23 | [0, 7], 24 | [0, 8], 25 | [0, 2] 26 | ] 27 | } 28 | }, 29 | { 30 | "geometry": { 31 | "coordinates": [ 32 | [0, 0], 33 | [1, 0], 34 | [3, 0], 35 | [4, 0], 36 | [5, 0], 37 | [6, 0], 38 | [7, 0], 39 | [8, 0], 40 | [0, 2] 41 | ] 42 | } 43 | } 44 | ] 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /tests/two_points.json: -------------------------------------------------------------------------------- 1 | { 2 | "from": [0, 0], 3 | "to": [0, 1], 4 | "distance": 1, 5 | "shortestPath": [[0, 0], [0, 1]], 6 | "geojson": { 7 | "type": "FeatureCollection", 8 | "features": [ 9 | { 10 | "type": "Feature", 11 | "geometry": { 12 | "type": "LineString", 13 | "coordinates": [[0, 0], [0, 1]] 14 | } 15 | } 16 | ] 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /travel-api.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import ( 4 | "encoding/json" 5 | "fmt" 6 | "io/ioutil" 7 | "log" 8 | "math" 9 | "net/http" 10 | "os" 11 | 12 | "github.com/gorilla/mux" 13 | ) 14 | 15 | // PathRequestBody API Structure 16 | type PathRequestBody struct { 17 | FromLocation Coordinate `json:"fromLocation"` 18 | ToLocation Coordinate `json:"toLocation"` 19 | } 20 | 21 | func getCoordinates(nodes []Node) []Coordinate { 22 | result := make([]Coordinate, len(nodes)) 23 | for i := 0; i < len(nodes); i++ { 24 | result[i] = [2]float64{nodes[i][0], nodes[i][1]} 25 | } 26 | return result 27 | } 28 | 29 | //::: unit = the unit you desire for results ::: 30 | //::: where: 'M' is statute miles (default) ::: 31 | //::: 'K' is kilometers ::: 32 | //::: 'N' is nautical miles ::: 33 | func distance(coord1 Coordinate, coord2 Coordinate, unit ...string) float64 { 34 | lng1 := coord1[0] 35 | lat1 := coord1[1] 36 | lng2 := coord2[0] 37 | lat2 := coord2[1] 38 | const PI float64 = 3.141592653589793 39 | radlat1 := float64(PI * lat1 / 180) 40 | radlat2 := float64(PI * lat2 / 180) 41 | 42 | theta := float64(lng1 - lng2) 43 | radtheta := float64(PI * theta / 180) 44 | 45 | dist := math.Sin(radlat1)*math.Sin(radlat2) + math.Cos(radlat1)*math.Cos(radlat2)*math.Cos(radtheta) 46 | 47 | if dist > 1 { 48 | dist = 1 49 | } 50 | 51 | dist = math.Acos(dist) 52 | dist = dist * 180 / PI 53 | dist = dist * 60 * 1.1515 54 | 55 | if len(unit) > 0 { 56 | if unit[0] == "K" { 57 | dist = dist * 1.609344 58 | } else if unit[0] == "N" { 59 | dist = dist * 0.8684 60 | } 61 | } 62 | 63 | return dist 64 | } 65 | 66 | func calcTotalDistance(coords []Coordinate) float64 { 67 | sum := 0.0 68 | for i := 0; i < len(coords); i++ { 69 | if i > 0 { 70 | sum += distance(coords[i-1], coords[i], "K") 71 | } 72 | } 73 | return sum 74 | } 75 | 76 | func setJSONHeader(w *http.ResponseWriter) { 77 | (*w).Header().Set("Content-Type", "application/json") 78 | } 79 | 80 | func enableCors(w *http.ResponseWriter) { 81 | (*w).Header().Set("Access-Control-Allow-Origin", "*") 82 | } 83 | 84 | // FindPathResponse API Response 85 | type FindPathResponse struct { 86 | Data GeoJSON `json:"data"` 87 | Distance float64 `json:"distance"` 88 | } 89 | 90 | func findpathHandler(w http.ResponseWriter, r *http.Request) { 91 | reqBody, err := ioutil.ReadAll(r.Body) 92 | var newRequestBody PathRequestBody 93 | if err != nil { 94 | fmt.Fprintf(w, "Bad input") 95 | } 96 | 97 | json.Unmarshal(reqBody, &newRequestBody) 98 | 99 | route := graph.CalculatePath(newRequestBody.FromLocation, newRequestBody.ToLocation) 100 | coords := getCoordinates(route.Path) 101 | distance := calcTotalDistance(coords) 102 | 103 | geometry := Geometry{Type: "LineString", Coordinates: coords} 104 | featureOut := Feature{Type: "Feature", ID: "1234", Properties: Property{}, Geometry: geometry} 105 | features := make([]Feature, 1) 106 | 107 | features[0] = featureOut 108 | 109 | data := GeoJSON{ 110 | Type: "FeatureCollection", 111 | Features: features, 112 | } 113 | 114 | response := FindPathResponse{data, distance} 115 | 116 | geojsonDataInJSON, _ := json.Marshal(&response) 117 | 118 | enableCors(&w) 119 | setJSONHeader(&w) 120 | w.Write(geojsonDataInJSON) 121 | } 122 | 123 | func homeLink(w http.ResponseWriter, r *http.Request) { 124 | fmt.Fprintf(w, "Lightpath backend is running") 125 | } 126 | 127 | var graph Graph 128 | 129 | // var filename = "./data/greater-london-latest.geojson" 130 | 131 | // var filename = "./data/central.geojson" 132 | var filename = "./data/cleaned.geojson" 133 | 134 | func main() { 135 | graph = loadGeoJSON(filename) 136 | 137 | port := os.Getenv("PORT") 138 | if port == "" { 139 | port = "8080" 140 | } 141 | 142 | router := mux.NewRouter().StrictSlash(true) 143 | router.HandleFunc("/", homeLink) 144 | router.HandleFunc("/findpath", findpathHandler).Methods("POST") 145 | router.HandleFunc("/map-data/", func(w http.ResponseWriter, r *http.Request) { 146 | enableCors(&w) 147 | setJSONHeader(&w) 148 | http.ServeFile(w, r, filename) 149 | }).Methods("GET") 150 | 151 | fmt.Println("Listening on http://localhost:" + port) 152 | log.Fatal(http.ListenAndServe(":"+port, router)) 153 | } 154 | -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@babel/code-frame@^7.0.0", "@babel/code-frame@^7.5.5": 6 | version "7.5.5" 7 | resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.5.5.tgz#bc0782f6d69f7b7d49531219699b988f669a8f9d" 8 | integrity sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw== 9 | dependencies: 10 | "@babel/highlight" "^7.0.0" 11 | 12 | "@babel/generator@^7.4.0", "@babel/generator@^7.6.2": 13 | version "7.6.2" 14 | resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.6.2.tgz#dac8a3c2df118334c2a29ff3446da1636a8f8c03" 15 | integrity sha512-j8iHaIW4gGPnViaIHI7e9t/Hl8qLjERI6DcV9kEpAIDJsAOrcnXqRS7t+QbhL76pwbtqP+QCQLL0z1CyVmtjjQ== 16 | dependencies: 17 | "@babel/types" "^7.6.0" 18 | jsesc "^2.5.1" 19 | lodash "^4.17.13" 20 | source-map "^0.5.0" 21 | 22 | "@babel/helper-function-name@^7.1.0": 23 | version "7.1.0" 24 | resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.1.0.tgz#a0ceb01685f73355d4360c1247f582bfafc8ff53" 25 | integrity sha512-A95XEoCpb3TO+KZzJ4S/5uW5fNe26DjBGqf1o9ucyLyCmi1dXq/B3c8iaWTfBk3VvetUxl16e8tIrd5teOCfGw== 26 | dependencies: 27 | "@babel/helper-get-function-arity" "^7.0.0" 28 | "@babel/template" "^7.1.0" 29 | "@babel/types" "^7.0.0" 30 | 31 | "@babel/helper-get-function-arity@^7.0.0": 32 | version "7.0.0" 33 | resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0.tgz#83572d4320e2a4657263734113c42868b64e49c3" 34 | integrity sha512-r2DbJeg4svYvt3HOS74U4eWKsUAMRH01Z1ds1zx8KNTPtpTL5JAsdFv8BNyOpVqdFhHkkRDIg5B4AsxmkjAlmQ== 35 | dependencies: 36 | "@babel/types" "^7.0.0" 37 | 38 | "@babel/helper-split-export-declaration@^7.4.4": 39 | version "7.4.4" 40 | resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.4.4.tgz#ff94894a340be78f53f06af038b205c49d993677" 41 | integrity sha512-Ro/XkzLf3JFITkW6b+hNxzZ1n5OQ80NvIUdmHspih1XAhtN3vPTuUFT4eQnela+2MaZ5ulH+iyP513KJrxbN7Q== 42 | dependencies: 43 | "@babel/types" "^7.4.4" 44 | 45 | "@babel/highlight@^7.0.0": 46 | version "7.5.0" 47 | resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.5.0.tgz#56d11312bd9248fa619591d02472be6e8cb32540" 48 | integrity sha512-7dV4eu9gBxoM0dAnj/BCFDW9LFU0zvTrkq0ugM7pnHEgguOEeOz1so2ZghEdzviYzQEED0r4EAgpsBChKy1TRQ== 49 | dependencies: 50 | chalk "^2.0.0" 51 | esutils "^2.0.2" 52 | js-tokens "^4.0.0" 53 | 54 | "@babel/parser@^7.4.3", "@babel/parser@^7.6.0", "@babel/parser@^7.6.2": 55 | version "7.6.2" 56 | resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.6.2.tgz#205e9c95e16ba3b8b96090677a67c9d6075b70a1" 57 | integrity sha512-mdFqWrSPCmikBoaBYMuBulzTIKuXVPtEISFbRRVNwMWpCms/hmE2kRq0bblUHaNRKrjRlmVbx1sDHmjmRgD2Xg== 58 | 59 | "@babel/template@^7.1.0", "@babel/template@^7.4.0": 60 | version "7.6.0" 61 | resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.6.0.tgz#7f0159c7f5012230dad64cca42ec9bdb5c9536e6" 62 | integrity sha512-5AEH2EXD8euCk446b7edmgFdub/qfH1SN6Nii3+fyXP807QRx9Q73A2N5hNwRRslC2H9sNzaFhsPubkS4L8oNQ== 63 | dependencies: 64 | "@babel/code-frame" "^7.0.0" 65 | "@babel/parser" "^7.6.0" 66 | "@babel/types" "^7.6.0" 67 | 68 | "@babel/traverse@^7.4.3": 69 | version "7.6.2" 70 | resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.6.2.tgz#b0e2bfd401d339ce0e6c05690206d1e11502ce2c" 71 | integrity sha512-8fRE76xNwNttVEF2TwxJDGBLWthUkHWSldmfuBzVRmEDWOtu4XdINTgN7TDWzuLg4bbeIMLvfMFD9we5YcWkRQ== 72 | dependencies: 73 | "@babel/code-frame" "^7.5.5" 74 | "@babel/generator" "^7.6.2" 75 | "@babel/helper-function-name" "^7.1.0" 76 | "@babel/helper-split-export-declaration" "^7.4.4" 77 | "@babel/parser" "^7.6.2" 78 | "@babel/types" "^7.6.0" 79 | debug "^4.1.0" 80 | globals "^11.1.0" 81 | lodash "^4.17.13" 82 | 83 | "@babel/types@^7.0.0", "@babel/types@^7.4.0", "@babel/types@^7.4.4", "@babel/types@^7.6.0": 84 | version "7.6.1" 85 | resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.6.1.tgz#53abf3308add3ac2a2884d539151c57c4b3ac648" 86 | integrity sha512-X7gdiuaCmA0uRjCmRtYJNAVCc/q+5xSgsfKJHqMN4iNLILX39677fJE1O40arPMh0TTtS9ItH67yre6c7k6t0g== 87 | dependencies: 88 | esutils "^2.0.2" 89 | lodash "^4.17.13" 90 | to-fast-properties "^2.0.0" 91 | 92 | "@turf/distance@^6.0.1": 93 | version "6.0.1" 94 | resolved "https://registry.yarnpkg.com/@turf/distance/-/distance-6.0.1.tgz#0761f28784286e7865a427c4e7e3593569c2dea8" 95 | integrity sha512-q7t7rWIWfkg7MP1Vt4uLjSEhe5rPfCO2JjpKmk7JC+QZKEQkuvHEqy3ejW1iC7Kw5ZcZNR3qdMGGz+6HnVwqvg== 96 | dependencies: 97 | "@turf/helpers" "6.x" 98 | "@turf/invariant" "6.x" 99 | 100 | "@turf/explode@^5.1.0": 101 | version "5.1.5" 102 | resolved "https://registry.yarnpkg.com/@turf/explode/-/explode-5.1.5.tgz#b12b2f774004a1b48f62ba95b20a1c655a3de118" 103 | integrity sha1-sSsvd0AEobSPYrqVsgocZVo94Rg= 104 | dependencies: 105 | "@turf/helpers" "^5.1.5" 106 | "@turf/meta" "^5.1.5" 107 | 108 | "@turf/helpers@6.x": 109 | version "6.1.4" 110 | resolved "https://registry.yarnpkg.com/@turf/helpers/-/helpers-6.1.4.tgz#d6fd7ebe6782dd9c87dca5559bda5c48ae4c3836" 111 | integrity sha512-vJvrdOZy1ngC7r3MDA7zIGSoIgyrkWcGnNIEaqn/APmw+bVLF2gAW7HIsdTxd12s5wQMqEpqIQrmrbRRZ0xC7g== 112 | 113 | "@turf/helpers@^5.1.5": 114 | version "5.1.5" 115 | resolved "https://registry.yarnpkg.com/@turf/helpers/-/helpers-5.1.5.tgz#153405227ab933d004a5bb9641a9ed999fcbe0cf" 116 | integrity sha1-FTQFInq5M9AEpbuWQantmZ/L4M8= 117 | 118 | "@turf/invariant@6.x": 119 | version "6.1.2" 120 | resolved "https://registry.yarnpkg.com/@turf/invariant/-/invariant-6.1.2.tgz#6013ed6219f9ac2edada9b31e1dfa5918eb0a2f7" 121 | integrity sha512-WU08Ph8j0J2jVGlQCKChXoCtI50BB3yEH21V++V0T4cR1T27HKCxkehV2sYMwTierfMBgjwSwDIsxnR4/2mWXg== 122 | dependencies: 123 | "@turf/helpers" "6.x" 124 | 125 | "@turf/meta@^5.1.5": 126 | version "5.2.0" 127 | resolved "https://registry.yarnpkg.com/@turf/meta/-/meta-5.2.0.tgz#3b1ad485ee0c3b0b1775132a32c384d53e4ba53d" 128 | integrity sha1-OxrUhe4MOwsXdRMqMsOE1T5LpT0= 129 | dependencies: 130 | "@turf/helpers" "^5.1.5" 131 | 132 | "@types/geojson@^1.0.2": 133 | version "1.0.6" 134 | resolved "https://registry.yarnpkg.com/@types/geojson/-/geojson-1.0.6.tgz#3e02972728c69248c2af08d60a48cbb8680fffdf" 135 | integrity sha512-Xqg/lIZMrUd0VRmSRbCAewtwGZiAk3mEUDvV4op1tGl+LvyPcb/MIOSxTl9z+9+J+R4/vpjiCAT4xeKzH9ji1w== 136 | 137 | JSONStream@0.8.0: 138 | version "0.8.0" 139 | resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-0.8.0.tgz#efc462d5a5bc94ec007f4b22571acd7f6f2ae013" 140 | integrity sha1-78Ri1aW8lOwAf0siVxrNf28q4BM= 141 | dependencies: 142 | jsonparse "0.0.5" 143 | through "~2.2.7" 144 | 145 | ajv@^6.5.5: 146 | version "6.10.2" 147 | resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.10.2.tgz#d3cea04d6b017b2894ad69040fec8b623eb4bd52" 148 | integrity sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw== 149 | dependencies: 150 | fast-deep-equal "^2.0.1" 151 | fast-json-stable-stringify "^2.0.0" 152 | json-schema-traverse "^0.4.1" 153 | uri-js "^4.2.2" 154 | 155 | ansi-regex@^2.0.0: 156 | version "2.1.1" 157 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" 158 | integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= 159 | 160 | ansi-regex@^4.1.0: 161 | version "4.1.0" 162 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" 163 | integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== 164 | 165 | ansi-styles@^2.2.1: 166 | version "2.2.1" 167 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" 168 | integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4= 169 | 170 | ansi-styles@^3.2.0, ansi-styles@^3.2.1: 171 | version "3.2.1" 172 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" 173 | integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== 174 | dependencies: 175 | color-convert "^1.9.0" 176 | 177 | append-transform@^1.0.0: 178 | version "1.0.0" 179 | resolved "https://registry.yarnpkg.com/append-transform/-/append-transform-1.0.0.tgz#046a52ae582a228bd72f58acfbe2967c678759ab" 180 | integrity sha512-P009oYkeHyU742iSZJzZZywj4QRJdnTWffaKuJQLablCZ1uz6/cW4yaRgcDaoQ+uwOxxnt0gRUcwfsNP2ri0gw== 181 | dependencies: 182 | default-require-extensions "^2.0.0" 183 | 184 | archy@^1.0.0: 185 | version "1.0.0" 186 | resolved "https://registry.yarnpkg.com/archy/-/archy-1.0.0.tgz#f9c8c13757cc1dd7bc379ac77b2c62a5c2868c40" 187 | integrity sha1-+cjBN1fMHde8N5rHeyxipcKGjEA= 188 | 189 | arg@^4.1.0: 190 | version "4.1.1" 191 | resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.1.tgz#485f8e7c390ce4c5f78257dbea80d4be11feda4c" 192 | integrity sha512-SlmP3fEA88MBv0PypnXZ8ZfJhwmDeIE3SP71j37AiXQBXYosPV0x6uISAaHYSlSVhmHOVkomen0tbGk6Anlebw== 193 | 194 | argparse@^1.0.7: 195 | version "1.0.10" 196 | resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" 197 | integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== 198 | dependencies: 199 | sprintf-js "~1.0.2" 200 | 201 | asn1@~0.2.3: 202 | version "0.2.4" 203 | resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" 204 | integrity sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg== 205 | dependencies: 206 | safer-buffer "~2.1.0" 207 | 208 | assert-plus@1.0.0, assert-plus@^1.0.0: 209 | version "1.0.0" 210 | resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" 211 | integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= 212 | 213 | asynckit@^0.4.0: 214 | version "0.4.0" 215 | resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" 216 | integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= 217 | 218 | aws-sign2@~0.7.0: 219 | version "0.7.0" 220 | resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" 221 | integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= 222 | 223 | aws4@^1.8.0: 224 | version "1.8.0" 225 | resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.8.0.tgz#f0e003d9ca9e7f59c7a508945d7b2ef9a04a542f" 226 | integrity sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ== 227 | 228 | balanced-match@^1.0.0: 229 | version "1.0.0" 230 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" 231 | integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= 232 | 233 | base64-js@0.0.2: 234 | version "0.0.2" 235 | resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-0.0.2.tgz#024f0f72afa25b75f9c0ee73cd4f55ec1bed9784" 236 | integrity sha1-Ak8Pcq+iW3X5wO5zzU9V7Bvtl4Q= 237 | 238 | bcrypt-pbkdf@^1.0.0: 239 | version "1.0.2" 240 | resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" 241 | integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= 242 | dependencies: 243 | tweetnacl "^0.14.3" 244 | 245 | bind-obj-methods@^2.0.0: 246 | version "2.0.0" 247 | resolved "https://registry.yarnpkg.com/bind-obj-methods/-/bind-obj-methods-2.0.0.tgz#0178140dbe7b7bb67dc74892ace59bc0247f06f0" 248 | integrity sha512-3/qRXczDi2Cdbz6jE+W3IflJOutRVica8frpBn14de1mBOkzDo+6tY33kNhvkw54Kn3PzRRD2VnGbGPcTAk4sw== 249 | 250 | bops@0.0.6: 251 | version "0.0.6" 252 | resolved "https://registry.yarnpkg.com/bops/-/bops-0.0.6.tgz#082d1d55fa01e60dbdc2ebc2dba37f659554cf3a" 253 | integrity sha1-CC0dVfoB5g29wuvC26N/ZZVUzzo= 254 | dependencies: 255 | base64-js "0.0.2" 256 | to-utf8 "0.0.1" 257 | 258 | brace-expansion@^1.1.7: 259 | version "1.1.11" 260 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" 261 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== 262 | dependencies: 263 | balanced-match "^1.0.0" 264 | concat-map "0.0.1" 265 | 266 | browser-process-hrtime@^1.0.0: 267 | version "1.0.0" 268 | resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626" 269 | integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow== 270 | 271 | buffer-from@^1.0.0: 272 | version "1.1.1" 273 | resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" 274 | integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== 275 | 276 | buffer-shims@~1.0.0: 277 | version "1.0.0" 278 | resolved "https://registry.yarnpkg.com/buffer-shims/-/buffer-shims-1.0.0.tgz#9978ce317388c649ad8793028c3477ef044a8b51" 279 | integrity sha1-mXjOMXOIxkmth5MCjDR37wRKi1E= 280 | 281 | caching-transform@^3.0.2: 282 | version "3.0.2" 283 | resolved "https://registry.yarnpkg.com/caching-transform/-/caching-transform-3.0.2.tgz#601d46b91eca87687a281e71cef99791b0efca70" 284 | integrity sha512-Mtgcv3lh3U0zRii/6qVgQODdPA4G3zhG+jtbCWj39RXuUFTMzH0vcdMtaJS1jPowd+It2Pqr6y3NJMQqOqCE2w== 285 | dependencies: 286 | hasha "^3.0.0" 287 | make-dir "^2.0.0" 288 | package-hash "^3.0.0" 289 | write-file-atomic "^2.4.2" 290 | 291 | camelcase@^5.0.0: 292 | version "5.3.1" 293 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" 294 | integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== 295 | 296 | capture-stack-trace@^1.0.0: 297 | version "1.0.1" 298 | resolved "https://registry.yarnpkg.com/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz#a6c0bbe1f38f3aa0b92238ecb6ff42c344d4135d" 299 | integrity sha512-mYQLZnx5Qt1JgB1WEiMCf2647plpGeQ2NMR/5L0HNZzGQo4fuSPnK+wjfPnKZV0aiJDgzmWqqkV/g7JD+DW0qw== 300 | 301 | caseless@~0.12.0: 302 | version "0.12.0" 303 | resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" 304 | integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= 305 | 306 | chalk@^1.0.0: 307 | version "1.1.3" 308 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" 309 | integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg= 310 | dependencies: 311 | ansi-styles "^2.2.1" 312 | escape-string-regexp "^1.0.2" 313 | has-ansi "^2.0.0" 314 | strip-ansi "^3.0.0" 315 | supports-color "^2.0.0" 316 | 317 | chalk@^2.0.0: 318 | version "2.4.2" 319 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" 320 | integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== 321 | dependencies: 322 | ansi-styles "^3.2.1" 323 | escape-string-regexp "^1.0.5" 324 | supports-color "^5.3.0" 325 | 326 | clean-yaml-object@^0.1.0: 327 | version "0.1.0" 328 | resolved "https://registry.yarnpkg.com/clean-yaml-object/-/clean-yaml-object-0.1.0.tgz#63fb110dc2ce1a84dc21f6d9334876d010ae8b68" 329 | integrity sha1-Y/sRDcLOGoTcIfbZM0h20BCui2g= 330 | 331 | cliui@^5.0.0: 332 | version "5.0.0" 333 | resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5" 334 | integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA== 335 | dependencies: 336 | string-width "^3.1.0" 337 | strip-ansi "^5.2.0" 338 | wrap-ansi "^5.1.0" 339 | 340 | color-convert@^1.9.0: 341 | version "1.9.3" 342 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" 343 | integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== 344 | dependencies: 345 | color-name "1.1.3" 346 | 347 | color-name@1.1.3: 348 | version "1.1.3" 349 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" 350 | integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= 351 | 352 | color-support@^1.1.0: 353 | version "1.1.3" 354 | resolved "https://registry.yarnpkg.com/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2" 355 | integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg== 356 | 357 | combined-stream@^1.0.6, combined-stream@~1.0.6: 358 | version "1.0.8" 359 | resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" 360 | integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== 361 | dependencies: 362 | delayed-stream "~1.0.0" 363 | 364 | commander@~2.20.0: 365 | version "2.20.0" 366 | resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.0.tgz#d58bb2b5c1ee8f87b0d340027e9e94e222c5a422" 367 | integrity sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ== 368 | 369 | commondir@^1.0.1: 370 | version "1.0.1" 371 | resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" 372 | integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= 373 | 374 | concat-map@0.0.1: 375 | version "0.0.1" 376 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 377 | integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= 378 | 379 | concat-stream@~1.0.1: 380 | version "1.0.1" 381 | resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.0.1.tgz#018b18bc1c7d073a2dc82aa48442341a2c4dd79f" 382 | integrity sha1-AYsYvBx9BzotyCqkhEI0GixN158= 383 | dependencies: 384 | bops "0.0.6" 385 | 386 | concat-stream@~1.2.1: 387 | version "1.2.1" 388 | resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.2.1.tgz#f35100b6c46378bfba8b6b80f9f0d0ccdf13dc60" 389 | integrity sha1-81EAtsRjeL+6i2uA+fDQzN8T3GA= 390 | dependencies: 391 | bops "0.0.6" 392 | 393 | convert-source-map@^1.6.0: 394 | version "1.6.0" 395 | resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.6.0.tgz#51b537a8c43e0f04dec1993bffcdd504e758ac20" 396 | integrity sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A== 397 | dependencies: 398 | safe-buffer "~5.1.1" 399 | 400 | core-util-is@1.0.2, core-util-is@~1.0.0: 401 | version "1.0.2" 402 | resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" 403 | integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= 404 | 405 | coveralls@^3.0.2: 406 | version "3.0.6" 407 | resolved "https://registry.yarnpkg.com/coveralls/-/coveralls-3.0.6.tgz#5c63b2759b6781118e7439bd870ba5e9ee428b25" 408 | integrity sha512-Pgh4v3gCI4T/9VijVrm8Ym5v0OgjvGLKj3zTUwkvsCiwqae/p6VLzpsFNjQS2i6ewV7ef+DjFJ5TSKxYt/mCrA== 409 | dependencies: 410 | growl "~> 1.10.0" 411 | js-yaml "^3.13.1" 412 | lcov-parse "^0.0.10" 413 | log-driver "^1.2.7" 414 | minimist "^1.2.0" 415 | request "^2.86.0" 416 | 417 | cp-file@^6.2.0: 418 | version "6.2.0" 419 | resolved "https://registry.yarnpkg.com/cp-file/-/cp-file-6.2.0.tgz#40d5ea4a1def2a9acdd07ba5c0b0246ef73dc10d" 420 | integrity sha512-fmvV4caBnofhPe8kOcitBwSn2f39QLjnAnGq3gO9dfd75mUytzKNZB1hde6QHunW2Rt+OwuBOMc3i1tNElbszA== 421 | dependencies: 422 | graceful-fs "^4.1.2" 423 | make-dir "^2.0.0" 424 | nested-error-stacks "^2.0.0" 425 | pify "^4.0.1" 426 | safe-buffer "^5.0.1" 427 | 428 | cross-spawn@^4: 429 | version "4.0.2" 430 | resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-4.0.2.tgz#7b9247621c23adfdd3856004a823cbe397424d41" 431 | integrity sha1-e5JHYhwjrf3ThWAEqCPL45dCTUE= 432 | dependencies: 433 | lru-cache "^4.0.1" 434 | which "^1.2.9" 435 | 436 | dashdash@^1.12.0: 437 | version "1.14.1" 438 | resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" 439 | integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA= 440 | dependencies: 441 | assert-plus "^1.0.0" 442 | 443 | debug@^2.1.3: 444 | version "2.6.9" 445 | resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" 446 | integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== 447 | dependencies: 448 | ms "2.0.0" 449 | 450 | debug@^4.1.0, debug@^4.1.1: 451 | version "4.1.1" 452 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" 453 | integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== 454 | dependencies: 455 | ms "^2.1.1" 456 | 457 | decamelize@^1.2.0: 458 | version "1.2.0" 459 | resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" 460 | integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= 461 | 462 | default-require-extensions@^2.0.0: 463 | version "2.0.0" 464 | resolved "https://registry.yarnpkg.com/default-require-extensions/-/default-require-extensions-2.0.0.tgz#f5f8fbb18a7d6d50b21f641f649ebb522cfe24f7" 465 | integrity sha1-9fj7sYp9bVCyH2QfZJ67Uiz+JPc= 466 | dependencies: 467 | strip-bom "^3.0.0" 468 | 469 | delayed-stream@~1.0.0: 470 | version "1.0.0" 471 | resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" 472 | integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= 473 | 474 | diff@^1.3.2: 475 | version "1.4.0" 476 | resolved "https://registry.yarnpkg.com/diff/-/diff-1.4.0.tgz#7f28d2eb9ee7b15a97efd89ce63dcfdaa3ccbabf" 477 | integrity sha1-fyjS657nsVqX79ic5j3P2qPMur8= 478 | 479 | diff@^4.0.1: 480 | version "4.0.1" 481 | resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.1.tgz#0c667cb467ebbb5cea7f14f135cc2dba7780a8ff" 482 | integrity sha512-s2+XdvhPCOF01LRQBC8hf4vhbVmI2CGS5aZnxLJlT5FtdhPCDFq80q++zK2KlrVorVDdL5BOGZ/VfLrVtYNF+Q== 483 | 484 | domain-browser@^1.2.0: 485 | version "1.2.0" 486 | resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda" 487 | integrity sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA== 488 | 489 | domelementtype@1: 490 | version "1.3.1" 491 | resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f" 492 | integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w== 493 | 494 | domhandler@2.2: 495 | version "2.2.1" 496 | resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.2.1.tgz#59df9dcd227e808b365ae73e1f6684ac3d946fc2" 497 | integrity sha1-Wd+dzSJ+gIs2Wuc+H2aErD2Ub8I= 498 | dependencies: 499 | domelementtype "1" 500 | 501 | domutils@1.3: 502 | version "1.3.0" 503 | resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.3.0.tgz#9ad4d59b5af6ca684c62fe6d768ef170e70df192" 504 | integrity sha1-mtTVm1r2ymhMYv5tdo7xcOcN8ZI= 505 | dependencies: 506 | domelementtype "1" 507 | 508 | duplexer@^0.1.1: 509 | version "0.1.1" 510 | resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1" 511 | integrity sha1-rOb/gIwc5mtX0ev5eXessCM0z8E= 512 | 513 | ecc-jsbn@~0.1.1: 514 | version "0.1.2" 515 | resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" 516 | integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk= 517 | dependencies: 518 | jsbn "~0.1.0" 519 | safer-buffer "^2.1.0" 520 | 521 | emoji-regex@^7.0.1: 522 | version "7.0.3" 523 | resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" 524 | integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== 525 | 526 | error-ex@^1.3.1: 527 | version "1.3.2" 528 | resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" 529 | integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== 530 | dependencies: 531 | is-arrayish "^0.2.1" 532 | 533 | es6-error@^4.0.1: 534 | version "4.1.1" 535 | resolved "https://registry.yarnpkg.com/es6-error/-/es6-error-4.1.1.tgz#9e3af407459deed47e9a91f9b885a84eb05c561d" 536 | integrity sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg== 537 | 538 | escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.3, escape-string-regexp@^1.0.5: 539 | version "1.0.5" 540 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" 541 | integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= 542 | 543 | esm@^3.2.5: 544 | version "3.2.25" 545 | resolved "https://registry.yarnpkg.com/esm/-/esm-3.2.25.tgz#342c18c29d56157688ba5ce31f8431fbb795cc10" 546 | integrity sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA== 547 | 548 | esprima@^4.0.0: 549 | version "4.0.1" 550 | resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" 551 | integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== 552 | 553 | esutils@^2.0.2: 554 | version "2.0.3" 555 | resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" 556 | integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== 557 | 558 | events-to-array@^1.0.1: 559 | version "1.1.2" 560 | resolved "https://registry.yarnpkg.com/events-to-array/-/events-to-array-1.1.2.tgz#2d41f563e1fe400ed4962fe1a4d5c6a7539df7f6" 561 | integrity sha1-LUH1Y+H+QA7Uli/hpNXGp1Od9/Y= 562 | 563 | extend@~3.0.2: 564 | version "3.0.2" 565 | resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" 566 | integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== 567 | 568 | extsprintf@1.3.0: 569 | version "1.3.0" 570 | resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" 571 | integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU= 572 | 573 | extsprintf@^1.2.0: 574 | version "1.4.0" 575 | resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" 576 | integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8= 577 | 578 | fast-deep-equal@^2.0.1: 579 | version "2.0.1" 580 | resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49" 581 | integrity sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk= 582 | 583 | fast-json-stable-stringify@^2.0.0: 584 | version "2.0.0" 585 | resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" 586 | integrity sha1-1RQsDK7msRifh9OnYREGT4bIu/I= 587 | 588 | figures@^1.4.0: 589 | version "1.7.0" 590 | resolved "https://registry.yarnpkg.com/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e" 591 | integrity sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4= 592 | dependencies: 593 | escape-string-regexp "^1.0.5" 594 | object-assign "^4.1.0" 595 | 596 | find-cache-dir@^2.1.0: 597 | version "2.1.0" 598 | resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-2.1.0.tgz#8d0f94cd13fe43c6c7c261a0d86115ca918c05f7" 599 | integrity sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ== 600 | dependencies: 601 | commondir "^1.0.1" 602 | make-dir "^2.0.0" 603 | pkg-dir "^3.0.0" 604 | 605 | find-up@^3.0.0: 606 | version "3.0.0" 607 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" 608 | integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== 609 | dependencies: 610 | locate-path "^3.0.0" 611 | 612 | foreground-child@^1.3.3, foreground-child@^1.5.6: 613 | version "1.5.6" 614 | resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-1.5.6.tgz#4fd71ad2dfde96789b980a5c0a295937cb2f5ce9" 615 | integrity sha1-T9ca0t/elnibmApcCilZN8svXOk= 616 | dependencies: 617 | cross-spawn "^4" 618 | signal-exit "^3.0.0" 619 | 620 | forever-agent@~0.6.1: 621 | version "0.6.1" 622 | resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" 623 | integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= 624 | 625 | form-data@~2.3.2: 626 | version "2.3.3" 627 | resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" 628 | integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== 629 | dependencies: 630 | asynckit "^0.4.0" 631 | combined-stream "^1.0.6" 632 | mime-types "^2.1.12" 633 | 634 | fs-exists-cached@^1.0.0: 635 | version "1.0.0" 636 | resolved "https://registry.yarnpkg.com/fs-exists-cached/-/fs-exists-cached-1.0.0.tgz#cf25554ca050dc49ae6656b41de42258989dcbce" 637 | integrity sha1-zyVVTKBQ3EmuZla0HeQiWJidy84= 638 | 639 | fs.realpath@^1.0.0: 640 | version "1.0.0" 641 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 642 | integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= 643 | 644 | function-loop@^1.0.1: 645 | version "1.0.2" 646 | resolved "https://registry.yarnpkg.com/function-loop/-/function-loop-1.0.2.tgz#16b93dd757845eacfeca1a8061a6a65c106e0cb2" 647 | integrity sha512-Iw4MzMfS3udk/rqxTiDDCllhGwlOrsr50zViTOO/W6lS/9y6B1J0BD2VZzrnWUYBJsl3aeqjgR5v7bWWhZSYbA== 648 | 649 | geojson-area@0.1.0: 650 | version "0.1.0" 651 | resolved "https://registry.yarnpkg.com/geojson-area/-/geojson-area-0.1.0.tgz#d48d807082cfadf4a78df1349be50f38bf1894ae" 652 | integrity sha1-1I2AcILPrfSnjfE0m+UPOL8YlK4= 653 | dependencies: 654 | wgs84 "0.0.0" 655 | 656 | geojson-numeric@0.2.0: 657 | version "0.2.0" 658 | resolved "https://registry.yarnpkg.com/geojson-numeric/-/geojson-numeric-0.2.0.tgz#ab9aae2ea9727a4837079acff2aa83c872d72d4a" 659 | integrity sha1-q5quLqlyekg3B5rP8qqDyHLXLUo= 660 | dependencies: 661 | concat-stream "~1.0.1" 662 | optimist "~0.3.5" 663 | 664 | geojson-path-finder@^1.5.2: 665 | version "1.5.2" 666 | resolved "https://registry.yarnpkg.com/geojson-path-finder/-/geojson-path-finder-1.5.2.tgz#812cdfb43dc0732559fcae2cfe9e6c02b6ed02ca" 667 | integrity sha512-hQl9LTNpqYNUeVhiKwS92FXEw8gk/Tx6i1OD/L9UfxbWqtoS3zhD6ZzQPNTCgQsu50DhsC09VL5vub7I0j/hQg== 668 | dependencies: 669 | "@turf/distance" "^6.0.1" 670 | "@turf/explode" "^5.1.0" 671 | tap "^12.0.0" 672 | tap-spec "^5.0.0" 673 | tinyqueue "^2.0.0" 674 | turf-point "^2.0.1" 675 | 676 | geojson-rewind@0.2.0: 677 | version "0.2.0" 678 | resolved "https://registry.yarnpkg.com/geojson-rewind/-/geojson-rewind-0.2.0.tgz#ea558e9e44ff03b8655d0a08b75078dc33a15e79" 679 | integrity sha1-6lWOnkT/A7hlXQoIt1B43DOhXnk= 680 | dependencies: 681 | concat-stream "~1.2.1" 682 | geojson-area "0.1.0" 683 | minimist "0.0.5" 684 | 685 | get-caller-file@^2.0.1: 686 | version "2.0.5" 687 | resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" 688 | integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== 689 | 690 | getpass@^0.1.1: 691 | version "0.1.7" 692 | resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" 693 | integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo= 694 | dependencies: 695 | assert-plus "^1.0.0" 696 | 697 | glob@^7.0.5, glob@^7.1.3: 698 | version "7.1.4" 699 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.4.tgz#aa608a2f6c577ad357e1ae5a5c26d9a8d1969255" 700 | integrity sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A== 701 | dependencies: 702 | fs.realpath "^1.0.0" 703 | inflight "^1.0.4" 704 | inherits "2" 705 | minimatch "^3.0.4" 706 | once "^1.3.0" 707 | path-is-absolute "^1.0.0" 708 | 709 | globals@^11.1.0: 710 | version "11.12.0" 711 | resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" 712 | integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== 713 | 714 | graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2: 715 | version "4.2.2" 716 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.2.tgz#6f0952605d0140c1cfdb138ed005775b92d67b02" 717 | integrity sha512-IItsdsea19BoLC7ELy13q1iJFNmd7ofZH5+X/pJr90/nRoPEX0DJo1dHDbgtYWOhJhcCgMDTOw84RZ72q6lB+Q== 718 | 719 | "growl@~> 1.10.0": 720 | version "1.10.5" 721 | resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.5.tgz#f2735dc2283674fa67478b10181059355c369e5e" 722 | integrity sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA== 723 | 724 | handlebars@^4.1.2: 725 | version "4.3.3" 726 | resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.3.3.tgz#56dd05fe33d6bd8a7d797351c39a0cdcfd576be5" 727 | integrity sha512-VupOxR91xcGojfINrzMqrvlyYbBs39sXIrWa7YdaQWeBudOlvKEGvCczMfJPgnuwHE/zyH1M6J+IUP6cgDVyxg== 728 | dependencies: 729 | neo-async "^2.6.0" 730 | optimist "^0.6.1" 731 | source-map "^0.6.1" 732 | optionalDependencies: 733 | uglify-js "^3.1.4" 734 | 735 | har-schema@^2.0.0: 736 | version "2.0.0" 737 | resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" 738 | integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= 739 | 740 | har-validator@~5.1.0: 741 | version "5.1.3" 742 | resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.3.tgz#1ef89ebd3e4996557675eed9893110dc350fa080" 743 | integrity sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g== 744 | dependencies: 745 | ajv "^6.5.5" 746 | har-schema "^2.0.0" 747 | 748 | has-ansi@^2.0.0: 749 | version "2.0.0" 750 | resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" 751 | integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE= 752 | dependencies: 753 | ansi-regex "^2.0.0" 754 | 755 | has-flag@^3.0.0: 756 | version "3.0.0" 757 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" 758 | integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= 759 | 760 | hasha@^3.0.0: 761 | version "3.0.0" 762 | resolved "https://registry.yarnpkg.com/hasha/-/hasha-3.0.0.tgz#52a32fab8569d41ca69a61ff1a214f8eb7c8bd39" 763 | integrity sha1-UqMvq4Vp1BymmmH/GiFPjrfIvTk= 764 | dependencies: 765 | is-stream "^1.0.1" 766 | 767 | hosted-git-info@^2.1.4: 768 | version "2.8.4" 769 | resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.4.tgz#44119abaf4bc64692a16ace34700fed9c03e2546" 770 | integrity sha512-pzXIvANXEFrc5oFFXRMkbLPQ2rXRoDERwDLyrcUxGhaZhgP54BBSl9Oheh7Vv0T090cszWBxPjkQQ5Sq1PbBRQ== 771 | 772 | htmlparser2@3.5.1: 773 | version "3.5.1" 774 | resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.5.1.tgz#6f42f7657dd19c13f7d65de9118417394a0be6d0" 775 | integrity sha1-b0L3ZX3RnBP31l3pEYQXOUoL5tA= 776 | dependencies: 777 | domelementtype "1" 778 | domhandler "2.2" 779 | domutils "1.3" 780 | readable-stream "1.1" 781 | 782 | http-signature@~1.2.0: 783 | version "1.2.0" 784 | resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" 785 | integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE= 786 | dependencies: 787 | assert-plus "^1.0.0" 788 | jsprim "^1.2.2" 789 | sshpk "^1.7.0" 790 | 791 | ieee754@^1.1.12: 792 | version "1.1.13" 793 | resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84" 794 | integrity sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg== 795 | 796 | imurmurhash@^0.1.4: 797 | version "0.1.4" 798 | resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" 799 | integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= 800 | 801 | inflight@^1.0.4: 802 | version "1.0.6" 803 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 804 | integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= 805 | dependencies: 806 | once "^1.3.0" 807 | wrappy "1" 808 | 809 | inherits@2, inherits@~2.0.1, inherits@~2.0.3: 810 | version "2.0.4" 811 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" 812 | integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== 813 | 814 | is-arrayish@^0.2.1: 815 | version "0.2.1" 816 | resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" 817 | integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= 818 | 819 | is-finite@^1.0.1: 820 | version "1.0.2" 821 | resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa" 822 | integrity sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko= 823 | dependencies: 824 | number-is-nan "^1.0.0" 825 | 826 | is-fullwidth-code-point@^2.0.0: 827 | version "2.0.0" 828 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" 829 | integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= 830 | 831 | is-stream@^1.0.1: 832 | version "1.1.0" 833 | resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" 834 | integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= 835 | 836 | is-typedarray@~1.0.0: 837 | version "1.0.0" 838 | resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" 839 | integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= 840 | 841 | isarray@0.0.1: 842 | version "0.0.1" 843 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" 844 | integrity sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8= 845 | 846 | isarray@~1.0.0: 847 | version "1.0.0" 848 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" 849 | integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= 850 | 851 | isexe@^2.0.0: 852 | version "2.0.0" 853 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" 854 | integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= 855 | 856 | isstream@~0.1.2: 857 | version "0.1.2" 858 | resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" 859 | integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= 860 | 861 | istanbul-lib-coverage@^2.0.5: 862 | version "2.0.5" 863 | resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz#675f0ab69503fad4b1d849f736baaca803344f49" 864 | integrity sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA== 865 | 866 | istanbul-lib-hook@^2.0.7: 867 | version "2.0.7" 868 | resolved "https://registry.yarnpkg.com/istanbul-lib-hook/-/istanbul-lib-hook-2.0.7.tgz#c95695f383d4f8f60df1f04252a9550e15b5b133" 869 | integrity sha512-vrRztU9VRRFDyC+aklfLoeXyNdTfga2EI3udDGn4cZ6fpSXpHLV9X6CHvfoMCPtggg8zvDDmC4b9xfu0z6/llA== 870 | dependencies: 871 | append-transform "^1.0.0" 872 | 873 | istanbul-lib-instrument@^3.3.0: 874 | version "3.3.0" 875 | resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-3.3.0.tgz#a5f63d91f0bbc0c3e479ef4c5de027335ec6d630" 876 | integrity sha512-5nnIN4vo5xQZHdXno/YDXJ0G+I3dAm4XgzfSVTPLQpj/zAV2dV6Juy0yaf10/zrJOJeHoN3fraFe+XRq2bFVZA== 877 | dependencies: 878 | "@babel/generator" "^7.4.0" 879 | "@babel/parser" "^7.4.3" 880 | "@babel/template" "^7.4.0" 881 | "@babel/traverse" "^7.4.3" 882 | "@babel/types" "^7.4.0" 883 | istanbul-lib-coverage "^2.0.5" 884 | semver "^6.0.0" 885 | 886 | istanbul-lib-report@^2.0.8: 887 | version "2.0.8" 888 | resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-2.0.8.tgz#5a8113cd746d43c4889eba36ab10e7d50c9b4f33" 889 | integrity sha512-fHBeG573EIihhAblwgxrSenp0Dby6tJMFR/HvlerBsrCTD5bkUuoNtn3gVh29ZCS824cGGBPn7Sg7cNk+2xUsQ== 890 | dependencies: 891 | istanbul-lib-coverage "^2.0.5" 892 | make-dir "^2.1.0" 893 | supports-color "^6.1.0" 894 | 895 | istanbul-lib-source-maps@^3.0.6: 896 | version "3.0.6" 897 | resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-3.0.6.tgz#284997c48211752ec486253da97e3879defba8c8" 898 | integrity sha512-R47KzMtDJH6X4/YW9XTx+jrLnZnscW4VpNN+1PViSYTejLVPWv7oov+Duf8YQSPyVRUvueQqz1TcsC6mooZTXw== 899 | dependencies: 900 | debug "^4.1.1" 901 | istanbul-lib-coverage "^2.0.5" 902 | make-dir "^2.1.0" 903 | rimraf "^2.6.3" 904 | source-map "^0.6.1" 905 | 906 | istanbul-reports@^2.2.4: 907 | version "2.2.6" 908 | resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-2.2.6.tgz#7b4f2660d82b29303a8fe6091f8ca4bf058da1af" 909 | integrity sha512-SKi4rnMyLBKe0Jy2uUdx28h8oG7ph2PPuQPvIAh31d+Ci+lSiEu4C+h3oBPuJ9+mPKhOyW0M8gY4U5NM1WLeXA== 910 | dependencies: 911 | handlebars "^4.1.2" 912 | 913 | js-tokens@^4.0.0: 914 | version "4.0.0" 915 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" 916 | integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== 917 | 918 | js-yaml@^3.13.1, js-yaml@^3.2.7, js-yaml@^3.3.1: 919 | version "3.13.1" 920 | resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847" 921 | integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw== 922 | dependencies: 923 | argparse "^1.0.7" 924 | esprima "^4.0.0" 925 | 926 | jsbn@~0.1.0: 927 | version "0.1.1" 928 | resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" 929 | integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= 930 | 931 | jsesc@^2.5.1: 932 | version "2.5.2" 933 | resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" 934 | integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== 935 | 936 | json-parse-better-errors@^1.0.1: 937 | version "1.0.2" 938 | resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" 939 | integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== 940 | 941 | json-schema-traverse@^0.4.1: 942 | version "0.4.1" 943 | resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" 944 | integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== 945 | 946 | json-schema@0.2.3: 947 | version "0.2.3" 948 | resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" 949 | integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM= 950 | 951 | json-stringify-safe@~5.0.1: 952 | version "5.0.1" 953 | resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" 954 | integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= 955 | 956 | jsonparse@0.0.5: 957 | version "0.0.5" 958 | resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-0.0.5.tgz#330542ad3f0a654665b778f3eb2d9a9fa507ac64" 959 | integrity sha1-MwVCrT8KZUZlt3jz6y2an6UHrGQ= 960 | 961 | jsprim@^1.2.2: 962 | version "1.4.1" 963 | resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" 964 | integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI= 965 | dependencies: 966 | assert-plus "1.0.0" 967 | extsprintf "1.3.0" 968 | json-schema "0.2.3" 969 | verror "1.10.0" 970 | 971 | lcov-parse@^0.0.10: 972 | version "0.0.10" 973 | resolved "https://registry.yarnpkg.com/lcov-parse/-/lcov-parse-0.0.10.tgz#1b0b8ff9ac9c7889250582b70b71315d9da6d9a3" 974 | integrity sha1-GwuP+ayceIklBYK3C3ExXZ2m2aM= 975 | 976 | load-json-file@^4.0.0: 977 | version "4.0.0" 978 | resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b" 979 | integrity sha1-L19Fq5HjMhYjT9U62rZo607AmTs= 980 | dependencies: 981 | graceful-fs "^4.1.2" 982 | parse-json "^4.0.0" 983 | pify "^3.0.0" 984 | strip-bom "^3.0.0" 985 | 986 | locate-path@^3.0.0: 987 | version "3.0.0" 988 | resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" 989 | integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== 990 | dependencies: 991 | p-locate "^3.0.0" 992 | path-exists "^3.0.0" 993 | 994 | lodash.flattendeep@^4.4.0: 995 | version "4.4.0" 996 | resolved "https://registry.yarnpkg.com/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz#fb030917f86a3134e5bc9bec0d69e0013ddfedb2" 997 | integrity sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI= 998 | 999 | lodash@^4.17.10, lodash@^4.17.13: 1000 | version "4.17.15" 1001 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" 1002 | integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== 1003 | 1004 | log-driver@^1.2.7: 1005 | version "1.2.7" 1006 | resolved "https://registry.yarnpkg.com/log-driver/-/log-driver-1.2.7.tgz#63b95021f0702fedfa2c9bb0a24e7797d71871d8" 1007 | integrity sha512-U7KCmLdqsGHBLeWqYlFA0V0Sl6P08EE1ZrmA9cxjUE0WVqT9qnyVDPz1kzpFEP0jdJuFnasWIfSd7fsaNXkpbg== 1008 | 1009 | lru-cache@^4.0.1: 1010 | version "4.1.5" 1011 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" 1012 | integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g== 1013 | dependencies: 1014 | pseudomap "^1.0.2" 1015 | yallist "^2.1.2" 1016 | 1017 | make-dir@^2.0.0, make-dir@^2.1.0: 1018 | version "2.1.0" 1019 | resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" 1020 | integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA== 1021 | dependencies: 1022 | pify "^4.0.1" 1023 | semver "^5.6.0" 1024 | 1025 | make-error@^1.1.1: 1026 | version "1.3.5" 1027 | resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.5.tgz#efe4e81f6db28cadd605c70f29c831b58ef776c8" 1028 | integrity sha512-c3sIjNUow0+8swNwVpqoH4YCShKNFkMaw6oH1mNS2haDZQqkeZFlHS3dhoeEbKKmJB4vXpJucU6oH75aDYeE9g== 1029 | 1030 | merge-source-map@^1.1.0: 1031 | version "1.1.0" 1032 | resolved "https://registry.yarnpkg.com/merge-source-map/-/merge-source-map-1.1.0.tgz#2fdde7e6020939f70906a68f2d7ae685e4c8c646" 1033 | integrity sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw== 1034 | dependencies: 1035 | source-map "^0.6.1" 1036 | 1037 | mime-db@1.40.0: 1038 | version "1.40.0" 1039 | resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.40.0.tgz#a65057e998db090f732a68f6c276d387d4126c32" 1040 | integrity sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA== 1041 | 1042 | mime-types@^2.1.12, mime-types@~2.1.19: 1043 | version "2.1.24" 1044 | resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.24.tgz#b6f8d0b3e951efb77dedeca194cff6d16f676f81" 1045 | integrity sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ== 1046 | dependencies: 1047 | mime-db "1.40.0" 1048 | 1049 | minimatch@^3.0.4: 1050 | version "3.0.4" 1051 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" 1052 | integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== 1053 | dependencies: 1054 | brace-expansion "^1.1.7" 1055 | 1056 | minimist@0.0.5: 1057 | version "0.0.5" 1058 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.5.tgz#d7aa327bcecf518f9106ac6b8f003fa3bcea8566" 1059 | integrity sha1-16oye87PUY+RBqxrjwA/o7zqhWY= 1060 | 1061 | minimist@0.0.8: 1062 | version "0.0.8" 1063 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" 1064 | integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0= 1065 | 1066 | minimist@^1.1.0, minimist@^1.2.0: 1067 | version "1.2.0" 1068 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" 1069 | integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ= 1070 | 1071 | minimist@~0.0.1: 1072 | version "0.0.10" 1073 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" 1074 | integrity sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8= 1075 | 1076 | minipass@^2.2.0, minipass@^2.3.5: 1077 | version "2.8.6" 1078 | resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.8.6.tgz#620d889ace26356391d010ecb9458749df9b6db5" 1079 | integrity sha512-lFG7d6g3+/UaFDCOtqPiKAC9zngWWsQZl1g5q6gaONqrjq61SX2xFqXMleQiFVyDpYwa018E9hmlAFY22PCb+A== 1080 | dependencies: 1081 | safe-buffer "^5.1.2" 1082 | yallist "^3.0.0" 1083 | 1084 | mkdirp@^0.5.0, mkdirp@^0.5.1: 1085 | version "0.5.1" 1086 | resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" 1087 | integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM= 1088 | dependencies: 1089 | minimist "0.0.8" 1090 | 1091 | ms@2.0.0: 1092 | version "2.0.0" 1093 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" 1094 | integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= 1095 | 1096 | ms@^2.1.1: 1097 | version "2.1.2" 1098 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" 1099 | integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== 1100 | 1101 | neo-async@^2.6.0: 1102 | version "2.6.1" 1103 | resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.1.tgz#ac27ada66167fa8849a6addd837f6b189ad2081c" 1104 | integrity sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw== 1105 | 1106 | nested-error-stacks@^2.0.0: 1107 | version "2.1.0" 1108 | resolved "https://registry.yarnpkg.com/nested-error-stacks/-/nested-error-stacks-2.1.0.tgz#0fbdcf3e13fe4994781280524f8b96b0cdff9c61" 1109 | integrity sha512-AO81vsIO1k1sM4Zrd6Hu7regmJN1NSiAja10gc4bX3F0wd+9rQmcuHQaHVQCYIEC8iFXnE+mavh23GOt7wBgug== 1110 | 1111 | normalize-package-data@^2.3.2: 1112 | version "2.5.0" 1113 | resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" 1114 | integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== 1115 | dependencies: 1116 | hosted-git-info "^2.1.4" 1117 | resolve "^1.10.0" 1118 | semver "2 || 3 || 4 || 5" 1119 | validate-npm-package-license "^3.0.1" 1120 | 1121 | number-is-nan@^1.0.0: 1122 | version "1.0.1" 1123 | resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" 1124 | integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= 1125 | 1126 | nyc@^14.0.0: 1127 | version "14.1.1" 1128 | resolved "https://registry.yarnpkg.com/nyc/-/nyc-14.1.1.tgz#151d64a6a9f9f5908a1b73233931e4a0a3075eeb" 1129 | integrity sha512-OI0vm6ZGUnoGZv/tLdZ2esSVzDwUC88SNs+6JoSOMVxA+gKMB8Tk7jBwgemLx4O40lhhvZCVw1C+OYLOBOPXWw== 1130 | dependencies: 1131 | archy "^1.0.0" 1132 | caching-transform "^3.0.2" 1133 | convert-source-map "^1.6.0" 1134 | cp-file "^6.2.0" 1135 | find-cache-dir "^2.1.0" 1136 | find-up "^3.0.0" 1137 | foreground-child "^1.5.6" 1138 | glob "^7.1.3" 1139 | istanbul-lib-coverage "^2.0.5" 1140 | istanbul-lib-hook "^2.0.7" 1141 | istanbul-lib-instrument "^3.3.0" 1142 | istanbul-lib-report "^2.0.8" 1143 | istanbul-lib-source-maps "^3.0.6" 1144 | istanbul-reports "^2.2.4" 1145 | js-yaml "^3.13.1" 1146 | make-dir "^2.1.0" 1147 | merge-source-map "^1.1.0" 1148 | resolve-from "^4.0.0" 1149 | rimraf "^2.6.3" 1150 | signal-exit "^3.0.2" 1151 | spawn-wrap "^1.4.2" 1152 | test-exclude "^5.2.3" 1153 | uuid "^3.3.2" 1154 | yargs "^13.2.2" 1155 | yargs-parser "^13.0.0" 1156 | 1157 | oauth-sign@~0.9.0: 1158 | version "0.9.0" 1159 | resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" 1160 | integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== 1161 | 1162 | object-assign@^4.1.0: 1163 | version "4.1.1" 1164 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" 1165 | integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= 1166 | 1167 | once@^1.3.0: 1168 | version "1.4.0" 1169 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 1170 | integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= 1171 | dependencies: 1172 | wrappy "1" 1173 | 1174 | opener@^1.5.1: 1175 | version "1.5.1" 1176 | resolved "https://registry.yarnpkg.com/opener/-/opener-1.5.1.tgz#6d2f0e77f1a0af0032aca716c2c1fbb8e7e8abed" 1177 | integrity sha512-goYSy5c2UXE4Ra1xixabeVh1guIX/ZV/YokJksb6q2lubWu6UbvPQ20p542/sFIll1nl8JnCyK9oBaOcCWXwvA== 1178 | 1179 | optimist@^0.6.1: 1180 | version "0.6.1" 1181 | resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686" 1182 | integrity sha1-2j6nRob6IaGaERwybpDrFaAZZoY= 1183 | dependencies: 1184 | minimist "~0.0.1" 1185 | wordwrap "~0.0.2" 1186 | 1187 | optimist@~0.3.5: 1188 | version "0.3.7" 1189 | resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.3.7.tgz#c90941ad59e4273328923074d2cf2e7cbc6ec0d9" 1190 | integrity sha1-yQlBrVnkJzMokjB00s8ufLxuwNk= 1191 | dependencies: 1192 | wordwrap "~0.0.2" 1193 | 1194 | os-homedir@^1.0.1, os-homedir@^1.0.2: 1195 | version "1.0.2" 1196 | resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" 1197 | integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M= 1198 | 1199 | osm-polygon-features@^0.9.1: 1200 | version "0.9.2" 1201 | resolved "https://registry.yarnpkg.com/osm-polygon-features/-/osm-polygon-features-0.9.2.tgz#20ae41130c486e49a3b2a3c2b58a1419c4986778" 1202 | integrity sha1-IK5BEwxIbkmjsqPCtYoUGcSYZ3g= 1203 | 1204 | osmtogeojson@^3.0.0-beta.3: 1205 | version "3.0.0-beta.3" 1206 | resolved "https://registry.yarnpkg.com/osmtogeojson/-/osmtogeojson-3.0.0-beta.3.tgz#499f91feaa612ec845df420f107e2e6bc28f0563" 1207 | integrity sha512-8abt3HLjlMzR1QwlnqnJTRPo7P+lOTf3VMIp1lmGvKno4Il+6LLFuWwohyDs8tPZjaUGuCjK0YjRkapsBMjH1Q== 1208 | dependencies: 1209 | JSONStream "0.8.0" 1210 | concat-stream "~1.0.1" 1211 | geojson-numeric "0.2.0" 1212 | geojson-rewind "0.2.0" 1213 | htmlparser2 "3.5.1" 1214 | optimist "~0.3.5" 1215 | osm-polygon-features "^0.9.1" 1216 | tiny-osmpbf "^0.1.0" 1217 | xmldom "~0.1.16" 1218 | optionalDependencies: 1219 | "@types/geojson" "^1.0.2" 1220 | 1221 | own-or-env@^1.0.1: 1222 | version "1.0.1" 1223 | resolved "https://registry.yarnpkg.com/own-or-env/-/own-or-env-1.0.1.tgz#54ce601d3bf78236c5c65633aa1c8ec03f8007e4" 1224 | integrity sha512-y8qULRbRAlL6x2+M0vIe7jJbJx/kmUTzYonRAa2ayesR2qWLswninkVyeJe4x3IEXhdgoNodzjQRKAoEs6Fmrw== 1225 | dependencies: 1226 | own-or "^1.0.0" 1227 | 1228 | own-or@^1.0.0: 1229 | version "1.0.0" 1230 | resolved "https://registry.yarnpkg.com/own-or/-/own-or-1.0.0.tgz#4e877fbeda9a2ec8000fbc0bcae39645ee8bf8dc" 1231 | integrity sha1-Tod/vtqaLsgAD7wLyuOWRe6L+Nw= 1232 | 1233 | p-limit@^2.0.0: 1234 | version "2.2.1" 1235 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.2.1.tgz#aa07a788cc3151c939b5131f63570f0dd2009537" 1236 | integrity sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg== 1237 | dependencies: 1238 | p-try "^2.0.0" 1239 | 1240 | p-locate@^3.0.0: 1241 | version "3.0.0" 1242 | resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" 1243 | integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== 1244 | dependencies: 1245 | p-limit "^2.0.0" 1246 | 1247 | p-try@^2.0.0: 1248 | version "2.2.0" 1249 | resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" 1250 | integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== 1251 | 1252 | package-hash@^3.0.0: 1253 | version "3.0.0" 1254 | resolved "https://registry.yarnpkg.com/package-hash/-/package-hash-3.0.0.tgz#50183f2d36c9e3e528ea0a8605dff57ce976f88e" 1255 | integrity sha512-lOtmukMDVvtkL84rJHI7dpTYq+0rli8N2wlnqUcBuDWCfVhRUfOmnR9SsoHFMLpACvEV60dX7rd0rFaYDZI+FA== 1256 | dependencies: 1257 | graceful-fs "^4.1.15" 1258 | hasha "^3.0.0" 1259 | lodash.flattendeep "^4.4.0" 1260 | release-zalgo "^1.0.0" 1261 | 1262 | parse-json@^4.0.0: 1263 | version "4.0.0" 1264 | resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" 1265 | integrity sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA= 1266 | dependencies: 1267 | error-ex "^1.3.1" 1268 | json-parse-better-errors "^1.0.1" 1269 | 1270 | parse-ms@^1.0.0: 1271 | version "1.0.1" 1272 | resolved "https://registry.yarnpkg.com/parse-ms/-/parse-ms-1.0.1.tgz#56346d4749d78f23430ca0c713850aef91aa361d" 1273 | integrity sha1-VjRtR0nXjyNDDKDHE4UK75GqNh0= 1274 | 1275 | path-exists@^3.0.0: 1276 | version "3.0.0" 1277 | resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" 1278 | integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= 1279 | 1280 | path-is-absolute@^1.0.0: 1281 | version "1.0.1" 1282 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 1283 | integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= 1284 | 1285 | path-parse@^1.0.6: 1286 | version "1.0.6" 1287 | resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" 1288 | integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== 1289 | 1290 | path-type@^3.0.0: 1291 | version "3.0.0" 1292 | resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" 1293 | integrity sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg== 1294 | dependencies: 1295 | pify "^3.0.0" 1296 | 1297 | pbf@^3.0.4: 1298 | version "3.2.0" 1299 | resolved "https://registry.yarnpkg.com/pbf/-/pbf-3.2.0.tgz#e76f9f5114e395c25077ad6fe463b3507d6877fc" 1300 | integrity sha512-98Eh7rsJNJF/Im6XYMLaOW3cLnNyedlOd6hu3iWMD5I7FZGgpw8yN3vQBrmLbLodu7G784Irb9Qsv2yFrxSAGw== 1301 | dependencies: 1302 | ieee754 "^1.1.12" 1303 | resolve-protobuf-schema "^2.1.0" 1304 | 1305 | performance-now@^2.1.0: 1306 | version "2.1.0" 1307 | resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" 1308 | integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= 1309 | 1310 | pify@^3.0.0: 1311 | version "3.0.0" 1312 | resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" 1313 | integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= 1314 | 1315 | pify@^4.0.1: 1316 | version "4.0.1" 1317 | resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" 1318 | integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== 1319 | 1320 | pkg-dir@^3.0.0: 1321 | version "3.0.0" 1322 | resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3" 1323 | integrity sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw== 1324 | dependencies: 1325 | find-up "^3.0.0" 1326 | 1327 | plur@^1.0.0: 1328 | version "1.0.0" 1329 | resolved "https://registry.yarnpkg.com/plur/-/plur-1.0.0.tgz#db85c6814f5e5e5a3b49efc28d604fec62975156" 1330 | integrity sha1-24XGgU9eXlo7Se/CjWBP7GKXUVY= 1331 | 1332 | pretty-ms@^2.1.0: 1333 | version "2.1.0" 1334 | resolved "https://registry.yarnpkg.com/pretty-ms/-/pretty-ms-2.1.0.tgz#4257c256df3fb0b451d6affaab021884126981dc" 1335 | integrity sha1-QlfCVt8/sLRR1q/6qwIYhBJpgdw= 1336 | dependencies: 1337 | is-finite "^1.0.1" 1338 | parse-ms "^1.0.0" 1339 | plur "^1.0.0" 1340 | 1341 | process-nextick-args@~1.0.6: 1342 | version "1.0.7" 1343 | resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3" 1344 | integrity sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M= 1345 | 1346 | process-nextick-args@~2.0.0: 1347 | version "2.0.1" 1348 | resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" 1349 | integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== 1350 | 1351 | protocol-buffers-schema@^3.3.1: 1352 | version "3.3.2" 1353 | resolved "https://registry.yarnpkg.com/protocol-buffers-schema/-/protocol-buffers-schema-3.3.2.tgz#00434f608b4e8df54c59e070efeefc37fb4bb859" 1354 | integrity sha512-Xdayp8sB/mU+sUV4G7ws8xtYMGdQnxbeIfLjyO9TZZRJdztBGhlmbI5x1qcY4TG5hBkIKGnc28i7nXxaugu88w== 1355 | 1356 | pseudomap@^1.0.2: 1357 | version "1.0.2" 1358 | resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" 1359 | integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= 1360 | 1361 | psl@^1.1.24: 1362 | version "1.4.0" 1363 | resolved "https://registry.yarnpkg.com/psl/-/psl-1.4.0.tgz#5dd26156cdb69fa1fdb8ab1991667d3f80ced7c2" 1364 | integrity sha512-HZzqCGPecFLyoRj5HLfuDSKYTJkAfB5thKBIkRHtGjWwY7p1dAyveIbXIq4tO0KYfDF2tHqPUgY9SDnGm00uFw== 1365 | 1366 | punycode@^1.3.2, punycode@^1.4.1: 1367 | version "1.4.1" 1368 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" 1369 | integrity sha1-wNWmOycYgArY4esPpSachN1BhF4= 1370 | 1371 | punycode@^2.1.0: 1372 | version "2.1.1" 1373 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" 1374 | integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== 1375 | 1376 | qs@~6.5.2: 1377 | version "6.5.2" 1378 | resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" 1379 | integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== 1380 | 1381 | re-emitter@1.1.3: 1382 | version "1.1.3" 1383 | resolved "https://registry.yarnpkg.com/re-emitter/-/re-emitter-1.1.3.tgz#fa9e319ffdeeeb35b27296ef0f3d374dac2f52a7" 1384 | integrity sha1-+p4xn/3u6zWycpbvDz03TawvUqc= 1385 | 1386 | read-pkg-up@^4.0.0: 1387 | version "4.0.0" 1388 | resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-4.0.0.tgz#1b221c6088ba7799601c808f91161c66e58f8978" 1389 | integrity sha512-6etQSH7nJGsK0RbG/2TeDzZFa8shjQ1um+SwQQ5cwKy0dhSXdOncEhb1CPpvQG4h7FyOV6EB6YlV0yJvZQNAkA== 1390 | dependencies: 1391 | find-up "^3.0.0" 1392 | read-pkg "^3.0.0" 1393 | 1394 | read-pkg@^3.0.0: 1395 | version "3.0.0" 1396 | resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389" 1397 | integrity sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k= 1398 | dependencies: 1399 | load-json-file "^4.0.0" 1400 | normalize-package-data "^2.3.2" 1401 | path-type "^3.0.0" 1402 | 1403 | readable-stream@1.1: 1404 | version "1.1.13" 1405 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.13.tgz#f6eef764f514c89e2b9e23146a75ba106756d23e" 1406 | integrity sha1-9u73ZPUUyJ4rniMUanW6EGdW0j4= 1407 | dependencies: 1408 | core-util-is "~1.0.0" 1409 | inherits "~2.0.1" 1410 | isarray "0.0.1" 1411 | string_decoder "~0.10.x" 1412 | 1413 | readable-stream@2.2.9: 1414 | version "2.2.9" 1415 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.2.9.tgz#cf78ec6f4a6d1eb43d26488cac97f042e74b7fc8" 1416 | integrity sha1-z3jsb0ptHrQ9JkiMrJfwQudLf8g= 1417 | dependencies: 1418 | buffer-shims "~1.0.0" 1419 | core-util-is "~1.0.0" 1420 | inherits "~2.0.1" 1421 | isarray "~1.0.0" 1422 | process-nextick-args "~1.0.6" 1423 | string_decoder "~1.0.0" 1424 | util-deprecate "~1.0.1" 1425 | 1426 | readable-stream@^2, readable-stream@^2.1.5, readable-stream@~2.3.6: 1427 | version "2.3.6" 1428 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" 1429 | integrity sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw== 1430 | dependencies: 1431 | core-util-is "~1.0.0" 1432 | inherits "~2.0.3" 1433 | isarray "~1.0.0" 1434 | process-nextick-args "~2.0.0" 1435 | safe-buffer "~5.1.1" 1436 | string_decoder "~1.1.1" 1437 | util-deprecate "~1.0.1" 1438 | 1439 | release-zalgo@^1.0.0: 1440 | version "1.0.0" 1441 | resolved "https://registry.yarnpkg.com/release-zalgo/-/release-zalgo-1.0.0.tgz#09700b7e5074329739330e535c5a90fb67851730" 1442 | integrity sha1-CXALflB0Mpc5Mw5TXFqQ+2eFFzA= 1443 | dependencies: 1444 | es6-error "^4.0.1" 1445 | 1446 | repeat-string@^1.5.2: 1447 | version "1.6.1" 1448 | resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" 1449 | integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= 1450 | 1451 | request@^2.86.0: 1452 | version "2.88.0" 1453 | resolved "https://registry.yarnpkg.com/request/-/request-2.88.0.tgz#9c2fca4f7d35b592efe57c7f0a55e81052124fef" 1454 | integrity sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg== 1455 | dependencies: 1456 | aws-sign2 "~0.7.0" 1457 | aws4 "^1.8.0" 1458 | caseless "~0.12.0" 1459 | combined-stream "~1.0.6" 1460 | extend "~3.0.2" 1461 | forever-agent "~0.6.1" 1462 | form-data "~2.3.2" 1463 | har-validator "~5.1.0" 1464 | http-signature "~1.2.0" 1465 | is-typedarray "~1.0.0" 1466 | isstream "~0.1.2" 1467 | json-stringify-safe "~5.0.1" 1468 | mime-types "~2.1.19" 1469 | oauth-sign "~0.9.0" 1470 | performance-now "^2.1.0" 1471 | qs "~6.5.2" 1472 | safe-buffer "^5.1.2" 1473 | tough-cookie "~2.4.3" 1474 | tunnel-agent "^0.6.0" 1475 | uuid "^3.3.2" 1476 | 1477 | require-directory@^2.1.1: 1478 | version "2.1.1" 1479 | resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" 1480 | integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= 1481 | 1482 | require-main-filename@^2.0.0: 1483 | version "2.0.0" 1484 | resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" 1485 | integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== 1486 | 1487 | resolve-from@^4.0.0: 1488 | version "4.0.0" 1489 | resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" 1490 | integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== 1491 | 1492 | resolve-protobuf-schema@^2.1.0: 1493 | version "2.1.0" 1494 | resolved "https://registry.yarnpkg.com/resolve-protobuf-schema/-/resolve-protobuf-schema-2.1.0.tgz#9ca9a9e69cf192bbdaf1006ec1973948aa4a3758" 1495 | integrity sha512-kI5ffTiZWmJaS/huM8wZfEMer1eRd7oJQhDuxeCLe3t7N7mX3z94CN0xPxBQxFYQTSNz9T0i+v6inKqSdK8xrQ== 1496 | dependencies: 1497 | protocol-buffers-schema "^3.3.1" 1498 | 1499 | resolve@^1.10.0: 1500 | version "1.12.0" 1501 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.12.0.tgz#3fc644a35c84a48554609ff26ec52b66fa577df6" 1502 | integrity sha512-B/dOmuoAik5bKcD6s6nXDCjzUKnaDvdkRyAk6rsmsKLipWj4797iothd7jmmUhWTfinVMU+wc56rYKsit2Qy4w== 1503 | dependencies: 1504 | path-parse "^1.0.6" 1505 | 1506 | rimraf@^2.6.2, rimraf@^2.6.3: 1507 | version "2.7.1" 1508 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" 1509 | integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== 1510 | dependencies: 1511 | glob "^7.1.3" 1512 | 1513 | safe-buffer@^5.0.1, safe-buffer@^5.1.2: 1514 | version "5.2.0" 1515 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.0.tgz#b74daec49b1148f88c64b68d49b1e815c1f2f519" 1516 | integrity sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg== 1517 | 1518 | safe-buffer@~5.1.0, safe-buffer@~5.1.1: 1519 | version "5.1.2" 1520 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" 1521 | integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== 1522 | 1523 | safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: 1524 | version "2.1.2" 1525 | resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" 1526 | integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== 1527 | 1528 | "semver@2 || 3 || 4 || 5", semver@^5.6.0: 1529 | version "5.7.1" 1530 | resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" 1531 | integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== 1532 | 1533 | semver@^6.0.0: 1534 | version "6.3.0" 1535 | resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" 1536 | integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== 1537 | 1538 | set-blocking@^2.0.0: 1539 | version "2.0.0" 1540 | resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" 1541 | integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= 1542 | 1543 | signal-exit@^3.0.0, signal-exit@^3.0.2: 1544 | version "3.0.2" 1545 | resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" 1546 | integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0= 1547 | 1548 | source-map-support@^0.5.10, source-map-support@^0.5.6: 1549 | version "0.5.13" 1550 | resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.13.tgz#31b24a9c2e73c2de85066c0feb7d44767ed52932" 1551 | integrity sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w== 1552 | dependencies: 1553 | buffer-from "^1.0.0" 1554 | source-map "^0.6.0" 1555 | 1556 | source-map@^0.5.0: 1557 | version "0.5.7" 1558 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" 1559 | integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= 1560 | 1561 | source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: 1562 | version "0.6.1" 1563 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" 1564 | integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== 1565 | 1566 | spawn-wrap@^1.4.2: 1567 | version "1.4.3" 1568 | resolved "https://registry.yarnpkg.com/spawn-wrap/-/spawn-wrap-1.4.3.tgz#81b7670e170cca247d80bf5faf0cfb713bdcf848" 1569 | integrity sha512-IgB8md0QW/+tWqcavuFgKYR/qIRvJkRLPJDFaoXtLLUaVcCDK0+HeFTkmQHj3eprcYhc+gOl0aEA1w7qZlYezw== 1570 | dependencies: 1571 | foreground-child "^1.5.6" 1572 | mkdirp "^0.5.0" 1573 | os-homedir "^1.0.1" 1574 | rimraf "^2.6.2" 1575 | signal-exit "^3.0.2" 1576 | which "^1.3.0" 1577 | 1578 | spdx-correct@^3.0.0: 1579 | version "3.1.0" 1580 | resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.0.tgz#fb83e504445268f154b074e218c87c003cd31df4" 1581 | integrity sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q== 1582 | dependencies: 1583 | spdx-expression-parse "^3.0.0" 1584 | spdx-license-ids "^3.0.0" 1585 | 1586 | spdx-exceptions@^2.1.0: 1587 | version "2.2.0" 1588 | resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz#2ea450aee74f2a89bfb94519c07fcd6f41322977" 1589 | integrity sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA== 1590 | 1591 | spdx-expression-parse@^3.0.0: 1592 | version "3.0.0" 1593 | resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz#99e119b7a5da00e05491c9fa338b7904823b41d0" 1594 | integrity sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg== 1595 | dependencies: 1596 | spdx-exceptions "^2.1.0" 1597 | spdx-license-ids "^3.0.0" 1598 | 1599 | spdx-license-ids@^3.0.0: 1600 | version "3.0.5" 1601 | resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz#3694b5804567a458d3c8045842a6358632f62654" 1602 | integrity sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q== 1603 | 1604 | split@1.0.0: 1605 | version "1.0.0" 1606 | resolved "https://registry.yarnpkg.com/split/-/split-1.0.0.tgz#c4395ce683abcd254bc28fe1dabb6e5c27dcffae" 1607 | integrity sha1-xDlc5oOrzSVLwo/h2rtuXCfc/64= 1608 | dependencies: 1609 | through "2" 1610 | 1611 | sprintf-js@~1.0.2: 1612 | version "1.0.3" 1613 | resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" 1614 | integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= 1615 | 1616 | sshpk@^1.7.0: 1617 | version "1.16.1" 1618 | resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877" 1619 | integrity sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg== 1620 | dependencies: 1621 | asn1 "~0.2.3" 1622 | assert-plus "^1.0.0" 1623 | bcrypt-pbkdf "^1.0.0" 1624 | dashdash "^1.12.0" 1625 | ecc-jsbn "~0.1.1" 1626 | getpass "^0.1.1" 1627 | jsbn "~0.1.0" 1628 | safer-buffer "^2.0.2" 1629 | tweetnacl "~0.14.0" 1630 | 1631 | stack-utils@^1.0.2: 1632 | version "1.0.2" 1633 | resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-1.0.2.tgz#33eba3897788558bebfc2db059dc158ec36cebb8" 1634 | integrity sha512-MTX+MeG5U994cazkjd/9KNAapsHnibjMLnfXodlkXw76JEea0UiNzrqidzo1emMwk7w5Qhc9jd4Bn9TBb1MFwA== 1635 | 1636 | string-width@^3.0.0, string-width@^3.1.0: 1637 | version "3.1.0" 1638 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" 1639 | integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== 1640 | dependencies: 1641 | emoji-regex "^7.0.1" 1642 | is-fullwidth-code-point "^2.0.0" 1643 | strip-ansi "^5.1.0" 1644 | 1645 | string_decoder@~0.10.x: 1646 | version "0.10.31" 1647 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" 1648 | integrity sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ= 1649 | 1650 | string_decoder@~1.0.0: 1651 | version "1.0.3" 1652 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.0.3.tgz#0fc67d7c141825de94282dd536bec6b9bce860ab" 1653 | integrity sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ== 1654 | dependencies: 1655 | safe-buffer "~5.1.0" 1656 | 1657 | string_decoder@~1.1.1: 1658 | version "1.1.1" 1659 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" 1660 | integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== 1661 | dependencies: 1662 | safe-buffer "~5.1.0" 1663 | 1664 | strip-ansi@^3.0.0, strip-ansi@^3.0.1: 1665 | version "3.0.1" 1666 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" 1667 | integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= 1668 | dependencies: 1669 | ansi-regex "^2.0.0" 1670 | 1671 | strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: 1672 | version "5.2.0" 1673 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" 1674 | integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== 1675 | dependencies: 1676 | ansi-regex "^4.1.0" 1677 | 1678 | strip-bom@^3.0.0: 1679 | version "3.0.0" 1680 | resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" 1681 | integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= 1682 | 1683 | supports-color@^2.0.0: 1684 | version "2.0.0" 1685 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" 1686 | integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= 1687 | 1688 | supports-color@^5.3.0: 1689 | version "5.5.0" 1690 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" 1691 | integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== 1692 | dependencies: 1693 | has-flag "^3.0.0" 1694 | 1695 | supports-color@^6.1.0: 1696 | version "6.1.0" 1697 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3" 1698 | integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ== 1699 | dependencies: 1700 | has-flag "^3.0.0" 1701 | 1702 | tap-mocha-reporter@^3.0.9: 1703 | version "3.0.9" 1704 | resolved "https://registry.yarnpkg.com/tap-mocha-reporter/-/tap-mocha-reporter-3.0.9.tgz#ea41e741149a94c278d106cbcccc37fec2dfeeaa" 1705 | integrity sha512-VO07vhC9EG27EZdOe7bWBj1ldbK+DL9TnRadOgdQmiQOVZjFpUEQuuqO7+rNSO2kfmkq5hWeluYXDWNG/ytXTQ== 1706 | dependencies: 1707 | color-support "^1.1.0" 1708 | debug "^2.1.3" 1709 | diff "^1.3.2" 1710 | escape-string-regexp "^1.0.3" 1711 | glob "^7.0.5" 1712 | js-yaml "^3.3.1" 1713 | tap-parser "^5.1.0" 1714 | unicode-length "^1.0.0" 1715 | optionalDependencies: 1716 | readable-stream "^2.1.5" 1717 | 1718 | tap-out@^2.1.0: 1719 | version "2.1.0" 1720 | resolved "https://registry.yarnpkg.com/tap-out/-/tap-out-2.1.0.tgz#c093079a915036de8b835bfa3297f14458b15358" 1721 | integrity sha512-LJE+TBoVbOWhwdz4+FQk40nmbIuxJLqaGvj3WauQw3NYYU5TdjoV3C0x/yq37YAvVyi+oeBXmWnxWSjJ7IEyUw== 1722 | dependencies: 1723 | re-emitter "1.1.3" 1724 | readable-stream "2.2.9" 1725 | split "1.0.0" 1726 | trim "0.0.1" 1727 | 1728 | tap-parser@^5.1.0: 1729 | version "5.4.0" 1730 | resolved "https://registry.yarnpkg.com/tap-parser/-/tap-parser-5.4.0.tgz#6907e89725d7b7fa6ae41ee2c464c3db43188aec" 1731 | integrity sha512-BIsIaGqv7uTQgTW1KLTMNPSEQf4zDDPgYOBRdgOfuB+JFOLRBfEu6cLa/KvMvmqggu1FKXDfitjLwsq4827RvA== 1732 | dependencies: 1733 | events-to-array "^1.0.1" 1734 | js-yaml "^3.2.7" 1735 | optionalDependencies: 1736 | readable-stream "^2" 1737 | 1738 | tap-parser@^7.0.0: 1739 | version "7.0.0" 1740 | resolved "https://registry.yarnpkg.com/tap-parser/-/tap-parser-7.0.0.tgz#54db35302fda2c2ccc21954ad3be22b2cba42721" 1741 | integrity sha512-05G8/LrzqOOFvZhhAk32wsGiPZ1lfUrl+iV7+OkKgfofZxiceZWMHkKmow71YsyVQ8IvGBP2EjcIjE5gL4l5lA== 1742 | dependencies: 1743 | events-to-array "^1.0.1" 1744 | js-yaml "^3.2.7" 1745 | minipass "^2.2.0" 1746 | 1747 | tap-spec@^5.0.0: 1748 | version "5.0.0" 1749 | resolved "https://registry.yarnpkg.com/tap-spec/-/tap-spec-5.0.0.tgz#7329e4e66e8aa68da2a164215abbb903a7c5d352" 1750 | integrity sha512-zMDVJiE5I6Y4XGjlueGXJIX2YIkbDN44broZlnypT38Hj/czfOXrszHNNJBF/DXR8n+x6gbfSx68x04kIEHdrw== 1751 | dependencies: 1752 | chalk "^1.0.0" 1753 | duplexer "^0.1.1" 1754 | figures "^1.4.0" 1755 | lodash "^4.17.10" 1756 | pretty-ms "^2.1.0" 1757 | repeat-string "^1.5.2" 1758 | tap-out "^2.1.0" 1759 | through2 "^2.0.0" 1760 | 1761 | tap@^12.0.0: 1762 | version "12.7.0" 1763 | resolved "https://registry.yarnpkg.com/tap/-/tap-12.7.0.tgz#6e0c40eb7ec1347a9311aa3ce9dee098dc41b566" 1764 | integrity sha512-SjglJmRv0pqrQQ7d5ZBEY8ZOqv3nYDBXEX51oyycOH7piuhn82JKT/yDNewwmOsodTD/RZL9MccA96EjDgK+Eg== 1765 | dependencies: 1766 | bind-obj-methods "^2.0.0" 1767 | browser-process-hrtime "^1.0.0" 1768 | capture-stack-trace "^1.0.0" 1769 | clean-yaml-object "^0.1.0" 1770 | color-support "^1.1.0" 1771 | coveralls "^3.0.2" 1772 | domain-browser "^1.2.0" 1773 | esm "^3.2.5" 1774 | foreground-child "^1.3.3" 1775 | fs-exists-cached "^1.0.0" 1776 | function-loop "^1.0.1" 1777 | glob "^7.1.3" 1778 | isexe "^2.0.0" 1779 | js-yaml "^3.13.1" 1780 | minipass "^2.3.5" 1781 | mkdirp "^0.5.1" 1782 | nyc "^14.0.0" 1783 | opener "^1.5.1" 1784 | os-homedir "^1.0.2" 1785 | own-or "^1.0.0" 1786 | own-or-env "^1.0.1" 1787 | rimraf "^2.6.3" 1788 | signal-exit "^3.0.0" 1789 | source-map-support "^0.5.10" 1790 | stack-utils "^1.0.2" 1791 | tap-mocha-reporter "^3.0.9" 1792 | tap-parser "^7.0.0" 1793 | tmatch "^4.0.0" 1794 | trivial-deferred "^1.0.1" 1795 | ts-node "^8.0.2" 1796 | tsame "^2.0.1" 1797 | typescript "^3.3.3" 1798 | write-file-atomic "^2.4.2" 1799 | yapool "^1.0.0" 1800 | 1801 | test-exclude@^5.2.3: 1802 | version "5.2.3" 1803 | resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-5.2.3.tgz#c3d3e1e311eb7ee405e092dac10aefd09091eac0" 1804 | integrity sha512-M+oxtseCFO3EDtAaGH7iiej3CBkzXqFMbzqYAACdzKui4eZA+pq3tZEwChvOdNfa7xxy8BfbmgJSIr43cC/+2g== 1805 | dependencies: 1806 | glob "^7.1.3" 1807 | minimatch "^3.0.4" 1808 | read-pkg-up "^4.0.0" 1809 | require-main-filename "^2.0.0" 1810 | 1811 | through2@^2.0.0: 1812 | version "2.0.5" 1813 | resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" 1814 | integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== 1815 | dependencies: 1816 | readable-stream "~2.3.6" 1817 | xtend "~4.0.1" 1818 | 1819 | through@2: 1820 | version "2.3.8" 1821 | resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" 1822 | integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= 1823 | 1824 | through@~2.2.7: 1825 | version "2.2.7" 1826 | resolved "https://registry.yarnpkg.com/through/-/through-2.2.7.tgz#6e8e21200191d4eb6a99f6f010df46aa1c6eb2bd" 1827 | integrity sha1-bo4hIAGR1OtqmfbwEN9Gqhxusr0= 1828 | 1829 | tiny-inflate@^1.0.2: 1830 | version "1.0.2" 1831 | resolved "https://registry.yarnpkg.com/tiny-inflate/-/tiny-inflate-1.0.2.tgz#93d9decffc8805bd57eae4310f0b745e9b6fb3a7" 1832 | integrity sha1-k9nez/yIBb1X6uQxDwt0Xptvs6c= 1833 | 1834 | tiny-osmpbf@^0.1.0: 1835 | version "0.1.0" 1836 | resolved "https://registry.yarnpkg.com/tiny-osmpbf/-/tiny-osmpbf-0.1.0.tgz#0a895717113ebe6aae363c4be5eefa8ecdafb927" 1837 | integrity sha1-ColXFxE+vmquNjxL5e76js2vuSc= 1838 | dependencies: 1839 | pbf "^3.0.4" 1840 | tiny-inflate "^1.0.2" 1841 | 1842 | tinyqueue@^2.0.0: 1843 | version "2.0.3" 1844 | resolved "https://registry.yarnpkg.com/tinyqueue/-/tinyqueue-2.0.3.tgz#64d8492ebf39e7801d7bd34062e29b45b2035f08" 1845 | integrity sha512-ppJZNDuKGgxzkHihX8v9v9G5f+18gzaTfrukGrq6ueg0lmH4nqVnA2IPG0AEH3jKEk2GRJCUhDoqpoiw3PHLBA== 1846 | 1847 | tmatch@^4.0.0: 1848 | version "4.0.0" 1849 | resolved "https://registry.yarnpkg.com/tmatch/-/tmatch-4.0.0.tgz#ba178007f30bf6a70f37c643fca5045fb2f8c448" 1850 | integrity sha512-Ynn2Gsp+oCvYScQXeV+cCs7citRDilq0qDXA6tuvFwDgiYyyaq7D5vKUlAPezzZR5NDobc/QMeN6e5guOYmvxg== 1851 | 1852 | to-fast-properties@^2.0.0: 1853 | version "2.0.0" 1854 | resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" 1855 | integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= 1856 | 1857 | to-utf8@0.0.1: 1858 | version "0.0.1" 1859 | resolved "https://registry.yarnpkg.com/to-utf8/-/to-utf8-0.0.1.tgz#d17aea72ff2fba39b9e43601be7b3ff72e089852" 1860 | integrity sha1-0Xrqcv8vujm55DYBvns/9y4ImFI= 1861 | 1862 | tough-cookie@~2.4.3: 1863 | version "2.4.3" 1864 | resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.4.3.tgz#53f36da3f47783b0925afa06ff9f3b165280f781" 1865 | integrity sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ== 1866 | dependencies: 1867 | psl "^1.1.24" 1868 | punycode "^1.4.1" 1869 | 1870 | trim@0.0.1: 1871 | version "0.0.1" 1872 | resolved "https://registry.yarnpkg.com/trim/-/trim-0.0.1.tgz#5858547f6b290757ee95cccc666fb50084c460dd" 1873 | integrity sha1-WFhUf2spB1fulczMZm+1AITEYN0= 1874 | 1875 | trivial-deferred@^1.0.1: 1876 | version "1.0.1" 1877 | resolved "https://registry.yarnpkg.com/trivial-deferred/-/trivial-deferred-1.0.1.tgz#376d4d29d951d6368a6f7a0ae85c2f4d5e0658f3" 1878 | integrity sha1-N21NKdlR1jaKb3oK6FwvTV4GWPM= 1879 | 1880 | ts-node@^8.0.2: 1881 | version "8.4.1" 1882 | resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-8.4.1.tgz#270b0dba16e8723c9fa4f9b4775d3810fd994b4f" 1883 | integrity sha512-5LpRN+mTiCs7lI5EtbXmF/HfMeCjzt7DH9CZwtkr6SywStrNQC723wG+aOWFiLNn7zT3kD/RnFqi3ZUfr4l5Qw== 1884 | dependencies: 1885 | arg "^4.1.0" 1886 | diff "^4.0.1" 1887 | make-error "^1.1.1" 1888 | source-map-support "^0.5.6" 1889 | yn "^3.0.0" 1890 | 1891 | tsame@^2.0.1: 1892 | version "2.0.1" 1893 | resolved "https://registry.yarnpkg.com/tsame/-/tsame-2.0.1.tgz#70410ddbefcd29c61e2d68549b3347b0444d613f" 1894 | integrity sha512-jxyxgKVKa4Bh5dPcO42TJL22lIvfd9LOVJwdovKOnJa4TLLrHxquK+DlGm4rkGmrcur+GRx+x4oW00O2pY/fFw== 1895 | 1896 | tunnel-agent@^0.6.0: 1897 | version "0.6.0" 1898 | resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" 1899 | integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= 1900 | dependencies: 1901 | safe-buffer "^5.0.1" 1902 | 1903 | turf-point@^2.0.1: 1904 | version "2.0.1" 1905 | resolved "https://registry.yarnpkg.com/turf-point/-/turf-point-2.0.1.tgz#a2dcc30a2d20f44cf5c6271df7bae2c0e2146069" 1906 | integrity sha1-otzDCi0g9Ez1xicd97riwOIUYGk= 1907 | dependencies: 1908 | minimist "^1.1.0" 1909 | 1910 | tweetnacl@^0.14.3, tweetnacl@~0.14.0: 1911 | version "0.14.5" 1912 | resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" 1913 | integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= 1914 | 1915 | typescript@^3.3.3: 1916 | version "3.6.3" 1917 | resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.6.3.tgz#fea942fabb20f7e1ca7164ff626f1a9f3f70b4da" 1918 | integrity sha512-N7bceJL1CtRQ2RiG0AQME13ksR7DiuQh/QehubYcghzv20tnh+MQnQIuJddTmsbqYj+dztchykemz0zFzlvdQw== 1919 | 1920 | uglify-js@^3.1.4: 1921 | version "3.6.0" 1922 | resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.6.0.tgz#704681345c53a8b2079fb6cec294b05ead242ff5" 1923 | integrity sha512-W+jrUHJr3DXKhrsS7NUVxn3zqMOFn0hL/Ei6v0anCIMoKC93TjcflTagwIHLW7SfMFfiQuktQyFVCFHGUE0+yg== 1924 | dependencies: 1925 | commander "~2.20.0" 1926 | source-map "~0.6.1" 1927 | 1928 | unicode-length@^1.0.0: 1929 | version "1.0.3" 1930 | resolved "https://registry.yarnpkg.com/unicode-length/-/unicode-length-1.0.3.tgz#5ada7a7fed51841a418a328cf149478ac8358abb" 1931 | integrity sha1-Wtp6f+1RhBpBijKM8UlHisg1irs= 1932 | dependencies: 1933 | punycode "^1.3.2" 1934 | strip-ansi "^3.0.1" 1935 | 1936 | uri-js@^4.2.2: 1937 | version "4.2.2" 1938 | resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" 1939 | integrity sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ== 1940 | dependencies: 1941 | punycode "^2.1.0" 1942 | 1943 | util-deprecate@~1.0.1: 1944 | version "1.0.2" 1945 | resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" 1946 | integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= 1947 | 1948 | uuid@^3.3.2: 1949 | version "3.3.3" 1950 | resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.3.tgz#4568f0216e78760ee1dbf3a4d2cf53e224112866" 1951 | integrity sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ== 1952 | 1953 | validate-npm-package-license@^3.0.1: 1954 | version "3.0.4" 1955 | resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" 1956 | integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== 1957 | dependencies: 1958 | spdx-correct "^3.0.0" 1959 | spdx-expression-parse "^3.0.0" 1960 | 1961 | verror@1.10.0: 1962 | version "1.10.0" 1963 | resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" 1964 | integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA= 1965 | dependencies: 1966 | assert-plus "^1.0.0" 1967 | core-util-is "1.0.2" 1968 | extsprintf "^1.2.0" 1969 | 1970 | wgs84@0.0.0: 1971 | version "0.0.0" 1972 | resolved "https://registry.yarnpkg.com/wgs84/-/wgs84-0.0.0.tgz#34fdc555917b6e57cf2a282ed043710c049cdc76" 1973 | integrity sha1-NP3FVZF7blfPKigu0ENxDASc3HY= 1974 | 1975 | which-module@^2.0.0: 1976 | version "2.0.0" 1977 | resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" 1978 | integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= 1979 | 1980 | which@^1.2.9, which@^1.3.0: 1981 | version "1.3.1" 1982 | resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" 1983 | integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== 1984 | dependencies: 1985 | isexe "^2.0.0" 1986 | 1987 | wordwrap@~0.0.2: 1988 | version "0.0.3" 1989 | resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" 1990 | integrity sha1-o9XabNXAvAAI03I0u68b7WMFkQc= 1991 | 1992 | wrap-ansi@^5.1.0: 1993 | version "5.1.0" 1994 | resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09" 1995 | integrity sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q== 1996 | dependencies: 1997 | ansi-styles "^3.2.0" 1998 | string-width "^3.0.0" 1999 | strip-ansi "^5.0.0" 2000 | 2001 | wrappy@1: 2002 | version "1.0.2" 2003 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 2004 | integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= 2005 | 2006 | write-file-atomic@^2.4.2: 2007 | version "2.4.3" 2008 | resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.4.3.tgz#1fd2e9ae1df3e75b8d8c367443c692d4ca81f481" 2009 | integrity sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ== 2010 | dependencies: 2011 | graceful-fs "^4.1.11" 2012 | imurmurhash "^0.1.4" 2013 | signal-exit "^3.0.2" 2014 | 2015 | xmldom@~0.1.16: 2016 | version "0.1.27" 2017 | resolved "https://registry.yarnpkg.com/xmldom/-/xmldom-0.1.27.tgz#d501f97b3bdb403af8ef9ecc20573187aadac0e9" 2018 | integrity sha1-1QH5ezvbQDr4757MIFcxh6rawOk= 2019 | 2020 | xtend@~4.0.1: 2021 | version "4.0.2" 2022 | resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" 2023 | integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== 2024 | 2025 | y18n@^4.0.0: 2026 | version "4.0.0" 2027 | resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" 2028 | integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w== 2029 | 2030 | yallist@^2.1.2: 2031 | version "2.1.2" 2032 | resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" 2033 | integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= 2034 | 2035 | yallist@^3.0.0: 2036 | version "3.1.0" 2037 | resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.0.tgz#906cc2100972dc2625ae78f566a2577230a1d6f7" 2038 | integrity sha512-6gpP93MR+VOOehKbCPchro3wFZNSNmek8A2kbkOAZLIZAYx1KP/zAqwO0sOHi3xJEb+UBz8NaYt/17UNit1Q9w== 2039 | 2040 | yapool@^1.0.0: 2041 | version "1.0.0" 2042 | resolved "https://registry.yarnpkg.com/yapool/-/yapool-1.0.0.tgz#f693f29a315b50d9a9da2646a7a6645c96985b6a" 2043 | integrity sha1-9pPymjFbUNmp2iZGp6ZkXJaYW2o= 2044 | 2045 | yargs-parser@^13.0.0, yargs-parser@^13.1.1: 2046 | version "13.1.1" 2047 | resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.1.tgz#d26058532aa06d365fe091f6a1fc06b2f7e5eca0" 2048 | integrity sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ== 2049 | dependencies: 2050 | camelcase "^5.0.0" 2051 | decamelize "^1.2.0" 2052 | 2053 | yargs@^13.2.2: 2054 | version "13.3.0" 2055 | resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.0.tgz#4c657a55e07e5f2cf947f8a366567c04a0dedc83" 2056 | integrity sha512-2eehun/8ALW8TLoIl7MVaRUrg+yCnenu8B4kBlRxj3GJGDKU1Og7sMXPNm1BYyM1DOJmTZ4YeN/Nwxv+8XJsUA== 2057 | dependencies: 2058 | cliui "^5.0.0" 2059 | find-up "^3.0.0" 2060 | get-caller-file "^2.0.1" 2061 | require-directory "^2.1.1" 2062 | require-main-filename "^2.0.0" 2063 | set-blocking "^2.0.0" 2064 | string-width "^3.0.0" 2065 | which-module "^2.0.0" 2066 | y18n "^4.0.0" 2067 | yargs-parser "^13.1.1" 2068 | 2069 | yn@^3.0.0: 2070 | version "3.1.1" 2071 | resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" 2072 | integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== 2073 | --------------------------------------------------------------------------------