Merge branch 'master' of github.com:kvz/bash3boilerplate

This commit is contained in:
Kevin van Zonneveld 2020-04-22 09:51:38 +02:00
commit 23ce0e6b85
13 changed files with 159 additions and 56 deletions

View File

@ -11,15 +11,23 @@ Unplanned.
## master ## master
Released: TBA. Released: TBA.
[Diff](https://github.com/kvz/bash3boilerplate/compare/v2.4.0...master). [Diff](https://github.com/kvz/bash3boilerplate/compare/v2.4.2...master).
## v2.4.2
## v2.4.0 Released: 2019-11-07.
[Diff](https://github.com/kvz/bash3boilerplate/compare/v2.4.1...v2.4.2).
Released: 2016-12-21. - [x] Upgrade to `lanyon@0.1.16`
[Diff](https://github.com/kvz/bash3boilerplate/compare/v2.3.0...v2.4.0). - [x] Capture correct error_code in err_report (#124, @eval)
- [x] Enhanced ini file handling: create new file, create new sections, handle default section, read key from given section (@rfuehrer)
- [x] Upgrade to `lanyon@0.0.143` ## v2.4.1
Released: 2019-11-07.
[Diff](https://github.com/kvz/bash3boilerplate/compare/v2.3.0...v2.4.1).
- [x] Upgrade to `lanyon@0.1.7`
- [x] Allow counting how many times an argument is used (@genesiscloud) - [x] Allow counting how many times an argument is used (@genesiscloud)
- [x] Fix typos in megamount (thanks @gsaponaro) - [x] Fix typos in megamount (thanks @gsaponaro)
- [x] Enable color in screen or tmux (#92, @gmasse) - [x] Enable color in screen or tmux (#92, @gmasse)
@ -31,6 +39,13 @@ Released: 2016-12-21.
- [x] Add support for repeatable arguments (@genesiscloud) - [x] Add support for repeatable arguments (@genesiscloud)
- [x] Fix remaining warnings with shellcheck v0.7.0 (#107, @genesiscloud) - [x] Fix remaining warnings with shellcheck v0.7.0 (#107, @genesiscloud)
## v2.4.0
Released: 2016-12-21.
[Diff](https://github.com/kvz/bash3boilerplate/compare/v2.3.0...v2.4.0).
- [x] Upgrade to `lanyon@0.0.143`
## v2.3.0 ## v2.3.0
Released: 2016-12-21. Released: 2016-12-21.

View File

@ -98,12 +98,11 @@ As of `v1.0.3`, b3bp offers some nice re-usable libraries in `./src`. In order t
It is nice to have a Bash package that can not only be used in the terminal, but also invoked as a command line function. In order to achieve this, the exporting of your functionality *should* follow this pattern: It is nice to have a Bash package that can not only be used in the terminal, but also invoked as a command line function. In order to achieve this, the exporting of your functionality *should* follow this pattern:
```bash ```bash
if [ "${BASH_SOURCE[0]}" != "${0}" ]; then if [[ "${BASH_SOURCE[0]}" = "${0}" ]]; then
export -f my_script
else
my_script "${@}" my_script "${@}"
exit $? exit $?
fi fi
export -f my_script
``` ```
This allows a user to `source` your script or invoke it as a script. This allows a user to `source` your script or invoke it as a script.
@ -138,7 +137,7 @@ $ my_script some more args --blah
1. Use `set`, rather than relying on a shebang like `#!/usr/bin/env bash -e`, since that is neutralized when someone runs your script as `bash yourscript.sh`. 1. Use `set`, rather than relying on a shebang like `#!/usr/bin/env bash -e`, since that is neutralized when someone runs your script as `bash yourscript.sh`.
1. Use `#!/usr/bin/env bash`, as it is more portable than `#!/bin/bash`. 1. Use `#!/usr/bin/env bash`, as it is more portable than `#!/bin/bash`.
1. Use `${BASH_SOURCE[0]}` if you refer to current file, even if it is sourced by a parent script. In other cases, use `${0}`. 1. Use `${BASH_SOURCE[0]}` if you refer to current file, even if it is sourced by a parent script. In other cases, use `${0}`.
1. Use `:-` if you want to test variables that could be undeclared. For instance, with `if [ "${NAME:-}" = "Kevin" ]`, `$NAME` will evaluate to `Kevin` if the variable is empty. The variable itself will remain unchanged. The syntax to assign a default value is `${NAME:=Kevin}`. 1. Use `:-` if you want to test variables that could be undeclared. For instance, with `if [[ "${NAME:-}" = "Kevin" ]]`, `$NAME` will evaluate to `Kevin` if the variable is empty. The variable itself will remain unchanged. The syntax to assign a default value is `${NAME:=Kevin}`.
## Who uses b3bp? ## Who uses b3bp?
@ -167,6 +166,9 @@ We are looking for endorsements! Are you also using b3bp? [Let us know](https://
- [Germain Masse](https://github.com/gmasse) - [Germain Masse](https://github.com/gmasse)
- [A. G. Madi](https://github.com/warpengineer) - [A. G. Madi](https://github.com/warpengineer)
- [Lukas Stockner](mailto:oss@genesiscloud.com) - [Lukas Stockner](mailto:oss@genesiscloud.com)
- [Gert Goet](https://github.com/eval)
- [@rfuehrer](https://github.com/rfuehrer)
## License ## License

View File

@ -61,8 +61,7 @@ trap __b3bp_cleanup_before_exit EXIT
# requires `set -o errtrace` # requires `set -o errtrace`
__b3bp_err_report() { __b3bp_err_report() {
local error_code local error_code=${?}
error_code=${?}
# shellcheck disable=SC2154 # shellcheck disable=SC2154
error "Error in ${__file} in function ${1} on line ${2}" error "Error in ${__file} in function ${1} on line ${2}"
exit ${error_code} exit ${error_code}

View File

@ -7,7 +7,7 @@
# #
# LOG_LEVEL=7 ./main.sh -f /tmp/x -d (change this for your script) # LOG_LEVEL=7 ./main.sh -f /tmp/x -d (change this for your script)
# #
# Based on a template by BASH3 Boilerplate v2.3.0 # Based on a template by BASH3 Boilerplate v2.4.1
# http://bash3boilerplate.sh/#authors # http://bash3boilerplate.sh/#authors
# #
# The MIT License (MIT) # The MIT License (MIT)
@ -360,8 +360,7 @@ trap __b3bp_cleanup_before_exit EXIT
# requires `set -o errtrace` # requires `set -o errtrace`
__b3bp_err_report() { __b3bp_err_report() {
local error_code local error_code=${?}
error_code=${?}
error "Error in ${__file} in function ${1} on line ${2}" error "Error in ${__file} in function ${1} on line ${2}"
exit ${error_code} exit ${error_code}
} }

View File

@ -1,7 +1,7 @@
{ {
"name": "bash3boilerplate", "name": "bash3boilerplate",
"description": "Copypastable templates to write better bash scripts", "description": "Copypastable templates to write better bash scripts",
"version": "2.4.0", "version": "2.4.1",
"scripts": { "scripts": {
"build:production": "LANYON_ENV=production lanyon build", "build:production": "LANYON_ENV=production lanyon build",
"build": "lanyon build", "build": "lanyon build",
@ -31,7 +31,7 @@
"devDependencies": { "devDependencies": {
"cross-env": "3.1.3", "cross-env": "3.1.3",
"fakefile": "0.0.8", "fakefile": "0.0.8",
"lanyon": "0.1.7", "lanyon": "0.1.16",
"next-update": "1.5.1", "next-update": "1.5.1",
"npm-run-all": "3.1.2", "npm-run-all": "3.1.2",
"replace": "0.3.0" "replace": "0.3.0"

View File

@ -7,18 +7,19 @@
# #
# Limitations: # Limitations:
# #
# - All keys inside the .ini file must be unique, regardless of the use of sections # - All keys inside a section of the .ini file must be unique
# - Optional comment parameter for the creation of new entries
# #
# Usage as a function: # Usage as a function:
# #
# source ini_val.sh # source ini_val.sh
# ini_val data.ini connection.host 127.0.0.1 # ini_val data.ini connection.host 127.0.0.1 "Host name or IP address"
# #
# Usage as a command: # Usage as a command:
# #
# ini_val.sh data.ini connection.host 127.0.0.1 # ini_val.sh data.ini connection.host 127.0.0.1 "Host name or IP address"
# #
# Based on a template by BASH3 Boilerplate v2.3.0 # Based on a template by BASH3 Boilerplate v2.4.1
# http://bash3boilerplate.sh/#authors # http://bash3boilerplate.sh/#authors
# #
# The MIT License (MIT) # The MIT License (MIT)
@ -30,19 +31,35 @@ function ini_val() {
local file="${1:-}" local file="${1:-}"
local sectionkey="${2:-}" local sectionkey="${2:-}"
local val="${3:-}" local val="${3:-}"
local delim=" = " local comment="${4:-}"
local delim="="
local comment_delim=";"
local section="" local section=""
local key="" local key=""
local current=""
# add default section
local section_default="default"
if [[ ! -f "${file}" ]]; then
# touch file if not exists
touch "${file}"
fi
# Split on . for section. However, section is optional # Split on . for section. However, section is optional
IFS='.' read -r section key <<< "${sectionkey}" IFS='.' read -r section key <<< "${sectionkey}"
if [[ ! "${key}" ]]; then if [[ ! "${key}" ]]; then
key="${section}" key="${section}"
section="" # default section if not given
section="${section_default}"
fi fi
local current current=$(sed -En "/^\[/{h;d;};G;s/^${key}([[:blank:]]*)${delim}(.*)\n\[${section}\]$/\2/p" "${file}"|awk '{$1=$1};1')
current=$(awk -F "${delim}" "/^${key}${delim}/ {for (i=2; i<NF; i++) printf \$i \" \"; print \$NF}" "${file}")
if ! grep -q "\[${section}\]" "${file}"; then
# create section if not exists (empty line to seperate new section)
echo >> "${file}"
echo "[${section}]" >> "${file}"
fi
if [[ ! "${val}" ]]; then if [[ ! "${val}" ]]; then
# get a value # get a value
@ -51,19 +68,27 @@ function ini_val() {
# set a value # set a value
if [[ ! "${current}" ]]; then if [[ ! "${current}" ]]; then
# doesn't exist yet, add # doesn't exist yet, add
if [[ ! "${section}" ]]; then if [[ ! "${section}" ]]; then
# no section was given, add to bottom of file # if no section is given, propagate the default section
echo "${key}${delim}${val}" >> "${file}" section=${section_default}
else
# add to section
sed -i.bak -e "/\\[${section}\\]/a ${key}${delim}${val}" "${file}"
# this .bak dance is done for BSD/GNU portability: http://stackoverflow.com/a/22084103/151666
rm -f "${file}.bak"
fi fi
# add to section
if [[ ! "${comment}" ]]; then
# add new key/value without comment
RET="/\\[${section}\\]/a\\
${key}${delim}${val}"
else
# add new key/value with preceeding comment
RET="/\\[${section}\\]/a\\
${comment_delim}[${key}] ${comment}\\
${key}${delim}${val}"
fi
sed -i.bak -e "${RET}" "${file}"
# this .bak dance is done for BSD/GNU portability: http://stackoverflow.com/a/22084103/151666
rm -f "${file}.bak"
else else
# replace existing # replace existing (modified to replace only keys in given section)
sed -i.bak -e "/^${key}${delim}/s/${delim}.*/${delim}${val}/" "${file}" sed -i.bak -e "/^\[${section}\]/,/^\[.*\]/ s|^\(${key}[ \t]*${delim}[ \t]*\).*$|\1${val}|" "${file}"
# this .bak dance is done for BSD/GNU portability: http://stackoverflow.com/a/22084103/151666 # this .bak dance is done for BSD/GNU portability: http://stackoverflow.com/a/22084103/151666
rm -f "${file}.bak" rm -f "${file}.bak"
fi fi

View File

@ -20,7 +20,7 @@
# #
# megamount.sh smb://janedoe:abc123@192.168.0.1/documents /mnt/documents # megamount.sh smb://janedoe:abc123@192.168.0.1/documents /mnt/documents
# #
# Based on a template by BASH3 Boilerplate v2.3.0 # Based on a template by BASH3 Boilerplate v2.4.1
# http://bash3boilerplate.sh/#authors # http://bash3boilerplate.sh/#authors
# #
# The MIT License (MIT) # The MIT License (MIT)

View File

@ -18,7 +18,7 @@
# #
# parse_url.sh 'http://johndoe:abc123@example.com:8080/index.html' # parse_url.sh 'http://johndoe:abc123@example.com:8080/index.html'
# #
# Based on a template by BASH3 Boilerplate v2.3.0 # Based on a template by BASH3 Boilerplate v2.4.1
# http://bash3boilerplate.sh/#authors # http://bash3boilerplate.sh/#authors
# #
# The MIT License (MIT) # The MIT License (MIT)

View File

@ -16,7 +16,7 @@
# #
# ALLOW_REMAINDERS=1 templater.sh input.cfg output.cfg # ALLOW_REMAINDERS=1 templater.sh input.cfg output.cfg
# #
# Based on a template by BASH3 Boilerplate v2.3.0 # Based on a template by BASH3 Boilerplate v2.4.1
# http://bash3boilerplate.sh/#authors # http://bash3boilerplate.sh/#authors
# #
# The MIT License (MIT) # The MIT License (MIT)

View File

@ -2,7 +2,9 @@
exists exists
127.0.0.1 127.0.0.1
nginx, nodejs nginx, nodejs
--> command: Replace three values in-place and show result --> command: Replace three values in-place and show result
[default]
orphan = no more orphan = no more
[connection] [connection]
@ -10,11 +12,17 @@ host = 192.168.0.1
[software] [software]
packages = vim packages = vim
[comment]
;[command] this key is commented
command=commented
--> function: Read 3 values --> function: Read 3 values
exists exists
127.0.0.1 127.0.0.1
nginx, nodejs nginx, nodejs
--> function: Replace three values in-place and show result --> function: Replace three values in-place and show result
[default]
orphan = no more orphan = no more
[connection] [connection]
@ -22,3 +30,7 @@ host = 192.168.0.1
[software] [software]
packages = vim packages = vim
[comment]
;[command] this key is commented
command=commented

View File

@ -1,3 +1,4 @@
[default]
orphan = exists orphan = exists
[connection] [connection]

4
test/scenario/ini_val/run.sh Normal file → Executable file
View File

@ -17,11 +17,13 @@ echo "--> command: Read 3 values"
bash "${__root}/src/ini_val.sh" ./dummy.ini orphan bash "${__root}/src/ini_val.sh" ./dummy.ini orphan
bash "${__root}/src/ini_val.sh" ./dummy.ini connection.host bash "${__root}/src/ini_val.sh" ./dummy.ini connection.host
bash "${__root}/src/ini_val.sh" ./dummy.ini software.packages bash "${__root}/src/ini_val.sh" ./dummy.ini software.packages
bash "${__root}/src/ini_val.sh" ./dummy.ini comment.command
echo "--> command: Replace three values in-place and show result" echo "--> command: Replace three values in-place and show result"
bash "${__root}/src/ini_val.sh" ./dummy.ini orphan "no more" bash "${__root}/src/ini_val.sh" ./dummy.ini orphan "no more"
bash "${__root}/src/ini_val.sh" ./dummy.ini connection.host "192.168.0.1" bash "${__root}/src/ini_val.sh" ./dummy.ini connection.host "192.168.0.1"
bash "${__root}/src/ini_val.sh" ./dummy.ini software.packages "vim" bash "${__root}/src/ini_val.sh" ./dummy.ini software.packages "vim"
bash "${__root}/src/ini_val.sh" ./dummy.ini comment.command "commented" "this key is commented"
cat dummy.ini cat dummy.ini
rm -f dummy.ini rm -f dummy.ini
@ -35,10 +37,12 @@ echo "--> function: Read 3 values"
ini_val ./dummy.ini orphan ini_val ./dummy.ini orphan
ini_val ./dummy.ini connection.host ini_val ./dummy.ini connection.host
ini_val ./dummy.ini software.packages ini_val ./dummy.ini software.packages
ini_val ./dummy.ini comment.command
echo "--> function: Replace three values in-place and show result" echo "--> function: Replace three values in-place and show result"
ini_val ./dummy.ini orphan "no more" ini_val ./dummy.ini orphan "no more"
ini_val ./dummy.ini connection.host "192.168.0.1" ini_val ./dummy.ini connection.host "192.168.0.1"
ini_val ./dummy.ini software.packages "vim" ini_val ./dummy.ini software.packages "vim"
ini_val ./dummy.ini comment.command "commented" "this key is commented"
cat dummy.ini cat dummy.ini
rm -f dummy.ini rm -f dummy.ini

View File

@ -715,6 +715,18 @@
lodash "^4.17.13" lodash "^4.17.13"
to-fast-properties "^2.0.0" to-fast-properties "^2.0.0"
"@types/babel-types@*", "@types/babel-types@^7.0.0":
version "7.0.7"
resolved "https://registry.yarnpkg.com/@types/babel-types/-/babel-types-7.0.7.tgz#667eb1640e8039436028055737d2b9986ee336e3"
integrity sha512-dBtBbrc+qTHy1WdfHYjBwRln4+LWqASWakLHsWHR2NWHIFkv4W3O070IGoGLEBrJBvct3r0L1BUPuvURi7kYUQ==
"@types/babylon@^6.16.2":
version "6.16.5"
resolved "https://registry.yarnpkg.com/@types/babylon/-/babylon-6.16.5.tgz#1c5641db69eb8cdf378edd25b4be7754beeb48b4"
integrity sha512-xH2e58elpj1X4ynnKp9qSnWlsRTIs6n3tgLGNfwAGHwePw0mulHQllV34n0T25uYSu1k0hRKkWXF890B1yS47w==
dependencies:
"@types/babel-types" "*"
"@types/q@^1.5.1": "@types/q@^1.5.1":
version "1.5.2" version "1.5.2"
resolved "https://registry.yarnpkg.com/@types/q/-/q-1.5.2.tgz#690a1475b84f2a884fd07cd797c00f5f31356ea8" resolved "https://registry.yarnpkg.com/@types/q/-/q-1.5.2.tgz#690a1475b84f2a884fd07cd797c00f5f31356ea8"
@ -770,7 +782,7 @@ acorn-walk@^7.0.0:
resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.0.0.tgz#c8ba6f0f1aac4b0a9e32d1f0af12be769528f36b" resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.0.0.tgz#c8ba6f0f1aac4b0a9e32d1f0af12be769528f36b"
integrity sha512-7Bv1We7ZGuU79zZbb6rRqcpxo3OY+zrdtloZWoyD8fmGX+FeXRjE+iuGkZjSXLVovLzrsvMGMy0EkwA0E0umxg== integrity sha512-7Bv1We7ZGuU79zZbb6rRqcpxo3OY+zrdtloZWoyD8fmGX+FeXRjE+iuGkZjSXLVovLzrsvMGMy0EkwA0E0umxg==
acorn@^3.0.4, acorn@^3.1.0, acorn@~3.3.0: acorn@^3.0.4, acorn@^3.1.0:
version "3.3.0" version "3.3.0"
resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a" resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a"
@ -1207,6 +1219,29 @@ babel-plugin-dynamic-import-node@^2.3.0:
dependencies: dependencies:
object.assign "^4.1.0" object.assign "^4.1.0"
babel-runtime@^6.26.0:
version "6.26.0"
resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe"
integrity sha1-llxwWGaOgrVde/4E/yM3vItWR/4=
dependencies:
core-js "^2.4.0"
regenerator-runtime "^0.11.0"
babel-types@^6.26.0:
version "6.26.0"
resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.26.0.tgz#a3b073f94ab49eb6fa55cd65227a334380632497"
integrity sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=
dependencies:
babel-runtime "^6.26.0"
esutils "^2.0.2"
lodash "^4.17.4"
to-fast-properties "^1.0.3"
babylon@^6.18.0:
version "6.18.0"
resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3"
integrity sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==
backo2@1.0.2: backo2@1.0.2:
version "1.0.2" version "1.0.2"
resolved "https://registry.yarnpkg.com/backo2/-/backo2-1.0.2.tgz#31ab1ac8b129363463e35b3ebb69f4dfcfba7947" resolved "https://registry.yarnpkg.com/backo2/-/backo2-1.0.2.tgz#31ab1ac8b129363463e35b3ebb69f4dfcfba7947"
@ -2253,11 +2288,14 @@ console.table@0.7.0:
easy-table "0.3.0" easy-table "0.3.0"
constantinople@^3.0.1: constantinople@^3.0.1:
version "3.1.0" version "3.1.2"
resolved "https://registry.yarnpkg.com/constantinople/-/constantinople-3.1.0.tgz#7569caa8aa3f8d5935d62e1fa96f9f702cd81c79" resolved "https://registry.yarnpkg.com/constantinople/-/constantinople-3.1.2.tgz#d45ed724f57d3d10500017a7d3a889c1381ae647"
integrity sha512-yePcBqEFhLOqSBtwYOGGS1exHo/s1xjekXiinh4itpNQGCu4KA1euPh1fg07N2wMITZXQkBz75Ntdt1ctGZouw==
dependencies: dependencies:
acorn "^3.1.0" "@types/babel-types" "^7.0.0"
is-expression "^2.0.1" "@types/babylon" "^6.16.2"
babel-types "^6.26.0"
babylon "^6.18.0"
constants-browserify@^1.0.0: constants-browserify@^1.0.0:
version "1.0.0" version "1.0.0"
@ -2320,6 +2358,11 @@ core-js@^1.0.0:
version "1.2.7" version "1.2.7"
resolved "https://registry.yarnpkg.com/core-js/-/core-js-1.2.7.tgz#652294c14651db28fa93bd2d5ff2983a4f08c636" resolved "https://registry.yarnpkg.com/core-js/-/core-js-1.2.7.tgz#652294c14651db28fa93bd2d5ff2983a4f08c636"
core-js@^2.4.0:
version "2.6.11"
resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.11.tgz#38831469f9922bded8ee21c9dc46985e0399308c"
integrity sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg==
core-util-is@~1.0.0: core-util-is@~1.0.0:
version "1.0.2" version "1.0.2"
resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
@ -3399,10 +3442,15 @@ estree-is-member-expression@^1.0.0:
resolved "https://registry.yarnpkg.com/estree-is-member-expression/-/estree-is-member-expression-1.0.0.tgz#e724721e0a14949d363915fd71448eaa6312f590" resolved "https://registry.yarnpkg.com/estree-is-member-expression/-/estree-is-member-expression-1.0.0.tgz#e724721e0a14949d363915fd71448eaa6312f590"
integrity sha512-Ec+X44CapIGExvSZN+pGkmr5p7HwUVQoPQSd458Lqwvaf4/61k/invHSh4BYK8OXnCkfEhWuIoG5hayKLQStIg== integrity sha512-Ec+X44CapIGExvSZN+pGkmr5p7HwUVQoPQSd458Lqwvaf4/61k/invHSh4BYK8OXnCkfEhWuIoG5hayKLQStIg==
esutils@^2.0.0, esutils@^2.0.2: esutils@^2.0.0:
version "2.0.2" version "2.0.2"
resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b"
esutils@^2.0.2:
version "2.0.3"
resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64"
integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==
etag@1.8.1, etag@^1.8.1, etag@~1.8.1: etag@1.8.1, etag@^1.8.1, etag@~1.8.1:
version "1.8.1" version "1.8.1"
resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887"
@ -3566,15 +3614,10 @@ extend-shallow@^3.0.0, extend-shallow@^3.0.2:
assign-symbols "^1.0.0" assign-symbols "^1.0.0"
is-extendable "^1.0.1" is-extendable "^1.0.1"
extend@3, extend@^3.0.0, extend@~3.0.0: extend@3, extend@^3.0.0, extend@~3.0.0, extend@~3.0.2:
version "3.0.2" version "3.0.2"
resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa"
extend@~3.0.2:
version "3.0.2"
resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa"
integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==
external-editor@^1.0.1: external-editor@^1.0.1:
version "1.1.1" version "1.1.1"
resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-1.1.1.tgz#12d7b0db850f7ff7e7081baf4005700060c4600b" resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-1.1.1.tgz#12d7b0db850f7ff7e7081baf4005700060c4600b"
@ -4905,13 +4948,6 @@ is-directory@^0.3.1:
resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1" resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1"
integrity sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE= integrity sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=
is-expression@^2.0.1:
version "2.1.0"
resolved "https://registry.yarnpkg.com/is-expression/-/is-expression-2.1.0.tgz#91be9d47debcfef077977e9722be6dcfb4465ef0"
dependencies:
acorn "~3.3.0"
object-assign "^4.0.1"
is-expression@^3.0.0: is-expression@^3.0.0:
version "3.0.0" version "3.0.0"
resolved "https://registry.yarnpkg.com/is-expression/-/is-expression-3.0.0.tgz#39acaa6be7fd1f3471dc42c7416e61c24317ac9f" resolved "https://registry.yarnpkg.com/is-expression/-/is-expression-3.0.0.tgz#39acaa6be7fd1f3471dc42c7416e61c24317ac9f"
@ -8136,6 +8172,11 @@ regenerate@^1.4.0:
resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.0.tgz#4a856ec4b56e4077c557589cae85e7a4c8869a11" resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.0.tgz#4a856ec4b56e4077c557589cae85e7a4c8869a11"
integrity sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg== integrity sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==
regenerator-runtime@^0.11.0:
version "0.11.1"
resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9"
integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==
regenerator-transform@^0.14.0: regenerator-transform@^0.14.0:
version "0.14.1" version "0.14.1"
resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.14.1.tgz#3b2fce4e1ab7732c08f665dfdb314749c7ddd2fb" resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.14.1.tgz#3b2fce4e1ab7732c08f665dfdb314749c7ddd2fb"
@ -9532,6 +9573,11 @@ to-arraybuffer@^1.0.0:
version "1.0.1" version "1.0.1"
resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43"
to-fast-properties@^1.0.3:
version "1.0.3"
resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47"
integrity sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=
to-fast-properties@^2.0.0: to-fast-properties@^2.0.0:
version "2.0.0" version "2.0.0"
resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e"