├── .gitignore ├── LICENSE ├── Readme.md ├── demo ├── install-node.cast └── install-node.svg ├── index.ts ├── install.sh ├── package.json ├── tsconfig.json ├── vercel.json └── yarn.lock /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | .vercel 3 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2017 Vercel, Inc. 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /Readme.md: -------------------------------------------------------------------------------- 1 | # install-node.vercel.app 2 | 3 | Simple one-liner shell script that installs Node.js binaries. 4 | 5 | Demo 6 | 7 | Create `install-node` as a bash alias! 8 | 9 | ```bash 10 | alias install-node="curl -sfLS https://install-node.vercel.app | bash -s --" 11 | 12 | install-node 14 -y --prefix=$HOME/node14 13 | ``` 14 | -------------------------------------------------------------------------------- /demo/install-node.cast: -------------------------------------------------------------------------------- 1 | {"version": 2, "width": 80, "height": 16, "timestamp": 1618000372, "env": {"SHELL": "/bin/zsh", "TERM": "xterm-256color"}} 2 | [0.0490755,"o","\u001b[1m\u001b[7m%\u001b[27m\u001b[1m\u001b[0m \r \r"] 3 | [0.0494725,"o","\r\u001b[0m\u001b[27m\u001b[24m\u001b[J$ \u001b[K\u001b[?2004h"] 4 | [0.198391,"o","c"] 5 | [0.263275,"o","\bcu"] 6 | [0.316218,"o","r"] 7 | [0.3490075,"o","l"] 8 | [0.4032015,"o"," "] 9 | [0.4620675,"o","-"] 10 | [0.5243345,"o","s"] 11 | [0.55001,"o","f"] 12 | [0.6617235,"o","L"] 13 | [0.711368,"o","S"] 14 | [0.7540715,"o"," "] 15 | [0.8544895,"o","i"] 16 | [0.8991775,"o","n"] 17 | [0.9293755,"o","s"] 18 | [0.9586735,"o","t"] 19 | [0.9887205,"o","a"] 20 | [1.020682,"o","l"] 21 | [1.0710505,"o","l"] 22 | [1.171116,"o","-"] 23 | [1.278426,"o","n"] 24 | [1.3080025,"o","o"] 25 | [1.340417,"o","d"] 26 | [1.3702395,"o","e"] 27 | [1.5238095,"o","."] 28 | [1.603741,"o","v"] 29 | [1.636847,"o","e"] 30 | [1.675114,"o","r"] 31 | [1.7474595,"o","c"] 32 | [1.79073,"o","e"] 33 | [1.8251235,"o","l"] 34 | [1.915128,"o","."] 35 | [1.9543855,"o","a"] 36 | [2.0155495,"o","p"] 37 | [2.0756015,"o","p"] 38 | [2.1325455,"o"," "] 39 | [2.2122945,"o","|"] 40 | [2.256513,"o"," "] 41 | [2.325765,"o","s"] 42 | [2.387924,"o","h"] 43 | [2.504107,"o","\u001b[?2004l\r\r\n"] 44 | [5.034805,"o"," \u001b[4mConfiguration\u001b(B\u001b[m\r\n"] 45 | [5.0349335,"o","\u001b[1m\u001b[30m>\u001b(B\u001b[m \u001b[1mVersion\u001b(B\u001b[m: \u001b[32mv15.14.0\u001b(B\u001b[m (resolved from \u001b[36mlatest\u001b(B\u001b[m)\r\n\u001b[1m\u001b[30m>\u001b(B\u001b[m \u001b[1mPrefix\u001b(B\u001b[m: \u001b[32m/usr/local\u001b(B\u001b[m\r\n"] 46 | [5.035202,"o","\u001b[1m\u001b[30m>\u001b(B\u001b[m \u001b[1mPlatform\u001b(B\u001b[m: \u001b[32mdarwin\u001b(B\u001b[m\r\n\u001b[1m\u001b[30m>\u001b(B\u001b[m \u001b[1mArch\u001b(B\u001b[m: \u001b[32mx64\u001b(B\u001b[m\r\n"] 47 | [5.035458,"o","\r\n"] 48 | [5.035751,"o","\u001b[1m\u001b[30m>\u001b(B\u001b[m Tarball URL: \u001b[4m\u001b[34mhttps://nodejs.org/dist/v15.14.0/node-v15.14.0-darwin-x64.tar.gz\u001b(B\u001b[m\r\n"] 49 | [5.0374575,"o","\u001b[35m?\u001b(B\u001b[m Install Node.js \u001b[32mv15.14.0\u001b(B\u001b[m to \u001b[1m\u001b[32m/usr/local\u001b(B\u001b[m? \u001b[1m[yN]\u001b(B\u001b[m "] 50 | [5.4087145,"o","y"] 51 | [5.7956065,"o","\r\n"] 52 | [5.7957895,"o","\u001b[1m\u001b[30m>\u001b(B\u001b[m Installing Node.js, please wait…\r\n"] 53 | [8.1891345,"o","\u001b[32m✓\u001b(B\u001b[m Done\r\n"] 54 | [8.1893565,"o","\u001b[1m\u001b[7m%\u001b[27m\u001b[1m\u001b[0m \r \r"] 55 | [8.189414,"o","\r\u001b[0m\u001b[27m\u001b[24m\u001b[J$ \u001b[K\u001b[?2004h"] 56 | [11.0545775,"o","\u001b[?2004l\r\r\n"] 57 | -------------------------------------------------------------------------------- /demo/install-node.svg: -------------------------------------------------------------------------------- 1 | $$curl$curl-sfLS$curl-sfLSinstall-node.vercel.app$curl-sfLSinstall-node.vercel.app|$curl-sfLSinstall-node.vercel.app|shConfiguration>Version:v15.14.0(resolvedfromlatest)>Prefix:/usr/local>Platform:darwin>Arch:x64>TarballURL:https://nodejs.org/dist/v15.14.0/node-v15.14.0-darwin-x64.tar.gz?InstallNode.jsv15.14.0to/usr/local?[yN]y>InstallingNode.js,pleasewait…Done$c$cu$cur$curl-$curl-s$curl-sf$curl-sfL$curl-sfLSi$curl-sfLSin$curl-sfLSins$curl-sfLSinst$curl-sfLSinsta$curl-sfLSinstal$curl-sfLSinstall$curl-sfLSinstall-$curl-sfLSinstall-n$curl-sfLSinstall-no$curl-sfLSinstall-nod$curl-sfLSinstall-node$curl-sfLSinstall-node.$curl-sfLSinstall-node.v$curl-sfLSinstall-node.ve$curl-sfLSinstall-node.ver$curl-sfLSinstall-node.verc$curl-sfLSinstall-node.verce$curl-sfLSinstall-node.vercel$curl-sfLSinstall-node.vercel.$curl-sfLSinstall-node.vercel.a$curl-sfLSinstall-node.vercel.ap$curl-sfLSinstall-node.vercel.app|s?InstallNode.jsv15.14.0to/usr/local?[yN] -------------------------------------------------------------------------------- /index.ts: -------------------------------------------------------------------------------- 1 | import { run } from 'micro'; 2 | import { join } from 'path'; 3 | import { parse } from 'url'; 4 | import { readFileSync } from 'fs'; 5 | import { IncomingMessage, ServerResponse } from 'http'; 6 | 7 | const installScript = readFileSync(join(__dirname, 'install.sh'), 'utf8'); 8 | 9 | function handler (req: IncomingMessage, res: ServerResponse): string { 10 | res.setHeader('Content-Type', 'text/plain; charset=utf8'); 11 | const { pathname = '/' } = parse(req.url || '/'); 12 | if (typeof pathname !== 'string') { 13 | throw new Error('No "pathname" provided!'); 14 | } 15 | const version = pathname.substring(1); 16 | if (version) { 17 | return installScript.replace('VERSION=latest', `VERSION=${version}`); 18 | } else { 19 | return installScript; 20 | } 21 | } 22 | 23 | export default (req: IncomingMessage, res: ServerResponse) => run(req, res, handler); 24 | -------------------------------------------------------------------------------- /install.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -euo pipefail 3 | 4 | # `install-node.vercel.app` is a simple one-liner bash script 5 | # to install Node.js binaries from `nodejs.org/dist` or 6 | # `unofficial-builds.nodejs.org/download/release`. 7 | # 8 | # For newest Node.js version: 9 | # 10 | # $ curl -sfLS install-node.vercel.app | bash 11 | # 12 | # For latest LTS Node.js version: 13 | # 14 | # $ curl -sfLS install-node.vercel.app/lts | bash 15 | # 16 | # Install a specific version (ex: v8.9.0): 17 | # 18 | # $ curl -sfLS install-node.vercel.app/v8.9.0 | bash 19 | # 20 | # Semver also works (ex: v4.x.x): 21 | # 22 | # $ curl -sfLS install-node.vercel.app/4 | bash 23 | # 24 | # Options may be passed to the shell script with `-s --`: 25 | # 26 | # $ curl -sfLS install-node.vercel.app | bash -s -- --prefix=$HOME --version=8 --verbose 27 | # $ curl -sfLS install-node.vercel.app | bash -s -- -P $HOME -v 8 -V 28 | # 29 | # Patches welcome! 30 | # https://github.com/vercel/install-node 31 | # Nathan Rajlich 32 | 33 | BOLD="$(tput bold 2>/dev/null || echo '')" 34 | GREY="$(tput setaf 0 2>/dev/null || echo '')" 35 | UNDERLINE="$(tput smul 2>/dev/null || echo '')" 36 | RED="$(tput setaf 1 2>/dev/null || echo '')" 37 | GREEN="$(tput setaf 2 2>/dev/null || echo '')" 38 | YELLOW="$(tput setaf 3 2>/dev/null || echo '')" 39 | BLUE="$(tput setaf 4 2>/dev/null || echo '')" 40 | MAGENTA="$(tput setaf 5 2>/dev/null || echo '')" 41 | CYAN="$(tput setaf 6 2>/dev/null || echo '')" 42 | NO_COLOR="$(tput sgr0 2>/dev/null || echo '')" 43 | 44 | info() { 45 | printf "${BOLD}${GREY}>${NO_COLOR} $@\n" 46 | } 47 | 48 | warn() { 49 | printf "${YELLOW}! $@${NO_COLOR}\n" 50 | } 51 | 52 | error() { 53 | printf "${RED}x $@${NO_COLOR}\n" >&2 54 | } 55 | 56 | complete() { 57 | printf "${GREEN}✓${NO_COLOR} $@\n" 58 | } 59 | 60 | # Currently known to support: 61 | # - win (Git Bash) 62 | # - darwin 63 | # - linux 64 | # - linux_musl (Alpine) 65 | detect_platform() { 66 | local platform="$(uname -s | tr '[:upper:]' '[:lower:]')" 67 | 68 | # check for MUSL 69 | if [ "${platform}" = "linux" ]; then 70 | if ldd /bin/sh | grep -i musl >/dev/null; then 71 | platform=linux_musl 72 | fi 73 | fi 74 | 75 | # mingw is Git-Bash 76 | if echo "${platform}" | grep -i mingw >/dev/null; then 77 | platform=win 78 | fi 79 | 80 | echo "${platform}" 81 | } 82 | 83 | # Currently known to support: 84 | # - x64 (x86_64) 85 | # - x86 (i386) 86 | # - armv6l (Raspbian on Pi 1/Zero) 87 | # - armv7l (Raspbian on Pi 2/3) 88 | # - arm64 (Apple M1) 89 | detect_arch() { 90 | local arch="$(uname -m | tr '[:upper:]' '[:lower:]')" 91 | 92 | if echo "${arch}" | grep -i arm >/dev/null; then 93 | # ARM is fine 94 | echo "${arch}" 95 | else 96 | if [ "${arch}" = "i386" ]; then 97 | arch=x86 98 | elif [ "${arch}" = "x86_64" ]; then 99 | arch=x64 100 | elif [ "${arch}" = "aarch64" ]; then 101 | arch=arm64 102 | fi 103 | 104 | # `uname -m` in some cases mis-reports 32-bit OS as 64-bit, so double check 105 | if [ "${arch}" = "x64" ] && [ "$(getconf LONG_BIT)" -eq 32 ]; then 106 | arch=x86 107 | fi 108 | 109 | echo "${arch}" 110 | fi 111 | } 112 | 113 | confirm() { 114 | if [ -z "${FORCE-}" ]; then 115 | printf "${MAGENTA}?${NO_COLOR} $@ ${BOLD}[yN]${NO_COLOR} " 116 | set +e 117 | read yn < /dev/tty 118 | rc=$? 119 | set -e 120 | if [ $rc -ne 0 ]; then 121 | error "Error reading from prompt (please re-run with the \`--yes\` option)" 122 | return 1 123 | fi 124 | if [ "$yn" != "y" ] && [ "$yn" != "yes" ]; then 125 | error "Aborting (please answer \"yes\" to continue)" 126 | return 1 127 | fi 128 | fi 129 | } 130 | 131 | check_prefix() { 132 | local bin="$1/bin" 133 | 134 | # https://stackoverflow.com/a/11655875 135 | local good=$( IFS=: 136 | for path in $PATH; do 137 | if [ "${path}" = "${bin}" ]; then 138 | echo 1 139 | break 140 | fi 141 | done 142 | ) 143 | 144 | if [ "${good}" != "1" ]; then 145 | warn "Prefix bin directory ${bin} is not in your \$PATH" 146 | fi 147 | } 148 | 149 | # defaults 150 | if [ -z "${VERSION-}" ]; then 151 | VERSION=latest 152 | fi 153 | 154 | if [ -z "${PLATFORM-}" ]; then 155 | PLATFORM="$(detect_platform)" 156 | fi 157 | 158 | if [ -z "${PREFIX-}" ]; then 159 | PREFIX=/usr/local 160 | fi 161 | 162 | if [ -z "${ARCH-}" ]; then 163 | ARCH="$(detect_arch)" 164 | fi 165 | 166 | # parse argv variables 167 | while [ "$#" -gt 0 ]; do 168 | case "$1" in 169 | -v|--version) VERSION="$2"; shift 2;; 170 | -p|--platform) PLATFORM="$2"; shift 2;; 171 | -P|--prefix) PREFIX="$2"; shift 2;; 172 | -a|--arch) ARCH="$2"; shift 2;; 173 | 174 | -V|--verbose) VERBOSE=1; shift 1;; 175 | -f|-y|--force|--yes) FORCE=1; shift 1;; 176 | 177 | -v=*|--version=*) VERSION="${1#*=}"; shift 1;; 178 | -p=*|--platform=*) PLATFORM="${1#*=}"; shift 1;; 179 | -P=*|--prefix=*) PREFIX="${1#*=}"; shift 1;; 180 | -a=*|--arch=*) ARCH="${1#*=}"; shift 1;; 181 | -V=*|--verbose=*) VERBOSE="${1#*=}"; shift 1;; 182 | -f=*|-y=*|--force=*|--yes=*) FORCE="${1#*=}"; shift 1;; 183 | 184 | -*) error "Unknown option: $1"; exit 2;; 185 | *) VERSION="$1"; shift 1;; 186 | esac 187 | done 188 | 189 | # Resolve the requested version tag into an existing Node.js version 190 | HEADERS="$(curl -sfLSI "https://resolve-node.vercel.app/?tag=${VERSION}&platform=${PLATFORM}&arch=${ARCH}")" 191 | RESOLVED="$(echo "$HEADERS" | grep "x-node-version" | awk 'BEGIN{RS="\r\n";} /^x-node-version/{print $2}')" 192 | PLATFORM="$(echo "$HEADERS" | grep "x-platform" | awk 'BEGIN{RS="\r\n";} /^x-platform/{print $2}')" 193 | ARCH="$(echo "$HEADERS" | grep "x-arch" | awk 'BEGIN{RS="\r\n";} /^x-arch/{print $2}')" 194 | 195 | if [ -z "${RESOLVED}" ]; then 196 | error "Could not resolve Node.js version ${MAGENTA}${RESOLED}${NO_COLOR}" 197 | exit 1 198 | fi 199 | 200 | PRETTY_VERSION="${GREEN}${RESOLVED}${NO_COLOR}" 201 | if [ "$RESOLVED" != "v$(echo "$VERSION" | sed 's/^v//')" ]; then 202 | PRETTY_VERSION="$PRETTY_VERSION (resolved from ${CYAN}${VERSION}${NO_COLOR})" 203 | fi 204 | printf " ${UNDERLINE}Configuration${NO_COLOR}\n" 205 | info "${BOLD}Version${NO_COLOR}: ${PRETTY_VERSION}" 206 | info "${BOLD}Prefix${NO_COLOR}: ${GREEN}${PREFIX}${NO_COLOR}" 207 | info "${BOLD}Platform${NO_COLOR}: ${GREEN}${PLATFORM}${NO_COLOR}" 208 | info "${BOLD}Arch${NO_COLOR}: ${GREEN}${ARCH}${NO_COLOR}" 209 | 210 | # non-empty VERBOSE enables verbose untarring 211 | if [ -n "${VERBOSE-}" ]; then 212 | VERBOSE=v 213 | info "${BOLD}Verbose${NO_COLOR}: yes" 214 | else 215 | VERBOSE= 216 | fi 217 | 218 | echo 219 | 220 | URL="$(echo "$HEADERS" | grep "x-download-url" | awk 'BEGIN{RS="\r\n";} /^x-download-url/{print $2}')" 221 | info "Tarball URL: ${UNDERLINE}${BLUE}${URL}${NO_COLOR}" 222 | check_prefix "${PREFIX}" 223 | confirm "Install Node.js ${GREEN}${RESOLVED}${NO_COLOR} to ${BOLD}${GREEN}${PREFIX}${NO_COLOR}?" 224 | 225 | info "Installing Node.js, please wait…" 226 | 227 | curl -sfLS "${URL}" \ 228 | | tar xzf${VERBOSE} - \ 229 | --exclude CHANGELOG.md \ 230 | --exclude LICENSE \ 231 | --exclude README.md \ 232 | --strip-components 1 \ 233 | -C "${PREFIX}" 234 | 235 | complete "Done" 236 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "install-node", 3 | "version": "1.0.0", 4 | "description": "Node.js one-liner install shell script", 5 | "author": "Nathan Rajlich ", 6 | "license": "MIT", 7 | "dependencies": { 8 | "micro": "^9.0.2" 9 | }, 10 | "devDependencies": { 11 | "@types/micro": "^7.3.3", 12 | "@types/node": "^11.11.4" 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es5", 4 | "module": "commonjs", 5 | "lib": ["es2015"], 6 | "strict": true, 7 | "noImplicitAny": true, 8 | "strictNullChecks": true, 9 | "strictFunctionTypes": true, 10 | "strictBindCallApply": true, 11 | "strictPropertyInitialization": true, 12 | "noImplicitThis": true, 13 | "alwaysStrict": true, 14 | "esModuleInterop": true 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /vercel.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://openapi.vercel.sh/vercel.json", 3 | "version": 2, 4 | "builds": [ 5 | { "src": "*.ts", "use": "@vercel/node" } 6 | ], 7 | "routes": [ 8 | { "src": "/.*", "dest": "/index.ts" } 9 | ] 10 | } 11 | -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@types/micro@^7.3.3": 6 | version "7.3.3" 7 | resolved "https://registry.yarnpkg.com/@types/micro/-/micro-7.3.3.tgz#31ead8df18ac10d58b7be1186d4b2d977b13a938" 8 | integrity sha512-I3n3QYT7lqAxkyAoTZyg1yrvo38BxW/7ZafLAXZF/zZQOnAnQzg6j9XOuSmUEL5GGVFKWw4iqM+ZLnqb2154TA== 9 | dependencies: 10 | "@types/node" "*" 11 | 12 | "@types/node@*", "@types/node@^11.11.4": 13 | version "11.11.4" 14 | resolved "https://registry.yarnpkg.com/@types/node/-/node-11.11.4.tgz#8808bd5a82bbf6f5d412eff1c228d178e7c24bb3" 15 | integrity sha512-02tIL+QIi/RW4E5xILdoAMjeJ9kYq5t5S2vciUdFPXv/ikFTb0zK8q9vXkg4+WAJuYXGiVT1H28AkD2C+IkXVw== 16 | 17 | ansi-styles@^3.2.1: 18 | version "3.2.1" 19 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" 20 | integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== 21 | dependencies: 22 | color-convert "^1.9.0" 23 | 24 | arg@2.0.0: 25 | version "2.0.0" 26 | resolved "https://registry.yarnpkg.com/arg/-/arg-2.0.0.tgz#c06e7ff69ab05b3a4a03ebe0407fac4cba657545" 27 | integrity sha512-XxNTUzKnz1ctK3ZIcI2XUPlD96wbHP2nGqkPKpvk/HNRlPveYrXIVSTk9m3LcqOgDPg3B1nMvdV/K8wZd7PG4w== 28 | 29 | bytes@3.0.0: 30 | version "3.0.0" 31 | resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" 32 | integrity sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg= 33 | 34 | chalk@2.4.0: 35 | version "2.4.0" 36 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.0.tgz#a060a297a6b57e15b61ca63ce84995daa0fe6e52" 37 | integrity sha512-Wr/w0f4o9LuE7K53cD0qmbAMM+2XNLzR29vFn5hqko4sxGlUsyy363NvmyGIyk5tpe9cjTr9SJYbysEyPkRnFw== 38 | dependencies: 39 | ansi-styles "^3.2.1" 40 | escape-string-regexp "^1.0.5" 41 | supports-color "^5.3.0" 42 | 43 | color-convert@^1.9.0: 44 | version "1.9.3" 45 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" 46 | integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== 47 | dependencies: 48 | color-name "1.1.3" 49 | 50 | color-name@1.1.3: 51 | version "1.1.3" 52 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" 53 | integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= 54 | 55 | content-type@1.0.4: 56 | version "1.0.4" 57 | resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" 58 | integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== 59 | 60 | depd@1.1.1: 61 | version "1.1.1" 62 | resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.1.tgz#5783b4e1c459f06fa5ca27f991f3d06e7a310359" 63 | integrity sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k= 64 | 65 | escape-string-regexp@^1.0.5: 66 | version "1.0.5" 67 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" 68 | integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= 69 | 70 | has-flag@^3.0.0: 71 | version "3.0.0" 72 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" 73 | integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= 74 | 75 | http-errors@1.6.2: 76 | version "1.6.2" 77 | resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.2.tgz#0a002cc85707192a7e7946ceedc11155f60ec736" 78 | integrity sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY= 79 | dependencies: 80 | depd "1.1.1" 81 | inherits "2.0.3" 82 | setprototypeof "1.0.3" 83 | statuses ">= 1.3.1 < 2" 84 | 85 | iconv-lite@0.4.19: 86 | version "0.4.19" 87 | resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.19.tgz#f7468f60135f5e5dad3399c0a81be9a1603a082b" 88 | integrity sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ== 89 | 90 | inherits@2.0.3: 91 | version "2.0.3" 92 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" 93 | integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= 94 | 95 | is-stream@1.1.0: 96 | version "1.1.0" 97 | resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" 98 | integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= 99 | 100 | micro@^9.0.2: 101 | version "9.3.3" 102 | resolved "https://registry.yarnpkg.com/micro/-/micro-9.3.3.tgz#32728c7be15e807691ead85da27fd8117a8bca24" 103 | integrity sha512-GbCp4NFQguARch0odX+BuWDja2Kc1pbYZqWfRvEDihGFTJG8U77C0L+Owg2j7TPyhQ5Tc+7z/SxspRqjdiZCjQ== 104 | dependencies: 105 | arg "2.0.0" 106 | chalk "2.4.0" 107 | content-type "1.0.4" 108 | is-stream "1.1.0" 109 | raw-body "2.3.2" 110 | 111 | raw-body@2.3.2: 112 | version "2.3.2" 113 | resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.3.2.tgz#bcd60c77d3eb93cde0050295c3f379389bc88f89" 114 | integrity sha1-vNYMd9Prk83gBQKVw/N5OJvIj4k= 115 | dependencies: 116 | bytes "3.0.0" 117 | http-errors "1.6.2" 118 | iconv-lite "0.4.19" 119 | unpipe "1.0.0" 120 | 121 | setprototypeof@1.0.3: 122 | version "1.0.3" 123 | resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.0.3.tgz#66567e37043eeb4f04d91bd658c0cbefb55b8e04" 124 | integrity sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ= 125 | 126 | "statuses@>= 1.3.1 < 2": 127 | version "1.5.0" 128 | resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" 129 | integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= 130 | 131 | supports-color@^5.3.0: 132 | version "5.5.0" 133 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" 134 | integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== 135 | dependencies: 136 | has-flag "^3.0.0" 137 | 138 | unpipe@1.0.0: 139 | version "1.0.0" 140 | resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" 141 | integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= 142 | --------------------------------------------------------------------------------