├── .dir-locals.el ├── .gitignore ├── dev.cljs.edn ├── package.json ├── src └── jira_auth │ ├── jirad.cljs │ ├── auth.cljs │ └── core.cljs ├── deps.edn ├── figwheel-main.edn ├── readme.org └── yarn.lock /.dir-locals.el: -------------------------------------------------------------------------------- 1 | ((nil 2 | . 3 | ((eval 4 | . 5 | (with-eval-after-load 'cider 6 | (setq cider-default-cljs-repl 'figwheel-main 7 | cider-figwheel-main-default-options "dev")))))) 8 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | pom.xml 2 | *jar 3 | /lib/ 4 | /classes/ 5 | /out/ 6 | /target/ 7 | .lein-deps-sum 8 | .lein-repl-history 9 | .lein-plugins/ 10 | .repl 11 | .nrepl-port 12 | .cpcache/ 13 | .rebel_readline_history 14 | node_modules/ 15 | resources/creds.gpg 16 | user_data -------------------------------------------------------------------------------- /dev.cljs.edn: -------------------------------------------------------------------------------- 1 | {:main jira-auth.core 2 | :target :nodejs 3 | :repl-options {:nrepl-middleware [cider.piggieback/wrap-cljs-repl]} 4 | ;; :install-deps true 5 | :npm-deps {:puppeteer "1.19.0"} 6 | ;; :env {:chrome-path "/usr/local/Caskroom/google-chrome-canary/latest" 7 | ;; :test-target-url "https://google.com"} 8 | } 9 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "dependencies": { 3 | "@cljs-oss/module-deps": "^1.1.1", 4 | "js-yaml": "^3.13.1", 5 | "puppeteer": "^1.19.0", 6 | "which": "^1.3.1" 7 | }, 8 | "scripts": { 9 | "build": "clojure -m figwheel.main --optimizations simple --build-once dev", 10 | "run": "node ./target/node/dev/dev-main.js" 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /src/jira_auth/jirad.cljs: -------------------------------------------------------------------------------- 1 | (ns jira-auth.jirad 2 | (:require 3 | [cljs-node-io.core :as io :refer [slurp spit]] 4 | [cljs-bean.core :refer [->clj]] 5 | js-yaml 6 | os)) 7 | 8 | (defn read-config [] 9 | (->> 10 | "/.jira.d/config.yml" 11 | (str (.homedir os)) 12 | slurp 13 | js-yaml/load 14 | ->clj)) 15 | 16 | (defn save-cookies-js [cookies] 17 | (println "saving cookies") 18 | (let [content (js/JSON.stringify cookies)] 19 | (spit (str (.homedir os) "/.jira.d/cookies.js") content))) 20 | 21 | 22 | (comment 23 | (->clj (js/JSON.parse (slurp (str (.homedir os) "/.jira.d/cookies.js"))))) 24 | -------------------------------------------------------------------------------- /src/jira_auth/auth.cljs: -------------------------------------------------------------------------------- 1 | (ns jira-auth.auth 2 | (:require [clojure.edn :as edn] 3 | which)) 4 | 5 | (def exec (.-exec (js/require "child_process"))) 6 | 7 | (def gpg-command 8 | (let [gpg2-path (which/sync "gpg2")] 9 | (str 10 | gpg2-path " -q --for-your-eyes-only --no-tty -d " 11 | "resources/creds.gpg"))) 12 | 13 | (defn creds [] 14 | (-> 15 | (js/Promise. 16 | (fn [resolve _] 17 | (print "decrypting username/pass") 18 | (exec 19 | gpg-command 20 | (fn [err stdout stderr] 21 | (if (or err (seq stderr)) 22 | (do 23 | (println err) 24 | (resolve (or err (seq stderr)))) 25 | (do 26 | (println ".. done") 27 | (resolve stdout))))))) 28 | (.then #(edn/read-string %)))) 29 | -------------------------------------------------------------------------------- /deps.edn: -------------------------------------------------------------------------------- 1 | {:paths ["src" "resources"] 2 | :deps {cheshire {:mvn/version "5.8.1"}, 3 | cider/piggieback {:mvn/version "0.4.1"}, 4 | cljs-bean {:mvn/version "1.3.0"} 5 | cljs-node-io {:mvn/version "1.1.2"} 6 | com.bhauman/figwheel-main {:mvn/version "0.2.3"} 7 | funcool/promesa {:mvn/version "2.0.1"} 8 | integrant {:mvn/version "0.8.0-alpha2"}, 9 | integrant/repl {:mvn/version "0.3.1"}, 10 | kitchen-async {:mvn/version "0.1.0-SNAPSHOT"} 11 | org.clojure/clojure {:mvn/version "1.10.1"}, 12 | org.clojure/clojurescript {:mvn/version "1.10.520"}, 13 | org.clojure/core.async {:mvn/version "0.4.500"}, 14 | org.clojure/spec.alpha {:mvn/version "0.2.176"}, 15 | org.clojure/test.check {:mvn/version "0.10.0-RC1"}, 16 | ring/ring-jetty-adapter {:mvn/version "1.7.1"}}} 17 | -------------------------------------------------------------------------------- /figwheel-main.edn: -------------------------------------------------------------------------------- 1 | ;; Figwheel-main configuration options see: https://figwheel.org/config-options 2 | ;; these will be overriden by the metadata config options in dev.cljs.edn build file 3 | { 4 | ;; Set the server port https://figwheel.org/config-options#ring-server-options 5 | ;; :ring-server-options {:port 9500} 6 | 7 | ;; Target directory https://figwheel.org/config-options#target-dir 8 | ;; you may want to set this to resources if you are using Leiningen 9 | ;; :target-dir "resources" 10 | 11 | ;; Server Ring Handler (optional) https://figwheel.org/docs/ring-handler.html 12 | ;; If you want to embed a ring handler into the figwheel server, this 13 | ;; is for simple ring servers 14 | ;; :ring-handler hello_world.server/handler 15 | 16 | ;; To be able to open files in your editor from the heads up display 17 | ;; you will need to put a script on your path. This script will have 18 | ;; to take a file path and a line number ie. 19 | ;; in ~/bin/myfile-opener: 20 | ;; 21 | ;; #! /bin/sh 22 | ;; emacsclient -n +$2:$3 $1 23 | ;; 24 | ;; :open-file-command "myfile-opener" 25 | 26 | ;; if you are using emacsclient you can just use 27 | ;; :open-file-command "emacsclient" 28 | 29 | ;; Logging output gets printed to the REPL, if you want to redirect it to a file: 30 | ;; :log-file "figwheel-main.log" 31 | } 32 | -------------------------------------------------------------------------------- /readme.org: -------------------------------------------------------------------------------- 1 | ** What's this? 2 | This is an automation showcase for setting Jira authentication cookies for [[https://github.com/go-jira/jira][go-jira]] (Jira command line client) using [[https://github.com/GoogleChrome/puppeteer][Puppeteer]]. 3 | ** Why? 4 | Basically in my current company Jira access is limited to be authenticated through Okta. I hate Jira and I can't stand its web-UI. It's beyond awful. But instead of whining how stupid it is, I decided to use it from command line instead. 5 | I couldn't find a better way to authenticate go-jira (via other methods), so I looked into authenticating it via session token. And that requires you basically logging into Jira using a browser, then opening dev-tools, then finding auth cookies and saving them in ~/.jira.d/cookies.js. The entire workflow basically screams: "automate me!". 6 | 7 | I decided to try using Puppeteer instead of WebDriver. This script is written in Clojurescript, because that allowed me to launch Puppeteer instance and keep experimenting with it via REPL (without restarting). It would've cost me many more hours to figure out if I had to use plain Javascript. 8 | 9 | ** The bottom line 10 | I doubt that you find this project useful as is, but maybe it would help you to learn a few things. 11 | ** How to use: 12 | **** Prerequisites 13 | 14 | - nodejs, npm or yarn 15 | - clojure CLI 16 | - installed and configured gpg 17 | 18 | **** For this script to work you're gonna need to: 19 | 20 | - add /resources/creds.gpg (it should be encrypted with your default GPG key) 21 | in the following format: 22 | 23 | #+begin_src clojure 24 | {:username "your-okta-username" 25 | :password "your-okta-password"} 26 | #+end_src 27 | 28 | - To test if it was correctly encrypted, you can run: 29 | 30 | #+begin_src sh 31 | "$(which gpg2) -q --for-your-eyes-only --no-tty -d resources/creds.gpg" 32 | #+end_src 33 | 34 | **** then you can run: 35 | #+begin_src sh 36 | npm install 37 | # or: 38 | yarn install 39 | #+end_src 40 | when it's done installing npm packages: 41 | #+begin_src sh 42 | npm run-script build 43 | # or: 44 | yarn run build 45 | #+end_src 46 | 47 | Those things need to be run only once. 48 | 49 | Then to run the script: 50 | 51 | #+begin_src sh 52 | npm run-script run 53 | # or: 54 | yarn run run 55 | #+end_src 56 | ** This is work in progress 57 | I am still pretty much experimenting with it, so please don't hold me accountable for any physical, emotional, monetary, and etc. damage or frustration this work may cause. 58 | ** Acknowledgment 59 | I wouldn't be able to figure out the format of ~./jira.d/cookies.js (and other things) without great help from awesome OSS community, see [[https://github.com/go-jira/jira/issues/241][github issue]] for more info. 60 | -------------------------------------------------------------------------------- /src/jira_auth/core.cljs: -------------------------------------------------------------------------------- 1 | (ns jira-auth.core 2 | (:require [cljs-bean.core :refer [bean ->clj ->js]] 3 | [cljs-node-io.core :as io :refer [slurp spit]] 4 | [jira-auth.auth :as auth] 5 | [promesa.async-cljs :refer-macros [async]] 6 | [jira-auth.jirad :as jconfig] 7 | [promesa.core :as p] 8 | os 9 | process 10 | puppeteer)) 11 | 12 | (defn headless? [] 13 | (let [args (-> 14 | process 15 | (.-argv) 16 | ->clj 17 | set)] 18 | (println "arguments " args) 19 | (contains? args "--headless=true"))) 20 | 21 | (defn- add-days 22 | "Takes a js/Date object and adds number of days to it. If `date` parameter is 23 | not given, uses today's date. Can take negative number to subtract days." 24 | ([num-of-days] 25 | (add-days (js/Date.) num-of-days)) 26 | ([date num-of-days] 27 | (.setDate date (+ num-of-days (.getDate date))) 28 | date)) 29 | 30 | (defonce current-browser (atom nil)) 31 | (defonce current-page (atom nil)) 32 | 33 | (defn launch-browser [] 34 | (println "launching browser") 35 | (p/alet [opts {:headless (headless?) 36 | :args [#_"--start-fullscreen" 37 | "--no-sandbox" 38 | "--disable-setuid-sandbox" 39 | "--window-size=2560,1440" 40 | "--lang=en-US"] 41 | :pipe true 42 | :userDataDir "user_data" 43 | ;; :defaultViewport nil 44 | :executablePath "/Applications/Chromium.app/Contents/MacOS/Chromium" 45 | :env {:TZ "America/Los_Angeles"}} 46 | browser (p/await (.launch puppeteer (clj->js opts))) 47 | page (p/await (.newPage browser))] 48 | (reset! current-browser browser) 49 | (reset! current-page page) 50 | {:page page 51 | :browser browser})) 52 | 53 | (defn okta-page? [page] 54 | (some? (re-find #"dividendfinance.okta.com" (.url page)))) 55 | 56 | (defn clear-input [page selector] 57 | (.evaluate 58 | page 59 | #(aset (js/document.querySelector %) "value" "") 60 | selector)) 61 | 62 | (defn remember-me [page] 63 | (p/chain 64 | (.$ page "input[type=checkbox][name=remember]") 65 | #(.getProperty % "checked") 66 | #(.jsonValue %) 67 | #(when-not % 68 | (.click page ".o-form-input-name-remember")))) 69 | 70 | (defn login [page] 71 | (println "logging in") 72 | (p/chain 73 | (auth/creds) 74 | (fn [{:keys [username password]}] 75 | (let [uname-sel "input[id=okta-signin-username]" 76 | pass-sel "input[id=okta-signin-password]"] 77 | (p/chain 78 | (.waitFor page ".auth-container") 79 | #(clear-input page uname-sel) 80 | #(clear-input page pass-sel) 81 | #(.type page uname-sel username) 82 | #(.type page pass-sel password) 83 | #(remember-me page) 84 | #(.waitFor page 300) 85 | #(.click page "#okta-signin-submit")))))) 86 | 87 | (defn mfa [page] 88 | (js/console.log "WAITING FOR THE APPROVAL ON YOUR PHONE...") 89 | (p/chain 90 | (.waitFor page ".mfa-verify-push") 91 | #(.click page "input[type=checkbox][name=autoPush]") 92 | #(.click page "input[type=checkbox][name=rememberDevice]") 93 | #(.waitFor page 50) 94 | #(.click page ".button[type=submit]") 95 | #(.waitFor page "body#jira"))) 96 | 97 | (defn get-browser-date [page] 98 | (p/chain 99 | (.evaluate page #(.toISOString (js/Date.))) 100 | #(js/Date. %))) 101 | 102 | (defn retrieve-cookies [page] 103 | (println "retrieving cookies") 104 | (p/chain 105 | (.cookies page) 106 | (fn [cookies] 107 | (p/alet 108 | [cur-date (p/await (get-browser-date page))] 109 | (let [expires (.toISOString (add-days cur-date 15))] 110 | (println "cookie is valid until" expires) 111 | (->> cookies 112 | ->clj 113 | (filter #(contains? #{"atlassian.xsrf.token" "JSESSIONID"} (:name %))) 114 | (map 115 | (fn [{:keys [name value domain path secure session httpOnly]}] 116 | {:Name name 117 | :Value value 118 | :Path path 119 | :Domain domain 120 | :Secure secure 121 | :Session session 122 | :Expires expires 123 | :RawExpires "" 124 | :MaxAge 0 125 | :HttpOnly httpOnly 126 | :Unparsed nil})) 127 | ->js)))))) 128 | 129 | (defn get-n-save [page] 130 | (p/chain 131 | (retrieve-cookies page) 132 | jconfig/save-cookies-js)) 133 | 134 | (defn main [] 135 | (js/console.log "Let's go!") 136 | (let [site-url (:endpoint (jconfig/read-config))] 137 | (p/alet 138 | [{:keys [page browser]} (p/await (launch-browser))] 139 | (p/chain 140 | (.goto page site-url) 141 | #(login page) 142 | #(do 143 | (println "logged in") 144 | (.waitForNavigation page {:waitUntil "domcontentloaded"})) 145 | #(when (okta-page? page) 146 | (mfa page)) 147 | #(.waitFor page 2000) 148 | ;; #(.screenshot page #js {:path "/tmp/jira-okta-cookies.png"}) 149 | #(retrieve-cookies page) 150 | jconfig/save-cookies-js 151 | #(do 152 | (println "closing browser") 153 | (.close browser)))))) 154 | 155 | (set! *main-cli-fn* main) 156 | 157 | (comment 158 | (launch-browser) 159 | (main) 160 | (mfa @current-page) 161 | 162 | (let [site-url (:endpoint (jconfig/read-config))] 163 | (p/chain 164 | (.goto @current-page site-url))) 165 | 166 | (p/chain 167 | (.$ @current-page "input[type=checkbox][name=remember]") 168 | #(.getProperty % "checked") 169 | #(.jsonValue %) 170 | ) 171 | 172 | (login @current-page) 173 | (okta-page? @current-page) 174 | (mfa @current-page) 175 | 176 | (io/slurp "~/.jira.d/cookies.js") 177 | 178 | (p/chain 179 | (retrieve-cookies @current-page) 180 | jconfig/save-cookies-js) 181 | 182 | (slurp "/Users/agibragimov/.jira.d/cookies.js") 183 | (spit (str "/Users/agibragimov/samnahui.txt") "hui")) 184 | -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@cljs-oss/module-deps@^1.1.1": 6 | version "1.1.1" 7 | resolved "https://registry.yarnpkg.com/@cljs-oss/module-deps/-/module-deps-1.1.1.tgz#62667f282164f3f10f6ab9f124ba416fd12439fa" 8 | integrity sha1-YmZ/KCFk8/EParnxJLpBb9EkOfo= 9 | dependencies: 10 | JSONStream "^1.0.3" 11 | babel-traverse "^6.23.1" 12 | babylon "^6.15.0" 13 | browser-resolve "^1.7.0" 14 | cached-path-relative "^1.0.0" 15 | concat-stream "~1.5.0" 16 | defined "^1.0.0" 17 | detective "^4.0.0" 18 | duplexer2 "^0.1.2" 19 | enhanced-resolve "3.4.1" 20 | inherits "^2.0.1" 21 | konan "1.1.0" 22 | parents "^1.0.0" 23 | readable-stream "^2.0.2" 24 | resolve "^1.1.3" 25 | stream-combiner2 "^1.1.1" 26 | subarg "^1.0.0" 27 | through2 "^2.0.0" 28 | xtend "^4.0.0" 29 | 30 | JSONStream@^1.0.3: 31 | version "1.3.5" 32 | resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.5.tgz#3208c1f08d3a4d99261ab64f92302bc15e111ca0" 33 | integrity sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ== 34 | dependencies: 35 | jsonparse "^1.2.0" 36 | through ">=2.2.7 <3" 37 | 38 | acorn@^5.2.1: 39 | version "5.7.4" 40 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.4.tgz#3e8d8a9947d0599a1796d10225d7432f4a4acf5e" 41 | integrity sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg== 42 | 43 | agent-base@^4.3.0: 44 | version "4.3.0" 45 | resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.3.0.tgz#8165f01c436009bccad0b1d122f05ed770efc6ee" 46 | integrity sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg== 47 | dependencies: 48 | es6-promisify "^5.0.0" 49 | 50 | ansi-regex@^2.0.0: 51 | version "2.1.1" 52 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" 53 | integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= 54 | 55 | ansi-styles@^2.2.1: 56 | version "2.2.1" 57 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" 58 | integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4= 59 | 60 | argparse@^1.0.7: 61 | version "1.0.10" 62 | resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" 63 | integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== 64 | dependencies: 65 | sprintf-js "~1.0.2" 66 | 67 | async-limiter@~1.0.0: 68 | version "1.0.1" 69 | resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" 70 | integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== 71 | 72 | babel-code-frame@^6.26.0: 73 | version "6.26.0" 74 | resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" 75 | integrity sha1-Y/1D99weO7fONZR9uP42mj9Yx0s= 76 | dependencies: 77 | chalk "^1.1.3" 78 | esutils "^2.0.2" 79 | js-tokens "^3.0.2" 80 | 81 | babel-messages@^6.23.0: 82 | version "6.23.0" 83 | resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e" 84 | integrity sha1-8830cDhYA1sqKVHG7F7fbGLyYw4= 85 | dependencies: 86 | babel-runtime "^6.22.0" 87 | 88 | babel-runtime@^6.22.0, babel-runtime@^6.26.0: 89 | version "6.26.0" 90 | resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" 91 | integrity sha1-llxwWGaOgrVde/4E/yM3vItWR/4= 92 | dependencies: 93 | core-js "^2.4.0" 94 | regenerator-runtime "^0.11.0" 95 | 96 | babel-traverse@^6.23.1: 97 | version "6.26.0" 98 | resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.26.0.tgz#46a9cbd7edcc62c8e5c064e2d2d8d0f4035766ee" 99 | integrity sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4= 100 | dependencies: 101 | babel-code-frame "^6.26.0" 102 | babel-messages "^6.23.0" 103 | babel-runtime "^6.26.0" 104 | babel-types "^6.26.0" 105 | babylon "^6.18.0" 106 | debug "^2.6.8" 107 | globals "^9.18.0" 108 | invariant "^2.2.2" 109 | lodash "^4.17.4" 110 | 111 | babel-types@^6.26.0: 112 | version "6.26.0" 113 | resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.26.0.tgz#a3b073f94ab49eb6fa55cd65227a334380632497" 114 | integrity sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc= 115 | dependencies: 116 | babel-runtime "^6.26.0" 117 | esutils "^2.0.2" 118 | lodash "^4.17.4" 119 | to-fast-properties "^1.0.3" 120 | 121 | babylon@^6.15.0, babylon@^6.18.0: 122 | version "6.18.0" 123 | resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3" 124 | integrity sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ== 125 | 126 | balanced-match@^1.0.0: 127 | version "1.0.0" 128 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" 129 | integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= 130 | 131 | brace-expansion@^1.1.7: 132 | version "1.1.11" 133 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" 134 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== 135 | dependencies: 136 | balanced-match "^1.0.0" 137 | concat-map "0.0.1" 138 | 139 | browser-resolve@^1.7.0: 140 | version "1.11.3" 141 | resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.11.3.tgz#9b7cbb3d0f510e4cb86bdbd796124d28b5890af6" 142 | integrity sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ== 143 | dependencies: 144 | resolve "1.1.7" 145 | 146 | buffer-from@^1.0.0: 147 | version "1.1.1" 148 | resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" 149 | integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== 150 | 151 | cached-path-relative@^1.0.0: 152 | version "1.1.0" 153 | resolved "https://registry.yarnpkg.com/cached-path-relative/-/cached-path-relative-1.1.0.tgz#865576dfef39c0d6a7defde794d078f5308e3ef3" 154 | integrity sha512-WF0LihfemtesFcJgO7xfOoOcnWzY/QHR4qeDqV44jPU3HTI54+LnfXK3SA27AVVGCdZFgjjFFaqUA9Jx7dMJZA== 155 | 156 | chalk@^1.1.3: 157 | version "1.1.3" 158 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" 159 | integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg= 160 | dependencies: 161 | ansi-styles "^2.2.1" 162 | escape-string-regexp "^1.0.2" 163 | has-ansi "^2.0.0" 164 | strip-ansi "^3.0.0" 165 | supports-color "^2.0.0" 166 | 167 | concat-map@0.0.1: 168 | version "0.0.1" 169 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 170 | integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= 171 | 172 | concat-stream@1.6.2: 173 | version "1.6.2" 174 | resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" 175 | integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== 176 | dependencies: 177 | buffer-from "^1.0.0" 178 | inherits "^2.0.3" 179 | readable-stream "^2.2.2" 180 | typedarray "^0.0.6" 181 | 182 | concat-stream@~1.5.0: 183 | version "1.5.2" 184 | resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.5.2.tgz#708978624d856af41a5a741defdd261da752c266" 185 | integrity sha1-cIl4Yk2FavQaWnQd790mHadSwmY= 186 | dependencies: 187 | inherits "~2.0.1" 188 | readable-stream "~2.0.0" 189 | typedarray "~0.0.5" 190 | 191 | core-js@^2.4.0: 192 | version "2.6.9" 193 | resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.9.tgz#6b4b214620c834152e179323727fc19741b084f2" 194 | integrity sha512-HOpZf6eXmnl7la+cUdMnLvUxKNqLUzJvgIziQ0DiF3JwSImNphIqdGqzj6hIKyX04MmV0poclQ7+wjWvxQyR2A== 195 | 196 | core-util-is@~1.0.0: 197 | version "1.0.2" 198 | resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" 199 | integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= 200 | 201 | debug@2.6.9, debug@^2.6.8: 202 | version "2.6.9" 203 | resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" 204 | integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== 205 | dependencies: 206 | ms "2.0.0" 207 | 208 | debug@^3.1.0: 209 | version "3.2.6" 210 | resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" 211 | integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== 212 | dependencies: 213 | ms "^2.1.1" 214 | 215 | debug@^4.1.0: 216 | version "4.1.1" 217 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" 218 | integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== 219 | dependencies: 220 | ms "^2.1.1" 221 | 222 | defined@^1.0.0: 223 | version "1.0.0" 224 | resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693" 225 | integrity sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM= 226 | 227 | detective@^4.0.0: 228 | version "4.7.1" 229 | resolved "https://registry.yarnpkg.com/detective/-/detective-4.7.1.tgz#0eca7314338442febb6d65da54c10bb1c82b246e" 230 | integrity sha512-H6PmeeUcZloWtdt4DAkFyzFL94arpHr3NOwwmVILFiy+9Qd4JTxxXrzfyGk/lmct2qVGBwTSwSXagqu2BxmWig== 231 | dependencies: 232 | acorn "^5.2.1" 233 | defined "^1.0.0" 234 | 235 | duplexer2@^0.1.2, duplexer2@~0.1.0: 236 | version "0.1.4" 237 | resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.1.4.tgz#8b12dab878c0d69e3e7891051662a32fc6bddcc1" 238 | integrity sha1-ixLauHjA1p4+eJEFFmKjL8a93ME= 239 | dependencies: 240 | readable-stream "^2.0.2" 241 | 242 | enhanced-resolve@3.4.1: 243 | version "3.4.1" 244 | resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-3.4.1.tgz#0421e339fd71419b3da13d129b3979040230476e" 245 | integrity sha1-BCHjOf1xQZs9oT0Smzl5BAIwR24= 246 | dependencies: 247 | graceful-fs "^4.1.2" 248 | memory-fs "^0.4.0" 249 | object-assign "^4.0.1" 250 | tapable "^0.2.7" 251 | 252 | errno@^0.1.3: 253 | version "0.1.7" 254 | resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.7.tgz#4684d71779ad39af177e3f007996f7c67c852618" 255 | integrity sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg== 256 | dependencies: 257 | prr "~1.0.1" 258 | 259 | es6-promise@^4.0.3: 260 | version "4.2.8" 261 | resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a" 262 | integrity sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w== 263 | 264 | es6-promisify@^5.0.0: 265 | version "5.0.0" 266 | resolved "https://registry.yarnpkg.com/es6-promisify/-/es6-promisify-5.0.0.tgz#5109d62f3e56ea967c4b63505aef08291c8a5203" 267 | integrity sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM= 268 | dependencies: 269 | es6-promise "^4.0.3" 270 | 271 | escape-string-regexp@^1.0.2: 272 | version "1.0.5" 273 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" 274 | integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= 275 | 276 | esprima@^4.0.0: 277 | version "4.0.1" 278 | resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" 279 | integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== 280 | 281 | esutils@^2.0.2: 282 | version "2.0.3" 283 | resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" 284 | integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== 285 | 286 | extract-zip@^1.6.6: 287 | version "1.6.7" 288 | resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-1.6.7.tgz#a840b4b8af6403264c8db57f4f1a74333ef81fe9" 289 | integrity sha1-qEC0uK9kAyZMjbV/Txp0Mz74H+k= 290 | dependencies: 291 | concat-stream "1.6.2" 292 | debug "2.6.9" 293 | mkdirp "0.5.1" 294 | yauzl "2.4.1" 295 | 296 | fd-slicer@~1.0.1: 297 | version "1.0.1" 298 | resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.0.1.tgz#8b5bcbd9ec327c5041bf9ab023fd6750f1177e65" 299 | integrity sha1-i1vL2ewyfFBBv5qwI/1nUPEXfmU= 300 | dependencies: 301 | pend "~1.2.0" 302 | 303 | fs.realpath@^1.0.0: 304 | version "1.0.0" 305 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 306 | integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= 307 | 308 | glob@^7.1.3: 309 | version "7.1.4" 310 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.4.tgz#aa608a2f6c577ad357e1ae5a5c26d9a8d1969255" 311 | integrity sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A== 312 | dependencies: 313 | fs.realpath "^1.0.0" 314 | inflight "^1.0.4" 315 | inherits "2" 316 | minimatch "^3.0.4" 317 | once "^1.3.0" 318 | path-is-absolute "^1.0.0" 319 | 320 | globals@^9.18.0: 321 | version "9.18.0" 322 | resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" 323 | integrity sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ== 324 | 325 | graceful-fs@^4.1.2: 326 | version "4.2.0" 327 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.0.tgz#8d8fdc73977cb04104721cb53666c1ca64cd328b" 328 | integrity sha512-jpSvDPV4Cq/bgtpndIWbI5hmYxhQGHPC4d4cqBPb4DLniCfhJokdXhwhaDuLBGLQdvvRum/UiX6ECVIPvDXqdg== 329 | 330 | has-ansi@^2.0.0: 331 | version "2.0.0" 332 | resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" 333 | integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE= 334 | dependencies: 335 | ansi-regex "^2.0.0" 336 | 337 | https-proxy-agent@^2.2.1: 338 | version "2.2.4" 339 | resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz#4ee7a737abd92678a293d9b34a1af4d0d08c787b" 340 | integrity sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg== 341 | dependencies: 342 | agent-base "^4.3.0" 343 | debug "^3.1.0" 344 | 345 | inflight@^1.0.4: 346 | version "1.0.6" 347 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 348 | integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= 349 | dependencies: 350 | once "^1.3.0" 351 | wrappy "1" 352 | 353 | inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.1, inherits@~2.0.3: 354 | version "2.0.4" 355 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" 356 | integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== 357 | 358 | invariant@^2.2.2: 359 | version "2.2.4" 360 | resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" 361 | integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== 362 | dependencies: 363 | loose-envify "^1.0.0" 364 | 365 | isarray@~1.0.0: 366 | version "1.0.0" 367 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" 368 | integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= 369 | 370 | isexe@^2.0.0: 371 | version "2.0.0" 372 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" 373 | integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= 374 | 375 | "js-tokens@^3.0.0 || ^4.0.0": 376 | version "4.0.0" 377 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" 378 | integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== 379 | 380 | js-tokens@^3.0.2: 381 | version "3.0.2" 382 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" 383 | integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls= 384 | 385 | js-yaml@^3.13.1: 386 | version "3.13.1" 387 | resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847" 388 | integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw== 389 | dependencies: 390 | argparse "^1.0.7" 391 | esprima "^4.0.0" 392 | 393 | jsonparse@^1.2.0: 394 | version "1.3.1" 395 | resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" 396 | integrity sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA= 397 | 398 | konan@1.1.0: 399 | version "1.1.0" 400 | resolved "https://registry.yarnpkg.com/konan/-/konan-1.1.0.tgz#337743c4b97b4bd1ef8b62a24b315eb8bc4b2094" 401 | integrity sha1-M3dDxLl7S9Hvi2KiSzFeuLxLIJQ= 402 | dependencies: 403 | babel-traverse "^6.23.1" 404 | babylon "^6.15.0" 405 | 406 | lodash@^4.17.4: 407 | version "4.17.21" 408 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" 409 | integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== 410 | 411 | loose-envify@^1.0.0: 412 | version "1.4.0" 413 | resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" 414 | integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== 415 | dependencies: 416 | js-tokens "^3.0.0 || ^4.0.0" 417 | 418 | memory-fs@^0.4.0: 419 | version "0.4.1" 420 | resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552" 421 | integrity sha1-OpoguEYlI+RHz7x+i7gO1me/xVI= 422 | dependencies: 423 | errno "^0.1.3" 424 | readable-stream "^2.0.1" 425 | 426 | mime@^2.0.3: 427 | version "2.4.4" 428 | resolved "https://registry.yarnpkg.com/mime/-/mime-2.4.4.tgz#bd7b91135fc6b01cde3e9bae33d659b63d8857e5" 429 | integrity sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA== 430 | 431 | minimatch@^3.0.4: 432 | version "3.1.2" 433 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" 434 | integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== 435 | dependencies: 436 | brace-expansion "^1.1.7" 437 | 438 | minimist@0.0.8: 439 | version "0.0.8" 440 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" 441 | integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0= 442 | 443 | minimist@^1.1.0: 444 | version "1.2.0" 445 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" 446 | integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ= 447 | 448 | mkdirp@0.5.1: 449 | version "0.5.1" 450 | resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" 451 | integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM= 452 | dependencies: 453 | minimist "0.0.8" 454 | 455 | ms@2.0.0: 456 | version "2.0.0" 457 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" 458 | integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= 459 | 460 | ms@^2.1.1: 461 | version "2.1.2" 462 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" 463 | integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== 464 | 465 | object-assign@^4.0.1: 466 | version "4.1.1" 467 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" 468 | integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= 469 | 470 | once@^1.3.0: 471 | version "1.4.0" 472 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 473 | integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= 474 | dependencies: 475 | wrappy "1" 476 | 477 | parents@^1.0.0: 478 | version "1.0.1" 479 | resolved "https://registry.yarnpkg.com/parents/-/parents-1.0.1.tgz#fedd4d2bf193a77745fe71e371d73c3307d9c751" 480 | integrity sha1-/t1NK/GTp3dF/nHjcdc8MwfZx1E= 481 | dependencies: 482 | path-platform "~0.11.15" 483 | 484 | path-is-absolute@^1.0.0: 485 | version "1.0.1" 486 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 487 | integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= 488 | 489 | path-parse@^1.0.6: 490 | version "1.0.7" 491 | resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" 492 | integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== 493 | 494 | path-platform@~0.11.15: 495 | version "0.11.15" 496 | resolved "https://registry.yarnpkg.com/path-platform/-/path-platform-0.11.15.tgz#e864217f74c36850f0852b78dc7bf7d4a5721bf2" 497 | integrity sha1-6GQhf3TDaFDwhSt43Hv31KVyG/I= 498 | 499 | pend@~1.2.0: 500 | version "1.2.0" 501 | resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" 502 | integrity sha1-elfrVQpng/kRUzH89GY9XI4AelA= 503 | 504 | process-nextick-args@~1.0.6: 505 | version "1.0.7" 506 | resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3" 507 | integrity sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M= 508 | 509 | process-nextick-args@~2.0.0: 510 | version "2.0.1" 511 | resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" 512 | integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== 513 | 514 | progress@^2.0.1: 515 | version "2.0.3" 516 | resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" 517 | integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== 518 | 519 | proxy-from-env@^1.0.0: 520 | version "1.0.0" 521 | resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.0.0.tgz#33c50398f70ea7eb96d21f7b817630a55791c7ee" 522 | integrity sha1-M8UDmPcOp+uW0h97gXYwpVeRx+4= 523 | 524 | prr@~1.0.1: 525 | version "1.0.1" 526 | resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" 527 | integrity sha1-0/wRS6BplaRexok/SEzrHXj19HY= 528 | 529 | puppeteer@^1.19.0: 530 | version "1.19.0" 531 | resolved "https://registry.yarnpkg.com/puppeteer/-/puppeteer-1.19.0.tgz#e3b7b448c2c97933517078d7a2c53687361bebea" 532 | integrity sha512-2S6E6ygpoqcECaagDbBopoSOPDv0pAZvTbnBgUY+6hq0/XDFDOLEMNlHF/SKJlzcaZ9ckiKjKDuueWI3FN/WXw== 533 | dependencies: 534 | debug "^4.1.0" 535 | extract-zip "^1.6.6" 536 | https-proxy-agent "^2.2.1" 537 | mime "^2.0.3" 538 | progress "^2.0.1" 539 | proxy-from-env "^1.0.0" 540 | rimraf "^2.6.1" 541 | ws "^6.1.0" 542 | 543 | readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.2.2, readable-stream@~2.3.6: 544 | version "2.3.6" 545 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" 546 | integrity sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw== 547 | dependencies: 548 | core-util-is "~1.0.0" 549 | inherits "~2.0.3" 550 | isarray "~1.0.0" 551 | process-nextick-args "~2.0.0" 552 | safe-buffer "~5.1.1" 553 | string_decoder "~1.1.1" 554 | util-deprecate "~1.0.1" 555 | 556 | readable-stream@~2.0.0: 557 | version "2.0.6" 558 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.0.6.tgz#8f90341e68a53ccc928788dacfcd11b36eb9b78e" 559 | integrity sha1-j5A0HmilPMySh4jaz80Rs265t44= 560 | dependencies: 561 | core-util-is "~1.0.0" 562 | inherits "~2.0.1" 563 | isarray "~1.0.0" 564 | process-nextick-args "~1.0.6" 565 | string_decoder "~0.10.x" 566 | util-deprecate "~1.0.1" 567 | 568 | regenerator-runtime@^0.11.0: 569 | version "0.11.1" 570 | resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" 571 | integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg== 572 | 573 | resolve@1.1.7: 574 | version "1.1.7" 575 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" 576 | integrity sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs= 577 | 578 | resolve@^1.1.3: 579 | version "1.11.1" 580 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.11.1.tgz#ea10d8110376982fef578df8fc30b9ac30a07a3e" 581 | integrity sha512-vIpgF6wfuJOZI7KKKSP+HmiKggadPQAdsp5HiC1mvqnfp0gF1vdwgBWZIdrVft9pgqoMFQN+R7BSWZiBxx+BBw== 582 | dependencies: 583 | path-parse "^1.0.6" 584 | 585 | rimraf@^2.6.1: 586 | version "2.6.3" 587 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" 588 | integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== 589 | dependencies: 590 | glob "^7.1.3" 591 | 592 | safe-buffer@~5.1.0, safe-buffer@~5.1.1: 593 | version "5.1.2" 594 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" 595 | integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== 596 | 597 | sprintf-js@~1.0.2: 598 | version "1.0.3" 599 | resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" 600 | integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= 601 | 602 | stream-combiner2@^1.1.1: 603 | version "1.1.1" 604 | resolved "https://registry.yarnpkg.com/stream-combiner2/-/stream-combiner2-1.1.1.tgz#fb4d8a1420ea362764e21ad4780397bebcb41cbe" 605 | integrity sha1-+02KFCDqNidk4hrUeAOXvry0HL4= 606 | dependencies: 607 | duplexer2 "~0.1.0" 608 | readable-stream "^2.0.2" 609 | 610 | string_decoder@~0.10.x: 611 | version "0.10.31" 612 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" 613 | integrity sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ= 614 | 615 | string_decoder@~1.1.1: 616 | version "1.1.1" 617 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" 618 | integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== 619 | dependencies: 620 | safe-buffer "~5.1.0" 621 | 622 | strip-ansi@^3.0.0: 623 | version "3.0.1" 624 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" 625 | integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= 626 | dependencies: 627 | ansi-regex "^2.0.0" 628 | 629 | subarg@^1.0.0: 630 | version "1.0.0" 631 | resolved "https://registry.yarnpkg.com/subarg/-/subarg-1.0.0.tgz#f62cf17581e996b48fc965699f54c06ae268b8d2" 632 | integrity sha1-9izxdYHplrSPyWVpn1TAauJouNI= 633 | dependencies: 634 | minimist "^1.1.0" 635 | 636 | supports-color@^2.0.0: 637 | version "2.0.0" 638 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" 639 | integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= 640 | 641 | tapable@^0.2.7: 642 | version "0.2.9" 643 | resolved "https://registry.yarnpkg.com/tapable/-/tapable-0.2.9.tgz#af2d8bbc9b04f74ee17af2b4d9048f807acd18a8" 644 | integrity sha512-2wsvQ+4GwBvLPLWsNfLCDYGsW6xb7aeC6utq2Qh0PFwgEy7K7dsma9Jsmb2zSQj7GvYAyUGSntLtsv++GmgL1A== 645 | 646 | through2@^2.0.0: 647 | version "2.0.5" 648 | resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" 649 | integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== 650 | dependencies: 651 | readable-stream "~2.3.6" 652 | xtend "~4.0.1" 653 | 654 | "through@>=2.2.7 <3": 655 | version "2.3.8" 656 | resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" 657 | integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= 658 | 659 | to-fast-properties@^1.0.3: 660 | version "1.0.3" 661 | resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47" 662 | integrity sha1-uDVx+k2MJbguIxsG46MFXeTKGkc= 663 | 664 | typedarray@^0.0.6, typedarray@~0.0.5: 665 | version "0.0.6" 666 | resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" 667 | integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= 668 | 669 | util-deprecate@~1.0.1: 670 | version "1.0.2" 671 | resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" 672 | integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= 673 | 674 | which@^1.3.1: 675 | version "1.3.1" 676 | resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" 677 | integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== 678 | dependencies: 679 | isexe "^2.0.0" 680 | 681 | wrappy@1: 682 | version "1.0.2" 683 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 684 | integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= 685 | 686 | ws@^6.1.0: 687 | version "6.2.3" 688 | resolved "https://registry.yarnpkg.com/ws/-/ws-6.2.3.tgz#ccc96e4add5fd6fedbc491903075c85c5a11d9ee" 689 | integrity sha512-jmTjYU0j60B+vHey6TfR3Z7RD61z/hmxBS3VMSGIrroOWXQEneK1zNuotOUrGyBHQj0yrpsLHPWtigEFd13ndA== 690 | dependencies: 691 | async-limiter "~1.0.0" 692 | 693 | xtend@^4.0.0, xtend@~4.0.1: 694 | version "4.0.2" 695 | resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" 696 | integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== 697 | 698 | yauzl@2.4.1: 699 | version "2.4.1" 700 | resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.4.1.tgz#9528f442dab1b2284e58b4379bb194e22e0c4005" 701 | integrity sha1-lSj0QtqxsihOWLQ3m7GU4i4MQAU= 702 | dependencies: 703 | fd-slicer "~1.0.1" 704 | --------------------------------------------------------------------------------