├── .gitignore ├── LICENSE.txt ├── assets ├── annotations │ └── snapshot.png ├── colorScheme.gif ├── lang.gif ├── overlays │ └── snapshot.png ├── poi.gif ├── readme-maps.developer.apple.com-snapshot.png ├── t.gif └── z.gif ├── config.json ├── mapkit-snapshots.js ├── null-island.geojson ├── package-lock.json ├── package.json └── readme.md /.gitignore: -------------------------------------------------------------------------------- 1 | 2 | # Do not commit your secrets 3 | config*.json 4 | *.p8 5 | -------------------------------------------------------------------------------- /LICENSE.txt: -------------------------------------------------------------------------------- 1 | * Original source is found here. 2 | * https://developer.apple.com/documentation/snapshots/generating_a_url_and_signature_to_create_a_maps_web_snapshot 3 | 4 | Copyright © 2019 Apple Inc. 5 | 6 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 7 | 8 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 9 | 10 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 11 | 12 | ----- 13 | 14 | Additions: Ported from the original source example from Apple.com by ePi Rational, Inc. 15 | 16 | Copyright © 2019 ePi Rational, Inc. 17 | 18 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 19 | 20 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 21 | 22 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 23 | -------------------------------------------------------------------------------- /assets/annotations/snapshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/roblabs/apple-maps-web-snapshot-cli/b3299111e95573d2ae8fe4a177c7537bd512799f/assets/annotations/snapshot.png -------------------------------------------------------------------------------- /assets/colorScheme.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/roblabs/apple-maps-web-snapshot-cli/b3299111e95573d2ae8fe4a177c7537bd512799f/assets/colorScheme.gif -------------------------------------------------------------------------------- /assets/lang.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/roblabs/apple-maps-web-snapshot-cli/b3299111e95573d2ae8fe4a177c7537bd512799f/assets/lang.gif -------------------------------------------------------------------------------- /assets/overlays/snapshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/roblabs/apple-maps-web-snapshot-cli/b3299111e95573d2ae8fe4a177c7537bd512799f/assets/overlays/snapshot.png -------------------------------------------------------------------------------- /assets/poi.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/roblabs/apple-maps-web-snapshot-cli/b3299111e95573d2ae8fe4a177c7537bd512799f/assets/poi.gif -------------------------------------------------------------------------------- /assets/readme-maps.developer.apple.com-snapshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/roblabs/apple-maps-web-snapshot-cli/b3299111e95573d2ae8fe4a177c7537bd512799f/assets/readme-maps.developer.apple.com-snapshot.png -------------------------------------------------------------------------------- /assets/t.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/roblabs/apple-maps-web-snapshot-cli/b3299111e95573d2ae8fe4a177c7537bd512799f/assets/t.gif -------------------------------------------------------------------------------- /assets/z.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/roblabs/apple-maps-web-snapshot-cli/b3299111e95573d2ae8fe4a177c7537bd512799f/assets/z.gif -------------------------------------------------------------------------------- /config.json: -------------------------------------------------------------------------------- 1 | { 2 | "teamId": "XXXXXXXXXX", 3 | "keyId": "YYYYYYYYYY" 4 | "privateKey": "AuthKey_YYYYYYYYYY.p8", 5 | } 6 | -------------------------------------------------------------------------------- /mapkit-snapshots.js: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | /** 4 | * Adapted from: 5 | * https://developer.apple.com/documentation/snapshots/generating_a_url_and_signature_to_create_a_maps_web_snapshot 6 | */ 7 | 8 | // MARK: - Requires, Vars 9 | const { readFileSync } = require("fs"); 10 | var fs = require('fs') 11 | const { sign } = require("jwa")("ES256"); // https://www.npmjs.com/package/jwa 12 | const opn = require('better-opn'); // https://www.npmjs.com/package/better-opn 13 | var argv = require('minimist')(process.argv.slice(2)) // parse argument options 14 | var concat = require('concat-stream') 15 | var stdin 16 | var usage = "Usage:\n mapkit-snapshots.js -c config.json # -c pass in privateKey, teamId, keyId\n mapkit-snapshots.js -c config.json -o # -o opens in default browser" 17 | 18 | // Setup an object to write out with some reasonable defaults 19 | var snapshot = {}; 20 | snapshot.config = {} 21 | snapshot.url = {"signature": "", "length": "", "text": ""} 22 | 23 | // Big vars 24 | var annotations = [], encodeAnnotations = []; 25 | var overlays = [], encodeOverlays = []; 26 | var imgs = [], encodeImgs = []; 27 | var signThis; 28 | var openUrl; 29 | var privateKey, teamId, keyId; 30 | 31 | 32 | // MARK: - Process CLI 33 | if (argv.help || argv.h) { 34 | console.log(usage) 35 | process.exit() 36 | } 37 | 38 | // process `config.json` 39 | // -c pass in privateKey, teamId, keyId 40 | /* Read your private key from the file system. (Never add your private key 41 | * in code or in source control. Always keep it secure.) 42 | */ 43 | if (argv.c) { 44 | var config; 45 | 46 | configJson = fs.createReadStream(argv.c) 47 | configJson.pipe( 48 | concat( function (buffer) { 49 | try { 50 | config = JSON.parse(buffer) 51 | 52 | privateKey = readFileSync(config.privateKey); 53 | teamId = config.teamId; 54 | keyId = config.keyId; 55 | 56 | // update snapshot 57 | snapshot.config = config 58 | } catch (e) { 59 | return console.error(e) 60 | } 61 | }) 62 | ); 63 | 64 | } 65 | 66 | // -o opens in default browser 67 | if (argv.o) { 68 | openUrl = true; 69 | } 70 | 71 | if (argv._[0] && argv._[0] !== '-') { 72 | stdin = fs.createReadStream(argv._[0]) 73 | } else if (!process.stdin.isTTY || argv._[0] === '-') { 74 | stdin = process.stdin 75 | } else { 76 | console.log(usage) 77 | process.exit(1) 78 | } 79 | 80 | // MARK: - Process GeoJSON 81 | // Each query parameter must be URL-encoded. 82 | stdin.pipe( 83 | concat( function (buffer) { 84 | try { 85 | var geojson = JSON.parse(buffer) 86 | } catch (e) { 87 | return console.error(e) 88 | } 89 | 90 | geojson.features.forEach(iterateMapKit); 91 | 92 | // images 93 | snapshot.imgs = {}; 94 | if(Object.keys(imgs).length > 0) { 95 | snapshot.imgs = JSON.stringify(imgs); 96 | encodeImgs = encodeURIComponent(JSON.stringify(imgs)); 97 | signThis += `imgs=${encodeImgs}&` 98 | } 99 | 100 | // MARK: annotations 101 | snapshot.annotationData = {}; 102 | if(Object.keys(annotations).length > 0) { 103 | snapshot.annotationData.annotation = JSON.stringify(annotations); 104 | encodeAnnotations = encodeURIComponent(JSON.stringify(annotations)); 105 | snapshot.annotationData.encodeURI = encodeAnnotations; 106 | snapshot.annotationData.annotationCount = annotations.length; 107 | signThis += `annotations=${encodeAnnotations}&` 108 | } 109 | 110 | // overlays 111 | snapshot.overlays = {}; 112 | if(Object.keys(overlays).length > 0) { 113 | snapshot.overlays.overlay = JSON.stringify(overlays); 114 | encodeOverlays = encodeURIComponent(JSON.stringify(overlays)); 115 | snapshot.overlays.encodeURI = encodeOverlays; 116 | signThis += `overlays=${encodeOverlays}&` 117 | } 118 | 119 | try { 120 | console.log() 121 | signIt(geojson.name, signThis) 122 | } catch (e) { 123 | console.error("signIt Error: \n\t*** Please verify the settings in config.json\n") 124 | return console.error(e) 125 | } finally { 126 | } 127 | 128 | }) 129 | ) 130 | 131 | // MARK: - iterateMapKit() 132 | // https://developer.apple.com/documentation/snapshots/create_a_maps_web_snapshot#query-parameters 133 | function iterateMapKit(element, index, array) { 134 | 135 | // Use the first `feature` for setting up parameters that are only used once (center, language, etc) 136 | // TODO: should be moved to FeatureCollection root 137 | if (index === 0) { 138 | // Determine the center point of the static map in this order 139 | // 1. The IMDF property, properties.display_point 140 | // 2. properties.center 141 | // 3. If Point, then use Point 142 | var lat, long; 143 | if ("display_point" in element.properties) { 144 | point = coordinate2point(element.properties.display_point.coordinates) 145 | } else if ('center' in element.properties) { 146 | if (typeof(element.properties.center) === "string") { 147 | // The input property for `center` can be 148 | // A geocoded address is a valid value for the `center` parameter 149 | // "The string `auto` is also a valid value for the `center` parameter 150 | point = encodeURIComponent(element.properties.center) /// TODO: review if we can set precision 151 | } else { 152 | // [long, lat] array of floats, to make it easy to reuse the GeoJSON formatting for points 153 | point = coordinate2point(element.properties.center.coordinates) 154 | } 155 | } else if(element.geometry.type === "Point"){ 156 | // the `center` parameter was not set, fall back to the geometry 157 | point = coordinate2point(element.geometry.coordinates) 158 | } else { 159 | console.error("error: ❌ No center `point` is defined. Please set `properties.display_point` (IMDF style), or `properties.center`") 160 | } 161 | 162 | signThis = `center=${point}&`; 163 | snapshot.center = `${point}`; 164 | 165 | // Handle cases where both `z` &`spn` are present. 166 | // Apple > When both z and spn are provided, spn takes precedence over z. 167 | if ('spn' in element.properties) { 168 | latDegrees = element.properties.spn[0]; 169 | lonDegrees = element.properties.spn[1]; 170 | spn = `${latDegrees},${lonDegrees}`; 171 | signThis += `spn=${spn}&`; 172 | snapshot.spn = spn; 173 | } else if ('z' in element.properties) { 174 | 175 | if(element.properties.z < 3 || element.properties.z > 20) { 176 | element.properties.z = 12 177 | console.error("Out of bounds zoom level; setting to Default\nDefault: 12\nMinimum: 3\nMaximum: 20") 178 | } 179 | signThis += `z=${element.properties.z}&`; 180 | snapshot.z = element.properties.z; 181 | } 182 | 183 | if ('size' in element.properties) { 184 | width = element.properties.size[0]; 185 | height = element.properties.size[1]; 186 | size = `${width}x${height}`; 187 | signThis += `size=${size}&`; 188 | snapshot.size = size; 189 | } 190 | 191 | if ('scale' in element.properties) { 192 | signThis += `scale=${element.properties.scale}&`; 193 | snapshot.scale = element.properties.scale; 194 | } 195 | 196 | if ('t' in element.properties & element.properties.t != "") { 197 | signThis += `t=${element.properties.t}&`; 198 | snapshot.t = element.properties.t; 199 | 200 | if(element.properties.t === "standard" || 201 | element.properties.t === "mutedStandard") { 202 | if ('colorScheme' in element.properties & element.properties.colorScheme != "") { 203 | signThis += `colorScheme=${element.properties.colorScheme}&`; 204 | snapshot.colorScheme = element.properties.colorScheme; 205 | } 206 | } 207 | } 208 | 209 | if ('poi' in element.properties) { 210 | signThis += `poi=${element.properties.poi}&`; 211 | snapshot.poi = element.properties.poi; 212 | } 213 | 214 | if ('lang' in element.properties & element.properties.lang != "") { 215 | signThis += `lang=${element.properties.lang}&`; 216 | snapshot.lang = element.properties.lang; 217 | } 218 | 219 | if ('referer' in element.properties & element.properties.referer != "") { 220 | signThis += `referer=${element.properties.referer}&`; 221 | snapshot.referer = element.properties.referer; 222 | } 223 | 224 | if ('expires' in element.properties) { 225 | signThis += `expires=${element.properties.expires}&`; 226 | snapshot.expires = element.properties.expires; 227 | } 228 | } 229 | 230 | // MARK: - annotations 231 | // creates: [Annotation] 232 | if (element.properties.annotation) { 233 | 234 | // creates: [Image], An array of custom images to annotate the map, specified as an array of JSON Image objects. 235 | if (element.properties.imgs) { 236 | imgs = element.properties.imgs 237 | } 238 | 239 | if (element.geometry.type === "MultiPoint") { 240 | for (var mp = 0; mp < element.geometry.coordinates.length; mp++) { 241 | 242 | annotation = element.properties.annotation[mp] 243 | lat = element.geometry.coordinates[mp][1] 244 | long = element.geometry.coordinates[mp][0] 245 | point = `${lat},${long}` 246 | annotation.point = point 247 | 248 | // remove unused parameters to make the URL smaller 249 | if(annotation.offset === "0,0") { 250 | delete annotation.offset 251 | } 252 | 253 | if(annotation.glyphText === "") { 254 | delete annotation.glyphText 255 | } 256 | 257 | if(annotation.markerStyle === "dot") { 258 | delete annotation.glyphText 259 | } 260 | 261 | if(annotation.markerStyle === "img") { 262 | delete annotation.color 263 | delete annotation.glyphText 264 | } else { 265 | // remove unused that are related to `img` 266 | delete annotation.imgIdx 267 | delete annotation.offset 268 | } 269 | 270 | // set the annotation 271 | annotations.push(annotation) 272 | snapshot.annotationSource = element.geometry.type; 273 | annotation = {} 274 | } 275 | } // if MultiPoint 276 | 277 | // TODO: if no points use `img`, then remove the `image` array 278 | } // if annotation 279 | 280 | // MARK: - overlays 281 | // creates: [Overlay] 282 | if (element.properties.hasOwnProperty("overlay")) { 283 | points = []; 284 | 285 | // Iterate over each Point in the LineString in the `overlay` 286 | for (let coord = 0; coord < element.properties.overlay.geometry.coordinates.length; coord++) { 287 | points.push(coordinate2point(element.properties.overlay.geometry.coordinates[coord])); 288 | } 289 | 290 | // An array of overlays to be displayed on the map, specified as an array of JSON Overlay objects. 291 | overlays.push({ 292 | "points": points, 293 | "strokeColor": element.properties.overlay.style.strokeColor, 294 | "lineWidth": element.properties.overlay.style.lineWidth, 295 | "lineDash": element.properties.overlay.style.lineDash 296 | }); 297 | } // If `overlay` exists 298 | } // iterateMapKit 299 | 300 | // MARK: - signIt(name, params) 301 | // Creates the signature string and returns the full Snapshot request URL including the signature. 302 | function signIt(name, params) { 303 | var mapkitServer = `https://snapshot.apple-mapkit.com` 304 | var snapshotPath = `/api/v1/snapshot?${params}`; // snapshotPath is assumed to have the trailing '&' 305 | var completePath = `${snapshotPath}teamId=${teamId}&keyId=${keyId}`; 306 | const signature = sign(completePath, privateKey); 307 | 308 | // Append the signature to the end of the request URL, and return. 309 | url = `${mapkitServer}${completePath}&signature=${signature}` 310 | 311 | snapshot.url.text = url; 312 | snapshot.url.exec = "imagefrom " + name + " \"" + url + "\""; 313 | snapshot.url.signature = signature; 314 | snapshot.url.length = url.length; 315 | 316 | console.log(JSON.stringify(snapshot, null, 2)); 317 | 318 | // Optionally open the result in the default browser using `opn` 319 | if(openUrl) { 320 | opn(snapshot.url.text); 321 | } 322 | 323 | return url; 324 | } 325 | 326 | // Return a GeoJSON Coordinate as a string in "lat,long" format 327 | function coordinate2point(coordinate) { 328 | lat = coordinate[1]; 329 | long = coordinate[0]; 330 | point = `${lat},${long}`; 331 | 332 | return point 333 | } 334 | -------------------------------------------------------------------------------- /null-island.geojson: -------------------------------------------------------------------------------- 1 | { 2 | "type": "FeatureCollection", 3 | "features": [ 4 | { 5 | "type": "Feature", 6 | "properties": { 7 | "center": [20, 20], 8 | "display_point": { 9 | "type": "Point","coordinates": [10,10] 10 | }, 11 | "z": 2, 12 | "spn": [1.0, 1.0], 13 | "size": [600, 400], 14 | "scale": 1, 15 | "t": "mutedStandard", 16 | "colorScheme": "dark", 17 | "poi": 1, 18 | "lang": "en-US", 19 | "referer": "", 20 | "expires": 3155673601 21 | }, 22 | "geometry": { 23 | "type": "Point", 24 | "coordinates": [0,0] 25 | } 26 | } 27 | ] 28 | } 29 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "apple-maps-web-snapshot-cli", 3 | "version": "1.0.2", 4 | "lockfileVersion": 2, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "version": "1.0.2", 9 | "license": "SEE LICENSE IN LICENSE.txt", 10 | "dependencies": { 11 | "@mapbox/polyline": "^1.1.1", 12 | "better-opn": "^1.0.0", 13 | "concat-stream": "^2.0.0", 14 | "fs": "0.0.1-security", 15 | "jsonwebtoken": "^9.0.0", 16 | "jwa": "^1.4.1", 17 | "minimist": "^1.2.6", 18 | "open": "^7.0.0", 19 | "opn": "^6.0.0" 20 | }, 21 | "bin": { 22 | "mapkit-snapshots": "mapkit-snapshots.js" 23 | } 24 | }, 25 | "node_modules/@babel/code-frame": { 26 | "version": "7.12.13", 27 | "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", 28 | "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", 29 | "dependencies": { 30 | "@babel/highlight": "^7.12.13" 31 | } 32 | }, 33 | "node_modules/@babel/helper-validator-identifier": { 34 | "version": "7.14.0", 35 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.0.tgz", 36 | "integrity": "sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A==" 37 | }, 38 | "node_modules/@babel/highlight": { 39 | "version": "7.14.0", 40 | "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.0.tgz", 41 | "integrity": "sha512-YSCOwxvTYEIMSGaBQb5kDDsCopDdiUGsqpatp3fOlI4+2HQSkTmEVWnVuySdAC5EWCqSWWTv0ib63RjR7dTBdg==", 42 | "dependencies": { 43 | "@babel/helper-validator-identifier": "^7.14.0", 44 | "chalk": "^2.0.0", 45 | "js-tokens": "^4.0.0" 46 | } 47 | }, 48 | "node_modules/@mapbox/polyline": { 49 | "version": "1.1.1", 50 | "resolved": "https://registry.npmjs.org/@mapbox/polyline/-/polyline-1.1.1.tgz", 51 | "integrity": "sha512-z9Sl7NYzsEIrAza658H92mc0OvpBjQwjp7Snv4xREKhsCMat7m1IKdWJMjQ5opiPYa0veMf7kCaSd1yx55AhmQ==", 52 | "dependencies": { 53 | "meow": "^6.1.1" 54 | }, 55 | "bin": { 56 | "polyline": "bin/polyline.bin.js" 57 | }, 58 | "engines": { 59 | "node": "*" 60 | } 61 | }, 62 | "node_modules/@types/minimist": { 63 | "version": "1.2.1", 64 | "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.1.tgz", 65 | "integrity": "sha512-fZQQafSREFyuZcdWFAExYjBiCL7AUCdgsk80iO0q4yihYYdcIiH28CcuPTGFgLOCC8RlW49GSQxdHwZP+I7CNg==" 66 | }, 67 | "node_modules/@types/normalize-package-data": { 68 | "version": "2.4.0", 69 | "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz", 70 | "integrity": "sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA==" 71 | }, 72 | "node_modules/ansi-styles": { 73 | "version": "3.2.1", 74 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", 75 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", 76 | "dependencies": { 77 | "color-convert": "^1.9.0" 78 | }, 79 | "engines": { 80 | "node": ">=4" 81 | } 82 | }, 83 | "node_modules/arrify": { 84 | "version": "1.0.1", 85 | "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", 86 | "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", 87 | "engines": { 88 | "node": ">=0.10.0" 89 | } 90 | }, 91 | "node_modules/better-opn": { 92 | "version": "1.0.0", 93 | "resolved": "https://registry.npmjs.org/better-opn/-/better-opn-1.0.0.tgz", 94 | "integrity": "sha512-q3eO2se4sFbTERB1dFBDdjTiIIpRohMErpwBX21lhPvmgmQNNrcQj0zbWRhMREDesJvyod9kxBS3kOtdAvkB/A==", 95 | "dependencies": { 96 | "open": "^6.4.0" 97 | }, 98 | "engines": { 99 | "node": ">8.0.0" 100 | } 101 | }, 102 | "node_modules/better-opn/node_modules/open": { 103 | "version": "6.4.0", 104 | "resolved": "https://registry.npmjs.org/open/-/open-6.4.0.tgz", 105 | "integrity": "sha512-IFenVPgF70fSm1keSd2iDBIDIBZkroLeuffXq+wKTzTJlBpesFWojV9lb8mzOfaAzM1sr7HQHuO0vtV0zYekGg==", 106 | "dependencies": { 107 | "is-wsl": "^1.1.0" 108 | }, 109 | "engines": { 110 | "node": ">=8" 111 | } 112 | }, 113 | "node_modules/buffer-equal-constant-time": { 114 | "version": "1.0.1", 115 | "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", 116 | "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=" 117 | }, 118 | "node_modules/buffer-from": { 119 | "version": "1.1.1", 120 | "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", 121 | "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" 122 | }, 123 | "node_modules/camelcase": { 124 | "version": "5.3.1", 125 | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", 126 | "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", 127 | "engines": { 128 | "node": ">=6" 129 | } 130 | }, 131 | "node_modules/camelcase-keys": { 132 | "version": "6.2.2", 133 | "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", 134 | "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", 135 | "dependencies": { 136 | "camelcase": "^5.3.1", 137 | "map-obj": "^4.0.0", 138 | "quick-lru": "^4.0.1" 139 | }, 140 | "engines": { 141 | "node": ">=8" 142 | }, 143 | "funding": { 144 | "url": "https://github.com/sponsors/sindresorhus" 145 | } 146 | }, 147 | "node_modules/chalk": { 148 | "version": "2.4.2", 149 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", 150 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", 151 | "dependencies": { 152 | "ansi-styles": "^3.2.1", 153 | "escape-string-regexp": "^1.0.5", 154 | "supports-color": "^5.3.0" 155 | }, 156 | "engines": { 157 | "node": ">=4" 158 | } 159 | }, 160 | "node_modules/color-convert": { 161 | "version": "1.9.3", 162 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", 163 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", 164 | "dependencies": { 165 | "color-name": "1.1.3" 166 | } 167 | }, 168 | "node_modules/color-name": { 169 | "version": "1.1.3", 170 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", 171 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" 172 | }, 173 | "node_modules/concat-stream": { 174 | "version": "2.0.0", 175 | "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz", 176 | "integrity": "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==", 177 | "engines": [ 178 | "node >= 6.0" 179 | ], 180 | "dependencies": { 181 | "buffer-from": "^1.0.0", 182 | "inherits": "^2.0.3", 183 | "readable-stream": "^3.0.2", 184 | "typedarray": "^0.0.6" 185 | } 186 | }, 187 | "node_modules/decamelize": { 188 | "version": "1.2.0", 189 | "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", 190 | "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", 191 | "engines": { 192 | "node": ">=0.10.0" 193 | } 194 | }, 195 | "node_modules/decamelize-keys": { 196 | "version": "1.1.0", 197 | "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz", 198 | "integrity": "sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk=", 199 | "dependencies": { 200 | "decamelize": "^1.1.0", 201 | "map-obj": "^1.0.0" 202 | }, 203 | "engines": { 204 | "node": ">=0.10.0" 205 | } 206 | }, 207 | "node_modules/decamelize-keys/node_modules/map-obj": { 208 | "version": "1.0.1", 209 | "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", 210 | "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", 211 | "engines": { 212 | "node": ">=0.10.0" 213 | } 214 | }, 215 | "node_modules/ecdsa-sig-formatter": { 216 | "version": "1.0.11", 217 | "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", 218 | "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", 219 | "dependencies": { 220 | "safe-buffer": "^5.0.1" 221 | } 222 | }, 223 | "node_modules/error-ex": { 224 | "version": "1.3.2", 225 | "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", 226 | "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", 227 | "dependencies": { 228 | "is-arrayish": "^0.2.1" 229 | } 230 | }, 231 | "node_modules/escape-string-regexp": { 232 | "version": "1.0.5", 233 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 234 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", 235 | "engines": { 236 | "node": ">=0.8.0" 237 | } 238 | }, 239 | "node_modules/find-up": { 240 | "version": "4.1.0", 241 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", 242 | "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", 243 | "dependencies": { 244 | "locate-path": "^5.0.0", 245 | "path-exists": "^4.0.0" 246 | }, 247 | "engines": { 248 | "node": ">=8" 249 | } 250 | }, 251 | "node_modules/fs": { 252 | "version": "0.0.1-security", 253 | "resolved": "https://registry.npmjs.org/fs/-/fs-0.0.1-security.tgz", 254 | "integrity": "sha1-invTcYa23d84E/I4WLV+yq9eQdQ=" 255 | }, 256 | "node_modules/function-bind": { 257 | "version": "1.1.1", 258 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 259 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" 260 | }, 261 | "node_modules/hard-rejection": { 262 | "version": "2.1.0", 263 | "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", 264 | "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", 265 | "engines": { 266 | "node": ">=6" 267 | } 268 | }, 269 | "node_modules/has": { 270 | "version": "1.0.3", 271 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 272 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 273 | "dependencies": { 274 | "function-bind": "^1.1.1" 275 | }, 276 | "engines": { 277 | "node": ">= 0.4.0" 278 | } 279 | }, 280 | "node_modules/has-flag": { 281 | "version": "3.0.0", 282 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", 283 | "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", 284 | "engines": { 285 | "node": ">=4" 286 | } 287 | }, 288 | "node_modules/hosted-git-info": { 289 | "version": "2.8.9", 290 | "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", 291 | "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==" 292 | }, 293 | "node_modules/indent-string": { 294 | "version": "4.0.0", 295 | "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", 296 | "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", 297 | "engines": { 298 | "node": ">=8" 299 | } 300 | }, 301 | "node_modules/inherits": { 302 | "version": "2.0.4", 303 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 304 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" 305 | }, 306 | "node_modules/is-arrayish": { 307 | "version": "0.2.1", 308 | "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", 309 | "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" 310 | }, 311 | "node_modules/is-core-module": { 312 | "version": "2.4.0", 313 | "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.4.0.tgz", 314 | "integrity": "sha512-6A2fkfq1rfeQZjxrZJGerpLCTHRNEBiSgnu0+obeJpEPZRUooHgsizvzv0ZjJwOz3iWIHdJtVWJ/tmPr3D21/A==", 315 | "dependencies": { 316 | "has": "^1.0.3" 317 | }, 318 | "funding": { 319 | "url": "https://github.com/sponsors/ljharb" 320 | } 321 | }, 322 | "node_modules/is-plain-obj": { 323 | "version": "1.1.0", 324 | "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", 325 | "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", 326 | "engines": { 327 | "node": ">=0.10.0" 328 | } 329 | }, 330 | "node_modules/is-wsl": { 331 | "version": "1.1.0", 332 | "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", 333 | "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", 334 | "engines": { 335 | "node": ">=4" 336 | } 337 | }, 338 | "node_modules/js-tokens": { 339 | "version": "4.0.0", 340 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", 341 | "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" 342 | }, 343 | "node_modules/json-parse-even-better-errors": { 344 | "version": "2.3.1", 345 | "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", 346 | "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" 347 | }, 348 | "node_modules/jsonwebtoken": { 349 | "version": "9.0.0", 350 | "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.0.tgz", 351 | "integrity": "sha512-tuGfYXxkQGDPnLJ7SibiQgVgeDgfbPq2k2ICcbgqW8WxWLBAxKQM/ZCu/IT8SOSwmaYl4dpTFCW5xZv7YbbWUw==", 352 | "dependencies": { 353 | "jws": "^3.2.2", 354 | "lodash": "^4.17.21", 355 | "ms": "^2.1.1", 356 | "semver": "^7.3.8" 357 | }, 358 | "engines": { 359 | "node": ">=12", 360 | "npm": ">=6" 361 | } 362 | }, 363 | "node_modules/jsonwebtoken/node_modules/semver": { 364 | "version": "7.3.8", 365 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", 366 | "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", 367 | "dependencies": { 368 | "lru-cache": "^6.0.0" 369 | }, 370 | "bin": { 371 | "semver": "bin/semver.js" 372 | }, 373 | "engines": { 374 | "node": ">=10" 375 | } 376 | }, 377 | "node_modules/jwa": { 378 | "version": "1.4.1", 379 | "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", 380 | "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", 381 | "dependencies": { 382 | "buffer-equal-constant-time": "1.0.1", 383 | "ecdsa-sig-formatter": "1.0.11", 384 | "safe-buffer": "^5.0.1" 385 | } 386 | }, 387 | "node_modules/jws": { 388 | "version": "3.2.2", 389 | "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", 390 | "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", 391 | "dependencies": { 392 | "jwa": "^1.4.1", 393 | "safe-buffer": "^5.0.1" 394 | } 395 | }, 396 | "node_modules/kind-of": { 397 | "version": "6.0.3", 398 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", 399 | "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", 400 | "engines": { 401 | "node": ">=0.10.0" 402 | } 403 | }, 404 | "node_modules/lines-and-columns": { 405 | "version": "1.1.6", 406 | "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", 407 | "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=" 408 | }, 409 | "node_modules/locate-path": { 410 | "version": "5.0.0", 411 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", 412 | "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", 413 | "dependencies": { 414 | "p-locate": "^4.1.0" 415 | }, 416 | "engines": { 417 | "node": ">=8" 418 | } 419 | }, 420 | "node_modules/lodash": { 421 | "version": "4.17.21", 422 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", 423 | "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" 424 | }, 425 | "node_modules/lru-cache": { 426 | "version": "6.0.0", 427 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", 428 | "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", 429 | "dependencies": { 430 | "yallist": "^4.0.0" 431 | }, 432 | "engines": { 433 | "node": ">=10" 434 | } 435 | }, 436 | "node_modules/map-obj": { 437 | "version": "4.2.1", 438 | "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.2.1.tgz", 439 | "integrity": "sha512-+WA2/1sPmDj1dlvvJmB5G6JKfY9dpn7EVBUL06+y6PoljPkh+6V1QihwxNkbcGxCRjt2b0F9K0taiCuo7MbdFQ==", 440 | "engines": { 441 | "node": ">=8" 442 | }, 443 | "funding": { 444 | "url": "https://github.com/sponsors/sindresorhus" 445 | } 446 | }, 447 | "node_modules/meow": { 448 | "version": "6.1.1", 449 | "resolved": "https://registry.npmjs.org/meow/-/meow-6.1.1.tgz", 450 | "integrity": "sha512-3YffViIt2QWgTy6Pale5QpopX/IvU3LPL03jOTqp6pGj3VjesdO/U8CuHMKpnQr4shCNCM5fd5XFFvIIl6JBHg==", 451 | "dependencies": { 452 | "@types/minimist": "^1.2.0", 453 | "camelcase-keys": "^6.2.2", 454 | "decamelize-keys": "^1.1.0", 455 | "hard-rejection": "^2.1.0", 456 | "minimist-options": "^4.0.2", 457 | "normalize-package-data": "^2.5.0", 458 | "read-pkg-up": "^7.0.1", 459 | "redent": "^3.0.0", 460 | "trim-newlines": "^3.0.0", 461 | "type-fest": "^0.13.1", 462 | "yargs-parser": "^18.1.3" 463 | }, 464 | "engines": { 465 | "node": ">=8" 466 | }, 467 | "funding": { 468 | "url": "https://github.com/sponsors/sindresorhus" 469 | } 470 | }, 471 | "node_modules/min-indent": { 472 | "version": "1.0.1", 473 | "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", 474 | "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", 475 | "engines": { 476 | "node": ">=4" 477 | } 478 | }, 479 | "node_modules/minimist": { 480 | "version": "1.2.6", 481 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", 482 | "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" 483 | }, 484 | "node_modules/minimist-options": { 485 | "version": "4.1.0", 486 | "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", 487 | "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", 488 | "dependencies": { 489 | "arrify": "^1.0.1", 490 | "is-plain-obj": "^1.1.0", 491 | "kind-of": "^6.0.3" 492 | }, 493 | "engines": { 494 | "node": ">= 6" 495 | } 496 | }, 497 | "node_modules/ms": { 498 | "version": "2.1.3", 499 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 500 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" 501 | }, 502 | "node_modules/normalize-package-data": { 503 | "version": "2.5.0", 504 | "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", 505 | "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", 506 | "dependencies": { 507 | "hosted-git-info": "^2.1.4", 508 | "resolve": "^1.10.0", 509 | "semver": "2 || 3 || 4 || 5", 510 | "validate-npm-package-license": "^3.0.1" 511 | } 512 | }, 513 | "node_modules/open": { 514 | "version": "7.0.0", 515 | "resolved": "https://registry.npmjs.org/open/-/open-7.0.0.tgz", 516 | "integrity": "sha512-K6EKzYqnwQzk+/dzJAQSBORub3xlBTxMz+ntpZpH/LyCa1o6KjXhuN+2npAaI9jaSmU3R1Q8NWf4KUWcyytGsQ==", 517 | "dependencies": { 518 | "is-wsl": "^2.1.0" 519 | }, 520 | "engines": { 521 | "node": ">=8" 522 | } 523 | }, 524 | "node_modules/open/node_modules/is-wsl": { 525 | "version": "2.1.1", 526 | "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.1.1.tgz", 527 | "integrity": "sha512-umZHcSrwlDHo2TGMXv0DZ8dIUGunZ2Iv68YZnrmCiBPkZ4aaOhtv7pXJKeki9k3qJ3RJr0cDyitcl5wEH3AYog==", 528 | "engines": { 529 | "node": ">=8" 530 | } 531 | }, 532 | "node_modules/opn": { 533 | "version": "6.0.0", 534 | "resolved": "https://registry.npmjs.org/opn/-/opn-6.0.0.tgz", 535 | "integrity": "sha512-I9PKfIZC+e4RXZ/qr1RhgyCnGgYX0UEIlXgWnCOVACIvFgaC9rz6Won7xbdhoHrd8IIhV7YEpHjreNUNkqCGkQ==", 536 | "dependencies": { 537 | "is-wsl": "^1.1.0" 538 | }, 539 | "engines": { 540 | "node": ">=8" 541 | } 542 | }, 543 | "node_modules/p-limit": { 544 | "version": "2.3.0", 545 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", 546 | "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", 547 | "dependencies": { 548 | "p-try": "^2.0.0" 549 | }, 550 | "engines": { 551 | "node": ">=6" 552 | }, 553 | "funding": { 554 | "url": "https://github.com/sponsors/sindresorhus" 555 | } 556 | }, 557 | "node_modules/p-locate": { 558 | "version": "4.1.0", 559 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", 560 | "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", 561 | "dependencies": { 562 | "p-limit": "^2.2.0" 563 | }, 564 | "engines": { 565 | "node": ">=8" 566 | } 567 | }, 568 | "node_modules/p-try": { 569 | "version": "2.2.0", 570 | "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", 571 | "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", 572 | "engines": { 573 | "node": ">=6" 574 | } 575 | }, 576 | "node_modules/parse-json": { 577 | "version": "5.2.0", 578 | "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", 579 | "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", 580 | "dependencies": { 581 | "@babel/code-frame": "^7.0.0", 582 | "error-ex": "^1.3.1", 583 | "json-parse-even-better-errors": "^2.3.0", 584 | "lines-and-columns": "^1.1.6" 585 | }, 586 | "engines": { 587 | "node": ">=8" 588 | }, 589 | "funding": { 590 | "url": "https://github.com/sponsors/sindresorhus" 591 | } 592 | }, 593 | "node_modules/path-exists": { 594 | "version": "4.0.0", 595 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", 596 | "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", 597 | "engines": { 598 | "node": ">=8" 599 | } 600 | }, 601 | "node_modules/path-parse": { 602 | "version": "1.0.7", 603 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", 604 | "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" 605 | }, 606 | "node_modules/quick-lru": { 607 | "version": "4.0.1", 608 | "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", 609 | "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", 610 | "engines": { 611 | "node": ">=8" 612 | } 613 | }, 614 | "node_modules/read-pkg": { 615 | "version": "5.2.0", 616 | "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", 617 | "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", 618 | "dependencies": { 619 | "@types/normalize-package-data": "^2.4.0", 620 | "normalize-package-data": "^2.5.0", 621 | "parse-json": "^5.0.0", 622 | "type-fest": "^0.6.0" 623 | }, 624 | "engines": { 625 | "node": ">=8" 626 | } 627 | }, 628 | "node_modules/read-pkg-up": { 629 | "version": "7.0.1", 630 | "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", 631 | "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", 632 | "dependencies": { 633 | "find-up": "^4.1.0", 634 | "read-pkg": "^5.2.0", 635 | "type-fest": "^0.8.1" 636 | }, 637 | "engines": { 638 | "node": ">=8" 639 | }, 640 | "funding": { 641 | "url": "https://github.com/sponsors/sindresorhus" 642 | } 643 | }, 644 | "node_modules/read-pkg-up/node_modules/type-fest": { 645 | "version": "0.8.1", 646 | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", 647 | "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", 648 | "engines": { 649 | "node": ">=8" 650 | } 651 | }, 652 | "node_modules/read-pkg/node_modules/type-fest": { 653 | "version": "0.6.0", 654 | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", 655 | "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", 656 | "engines": { 657 | "node": ">=8" 658 | } 659 | }, 660 | "node_modules/readable-stream": { 661 | "version": "3.6.0", 662 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", 663 | "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", 664 | "dependencies": { 665 | "inherits": "^2.0.3", 666 | "string_decoder": "^1.1.1", 667 | "util-deprecate": "^1.0.1" 668 | }, 669 | "engines": { 670 | "node": ">= 6" 671 | } 672 | }, 673 | "node_modules/redent": { 674 | "version": "3.0.0", 675 | "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", 676 | "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", 677 | "dependencies": { 678 | "indent-string": "^4.0.0", 679 | "strip-indent": "^3.0.0" 680 | }, 681 | "engines": { 682 | "node": ">=8" 683 | } 684 | }, 685 | "node_modules/resolve": { 686 | "version": "1.20.0", 687 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", 688 | "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", 689 | "dependencies": { 690 | "is-core-module": "^2.2.0", 691 | "path-parse": "^1.0.6" 692 | }, 693 | "funding": { 694 | "url": "https://github.com/sponsors/ljharb" 695 | } 696 | }, 697 | "node_modules/safe-buffer": { 698 | "version": "5.2.0", 699 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz", 700 | "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==" 701 | }, 702 | "node_modules/semver": { 703 | "version": "5.7.1", 704 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", 705 | "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", 706 | "bin": { 707 | "semver": "bin/semver" 708 | } 709 | }, 710 | "node_modules/spdx-correct": { 711 | "version": "3.1.1", 712 | "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", 713 | "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", 714 | "dependencies": { 715 | "spdx-expression-parse": "^3.0.0", 716 | "spdx-license-ids": "^3.0.0" 717 | } 718 | }, 719 | "node_modules/spdx-exceptions": { 720 | "version": "2.3.0", 721 | "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", 722 | "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==" 723 | }, 724 | "node_modules/spdx-expression-parse": { 725 | "version": "3.0.1", 726 | "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", 727 | "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", 728 | "dependencies": { 729 | "spdx-exceptions": "^2.1.0", 730 | "spdx-license-ids": "^3.0.0" 731 | } 732 | }, 733 | "node_modules/spdx-license-ids": { 734 | "version": "3.0.8", 735 | "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.8.tgz", 736 | "integrity": "sha512-NDgA96EnaLSvtbM7trJj+t1LUR3pirkDCcz9nOUlPb5DMBGsH7oES6C3hs3j7R9oHEa1EMvReS/BUAIT5Tcr0g==" 737 | }, 738 | "node_modules/string_decoder": { 739 | "version": "1.3.0", 740 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", 741 | "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", 742 | "dependencies": { 743 | "safe-buffer": "~5.2.0" 744 | } 745 | }, 746 | "node_modules/strip-indent": { 747 | "version": "3.0.0", 748 | "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", 749 | "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", 750 | "dependencies": { 751 | "min-indent": "^1.0.0" 752 | }, 753 | "engines": { 754 | "node": ">=8" 755 | } 756 | }, 757 | "node_modules/supports-color": { 758 | "version": "5.5.0", 759 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", 760 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", 761 | "dependencies": { 762 | "has-flag": "^3.0.0" 763 | }, 764 | "engines": { 765 | "node": ">=4" 766 | } 767 | }, 768 | "node_modules/trim-newlines": { 769 | "version": "3.0.1", 770 | "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", 771 | "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", 772 | "engines": { 773 | "node": ">=8" 774 | } 775 | }, 776 | "node_modules/type-fest": { 777 | "version": "0.13.1", 778 | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz", 779 | "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==", 780 | "engines": { 781 | "node": ">=10" 782 | }, 783 | "funding": { 784 | "url": "https://github.com/sponsors/sindresorhus" 785 | } 786 | }, 787 | "node_modules/typedarray": { 788 | "version": "0.0.6", 789 | "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", 790 | "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" 791 | }, 792 | "node_modules/util-deprecate": { 793 | "version": "1.0.2", 794 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 795 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" 796 | }, 797 | "node_modules/validate-npm-package-license": { 798 | "version": "3.0.4", 799 | "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", 800 | "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", 801 | "dependencies": { 802 | "spdx-correct": "^3.0.0", 803 | "spdx-expression-parse": "^3.0.0" 804 | } 805 | }, 806 | "node_modules/yallist": { 807 | "version": "4.0.0", 808 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", 809 | "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" 810 | }, 811 | "node_modules/yargs-parser": { 812 | "version": "18.1.3", 813 | "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", 814 | "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", 815 | "dependencies": { 816 | "camelcase": "^5.0.0", 817 | "decamelize": "^1.2.0" 818 | }, 819 | "engines": { 820 | "node": ">=6" 821 | } 822 | } 823 | }, 824 | "dependencies": { 825 | "@babel/code-frame": { 826 | "version": "7.12.13", 827 | "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", 828 | "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", 829 | "requires": { 830 | "@babel/highlight": "^7.12.13" 831 | } 832 | }, 833 | "@babel/helper-validator-identifier": { 834 | "version": "7.14.0", 835 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.0.tgz", 836 | "integrity": "sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A==" 837 | }, 838 | "@babel/highlight": { 839 | "version": "7.14.0", 840 | "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.0.tgz", 841 | "integrity": "sha512-YSCOwxvTYEIMSGaBQb5kDDsCopDdiUGsqpatp3fOlI4+2HQSkTmEVWnVuySdAC5EWCqSWWTv0ib63RjR7dTBdg==", 842 | "requires": { 843 | "@babel/helper-validator-identifier": "^7.14.0", 844 | "chalk": "^2.0.0", 845 | "js-tokens": "^4.0.0" 846 | } 847 | }, 848 | "@mapbox/polyline": { 849 | "version": "1.1.1", 850 | "resolved": "https://registry.npmjs.org/@mapbox/polyline/-/polyline-1.1.1.tgz", 851 | "integrity": "sha512-z9Sl7NYzsEIrAza658H92mc0OvpBjQwjp7Snv4xREKhsCMat7m1IKdWJMjQ5opiPYa0veMf7kCaSd1yx55AhmQ==", 852 | "requires": { 853 | "meow": "^6.1.1" 854 | } 855 | }, 856 | "@types/minimist": { 857 | "version": "1.2.1", 858 | "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.1.tgz", 859 | "integrity": "sha512-fZQQafSREFyuZcdWFAExYjBiCL7AUCdgsk80iO0q4yihYYdcIiH28CcuPTGFgLOCC8RlW49GSQxdHwZP+I7CNg==" 860 | }, 861 | "@types/normalize-package-data": { 862 | "version": "2.4.0", 863 | "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz", 864 | "integrity": "sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA==" 865 | }, 866 | "ansi-styles": { 867 | "version": "3.2.1", 868 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", 869 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", 870 | "requires": { 871 | "color-convert": "^1.9.0" 872 | } 873 | }, 874 | "arrify": { 875 | "version": "1.0.1", 876 | "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", 877 | "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=" 878 | }, 879 | "better-opn": { 880 | "version": "1.0.0", 881 | "resolved": "https://registry.npmjs.org/better-opn/-/better-opn-1.0.0.tgz", 882 | "integrity": "sha512-q3eO2se4sFbTERB1dFBDdjTiIIpRohMErpwBX21lhPvmgmQNNrcQj0zbWRhMREDesJvyod9kxBS3kOtdAvkB/A==", 883 | "requires": { 884 | "open": "^6.4.0" 885 | }, 886 | "dependencies": { 887 | "open": { 888 | "version": "6.4.0", 889 | "resolved": "https://registry.npmjs.org/open/-/open-6.4.0.tgz", 890 | "integrity": "sha512-IFenVPgF70fSm1keSd2iDBIDIBZkroLeuffXq+wKTzTJlBpesFWojV9lb8mzOfaAzM1sr7HQHuO0vtV0zYekGg==", 891 | "requires": { 892 | "is-wsl": "^1.1.0" 893 | } 894 | } 895 | } 896 | }, 897 | "buffer-equal-constant-time": { 898 | "version": "1.0.1", 899 | "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", 900 | "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=" 901 | }, 902 | "buffer-from": { 903 | "version": "1.1.1", 904 | "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", 905 | "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" 906 | }, 907 | "camelcase": { 908 | "version": "5.3.1", 909 | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", 910 | "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" 911 | }, 912 | "camelcase-keys": { 913 | "version": "6.2.2", 914 | "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", 915 | "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", 916 | "requires": { 917 | "camelcase": "^5.3.1", 918 | "map-obj": "^4.0.0", 919 | "quick-lru": "^4.0.1" 920 | } 921 | }, 922 | "chalk": { 923 | "version": "2.4.2", 924 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", 925 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", 926 | "requires": { 927 | "ansi-styles": "^3.2.1", 928 | "escape-string-regexp": "^1.0.5", 929 | "supports-color": "^5.3.0" 930 | } 931 | }, 932 | "color-convert": { 933 | "version": "1.9.3", 934 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", 935 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", 936 | "requires": { 937 | "color-name": "1.1.3" 938 | } 939 | }, 940 | "color-name": { 941 | "version": "1.1.3", 942 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", 943 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" 944 | }, 945 | "concat-stream": { 946 | "version": "2.0.0", 947 | "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz", 948 | "integrity": "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==", 949 | "requires": { 950 | "buffer-from": "^1.0.0", 951 | "inherits": "^2.0.3", 952 | "readable-stream": "^3.0.2", 953 | "typedarray": "^0.0.6" 954 | } 955 | }, 956 | "decamelize": { 957 | "version": "1.2.0", 958 | "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", 959 | "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" 960 | }, 961 | "decamelize-keys": { 962 | "version": "1.1.0", 963 | "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz", 964 | "integrity": "sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk=", 965 | "requires": { 966 | "decamelize": "^1.1.0", 967 | "map-obj": "^1.0.0" 968 | }, 969 | "dependencies": { 970 | "map-obj": { 971 | "version": "1.0.1", 972 | "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", 973 | "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=" 974 | } 975 | } 976 | }, 977 | "ecdsa-sig-formatter": { 978 | "version": "1.0.11", 979 | "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", 980 | "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", 981 | "requires": { 982 | "safe-buffer": "^5.0.1" 983 | } 984 | }, 985 | "error-ex": { 986 | "version": "1.3.2", 987 | "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", 988 | "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", 989 | "requires": { 990 | "is-arrayish": "^0.2.1" 991 | } 992 | }, 993 | "escape-string-regexp": { 994 | "version": "1.0.5", 995 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 996 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" 997 | }, 998 | "find-up": { 999 | "version": "4.1.0", 1000 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", 1001 | "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", 1002 | "requires": { 1003 | "locate-path": "^5.0.0", 1004 | "path-exists": "^4.0.0" 1005 | } 1006 | }, 1007 | "fs": { 1008 | "version": "0.0.1-security", 1009 | "resolved": "https://registry.npmjs.org/fs/-/fs-0.0.1-security.tgz", 1010 | "integrity": "sha1-invTcYa23d84E/I4WLV+yq9eQdQ=" 1011 | }, 1012 | "function-bind": { 1013 | "version": "1.1.1", 1014 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 1015 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" 1016 | }, 1017 | "hard-rejection": { 1018 | "version": "2.1.0", 1019 | "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", 1020 | "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==" 1021 | }, 1022 | "has": { 1023 | "version": "1.0.3", 1024 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 1025 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 1026 | "requires": { 1027 | "function-bind": "^1.1.1" 1028 | } 1029 | }, 1030 | "has-flag": { 1031 | "version": "3.0.0", 1032 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", 1033 | "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" 1034 | }, 1035 | "hosted-git-info": { 1036 | "version": "2.8.9", 1037 | "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", 1038 | "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==" 1039 | }, 1040 | "indent-string": { 1041 | "version": "4.0.0", 1042 | "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", 1043 | "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==" 1044 | }, 1045 | "inherits": { 1046 | "version": "2.0.4", 1047 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 1048 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" 1049 | }, 1050 | "is-arrayish": { 1051 | "version": "0.2.1", 1052 | "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", 1053 | "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" 1054 | }, 1055 | "is-core-module": { 1056 | "version": "2.4.0", 1057 | "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.4.0.tgz", 1058 | "integrity": "sha512-6A2fkfq1rfeQZjxrZJGerpLCTHRNEBiSgnu0+obeJpEPZRUooHgsizvzv0ZjJwOz3iWIHdJtVWJ/tmPr3D21/A==", 1059 | "requires": { 1060 | "has": "^1.0.3" 1061 | } 1062 | }, 1063 | "is-plain-obj": { 1064 | "version": "1.1.0", 1065 | "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", 1066 | "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=" 1067 | }, 1068 | "is-wsl": { 1069 | "version": "1.1.0", 1070 | "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", 1071 | "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=" 1072 | }, 1073 | "js-tokens": { 1074 | "version": "4.0.0", 1075 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", 1076 | "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" 1077 | }, 1078 | "json-parse-even-better-errors": { 1079 | "version": "2.3.1", 1080 | "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", 1081 | "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" 1082 | }, 1083 | "jsonwebtoken": { 1084 | "version": "9.0.0", 1085 | "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.0.tgz", 1086 | "integrity": "sha512-tuGfYXxkQGDPnLJ7SibiQgVgeDgfbPq2k2ICcbgqW8WxWLBAxKQM/ZCu/IT8SOSwmaYl4dpTFCW5xZv7YbbWUw==", 1087 | "requires": { 1088 | "jws": "^3.2.2", 1089 | "lodash": "^4.17.21", 1090 | "ms": "^2.1.1", 1091 | "semver": "^7.3.8" 1092 | }, 1093 | "dependencies": { 1094 | "semver": { 1095 | "version": "7.3.8", 1096 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", 1097 | "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", 1098 | "requires": { 1099 | "lru-cache": "^6.0.0" 1100 | } 1101 | } 1102 | } 1103 | }, 1104 | "jwa": { 1105 | "version": "1.4.1", 1106 | "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", 1107 | "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", 1108 | "requires": { 1109 | "buffer-equal-constant-time": "1.0.1", 1110 | "ecdsa-sig-formatter": "1.0.11", 1111 | "safe-buffer": "^5.0.1" 1112 | } 1113 | }, 1114 | "jws": { 1115 | "version": "3.2.2", 1116 | "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", 1117 | "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", 1118 | "requires": { 1119 | "jwa": "^1.4.1", 1120 | "safe-buffer": "^5.0.1" 1121 | } 1122 | }, 1123 | "kind-of": { 1124 | "version": "6.0.3", 1125 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", 1126 | "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" 1127 | }, 1128 | "lines-and-columns": { 1129 | "version": "1.1.6", 1130 | "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", 1131 | "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=" 1132 | }, 1133 | "locate-path": { 1134 | "version": "5.0.0", 1135 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", 1136 | "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", 1137 | "requires": { 1138 | "p-locate": "^4.1.0" 1139 | } 1140 | }, 1141 | "lodash": { 1142 | "version": "4.17.21", 1143 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", 1144 | "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" 1145 | }, 1146 | "lru-cache": { 1147 | "version": "6.0.0", 1148 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", 1149 | "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", 1150 | "requires": { 1151 | "yallist": "^4.0.0" 1152 | } 1153 | }, 1154 | "map-obj": { 1155 | "version": "4.2.1", 1156 | "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.2.1.tgz", 1157 | "integrity": "sha512-+WA2/1sPmDj1dlvvJmB5G6JKfY9dpn7EVBUL06+y6PoljPkh+6V1QihwxNkbcGxCRjt2b0F9K0taiCuo7MbdFQ==" 1158 | }, 1159 | "meow": { 1160 | "version": "6.1.1", 1161 | "resolved": "https://registry.npmjs.org/meow/-/meow-6.1.1.tgz", 1162 | "integrity": "sha512-3YffViIt2QWgTy6Pale5QpopX/IvU3LPL03jOTqp6pGj3VjesdO/U8CuHMKpnQr4shCNCM5fd5XFFvIIl6JBHg==", 1163 | "requires": { 1164 | "@types/minimist": "^1.2.0", 1165 | "camelcase-keys": "^6.2.2", 1166 | "decamelize-keys": "^1.1.0", 1167 | "hard-rejection": "^2.1.0", 1168 | "minimist-options": "^4.0.2", 1169 | "normalize-package-data": "^2.5.0", 1170 | "read-pkg-up": "^7.0.1", 1171 | "redent": "^3.0.0", 1172 | "trim-newlines": "^3.0.0", 1173 | "type-fest": "^0.13.1", 1174 | "yargs-parser": "^18.1.3" 1175 | } 1176 | }, 1177 | "min-indent": { 1178 | "version": "1.0.1", 1179 | "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", 1180 | "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==" 1181 | }, 1182 | "minimist": { 1183 | "version": "1.2.6", 1184 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", 1185 | "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" 1186 | }, 1187 | "minimist-options": { 1188 | "version": "4.1.0", 1189 | "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", 1190 | "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", 1191 | "requires": { 1192 | "arrify": "^1.0.1", 1193 | "is-plain-obj": "^1.1.0", 1194 | "kind-of": "^6.0.3" 1195 | } 1196 | }, 1197 | "ms": { 1198 | "version": "2.1.3", 1199 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 1200 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" 1201 | }, 1202 | "normalize-package-data": { 1203 | "version": "2.5.0", 1204 | "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", 1205 | "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", 1206 | "requires": { 1207 | "hosted-git-info": "^2.1.4", 1208 | "resolve": "^1.10.0", 1209 | "semver": "2 || 3 || 4 || 5", 1210 | "validate-npm-package-license": "^3.0.1" 1211 | } 1212 | }, 1213 | "open": { 1214 | "version": "7.0.0", 1215 | "resolved": "https://registry.npmjs.org/open/-/open-7.0.0.tgz", 1216 | "integrity": "sha512-K6EKzYqnwQzk+/dzJAQSBORub3xlBTxMz+ntpZpH/LyCa1o6KjXhuN+2npAaI9jaSmU3R1Q8NWf4KUWcyytGsQ==", 1217 | "requires": { 1218 | "is-wsl": "^2.1.0" 1219 | }, 1220 | "dependencies": { 1221 | "is-wsl": { 1222 | "version": "2.1.1", 1223 | "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.1.1.tgz", 1224 | "integrity": "sha512-umZHcSrwlDHo2TGMXv0DZ8dIUGunZ2Iv68YZnrmCiBPkZ4aaOhtv7pXJKeki9k3qJ3RJr0cDyitcl5wEH3AYog==" 1225 | } 1226 | } 1227 | }, 1228 | "opn": { 1229 | "version": "6.0.0", 1230 | "resolved": "https://registry.npmjs.org/opn/-/opn-6.0.0.tgz", 1231 | "integrity": "sha512-I9PKfIZC+e4RXZ/qr1RhgyCnGgYX0UEIlXgWnCOVACIvFgaC9rz6Won7xbdhoHrd8IIhV7YEpHjreNUNkqCGkQ==", 1232 | "requires": { 1233 | "is-wsl": "^1.1.0" 1234 | } 1235 | }, 1236 | "p-limit": { 1237 | "version": "2.3.0", 1238 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", 1239 | "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", 1240 | "requires": { 1241 | "p-try": "^2.0.0" 1242 | } 1243 | }, 1244 | "p-locate": { 1245 | "version": "4.1.0", 1246 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", 1247 | "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", 1248 | "requires": { 1249 | "p-limit": "^2.2.0" 1250 | } 1251 | }, 1252 | "p-try": { 1253 | "version": "2.2.0", 1254 | "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", 1255 | "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" 1256 | }, 1257 | "parse-json": { 1258 | "version": "5.2.0", 1259 | "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", 1260 | "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", 1261 | "requires": { 1262 | "@babel/code-frame": "^7.0.0", 1263 | "error-ex": "^1.3.1", 1264 | "json-parse-even-better-errors": "^2.3.0", 1265 | "lines-and-columns": "^1.1.6" 1266 | } 1267 | }, 1268 | "path-exists": { 1269 | "version": "4.0.0", 1270 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", 1271 | "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" 1272 | }, 1273 | "path-parse": { 1274 | "version": "1.0.7", 1275 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", 1276 | "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" 1277 | }, 1278 | "quick-lru": { 1279 | "version": "4.0.1", 1280 | "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", 1281 | "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==" 1282 | }, 1283 | "read-pkg": { 1284 | "version": "5.2.0", 1285 | "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", 1286 | "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", 1287 | "requires": { 1288 | "@types/normalize-package-data": "^2.4.0", 1289 | "normalize-package-data": "^2.5.0", 1290 | "parse-json": "^5.0.0", 1291 | "type-fest": "^0.6.0" 1292 | }, 1293 | "dependencies": { 1294 | "type-fest": { 1295 | "version": "0.6.0", 1296 | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", 1297 | "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==" 1298 | } 1299 | } 1300 | }, 1301 | "read-pkg-up": { 1302 | "version": "7.0.1", 1303 | "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", 1304 | "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", 1305 | "requires": { 1306 | "find-up": "^4.1.0", 1307 | "read-pkg": "^5.2.0", 1308 | "type-fest": "^0.8.1" 1309 | }, 1310 | "dependencies": { 1311 | "type-fest": { 1312 | "version": "0.8.1", 1313 | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", 1314 | "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==" 1315 | } 1316 | } 1317 | }, 1318 | "readable-stream": { 1319 | "version": "3.6.0", 1320 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", 1321 | "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", 1322 | "requires": { 1323 | "inherits": "^2.0.3", 1324 | "string_decoder": "^1.1.1", 1325 | "util-deprecate": "^1.0.1" 1326 | } 1327 | }, 1328 | "redent": { 1329 | "version": "3.0.0", 1330 | "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", 1331 | "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", 1332 | "requires": { 1333 | "indent-string": "^4.0.0", 1334 | "strip-indent": "^3.0.0" 1335 | } 1336 | }, 1337 | "resolve": { 1338 | "version": "1.20.0", 1339 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", 1340 | "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", 1341 | "requires": { 1342 | "is-core-module": "^2.2.0", 1343 | "path-parse": "^1.0.6" 1344 | } 1345 | }, 1346 | "safe-buffer": { 1347 | "version": "5.2.0", 1348 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz", 1349 | "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==" 1350 | }, 1351 | "semver": { 1352 | "version": "5.7.1", 1353 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", 1354 | "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" 1355 | }, 1356 | "spdx-correct": { 1357 | "version": "3.1.1", 1358 | "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", 1359 | "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", 1360 | "requires": { 1361 | "spdx-expression-parse": "^3.0.0", 1362 | "spdx-license-ids": "^3.0.0" 1363 | } 1364 | }, 1365 | "spdx-exceptions": { 1366 | "version": "2.3.0", 1367 | "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", 1368 | "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==" 1369 | }, 1370 | "spdx-expression-parse": { 1371 | "version": "3.0.1", 1372 | "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", 1373 | "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", 1374 | "requires": { 1375 | "spdx-exceptions": "^2.1.0", 1376 | "spdx-license-ids": "^3.0.0" 1377 | } 1378 | }, 1379 | "spdx-license-ids": { 1380 | "version": "3.0.8", 1381 | "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.8.tgz", 1382 | "integrity": "sha512-NDgA96EnaLSvtbM7trJj+t1LUR3pirkDCcz9nOUlPb5DMBGsH7oES6C3hs3j7R9oHEa1EMvReS/BUAIT5Tcr0g==" 1383 | }, 1384 | "string_decoder": { 1385 | "version": "1.3.0", 1386 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", 1387 | "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", 1388 | "requires": { 1389 | "safe-buffer": "~5.2.0" 1390 | } 1391 | }, 1392 | "strip-indent": { 1393 | "version": "3.0.0", 1394 | "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", 1395 | "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", 1396 | "requires": { 1397 | "min-indent": "^1.0.0" 1398 | } 1399 | }, 1400 | "supports-color": { 1401 | "version": "5.5.0", 1402 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", 1403 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", 1404 | "requires": { 1405 | "has-flag": "^3.0.0" 1406 | } 1407 | }, 1408 | "trim-newlines": { 1409 | "version": "3.0.1", 1410 | "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", 1411 | "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==" 1412 | }, 1413 | "type-fest": { 1414 | "version": "0.13.1", 1415 | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz", 1416 | "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==" 1417 | }, 1418 | "typedarray": { 1419 | "version": "0.0.6", 1420 | "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", 1421 | "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" 1422 | }, 1423 | "util-deprecate": { 1424 | "version": "1.0.2", 1425 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 1426 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" 1427 | }, 1428 | "validate-npm-package-license": { 1429 | "version": "3.0.4", 1430 | "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", 1431 | "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", 1432 | "requires": { 1433 | "spdx-correct": "^3.0.0", 1434 | "spdx-expression-parse": "^3.0.0" 1435 | } 1436 | }, 1437 | "yallist": { 1438 | "version": "4.0.0", 1439 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", 1440 | "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" 1441 | }, 1442 | "yargs-parser": { 1443 | "version": "18.1.3", 1444 | "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", 1445 | "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", 1446 | "requires": { 1447 | "camelcase": "^5.0.0", 1448 | "decamelize": "^1.2.0" 1449 | } 1450 | } 1451 | } 1452 | } 1453 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "apple-maps-web-snapshot-cli", 3 | "version": "1.0.2", 4 | "description": "Create static maps for MapKit", 5 | "main": "mapkit-snapshots.js", 6 | "bin": { 7 | "mapkit-snapshots": "./mapkit-snapshots.js" 8 | }, 9 | "dependencies": { 10 | "@mapbox/polyline": "^1.1.1", 11 | "better-opn": "^1.0.0", 12 | "concat-stream": "^2.0.0", 13 | "fs": "0.0.1-security", 14 | "jsonwebtoken": "^9.0.0", 15 | "jwa": "^1.4.1", 16 | "minimist": "^1.2.6", 17 | "open": "^7.0.0", 18 | "opn": "^6.0.0" 19 | }, 20 | "scripts": { 21 | "test": "testCommand" 22 | }, 23 | "author": "roblabs", 24 | "license": "SEE LICENSE IN LICENSE.txt", 25 | "repository": { 26 | "type": "git", 27 | "url": "git+https://github.com/roblabs/apple-maps-web-snapshot-cli.git" 28 | }, 29 | "keywords": [], 30 | "bugs": { 31 | "url": "https://github.com/roblabs/apple-maps-web-snapshot-cli/issues" 32 | }, 33 | "homepage": "https://github.com/roblabs/apple-maps-web-snapshot-cli#readme" 34 | } 35 | -------------------------------------------------------------------------------- /readme.md: -------------------------------------------------------------------------------- 1 | # Maps Web Snapshot 2 | 3 | At WWDC 2019, Apple announced Maps Web Snapshots for creating a static map from a URL. 4 | 5 | * Documentation at [developer.apple.com/documentation/snapshots](https://developer.apple.com/documentation/snapshots) 6 | * Maps Snapshot Studio from Apple — [maps.developer.apple.com/snapshot](https://maps.developer.apple.com/snapshot) 7 | * Web service endpoint and notes on the query parameters — [developer.apple.com/documentation/snapshots/create_a_maps_web_snapshot](https://developer.apple.com/documentation/snapshots/create_a_maps_web_snapshot) 8 | * Developer Forum with the tag: [Maps Web Snapshots](https://developer.apple.com/forums/tags/maps-web-snapshots) 9 | * Forum thread on [Image annotations larger than 50px](https://developer.apple.com/forums/thread/655042) 10 | * Announcement from the Apple Developer Forums (around WWDC 2020): 11 | * [*Now Available: Image Annotations on Maps Web Snapshots*](https://developer.apple.com/forums/thread/649750) 12 | 13 | 14 | ## Usage 15 | 16 | Update your credentials in `config.json` then install and run. 17 | 18 | ```bash 19 | # config.json 20 | # Do not commit your secrets 21 | { 22 | "teamId": "XXXXXXXXXX", 23 | "keyId": "YYYYYYYYYY" 24 | "privateKey": "AuthKey_YYYYYYYYYY.p8", 25 | } 26 | ``` 27 | 28 | ``` bash 29 | # install 30 | npm install 31 | 32 | # run and inspect output 33 | mapkit-snapshots.js null-island.geojson -c config.json 34 | ``` 35 | 36 | ### Online help 37 | 38 | Online help is available by supplying no parameters. 39 | 40 | ```bash 41 | mapkit-snapshots.js 42 | ``` 43 | 44 | ```bash 45 | Usage: 46 | mapkit-snapshots.js -c config.json # -c pass in privateKey, teamId, keyId 47 | mapkit-snapshots.js -c config.json -o # -o opens in default browser 48 | ``` 49 | 50 | Generate a URL to display a map from a Apple Maps Web Snapshot. 51 | 52 | Find the source code at [roblabs/apple-maps-web-snapshot-cli](https://github.com/roblabs/apple-maps-web-snapshot-cli) 53 | 54 | See the sample GeoJSON, `null-island.geojson` for example valid properties 55 | 56 | ``` Javascript 57 | "properties": { 58 | "center": [20, 20], 59 | "display_point": { 60 | "type": "Point","coordinates": [10,10] 61 | }, 62 | "z": 2, 63 | "spn": [1.0, 1.0], 64 | "size": [600, 400], 65 | "scale": 1, 66 | "t": "mutedStandard", 67 | "colorScheme": "dark", 68 | "poi": 1, 69 | "lang": "en-US", 70 | "annotations": [], 71 | "overlays": [], 72 | "referer": "", 73 | "expires": 3155673601 74 | } 75 | ``` 76 | 77 | ## Apple MapKit JS Examples 78 | 79 | This repo shows working samples of Maps Web Snapshots and Node JS sample code for generating the proper URLs to use in your applications. 80 | 81 | | Snapshot Parameters or Documenation from [Create a Maps Web Snapshot](https://developer.apple.com/documentation/snapshots/create_a_maps_web_snapshot#center) | Parameter examples| 82 | | :------------- | :------------- | 83 | | **`center`** - The center of the map. You can specify center as coordinates or as an address. | | 84 | | | [signIt(\"center=0,0\")](https://snapshot.apple-mapkit.com/api/v1/snapshot?center=0,0&teamId=J7V35W7ES8&keyId=VKGGG3L5BX&signature=_CQvIG7iQGN-0tiyqXAOBbjt0tInsepLNbCeO8sbhkdS7VLf2hDCdiQluSRTfmVcWLzABiqeK96YqgH2qYYOgA) | 85 | | | [signIt(\"center=37.839622,-119.515182\")](https://snapshot.apple-mapkit.com/api/v1/snapshot?center=37.839622,-119.515182&teamId=J7V35W7ES8&keyId=VKGGG3L5BX&signature=vBLwprXb_BKv417xNjPFYtsVlwAO1jM_ywxa7AR5MoinYyMaWa3doXu9KD0kiDeUdx8bvFGavXggeFwKSlGKxA) | 86 | | | [signIt(\"center=San%20Diego,%20California\")](https://snapshot.apple-mapkit.com/api/v1/snapshot?center=San%20Diego,%20California&teamId=J7V35W7ES8&keyId=VKGGG3L5BX&signature=t76FXl_bIIv9s9LabHtorewlx9UMDvsrCAo0UeSCKKUyKFjg3IhDu6n3ApaDrwwKj-86ANk1GjpDHSuE8Oh5jA) | 87 | | **`size & scale`** - `size` - The width and height must be within the range of [50, 640]. Default: 600x400. `scale` - The pixel density of the image. scale=2 returns an image intended for 2× Retina displays. | | 88 | | | [signIt(\"center=San%20Diego,%20California&scale=1\")](https://snapshot.apple-mapkit.com/api/v1/snapshot?center=San%20Diego,%20California&scale=1&teamId=J7V35W7ES8&keyId=VKGGG3L5BX&signature=YA-Wzqp3VDrrT1nqkbY_l63-NqGXKtNIG8mJFqIq_2-lcaGW6qvfIX7Bk1xAsOdTSgu7i1o9KV6tSj-DFx4Hyg) | 89 | | | [signIt(\"center=San%20Diego,%20California&scale=2\")](https://snapshot.apple-mapkit.com/api/v1/snapshot?center=San%20Diego,%20California&scale=2&teamId=J7V35W7ES8&keyId=VKGGG3L5BX&signature=Cb9io7vYYAKK-VRkw7LHGfMUsfUSEIMMZHcl8TryR7JiAYimt6eZliS7vVR0xygB5EWhysfKnIEBImbNUF1imA) | 90 | | **`t`** - The map type. Possible values: standard, hybrid, satellite, mutedStandard | ![](assets/t.gif) 91 | | | [signIt(\"center=37.839622,-119.515182&t=standard\")](https://snapshot.apple-mapkit.com/api/v1/snapshot?center=37.839622,-119.515182&t=standard&teamId=J7V35W7ES8&keyId=VKGGG3L5BX&signature=mz4a82aYZSa9tif0xNk6Y1FPc6qgd0wLoeFpHoz7AG3cdrwjQNRiqDaPCEgeWUAl2R_NeMGOc9pHPNqLxfrNeA) | 92 | | | [signIt(\"center=37.839622,-119.515182&t=hybrid\")](https://snapshot.apple-mapkit.com/api/v1/snapshot?center=37.839622,-119.515182&t=hybrid&teamId=J7V35W7ES8&keyId=VKGGG3L5BX&signature=PUr_jizu7C0UcZ_ZQgUiZJ7ou-ZKEIOIFCvrt-Rn6BKxeyNdILowtXSpOtn6P90B8bw_XEO5iJoiewJYzdaqwA) | 93 | | | [signIt(\"center=37.839622,-119.515182&t=satellite\")](https://snapshot.apple-mapkit.com/api/v1/snapshot?center=37.839622,-119.515182&t=satellite&teamId=J7V35W7ES8&keyId=VKGGG3L5BX&signature=oIjW35TikDHnTbmDQ_3IhBqiurI6hqWKxAkNlvvXMi8O6_FhrxM_-tOUEpa3-9mqVo5dbgCbBi4dRvu7ZrKNeg) | 94 | | | [signIt(\"center=37.839622,-119.515182&t=mutedStandard\")](https://snapshot.apple-mapkit.com/api/v1/snapshot?center=37.839622,-119.515182&t=mutedStandard&teamId=J7V35W7ES8&keyId=VKGGG3L5BX&signature=5S5WmubPUfHWeSC8zgAQBYR3jAAx6p9DRYnagOMzx9xJZxB-JoMMhvGaE2yDppb2SU0UY2iGeJuA7efuSfg6AA) | 95 | | | [signIt(\"center=San%20Diego,%20California&t=standard\")](https://snapshot.apple-mapkit.com/api/v1/snapshot?center=San%20Diego,%20California&t=standard&teamId=J7V35W7ES8&keyId=VKGGG3L5BX&signature=lPSdzn6czRvKWg1AxJQ30n2B5fUha4sh0VP2zcLuC9Imt6Mrc-AD6DA7Nrc8XoptHiZ4VDH3FF5LM4qrayiBzQ) | 96 | | | [signIt(\"center=San%20Diego,%20California&t=hybrid\")](https://snapshot.apple-mapkit.com/api/v1/snapshot?center=San%20Diego,%20California&t=hybrid&teamId=J7V35W7ES8&keyId=VKGGG3L5BX&signature=H4A4thBAWFrvgX8GuovdPlmjy_3DSnItX4MsSYBdvmo96OymSbK2gAuEjEzwNv0l0Xj6CI1UbMxqfCtUc41OxQ) | 97 | | | [signIt(\"center=San%20Diego,%20California&t=satellite\")](https://snapshot.apple-mapkit.com/api/v1/snapshot?center=San%20Diego,%20California&t=satellite&teamId=J7V35W7ES8&keyId=VKGGG3L5BX&signature=7FGJ1JjkSohegbrN5Rrh84A3kBSusbaXWZvmLITKOH3dqKZNIKmTJVONOR5gy7yMuDgiDVS-fxXF-LwTDICkEw) | 98 | | | [signIt(\"center=San%20Diego,%20California&t=mutedStandard\")](https://snapshot.apple-mapkit.com/api/v1/snapshot?center=San%20Diego,%20California&t=mutedStandard&teamId=J7V35W7ES8&keyId=VKGGG3L5BX&signature=ydxvw2A_-12_6GyMr8tveiDwD69UF0fY3bHYnGppF413kYNir0RUFxsJ6_WPz47YXe1VkOvtXcAHTthF5Kwccg) | 99 | | **`colorScheme`** - The color scheme of the map. Possible values: light, dark. The dark color scheme only applies to the `standard` and `mutedStandard` map types. | ![](assets/colorScheme.gif) 100 | | | [signIt(\"center=San%20Diego,%20California&t=standard&colorScheme=light\")](https://snapshot.apple-mapkit.com/api/v1/snapshot?center=San%20Diego,%20California&t=standard&colorScheme=light&teamId=J7V35W7ES8&keyId=VKGGG3L5BX&signature=VcNbRE3kHLrshJaSe6yTKjECAyUFRe9YZpHvmbUAKkvhUAtzGOXXaoxk0prTvaC-1F-RmaHbl4n3UNqg_Z12LA) | 101 | | | [signIt(\"center=San%20Diego,%20California&t=standard&colorScheme=dark\")](https://snapshot.apple-mapkit.com/api/v1/snapshot?center=San%20Diego,%20California&t=standard&colorScheme=dark&teamId=J7V35W7ES8&keyId=VKGGG3L5BX&signature=crD96c6VOA8XyvuYAi9l1j8rvcbPBQrU7WmPbIvuK4GZqUqnalgvx3oaQ_elVe6oot60JDBDTTIocB5yCSrv3A) | 102 | | | [signIt(\"center=San%20Diego,%20California&t=mutedStandard&colorScheme=light\")](https://snapshot.apple-mapkit.com/api/v1/snapshot?center=San%20Diego,%20California&t=mutedStandard&colorScheme=light&teamId=J7V35W7ES8&keyId=VKGGG3L5BX&signature=JYPWEYfCTL_AAsaQuuNjbzgnviTJTRH7dUXede05l2ON2Taijnt_c_8YXlYhLOVbKtTZooWNlyuLQ1iNAzIy4g) | 103 | | | [signIt(\"center=San%20Diego,%20California&t=mutedStandard&colorScheme=dark\")](https://snapshot.apple-mapkit.com/api/v1/snapshot?center=San%20Diego,%20California&t=mutedStandard&colorScheme=dark&teamId=J7V35W7ES8&keyId=VKGGG3L5BX&signature=opuNjPhzMb06ESlXf94STjHcZnB1za9CwaG1BsUQgdx1JhyeU3T4mpatqAD1Qi8d5KT3ncGc_onEVZnjflK1Yw) | 104 | | **`z`** - The zoom level of the map. | ![](assets/z.gif) 105 | | | [signIt(\"center=37.839622,-119.515182&z=15\")](https://snapshot.apple-mapkit.com/api/v1/snapshot?center=37.839622,-119.515182&z=15&teamId=J7V35W7ES8&keyId=VKGGG3L5BX&signature=pUUoZ7mIon70G4Xa3TrpcK_5un_waTXOxezS8u9qywHHcxmhjAZpRyUjZ-SsaJ05-GSWVZX9UgNOvMf1Ba9T2A) | 106 | | | [signIt(\"center=37.839622,-119.515182&z=14\")](https://snapshot.apple-mapkit.com/api/v1/snapshot?center=37.839622,-119.515182&z=14&teamId=J7V35W7ES8&keyId=VKGGG3L5BX&signature=XrL4G6wNunFeLYfuV_dQ89pcyqihOtYw5dWn4ESiUEvHoTiptaWzdV7Abi0gR-EK3Vn43gWaBJoii3UNQ5gccA) | 107 | | | [signIt(\"center=37.839622,-119.515182&z=13\")](https://snapshot.apple-mapkit.com/api/v1/snapshot?center=37.839622,-119.515182&z=13&teamId=J7V35W7ES8&keyId=VKGGG3L5BX&signature=YmwpwvEkwDyeotXx__ogs1JOoULIbMIQjoqYX8Ix9lvDhW5f8fNU4hIr13ZbQ0dUar4fw7Mx5peVw75YwKDyAA) | 108 | | | [signIt(\"center=37.839622,-119.515182&z=12\")](https://snapshot.apple-mapkit.com/api/v1/snapshot?center=37.839622,-119.515182&z=12&teamId=J7V35W7ES8&keyId=VKGGG3L5BX&signature=Vkj5glB1WeGztGobS_5EIvIxEQi2DHQXytVDHvA3IEfqoqIlLIicl-9O84vrswsKAqQVmnRUDOGw6n-H9CjKyg) | 109 | | | [signIt(\"center=37.839622,-119.515182&z=11\")](https://snapshot.apple-mapkit.com/api/v1/snapshot?center=37.839622,-119.515182&z=11&teamId=J7V35W7ES8&keyId=VKGGG3L5BX&signature=d9C5kBKjmR5xEy14OQXobUtZbMpsCcf_voWk5M_JDsegKVU6Idg5O4iDqz_AX_zRwxM-cBekS3FfRhYL-Nz6oQ) | 110 | | | [signIt(\"center=37.839622,-119.515182&z=10\")](https://snapshot.apple-mapkit.com/api/v1/snapshot?center=37.839622,-119.515182&z=10&teamId=J7V35W7ES8&keyId=VKGGG3L5BX&signature=CZ90uXzEFPTEf8N2jtJoJY80okgf4dzQFIskMS1xRvQabdl3zx-Ut0aQdrz_RBgyu0BlpQJEoJL0T8nP_NG7ug) | 111 | | | [signIt(\"center=37.839622,-119.515182&z=9\")](https://snapshot.apple-mapkit.com/api/v1/snapshot?center=37.839622,-119.515182&z=9&teamId=J7V35W7ES8&keyId=VKGGG3L5BX&signature=7OAiv1VSLhwkYEjsfLwEKh_uDFLJGrpdqUJnDBzRQL6qCerfLwlUk9R2BsCF6Kl9kdcxKyGu7Vf3FazULXqdgQ) | 112 | | **`poi`** - A Boolean value indicating whether points of interest are shown on the map. | ![](assets/poi.gif) | 113 | | | [signIt(\"center=San%20Francisco,%20California&t=mutedStandard&poi=0\")](https://snapshot.apple-mapkit.com/api/v1/snapshot?center=San%20Francisco,%20California&t=mutedStandard&poi=0&teamId=J7V35W7ES8&keyId=VKGGG3L5BX&signature=2Xu7FoCPZgcg2HnHwBVpaCvUnxIFp0aR3mzxCDjtrlPv3D4nM48gS4AaDoq4hWEoVIOdLv7CKA7TdvoTRJGclA) | 114 | | | [signIt(\"center=San%20Francisco,%20California&t=mutedStandard&poi=1\")](https://snapshot.apple-mapkit.com/api/v1/snapshot?center=San%20Francisco,%20California&t=mutedStandard&poi=1&teamId=J7V35W7ES8&keyId=VKGGG3L5BX&signature=yZyRYiWZQNYLQ9SKXIpNjArUYoVYKGvQhD8unThM8_TbagdAyE_Ik3p2CYbApYFCNw4Cw6eRqZkmAp9LQlQAzA) | 115 | | **`lang`** - The language to be used for labels on the map, Supported values are in [locale IDs](https://developer.apple.com/library/archive/documentation/MacOSX/Conceptual/BPInternational/LanguageandLocaleIDs/LanguageandLocaleIDs.html), such as en-GB or es-MX. | ![](assets/lang.gif) 116 | | | [signIt(\"center=37.839622,-119.515182&z=3&lang=ar-AR\")](https://snapshot.apple-mapkit.com/api/v1/snapshot?center=37.839622,-119.515182&z=3&lang=ar-AR&teamId=J7V35W7ES8&keyId=VKGGG3L5BX&signature=EfCgPO0IF1sAuhV7tTSkDHGnkLFdlxPPntOgqi1PFgnibbRZc-MvPumLTPfJNKJA99hcPHZ2Ri_zDAYyzEw5oA) | 117 | | | [signIt(\"center=37.839622,-119.515182&z=3&lang=de-DE\")](https://snapshot.apple-mapkit.com/api/v1/snapshot?center=37.839622,-119.515182&z=3&lang=de-DE&teamId=J7V35W7ES8&keyId=VKGGG3L5BX&signature=v0fcIINKQiGtBSU_Hps_gIAxE3uBmZbi29HfVfbJN7GPuDEeTsjvW-SvkUQmneTijYSL3qTm_i8AtpI0oT54vg) | 118 | | | [signIt(\"center=37.839622,-119.515182&z=3&lang=en-US\")](https://snapshot.apple-mapkit.com/api/v1/snapshot?center=37.839622,-119.515182&z=3&lang=en-US&teamId=J7V35W7ES8&keyId=VKGGG3L5BX&signature=VlYwE5qXxEFzeKULfxGxgwgzjK9PJz9O8LsXjbizU_sb1fmQrbRYoOknyVzSV2gbq9LvSRYXnbfc_sKuLv54HA) | 119 | | | [signIt(\"center=37.839622,-119.515182&z=3&lang=es-MX\")](https://snapshot.apple-mapkit.com/api/v1/snapshot?center=37.839622,-119.515182&z=3&lang=es-MX&teamId=J7V35W7ES8&keyId=VKGGG3L5BX&signature=1-970l0FuwTPZgXoTsGfGkhrjjUzY-mxLgGOeGwqIbjYz65FEoIf4p1Tu43aVxTb6gvGVx5QnAnAPK-QWEVwDg) | 120 | | | [signIt(\"center=37.839622,-119.515182&z=3&lang=es-ES\")](https://snapshot.apple-mapkit.com/api/v1/snapshot?center=37.839622,-119.515182&z=3&lang=es-ES&teamId=J7V35W7ES8&keyId=VKGGG3L5BX&signature=LRlNKCRxFB_n-xg8UwZIRc0F8t8n8Ck0Pec3Pz9FmT29HBiX9CbcdVM-Wb0DJBjO2Ta6V8BHrkjkDJPkhWT4nQ) | 121 | | | [signIt(\"center=37.839622,-119.515182&z=3&lang=el-GR\")](https://snapshot.apple-mapkit.com/api/v1/snapshot?center=37.839622,-119.515182&z=3&lang=el-GR&teamId=J7V35W7ES8&keyId=VKGGG3L5BX&signature=WUSOf-HW7jPvbv-BV10gpSYxlQ8hOkiV-PKEz_ECXDDzC8UDpBfm6GrFjCr4mUrrizlgws8-Ndh0rOZDUYnQWw) | 122 | | | [signIt(\"center=37.839622,-119.515182&z=3&lang=fi-FI\")](https://snapshot.apple-mapkit.com/api/v1/snapshot?center=37.839622,-119.515182&z=3&lang=fi-FI&teamId=J7V35W7ES8&keyId=VKGGG3L5BX&signature=pIA_QZJZGpbIgkaMtcjLUnOrgCI53qFh5oXrn8IAtVuJ6mjOa1P7Yc0bu50BaHDkIvvGqDiQr1bB1dGjDKIrnQ) | 123 | | | [signIt(\"center=37.839622,-119.515182&z=3&lang=fr-FR\")](https://snapshot.apple-mapkit.com/api/v1/snapshot?center=37.839622,-119.515182&z=3&lang=fr-FR&teamId=J7V35W7ES8&keyId=VKGGG3L5BX&signature=jA0v_xwMe8NUOTj9dsrQc9Z6USGhekatKsqxoaPVP-X2Go_QIKJnCgcUESWR5Sd9cEywW7uC8GM6nZaMmZiMWQ) | 124 | | | [signIt(\"center=37.839622,-119.515182&z=3&lang=ja-JA\")](https://snapshot.apple-mapkit.com/api/v1/snapshot?center=37.839622,-119.515182&z=3&lang=ja-JA&teamId=J7V35W7ES8&keyId=VKGGG3L5BX&signature=yB0WRehXzOyQMfaCpZ8J2nGmSc484NDE9IO1OU4etcsbHmPHtoPh7Be_OdqdvJdhmflvwktX_jFZXTe2wJMbVw) | 125 | | | [signIt(\"center=37.839622,-119.515182&z=3&lang=hu-HU\")](https://snapshot.apple-mapkit.com/api/v1/snapshot?center=37.839622,-119.515182&z=3&lang=hu-HU&teamId=J7V35W7ES8&keyId=VKGGG3L5BX&signature=Rck8se1DVokC0COyUj3unZQ5BybSensLM2Ku9rsuBfwzZKfN1CaR5szSA6qKH1Jrjpm0mDqQAjz_17Nf9-w5Vg) | 126 | | | [signIt(\"center=37.839622,-119.515182&z=3&lang=it-IT\")](https://snapshot.apple-mapkit.com/api/v1/snapshot?center=37.839622,-119.515182&z=3&lang=it-IT&teamId=J7V35W7ES8&keyId=VKGGG3L5BX&signature=Y71gWPLRd5ONKYg2qRRxQAa3y4kSvPWN_0gL59R1E_XCKS7KglGJPobtMwj2lS9Pd0SFxwIv-HbfpvDuBuJqEg) | 127 | | | [signIt(\"center=37.839622,-119.515182&z=3&lang=ko-KO\")](https://snapshot.apple-mapkit.com/api/v1/snapshot?center=37.839622,-119.515182&z=3&lang=ko-KO&teamId=J7V35W7ES8&keyId=VKGGG3L5BX&signature=k-h1YNcqH-DzrvwIEOpRV_-W3UattFI0xKlVJzToh8QL0dN80wh8ZZ3cHdhMb1Mk6nmS17xVVCQzayXmmvJh8Q) | 128 | | | [signIt(\"center=37.839622,-119.515182&z=3&lang=nl-NL\")](https://snapshot.apple-mapkit.com/api/v1/snapshot?center=37.839622,-119.515182&z=3&lang=nl-NL&teamId=J7V35W7ES8&keyId=VKGGG3L5BX&signature=wKO6OxuTaDvujS7jEdBCwNwZ04Q_U5G5s3iZu3-XnY9hiWRgJKGkaQQJLffRr5dHBAat0-SpL4A6uk4Ab_6BTQ) | 129 | | | [signIt(\"center=37.839622,-119.515182&z=3&lang=no-NO\")](https://snapshot.apple-mapkit.com/api/v1/snapshot?center=37.839622,-119.515182&z=3&lang=no-NO&teamId=J7V35W7ES8&keyId=VKGGG3L5BX&signature=ZisQEbZZOZhcvFWli8sl7iODwOoMyqcauHerUxd-GQibns_DEMJjuWeczEbBVtjGxFuL9pxUDzOPnAtRSHU3Mw) | 130 | | | [signIt(\"center=37.839622,-119.515182&z=3&lang=he-HE\")](https://snapshot.apple-mapkit.com/api/v1/snapshot?center=37.839622,-119.515182&z=3&lang=he-HE&teamId=J7V35W7ES8&keyId=VKGGG3L5BX&signature=SOH5qn-tVgIF6l_jJQYcCpIqeCTZ6yDuaf60ja0FdmGtktPxWkksHDVfo2jYJo470Xqvj3ytft_UzIFIFGSF_A) | 131 | | | [signIt(\"center=37.839622,-119.515182&z=3&lang=hi-IN\")](https://snapshot.apple-mapkit.com/api/v1/snapshot?center=37.839622,-119.515182&z=3&lang=hi-IN&teamId=J7V35W7ES8&keyId=VKGGG3L5BX&signature=J9uPvzKUAzZt66b4BKq6fxa_liDQcLyzzerS9ErbD0Vag_F25SW230py99QXerzL1am32FgdxtlQv7CCv5lLcQ) | 132 | | | [signIt(\"center=37.839622,-119.515182&z=3&lang=pt-BR\")](https://snapshot.apple-mapkit.com/api/v1/snapshot?center=37.839622,-119.515182&z=3&lang=pt-BR&teamId=J7V35W7ES8&keyId=VKGGG3L5BX&signature=jaJ0Tk5ShePZGccsoG8_Sn6QoTDdLmqu8AQtDVLw10OQIEAVSrw6F_iXWRrTD1it87lH8lOvmxmpcshON4g82Q) | 133 | | | [signIt(\"center=37.839622,-119.515182&z=3&lang=ru-RU\")](https://snapshot.apple-mapkit.com/api/v1/snapshot?center=37.839622,-119.515182&z=3&lang=ru-RU&teamId=J7V35W7ES8&keyId=VKGGG3L5BX&signature=h363-j7Sux1LQx3FVQIdw22HXDAaAPSX4kIYsRN7V3UDFS3XmFt2inENkCk-eGO4Hvdyo_m9k_Dx73oGvxMz1A) | 134 | | | [signIt(\"center=37.839622,-119.515182&z=3&lang=tr-TR\")](https://snapshot.apple-mapkit.com/api/v1/snapshot?center=37.839622,-119.515182&z=3&lang=tr-TR&teamId=J7V35W7ES8&keyId=VKGGG3L5BX&signature=jnJpJgHZiOWWV2YXguwdkr65NVbZhKnoX-8mmMZ9uk5wtLgOvzwyySEwv8sNZc9gIjSi1ljS7TEBNvySyBoBrw) | 135 | | | [signIt(\"center=37.839622,-119.515182&z=3&lang=vi-VI\")](https://snapshot.apple-mapkit.com/api/v1/snapshot?center=37.839622,-119.515182&z=3&lang=vi-VI&teamId=J7V35W7ES8&keyId=VKGGG3L5BX&signature=NEv093MrQJBfcdEQCU8nMVfsqjvI6rnb4b2LEbBebyEAJYN5XOZSCXk1x9bTj5WaCc6_y0AUFyAkdmvMs1gbXQ) | 136 | | | [signIt(\"center=37.839622,-119.515182&z=3&lang=zh-ZH\")](https://snapshot.apple-mapkit.com/api/v1/snapshot?center=37.839622,-119.515182&z=3&lang=zh-ZH&teamId=J7V35W7ES8&keyId=VKGGG3L5BX&signature=L6tZdfL4x-0oOQUJyABERtmIrY6Xoh-_VnNnLuyZRDLdkiYrXl8a8sL8gzJalAnDF1o9ZBQYVylrZyCdT3WcIA) | 137 | | **`annotations`** - Example of [Annotations](https://developer.apple.com/documentation/snapshots/annotation) . The array of JSON Annotation, which draws 3 points: a red `dot`, a green `balloon`, & blue `large` annotations, is shown `[{"point":"32.73,-117.19", "color":"blue", "glyphText":"A", "markerStyle":"large"},`
`{"point":"32.71,-117.17", "color":"00ff00","glyphText":"9", "markerStyle":"balloon"},`
`{"point":"32.69,-117.16", "color":"red", "glyphText":"a", "markerStyle":"dot"}`
`]` | ![](assets/annotations/snapshot.png) | 138 | | Live example of Annotations | [signIt(\"center=San%20Diego,%20California&\\")](https://snapshot.apple-mapkit.com/api/v1/snapshot?center=San%20Diego,%20California&annotations=%5B%7B%22point%22%3A%2232.732373%2C-117.197503%22%2C%22color%22%3A%22blue%22%2C%22glyphText%22%3A%22A%22%2C%22markerStyle%22%3A%22large%22%7D%2C%7B%22point%22%3A%2232.715104%2C-117.174038%22%2C%22color%22%3A%2200ff00%22%2C%22glyphText%22%3A%229%22%2C%22markerStyle%22%3A%22balloon%22%7D%2C%7B%22point%22%3A%2232.699945%2C-117.169792%22%2C%22color%22%3A%22red%22%2C%22glyphText%22%3A%22a%22%2C%22markerStyle%22%3A%22dot%22%7D%5D&teamId=J7V35W7ES8&keyId=VKGGG3L5BX&signature=ZGhh0aC2Gx-2TPpt3ZAHzO2t-3MA5hcax6x3ZLzPdFNg0clr6rTGofG6TDNWe5TDZQH4sZyC8HP73df5GPn9SQ) | 139 | | **`overlays`** - Example of [Overlays](https://developer.apple.com/documentation/snapshots/overlay). The array of JSON `Overlay` objects, which draws a red dashed line over 3 points, is shown:
`[{"points":["32.73,-117.19","32.71,-117.17","32.69,-117.16"],`
`"strokeColor":"ff0000","lineWidth":2,"lineDash":[10,5]}`
`]` | ![](assets/overlays/snapshot.png) | 140 | | Live example of Overlays | [signIt(\"center=San%20Diego,%20California&\\")](https://snapshot.apple-mapkit.com/api/v1/snapshot?center=San%20Diego,%20California&overlays=%5B%7B%22points%22%3A%5B%2232.732373%2C-117.197503%22%2C%2232.715104%2C-117.174038%22%2C%2232.699945%2C-117.169792%22%5D%2C%22strokeColor%22%3A%22ff0000%22%2C%22lineWidth%22%3A2%2C%22lineDash%22%3A%5B10%2C5%5D%7D%5D&teamId=J7V35W7ES8&keyId=VKGGG3L5BX&signature=WYbdsjcE22KI8tCrxM0YJJdYFfNgsC58OlhpTatdszcC2o53A-EDW5J4XbsCxhdEv4jFy_DW3Rq19jCBAc7q6w) | 141 | | Live example of Annotations & Overlays, together| [signIt(\"center=San%20Diego,%20California&\\")](https://snapshot.apple-mapkit.com/api/v1/snapshot?center=San%20Diego,%20California&annotations=%5B%7B%22point%22%3A%2232.732373%2C-117.197503%22%2C%22color%22%3A%22blue%22%2C%22glyphText%22%3A%22A%22%2C%22markerStyle%22%3A%22large%22%7D%2C%7B%22point%22%3A%2232.715104%2C-117.174038%22%2C%22color%22%3A%2200ff00%22%2C%22glyphText%22%3A%229%22%2C%22markerStyle%22%3A%22balloon%22%7D%2C%7B%22point%22%3A%2232.699945%2C-117.169792%22%2C%22color%22%3A%22red%22%2C%22glyphText%22%3A%22a%22%2C%22markerStyle%22%3A%22dot%22%7D%5D&overlays=%5B%7B%22points%22%3A%5B%2232.732373%2C-117.197503%22%2C%2232.715104%2C-117.174038%22%2C%2232.699945%2C-117.169792%22%5D%2C%22strokeColor%22%3A%22ff0000%22%2C%22lineWidth%22%3A2%2C%22lineDash%22%3A%5B10%2C5%5D%7D%5D&teamId=J7V35W7ES8&keyId=VKGGG3L5BX&signature=m9UAKoC0ShqSpMTHAvIlH2R3qFllvtDtJkchCHRYu6MB69MjsX09FNELsuD3jCegnkr1QV0JIsv5r9nhLlNzrw) | 142 | 143 | 144 | ### Release Log 145 | 146 | * Dec 30, 2021 - Add output key `url` to log the signed Apple Maps Web Snapshot URL 147 | * Nov 04, 2021 - Add command line options: `-c` for credentials. `-o` to open in browser. 148 | * Mar 09, 2020 - Pass in values from GeoJSON. Pass in credentials via `config.json`. 149 | * Nov 04, 2019 - Update Javascript example for Annotations & Overlays. 150 | * Nov 03, 2019 - Initial Sample Code for Maps Web Snapshots with MapKit JS 151 | 152 | 153 | 157 | --------------------------------------------------------------------------------