├── .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 |
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 |
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------