diff --git a/.eslintrc.yml b/.eslintrc.yml
deleted file mode 100644
index 919c5af..0000000
--- a/.eslintrc.yml
+++ /dev/null
@@ -1,11 +0,0 @@
-# ESLint config
-# http://eslint.org/docs/user-guide/configuring
-# https://github.com/JS-DevTools/eslint-config-modular
-
-root: true
-
-extends:
- - modular/best-practices
- - modular/style
- - modular/es6
- - modular/node
diff --git a/.gitattributes b/.gitattributes
new file mode 100644
index 0000000..4ca9ecd
--- /dev/null
+++ b/.gitattributes
@@ -0,0 +1,25 @@
+# Git attributes
+# https://git-scm.com/docs/gitattributes
+# https://git-scm.com/book/en/v2/Customizing-Git-Git-Attributes
+
+# Normalize line endings for all files that git determines to be text.
+# https://git-scm.com/docs/gitattributes#gitattributes-Settostringvalueauto
+* text=auto
+
+# Normalize line endings to LF on checkin, and do NOT convert to CRLF when checking-out on Windows.
+# https://git-scm.com/docs/gitattributes#gitattributes-Settostringvaluelf
+*.txt text eol=lf
+*.html text eol=lf
+*.md text eol=lf
+*.css text eol=lf
+*.scss text eol=lf
+*.map text eol=lf
+*.js text eol=lf
+*.jsx text eol=lf
+*.ts text eol=lf
+*.tsx text eol=lf
+*.json text eol=lf
+*.yml text eol=lf
+*.yaml text eol=lf
+*.xml text eol=lf
+*.svg text eol=lf
diff --git a/.gitignore b/.gitignore
index b529cd2..b7bc785 100644
--- a/.gitignore
+++ b/.gitignore
@@ -35,6 +35,9 @@ pids
# Dependencies
node_modules
+# Build output
+/lib
+
# Test output
/.nyc_output
/coverage
diff --git a/.mocharc.yml b/.mocharc.yml
new file mode 100644
index 0000000..6b9e4c4
--- /dev/null
+++ b/.mocharc.yml
@@ -0,0 +1,14 @@
+# Mocha options
+# https://mochajs.org/#configuring-mocha-nodejs
+# https://github.com/mochajs/mocha/blob/master/example/config/.mocharc.yml
+
+spec:
+ - test/fixtures/setup-mocks.js
+ - test/fixtures/mocha-hooks.js
+ - test/specs/**/*.spec.js
+
+bail: true
+timeout: 10000
+slow: 2000
+retries: 2
+recursive: true
diff --git a/.travis.yml b/.travis.yml
index 3185131..81bde33 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -9,14 +9,18 @@ language: node_js
node_js:
- 10
- 8
- - 6
os:
- linux
- osx
- windows
-script: npm run lint && npm run coverage
+before_script:
+ - npm run lint
+ - npm run build
+
+script:
+ - npm run coverage
after_success:
# send code-coverage data to Coveralls
diff --git a/_config.yml b/_config.yml
index f48341b..fe4821f 100644
--- a/_config.yml
+++ b/_config.yml
@@ -4,12 +4,12 @@ title: Version Bump Prompt
logo: https://jsdevtools.org/img/logos/logo.png
author:
- twitter: JS_DevTools
+ twitter: JSDevTools
google_analytics: UA-68102273-3
twitter:
- username: JS_DevTools
+ username: JSDevTools
card: summary
defaults:
diff --git a/package-lock.json b/package-lock.json
index f68715e..71ce085 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -14,14 +14,14 @@
}
},
"@babel/generator": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.2.0.tgz",
- "integrity": "sha512-BA75MVfRlFQG2EZgFYIwyT1r6xSkwfP2bdkY/kLZusEYWiJs4xCowab/alaEaT0wSvmVuXGqiefeBlP+7V1yKg==",
+ "version": "7.3.4",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.3.4.tgz",
+ "integrity": "sha512-8EXhHRFqlVVWXPezBW5keTiQi/rJMQTg/Y9uVCEZ0CAF3PKtCCaVRnp64Ii1ujhkoDhhF1fVsImoN4yJ2uz4Wg==",
"dev": true,
"requires": {
- "@babel/types": "^7.2.0",
+ "@babel/types": "^7.3.4",
"jsesc": "^2.5.1",
- "lodash": "^4.17.10",
+ "lodash": "^4.17.11",
"source-map": "^0.5.0",
"trim-right": "^1.0.1"
}
@@ -67,47 +67,64 @@
}
},
"@babel/parser": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.2.0.tgz",
- "integrity": "sha512-M74+GvK4hn1eejD9lZ7967qAwvqTZayQa3g10ag4s9uewgR7TKjeaT0YMyoq+gVfKYABiWZ4MQD701/t5e1Jhg==",
+ "version": "7.3.4",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.3.4.tgz",
+ "integrity": "sha512-tXZCqWtlOOP4wgCp6RjRvLmfuhnqTLy9VHwRochJBCP2nDm27JnnuFEnXFASVyQNHk36jD1tAammsCEEqgscIQ==",
"dev": true
},
"@babel/template": {
- "version": "7.1.2",
- "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.1.2.tgz",
- "integrity": "sha512-SY1MmplssORfFiLDcOETrW7fCLl+PavlwMh92rrGcikQaRq4iWPVH0MpwPpY3etVMx6RnDjXtr6VZYr/IbP/Ag==",
+ "version": "7.2.2",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.2.2.tgz",
+ "integrity": "sha512-zRL0IMM02AUDwghf5LMSSDEz7sBCO2YnNmpg3uWTZj/v1rcG2BmQUvaGU8GhU8BvfMh1k2KIAYZ7Ji9KXPUg7g==",
"dev": true,
"requires": {
"@babel/code-frame": "^7.0.0",
- "@babel/parser": "^7.1.2",
- "@babel/types": "^7.1.2"
+ "@babel/parser": "^7.2.2",
+ "@babel/types": "^7.2.2"
}
},
"@babel/traverse": {
- "version": "7.1.6",
- "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.1.6.tgz",
- "integrity": "sha512-CXedit6GpISz3sC2k2FsGCUpOhUqKdyL0lqNrImQojagnUMXf8hex4AxYFRuMkNGcvJX5QAFGzB5WJQmSv8SiQ==",
+ "version": "7.3.4",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.3.4.tgz",
+ "integrity": "sha512-TvTHKp6471OYEcE/91uWmhR6PrrYywQntCHSaZ8CM8Vmp+pjAusal4nGB2WCCQd0rvI7nOMKn9GnbcvTUz3/ZQ==",
"dev": true,
"requires": {
"@babel/code-frame": "^7.0.0",
- "@babel/generator": "^7.1.6",
+ "@babel/generator": "^7.3.4",
"@babel/helper-function-name": "^7.1.0",
"@babel/helper-split-export-declaration": "^7.0.0",
- "@babel/parser": "^7.1.6",
- "@babel/types": "^7.1.6",
+ "@babel/parser": "^7.3.4",
+ "@babel/types": "^7.3.4",
"debug": "^4.1.0",
"globals": "^11.1.0",
- "lodash": "^4.17.10"
+ "lodash": "^4.17.11"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
+ "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
+ "dev": true,
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ },
+ "ms": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
+ "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==",
+ "dev": true
+ }
}
},
"@babel/types": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.2.0.tgz",
- "integrity": "sha512-b4v7dyfApuKDvmPb+O488UlGuR1WbwMXFsO/cyqMrnfvRAChZKJAYeeglWTjUO1b9UghKKgepAQM5tsvBJca6A==",
+ "version": "7.3.4",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.3.4.tgz",
+ "integrity": "sha512-WEkp8MsLftM7O/ty580wAmZzN1nDmCACc5+jFzUt+GUFNNIi3LdRlueYz0YIlmJhlZx1QYDMZL5vdWCL0fNjFQ==",
"dev": true,
"requires": {
"esutils": "^2.0.2",
- "lodash": "^4.17.10",
+ "lodash": "^4.17.11",
"to-fast-properties": "^2.0.0"
},
"dependencies": {
@@ -119,10 +136,245 @@
}
}
},
+ "@mrmlnc/readdir-enhanced": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz",
+ "integrity": "sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==",
+ "requires": {
+ "call-me-maybe": "^1.0.1",
+ "glob-to-regexp": "^0.3.0"
+ }
+ },
+ "@nodelib/fs.stat": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz",
+ "integrity": "sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw=="
+ },
+ "@types/chai": {
+ "version": "4.1.7",
+ "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.1.7.tgz",
+ "integrity": "sha512-2Y8uPt0/jwjhQ6EiluT0XCri1Dbplr0ZxfFXUz+ye13gaqE8u5gL5ppao1JrUYr9cIip5S6MvQzBS7Kke7U9VA==",
+ "dev": true
+ },
+ "@types/command-line-args": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/@types/command-line-args/-/command-line-args-5.0.0.tgz",
+ "integrity": "sha512-4eOPXyn5DmP64MCMF8ePDvdlvlzt2a+F8ZaVjqmh2yFCpGjc1kI3kGnCFYX9SCsGTjQcWIyVZ86IHCEyjy/MNg==",
+ "dev": true
+ },
+ "@types/detect-indent": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/@types/detect-indent/-/detect-indent-5.0.0.tgz",
+ "integrity": "sha512-eOFBOFCqusnH0i1s9XoURksqTZbsv5vbMMgOBKgSt67TsOw6ViaHO0Ii5DMhRoiU5TJ51uf9NsOpnxXsN96ywg==",
+ "dev": true
+ },
+ "@types/detect-newline": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/@types/detect-newline/-/detect-newline-2.1.0.tgz",
+ "integrity": "sha512-vcHS4yQkTfy+8QISuAFS+2SCjNcGs37+CWzxrrIOMv7yvPnYd6f1AeUErVEHVCu8dZreAHUqzV8RrjzeBorvtQ==",
+ "dev": true
+ },
+ "@types/events": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/@types/events/-/events-3.0.0.tgz",
+ "integrity": "sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g=="
+ },
+ "@types/glob": {
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.1.tgz",
+ "integrity": "sha512-1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w==",
+ "requires": {
+ "@types/events": "*",
+ "@types/minimatch": "*",
+ "@types/node": "*"
+ }
+ },
+ "@types/globby": {
+ "version": "9.1.0",
+ "resolved": "https://registry.npmjs.org/@types/globby/-/globby-9.1.0.tgz",
+ "integrity": "sha512-9du/HCA71EBz7syHRnM4Q/u4Fbx3SyN/Uu+4Of9lyPX4A6Xi+A8VMxvx8j5/CMTfrae2Zwdwg0fAaKvKXfRbAw==",
+ "dev": true,
+ "requires": {
+ "globby": "*"
+ }
+ },
+ "@types/inquirer": {
+ "version": "0.0.44",
+ "resolved": "https://registry.npmjs.org/@types/inquirer/-/inquirer-0.0.44.tgz",
+ "integrity": "sha512-ugbhy1yBtCz5iTWYF+AGRS/UcMcWicdyHhxl9VaeFYc3ueg0CCssthQLB3rIcIOeGtfG6WPEvHdLu/IjKYfefg==",
+ "dev": true,
+ "requires": {
+ "@types/rx": "*",
+ "@types/through": "*"
+ }
+ },
+ "@types/log-symbols": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/@types/log-symbols/-/log-symbols-2.0.0.tgz",
+ "integrity": "sha512-YJhbp0sz3egFFKl3BcCNPQKzuGFOP4PACcsifhK6ROGnJUW9ViYLuLybQ9GQZm7Zejy3tkGuiXYMq3GiyGkU4g==",
+ "dev": true
+ },
+ "@types/minimatch": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz",
+ "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA=="
+ },
+ "@types/mocha": {
+ "version": "5.2.6",
+ "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-5.2.6.tgz",
+ "integrity": "sha512-1axi39YdtBI7z957vdqXI4Ac25e7YihYQtJa+Clnxg1zTJEaIRbndt71O3sP4GAMgiAm0pY26/b9BrY4MR/PMw==",
+ "dev": true
+ },
+ "@types/node": {
+ "version": "11.11.0",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-11.11.0.tgz",
+ "integrity": "sha512-D5Rt+HXgEywr3RQJcGlZUCTCx1qVbCZpVk3/tOOA6spLNZdGm8BU+zRgdRYDoF1pO3RuXLxADzMrF903JlQXqg=="
+ },
+ "@types/rx": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/@types/rx/-/rx-4.1.1.tgz",
+ "integrity": "sha1-WY/JSla67ZdfGUV04PVy/Y5iekg=",
+ "dev": true,
+ "requires": {
+ "@types/rx-core": "*",
+ "@types/rx-core-binding": "*",
+ "@types/rx-lite": "*",
+ "@types/rx-lite-aggregates": "*",
+ "@types/rx-lite-async": "*",
+ "@types/rx-lite-backpressure": "*",
+ "@types/rx-lite-coincidence": "*",
+ "@types/rx-lite-experimental": "*",
+ "@types/rx-lite-joinpatterns": "*",
+ "@types/rx-lite-testing": "*",
+ "@types/rx-lite-time": "*",
+ "@types/rx-lite-virtualtime": "*"
+ }
+ },
+ "@types/rx-core": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/@types/rx-core/-/rx-core-4.0.3.tgz",
+ "integrity": "sha1-CzNUsSOM7b4rdPYybxOdvHpZHWA=",
+ "dev": true
+ },
+ "@types/rx-core-binding": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/@types/rx-core-binding/-/rx-core-binding-4.0.4.tgz",
+ "integrity": "sha512-5pkfxnC4w810LqBPUwP5bg7SFR/USwhMSaAeZQQbEHeBp57pjKXRlXmqpMrLJB4y1oglR/c2502853uN0I+DAQ==",
+ "dev": true,
+ "requires": {
+ "@types/rx-core": "*"
+ }
+ },
+ "@types/rx-lite": {
+ "version": "4.0.6",
+ "resolved": "https://registry.npmjs.org/@types/rx-lite/-/rx-lite-4.0.6.tgz",
+ "integrity": "sha512-oYiDrFIcor9zDm0VDUca1UbROiMYBxMLMaM6qzz4ADAfOmA9r1dYEcAFH+2fsPI5BCCjPvV9pWC3X3flbrvs7w==",
+ "dev": true,
+ "requires": {
+ "@types/rx-core": "*",
+ "@types/rx-core-binding": "*"
+ }
+ },
+ "@types/rx-lite-aggregates": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/@types/rx-lite-aggregates/-/rx-lite-aggregates-4.0.3.tgz",
+ "integrity": "sha512-MAGDAHy8cRatm94FDduhJF+iNS5//jrZ/PIfm+QYw9OCeDgbymFHChM8YVIvN2zArwsRftKgE33QfRWvQk4DPg==",
+ "dev": true,
+ "requires": {
+ "@types/rx-lite": "*"
+ }
+ },
+ "@types/rx-lite-async": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/@types/rx-lite-async/-/rx-lite-async-4.0.2.tgz",
+ "integrity": "sha512-vTEv5o8l6702ZwfAM5aOeVDfUwBSDOs+ARoGmWAKQ6LOInQ8J4/zjM7ov12fuTpktUKdMQjkeCp07Vd73mPkxw==",
+ "dev": true,
+ "requires": {
+ "@types/rx-lite": "*"
+ }
+ },
+ "@types/rx-lite-backpressure": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/@types/rx-lite-backpressure/-/rx-lite-backpressure-4.0.3.tgz",
+ "integrity": "sha512-Y6aIeQCtNban5XSAF4B8dffhIKu6aAy/TXFlScHzSxh6ivfQBQw6UjxyEJxIOt3IT49YkS+siuayM2H/Q0cmgA==",
+ "dev": true,
+ "requires": {
+ "@types/rx-lite": "*"
+ }
+ },
+ "@types/rx-lite-coincidence": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/@types/rx-lite-coincidence/-/rx-lite-coincidence-4.0.3.tgz",
+ "integrity": "sha512-1VNJqzE9gALUyMGypDXZZXzR0Tt7LC9DdAZQ3Ou/Q0MubNU35agVUNXKGHKpNTba+fr8GdIdkC26bRDqtCQBeQ==",
+ "dev": true,
+ "requires": {
+ "@types/rx-lite": "*"
+ }
+ },
+ "@types/rx-lite-experimental": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/@types/rx-lite-experimental/-/rx-lite-experimental-4.0.1.tgz",
+ "integrity": "sha1-xTL1y98/LBXaFt7Ykw0bKYQCPL0=",
+ "dev": true,
+ "requires": {
+ "@types/rx-lite": "*"
+ }
+ },
+ "@types/rx-lite-joinpatterns": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/@types/rx-lite-joinpatterns/-/rx-lite-joinpatterns-4.0.1.tgz",
+ "integrity": "sha1-9w/jcFGKhDLykVjMkv+1a05K/D4=",
+ "dev": true,
+ "requires": {
+ "@types/rx-lite": "*"
+ }
+ },
+ "@types/rx-lite-testing": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/@types/rx-lite-testing/-/rx-lite-testing-4.0.1.tgz",
+ "integrity": "sha1-IbGdEfTf1v/vWp0WSOnIh5v+Iek=",
+ "dev": true,
+ "requires": {
+ "@types/rx-lite-virtualtime": "*"
+ }
+ },
+ "@types/rx-lite-time": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/@types/rx-lite-time/-/rx-lite-time-4.0.3.tgz",
+ "integrity": "sha512-ukO5sPKDRwCGWRZRqPlaAU0SKVxmWwSjiOrLhoQDoWxZWg6vyB9XLEZViKOzIO6LnTIQBlk4UylYV0rnhJLxQw==",
+ "dev": true,
+ "requires": {
+ "@types/rx-lite": "*"
+ }
+ },
+ "@types/rx-lite-virtualtime": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/@types/rx-lite-virtualtime/-/rx-lite-virtualtime-4.0.3.tgz",
+ "integrity": "sha512-3uC6sGmjpOKatZSVHI2xB1+dedgml669ZRvqxy+WqmGJDVusOdyxcKfyzjW0P3/GrCiN4nmRkLVMhPwHCc5QLg==",
+ "dev": true,
+ "requires": {
+ "@types/rx-lite": "*"
+ }
+ },
+ "@types/semver": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/@types/semver/-/semver-5.5.0.tgz",
+ "integrity": "sha512-41qEJgBH/TWgo5NFSvBCJ1qkoi3Q6ONSF2avrHq1LVEZfYpdHmj0y9SuTK+u9ZhG1sYQKBL1AWXKyLWP4RaUoQ==",
+ "dev": true
+ },
+ "@types/through": {
+ "version": "0.0.29",
+ "resolved": "https://registry.npmjs.org/@types/through/-/through-0.0.29.tgz",
+ "integrity": "sha512-9a7C5VHh+1BKblaYiq+7Tfc+EOmjMdZaD1MYtkQjSoxgB69tBjW98ry6SKsi4zEIWztLOMRuL87A3bdT/Fc/4w==",
+ "dev": true,
+ "requires": {
+ "@types/node": "*"
+ }
+ },
"acorn": {
- "version": "6.0.4",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.0.4.tgz",
- "integrity": "sha512-VY4i5EKSKkofY2I+6QLTbTTN/UvEQPCo6eiwzzSaSWfpaDhOmStMCMod6wmuPciNq+XS0faCglFu2lHZpdHUtg==",
+ "version": "6.1.1",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.1.1.tgz",
+ "integrity": "sha512-jPTiwtOxaHNaAPg/dmrJ/beuzLRnXtB0kQPQ8JpotKJgTB6rX6c8mlf315941pyjBSaPg8NHXS9fhP4u17DpGA==",
"dev": true
},
"acorn-jsx": {
@@ -132,15 +384,15 @@
"dev": true
},
"ajv": {
- "version": "5.5.2",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz",
- "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=",
+ "version": "6.10.0",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.0.tgz",
+ "integrity": "sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg==",
"dev": true,
"requires": {
- "co": "^4.6.0",
- "fast-deep-equal": "^1.0.0",
+ "fast-deep-equal": "^2.0.1",
"fast-json-stable-stringify": "^2.0.0",
- "json-schema-traverse": "^0.3.0"
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
}
},
"ansi-align": {
@@ -152,10 +404,16 @@
"string-width": "^2.0.0"
}
},
+ "ansi-colors": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.3.tgz",
+ "integrity": "sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw==",
+ "dev": true
+ },
"ansi-escapes": {
- "version": "3.1.0",
- "resolved": "http://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.1.0.tgz",
- "integrity": "sha512-UgAb8H9D41AQnu/PbWlCofQVcnV4Gs2bBJi9eZPxfU/hgglFh3SMDMENRIqdr7H6XFnXdoknctFByVsCOotTVw=="
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz",
+ "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ=="
},
"ansi-regex": {
"version": "3.0.0",
@@ -179,6 +437,38 @@
"sprintf-js": "~1.0.2"
}
},
+ "argv-tools": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/argv-tools/-/argv-tools-0.1.1.tgz",
+ "integrity": "sha512-Cc0dBvx4dvrjjKpyDA6w8RlNAw8Su30NvZbWl/Tv9ZALEVlLVkWQiHMi84Q0xNfpVuSaiQbYkdmWK8g1PLGhKw==",
+ "requires": {
+ "array-back": "^2.0.0",
+ "find-replace": "^2.0.1"
+ }
+ },
+ "arr-diff": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
+ "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA="
+ },
+ "arr-flatten": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz",
+ "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg=="
+ },
+ "arr-union": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz",
+ "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ="
+ },
+ "array-back": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/array-back/-/array-back-2.0.0.tgz",
+ "integrity": "sha512-eJv4pLLufP3g5kcZry0j6WXpIbzYw9GUB4mVJZno9wfwiBxbizTnHCw3VJb07cBihbFX48Y7oSrW9y+gt4glyw==",
+ "requires": {
+ "typical": "^2.6.1"
+ }
+ },
"array-find-index": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz",
@@ -189,7 +479,6 @@
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz",
"integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=",
- "dev": true,
"requires": {
"array-uniq": "^1.0.1"
}
@@ -197,8 +486,12 @@
"array-uniq": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz",
- "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=",
- "dev": true
+ "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY="
+ },
+ "array-unique": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
+ "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg="
},
"arrify": {
"version": "1.0.1",
@@ -227,6 +520,11 @@
"integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==",
"dev": true
},
+ "assign-symbols": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz",
+ "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c="
+ },
"astral-regex": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz",
@@ -239,6 +537,11 @@
"integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=",
"dev": true
},
+ "atob": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz",
+ "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg=="
+ },
"aws-sign2": {
"version": "0.7.0",
"resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
@@ -346,26 +649,11 @@
"lodash": "^4.17.4"
},
"dependencies": {
- "debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "dev": true,
- "requires": {
- "ms": "2.0.0"
- }
- },
"globals": {
"version": "9.18.0",
"resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz",
"integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==",
"dev": true
- },
- "ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
- "dev": true
}
}
},
@@ -388,16 +676,65 @@
"dev": true
},
"balanced-match": {
- "version": "0.4.2",
- "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz",
- "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg="
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
+ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c="
+ },
+ "base": {
+ "version": "0.11.2",
+ "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz",
+ "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==",
+ "requires": {
+ "cache-base": "^1.0.1",
+ "class-utils": "^0.3.5",
+ "component-emitter": "^1.2.1",
+ "define-property": "^1.0.0",
+ "isobject": "^3.0.1",
+ "mixin-deep": "^1.2.0",
+ "pascalcase": "^0.1.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "requires": {
+ "is-descriptor": "^1.0.0"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ }
+ }
+ }
},
"bcrypt-pbkdf": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
"integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=",
"dev": true,
- "optional": true,
"requires": {
"tweetnacl": "^0.14.3"
}
@@ -415,17 +752,52 @@
"string-width": "^2.0.0",
"term-size": "^1.2.0",
"widest-line": "^2.0.0"
+ },
+ "dependencies": {
+ "camelcase": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz",
+ "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=",
+ "dev": true
+ }
}
},
"brace-expansion": {
- "version": "1.1.7",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.7.tgz",
- "integrity": "sha1-Pv/DxQ4ABTH7cg6v+A8K6O8jz1k=",
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
"requires": {
- "balanced-match": "^0.4.1",
+ "balanced-match": "^1.0.0",
"concat-map": "0.0.1"
}
},
+ "braces": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
+ "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
+ "requires": {
+ "arr-flatten": "^1.1.0",
+ "array-unique": "^0.3.2",
+ "extend-shallow": "^2.0.1",
+ "fill-range": "^4.0.0",
+ "isobject": "^3.0.1",
+ "repeat-element": "^1.1.2",
+ "snapdragon": "^0.8.1",
+ "snapdragon-node": "^2.0.1",
+ "split-string": "^3.0.2",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
"browser-stdout": {
"version": "1.3.1",
"resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz",
@@ -438,20 +810,27 @@
"integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=",
"dev": true
},
+ "cache-base": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz",
+ "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==",
+ "requires": {
+ "collection-visit": "^1.0.0",
+ "component-emitter": "^1.2.1",
+ "get-value": "^2.0.6",
+ "has-value": "^1.0.0",
+ "isobject": "^3.0.1",
+ "set-value": "^2.0.0",
+ "to-object-path": "^0.3.0",
+ "union-value": "^1.0.0",
+ "unset-value": "^1.0.0"
+ }
+ },
"call-me-maybe": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz",
"integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms="
},
- "caller-path": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz",
- "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=",
- "dev": true,
- "requires": {
- "callsites": "^0.2.0"
- }
- },
"callsite": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz",
@@ -515,15 +894,15 @@
}
},
"callsites": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz",
- "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=",
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.0.0.tgz",
+ "integrity": "sha512-tWnkwu9YEq2uzlBDI4RcLn8jrFvF9AOi8PxDNU3hZZjJcjkcRAq3vCI+vZcg1SuxISDYe86k9VZFwAxDiJGoAw==",
"dev": true
},
"camelcase": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz",
- "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=",
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.2.0.tgz",
+ "integrity": "sha512-IXFsBS2pC+X0j0N/GE7Dm7j3bsEBp+oTpb7F50dwEVX7rf3IgwO9XatnegTsDtniKCUtEJH4fSU6Asw7uoVLfQ==",
"dev": true
},
"camelcase-keys": {
@@ -580,9 +959,9 @@
}
},
"chalk": {
- "version": "2.4.1",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz",
- "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==",
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
"requires": {
"ansi-styles": "^3.2.1",
"escape-string-regexp": "^1.0.5",
@@ -606,11 +985,26 @@
"integrity": "sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==",
"dev": true
},
- "circular-json": {
- "version": "0.3.3",
- "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz",
- "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==",
- "dev": true
+ "class-utils": {
+ "version": "0.3.6",
+ "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz",
+ "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==",
+ "requires": {
+ "arr-union": "^3.1.0",
+ "define-property": "^0.2.5",
+ "isobject": "^3.0.0",
+ "static-extend": "^0.1.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ }
+ }
},
"cli-boxes": {
"version": "1.0.0",
@@ -633,54 +1027,28 @@
"dev": true
},
"cli-width": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.1.0.tgz",
- "integrity": "sha1-sjTKIJsp72b8UY2bmNWEewDt8Ao="
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz",
+ "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk="
},
"cliui": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz",
- "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=",
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz",
+ "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==",
"dev": true,
"requires": {
- "string-width": "^1.0.1",
- "strip-ansi": "^3.0.1",
+ "string-width": "^2.1.1",
+ "strip-ansi": "^4.0.0",
"wrap-ansi": "^2.0.0"
},
"dependencies": {
- "ansi-regex": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
- "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
- "dev": true
- },
- "is-fullwidth-code-point": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
- "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
- "dev": true,
- "requires": {
- "number-is-nan": "^1.0.0"
- }
- },
- "string-width": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
- "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
- "dev": true,
- "requires": {
- "code-point-at": "^1.0.0",
- "is-fullwidth-code-point": "^1.0.0",
- "strip-ansi": "^3.0.0"
- }
- },
"strip-ansi": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
- "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
"dev": true,
"requires": {
- "ansi-regex": "^2.0.0"
+ "ansi-regex": "^3.0.0"
}
}
}
@@ -697,6 +1065,15 @@
"integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=",
"dev": true
},
+ "collection-visit": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz",
+ "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=",
+ "requires": {
+ "map-visit": "^1.0.0",
+ "object-visit": "^1.0.0"
+ }
+ },
"color-convert": {
"version": "1.9.3",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
@@ -719,10 +1096,28 @@
"delayed-stream": "~1.0.0"
}
},
+ "command-line-args": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.0.2.tgz",
+ "integrity": "sha512-/qPcbL8zpqg53x4rAaqMFlRV4opN3pbla7I7k9x8kyOBMQoGT6WltjN6sXZuxOXw6DgdK7Ad+ijYS5gjcr7vlA==",
+ "requires": {
+ "argv-tools": "^0.1.1",
+ "array-back": "^2.0.0",
+ "find-replace": "^2.0.1",
+ "lodash.camelcase": "^4.3.0",
+ "typical": "^2.6.1"
+ }
+ },
"commander": {
"version": "2.19.0",
"resolved": "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz",
- "integrity": "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg=="
+ "integrity": "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==",
+ "dev": true
+ },
+ "component-emitter": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz",
+ "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY="
},
"concat-map": {
"version": "0.0.1",
@@ -743,10 +1138,15 @@
"xdg-basedir": "^3.0.0"
}
},
+ "copy-descriptor": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
+ "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40="
+ },
"core-js": {
- "version": "2.5.7",
- "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.7.tgz",
- "integrity": "sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw==",
+ "version": "2.6.5",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.5.tgz",
+ "integrity": "sha512-klh/kDpwX8hryYL14M9w/xei6vrv6sE8gTHDG7/T/+SEovB/G4ejwcfE/CBzO6Edsu+OETZMZ3wcX/EjUkrl5A==",
"dev": true
},
"core-util-is": {
@@ -756,9 +1156,9 @@
"dev": true
},
"coveralls": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/coveralls/-/coveralls-3.0.2.tgz",
- "integrity": "sha512-Tv0LKe/MkBOilH2v7WBiTBdudg2ChfGbdXafc/s330djpF3zKOmuehTeRwjXWc7pzfj9FrDUTA7tEx6Div8NFw==",
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/coveralls/-/coveralls-3.0.3.tgz",
+ "integrity": "sha512-viNfeGlda2zJr8Gj1zqXpDMRjw9uM54p7wzZdvLRyOgnAfCe974Dq4veZkjJdxQXbmdppu6flEajFYseHYaUhg==",
"dev": true,
"requires": {
"growl": "~> 1.10.0",
@@ -766,7 +1166,7 @@
"lcov-parse": "^0.0.10",
"log-driver": "^1.2.7",
"minimist": "^1.2.0",
- "request": "^2.85.0"
+ "request": "^2.86.0"
}
},
"create-error-class": {
@@ -825,12 +1225,11 @@
}
},
"debug": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.0.tgz",
- "integrity": "sha512-heNPJUJIqC+xB6ayLAMHaIrmN9HKa7aQO8MGqKpvCA+uJYVcvR6l5kgdrhRuwPFHU7P5/A1w0BjByPHwpfTDKg==",
- "dev": true,
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
"requires": {
- "ms": "^2.1.1"
+ "ms": "2.0.0"
}
},
"decamelize": {
@@ -839,6 +1238,11 @@
"integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
"dev": true
},
+ "decode-uri-component": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
+ "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU="
+ },
"deep-eql": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz",
@@ -860,18 +1264,87 @@
"integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=",
"dev": true
},
+ "define-properties": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
+ "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==",
+ "dev": true,
+ "requires": {
+ "object-keys": "^1.0.12"
+ }
+ },
+ "define-property": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
+ "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
+ "requires": {
+ "is-descriptor": "^1.0.2",
+ "isobject": "^3.0.1"
+ },
+ "dependencies": {
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ }
+ }
+ }
+ },
"del": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/del/-/del-3.0.0.tgz",
- "integrity": "sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU=",
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/del/-/del-4.0.0.tgz",
+ "integrity": "sha512-/BnSJ+SuZyLu7xMn48kZY0nMXDi+5KNmR4g8n21Wivsl8+B9njV6/5kcTNE9juSprp0zRWBU28JuHUq0FqK1Nw==",
"dev": true,
"requires": {
"globby": "^6.1.0",
- "is-path-cwd": "^1.0.0",
- "is-path-in-cwd": "^1.0.0",
- "p-map": "^1.1.1",
- "pify": "^3.0.0",
- "rimraf": "^2.2.8"
+ "is-path-cwd": "^2.0.0",
+ "is-path-in-cwd": "^2.0.0",
+ "p-map": "^2.0.0",
+ "pify": "^4.0.1",
+ "rimraf": "^2.6.2"
+ },
+ "dependencies": {
+ "globby": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz",
+ "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=",
+ "dev": true,
+ "requires": {
+ "array-union": "^1.0.1",
+ "glob": "^7.0.3",
+ "object-assign": "^4.0.1",
+ "pify": "^2.0.0",
+ "pinkie-promise": "^2.0.0"
+ },
+ "dependencies": {
+ "pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
+ "dev": true
+ }
+ }
+ }
}
},
"delayed-stream": {
@@ -897,6 +1370,165 @@
"require-package-name": "^2.0.1",
"walkdir": "0.0.11",
"yargs": "^8.0.2"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true
+ },
+ "camelcase": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz",
+ "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=",
+ "dev": true
+ },
+ "cliui": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz",
+ "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=",
+ "dev": true,
+ "requires": {
+ "string-width": "^1.0.1",
+ "strip-ansi": "^3.0.1",
+ "wrap-ansi": "^2.0.0"
+ },
+ "dependencies": {
+ "string-width": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
+ "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
+ "dev": true,
+ "requires": {
+ "code-point-at": "^1.0.0",
+ "is-fullwidth-code-point": "^1.0.0",
+ "strip-ansi": "^3.0.0"
+ }
+ }
+ }
+ },
+ "cross-spawn": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz",
+ "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=",
+ "dev": true,
+ "requires": {
+ "lru-cache": "^4.0.1",
+ "shebang-command": "^1.2.0",
+ "which": "^1.2.9"
+ }
+ },
+ "execa": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz",
+ "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=",
+ "dev": true,
+ "requires": {
+ "cross-spawn": "^5.0.1",
+ "get-stream": "^3.0.0",
+ "is-stream": "^1.1.0",
+ "npm-run-path": "^2.0.0",
+ "p-finally": "^1.0.0",
+ "signal-exit": "^3.0.0",
+ "strip-eof": "^1.0.0"
+ }
+ },
+ "get-stream": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz",
+ "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=",
+ "dev": true
+ },
+ "invert-kv": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz",
+ "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=",
+ "dev": true
+ },
+ "is-fullwidth-code-point": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
+ "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
+ "dev": true,
+ "requires": {
+ "number-is-nan": "^1.0.0"
+ }
+ },
+ "lcid": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz",
+ "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=",
+ "dev": true,
+ "requires": {
+ "invert-kv": "^1.0.0"
+ }
+ },
+ "mem": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz",
+ "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=",
+ "dev": true,
+ "requires": {
+ "mimic-fn": "^1.0.0"
+ }
+ },
+ "os-locale": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz",
+ "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==",
+ "dev": true,
+ "requires": {
+ "execa": "^0.7.0",
+ "lcid": "^1.0.0",
+ "mem": "^1.1.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ },
+ "y18n": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz",
+ "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=",
+ "dev": true
+ },
+ "yargs": {
+ "version": "8.0.2",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-8.0.2.tgz",
+ "integrity": "sha1-YpmpBVsc78lp/355wdkY3Osiw2A=",
+ "dev": true,
+ "requires": {
+ "camelcase": "^4.1.0",
+ "cliui": "^3.2.0",
+ "decamelize": "^1.1.1",
+ "get-caller-file": "^1.0.1",
+ "os-locale": "^2.0.0",
+ "read-pkg-up": "^2.0.0",
+ "require-directory": "^2.1.1",
+ "require-main-filename": "^1.0.1",
+ "set-blocking": "^2.0.0",
+ "string-width": "^2.0.0",
+ "which-module": "^2.0.0",
+ "y18n": "^3.2.1",
+ "yargs-parser": "^7.0.0"
+ }
+ },
+ "yargs-parser": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-7.0.0.tgz",
+ "integrity": "sha1-jQrELxbqVd69MyyvTEA4s+P139k=",
+ "dev": true,
+ "requires": {
+ "camelcase": "^4.1.0"
+ }
+ }
}
},
"deprecate": {
@@ -911,21 +1543,40 @@
"integrity": "sha1-UYZnt2kUYKXn4KNBvnbrfOgJAYQ=",
"dev": true
},
+ "detect-file": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz",
+ "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=",
+ "dev": true
+ },
"detect-indent": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-5.0.0.tgz",
"integrity": "sha1-OHHMCmoALow+Wzz38zYmRnXwa50="
},
+ "detect-newline": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-2.1.0.tgz",
+ "integrity": "sha1-9B8cEL5LAOh7XxPaaAdZ8sW/0+I="
+ },
"diff": {
"version": "3.5.0",
"resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz",
"integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==",
"dev": true
},
+ "dir-glob": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.2.2.tgz",
+ "integrity": "sha512-f9LBi5QWzIW3I6e//uxZoLBlUt9kcp66qo0sSCxL6YZKc75R1c4MFCoe/LaZiBGmgujvQdxc5Bn3QhfyvK5Hsw==",
+ "requires": {
+ "path-type": "^3.0.0"
+ }
+ },
"doctrine": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
- "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
+ "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
"dev": true,
"requires": {
"esutils": "^2.0.2"
@@ -951,12 +1602,26 @@
"resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
"integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=",
"dev": true,
- "optional": true,
"requires": {
"jsbn": "~0.1.0",
"safer-buffer": "^2.1.0"
}
},
+ "emoji-regex": {
+ "version": "7.0.3",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz",
+ "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==",
+ "dev": true
+ },
+ "end-of-stream": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz",
+ "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==",
+ "dev": true,
+ "requires": {
+ "once": "^1.4.0"
+ }
+ },
"error-ex": {
"version": "1.3.2",
"resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
@@ -975,78 +1640,99 @@
"stackframe": "^0.3.1"
}
},
+ "es-abstract": {
+ "version": "1.13.0",
+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.13.0.tgz",
+ "integrity": "sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg==",
+ "dev": true,
+ "requires": {
+ "es-to-primitive": "^1.2.0",
+ "function-bind": "^1.1.1",
+ "has": "^1.0.3",
+ "is-callable": "^1.1.4",
+ "is-regex": "^1.0.4",
+ "object-keys": "^1.0.12"
+ }
+ },
+ "es-to-primitive": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz",
+ "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==",
+ "dev": true,
+ "requires": {
+ "is-callable": "^1.1.4",
+ "is-date-object": "^1.0.1",
+ "is-symbol": "^1.0.2"
+ }
+ },
+ "es6-object-assign": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/es6-object-assign/-/es6-object-assign-1.1.0.tgz",
+ "integrity": "sha1-wsNYJlYkfDnqEHyx5mUrb58kUjw=",
+ "dev": true
+ },
"escape-string-regexp": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
"integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ="
},
"eslint": {
- "version": "5.11.0",
- "resolved": "https://registry.npmjs.org/eslint/-/eslint-5.11.0.tgz",
- "integrity": "sha512-gbEg0ttToZPkZUv2yYjpipxuYrv/9aSSmgM4V6GkiO3u04QosHYBtduUCqLEulEg3YvNDAkk3OWzyQJ/heZ3Nw==",
+ "version": "5.15.1",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-5.15.1.tgz",
+ "integrity": "sha512-NTcm6vQ+PTgN3UBsALw5BMhgO6i5EpIjQF/Xb5tIh3sk9QhrFafujUOczGz4J24JBlzWclSB9Vmx8d+9Z6bFCg==",
"dev": true,
"requires": {
"@babel/code-frame": "^7.0.0",
- "ajv": "^6.5.3",
+ "ajv": "^6.9.1",
"chalk": "^2.1.0",
"cross-spawn": "^6.0.5",
"debug": "^4.0.1",
- "doctrine": "^2.1.0",
- "eslint-scope": "^4.0.0",
+ "doctrine": "^3.0.0",
+ "eslint-scope": "^4.0.2",
"eslint-utils": "^1.3.1",
"eslint-visitor-keys": "^1.0.0",
- "espree": "^5.0.0",
+ "espree": "^5.0.1",
"esquery": "^1.0.1",
"esutils": "^2.0.2",
- "file-entry-cache": "^2.0.0",
+ "file-entry-cache": "^5.0.1",
"functional-red-black-tree": "^1.0.1",
"glob": "^7.1.2",
"globals": "^11.7.0",
"ignore": "^4.0.6",
+ "import-fresh": "^3.0.0",
"imurmurhash": "^0.1.4",
- "inquirer": "^6.1.0",
+ "inquirer": "^6.2.2",
"js-yaml": "^3.12.0",
"json-stable-stringify-without-jsonify": "^1.0.1",
"levn": "^0.3.0",
- "lodash": "^4.17.5",
+ "lodash": "^4.17.11",
"minimatch": "^3.0.4",
"mkdirp": "^0.5.1",
"natural-compare": "^1.4.0",
"optionator": "^0.8.2",
"path-is-inside": "^1.0.2",
- "pluralize": "^7.0.0",
"progress": "^2.0.0",
"regexpp": "^2.0.1",
- "require-uncached": "^1.0.3",
"semver": "^5.5.1",
"strip-ansi": "^4.0.0",
"strip-json-comments": "^2.0.1",
- "table": "^5.0.2",
+ "table": "^5.2.3",
"text-table": "^0.2.0"
},
"dependencies": {
- "ajv": {
- "version": "6.6.2",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.6.2.tgz",
- "integrity": "sha512-FBHEW6Jf5TB9MGBgUUA9XHkTbjXYfAUjY43ACMfmdMRHniyoMHjHjzD50OK8LGDWQwp4rWEsIq5kEqq7rvIM1g==",
+ "debug": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
+ "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
"dev": true,
"requires": {
- "fast-deep-equal": "^2.0.1",
- "fast-json-stable-stringify": "^2.0.0",
- "json-schema-traverse": "^0.4.1",
- "uri-js": "^4.2.2"
+ "ms": "^2.1.1"
}
},
- "fast-deep-equal": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz",
- "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=",
- "dev": true
- },
- "json-schema-traverse": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
- "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
+ "ms": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
+ "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==",
"dev": true
},
"strip-ansi": {
@@ -1061,15 +1747,15 @@
}
},
"eslint-config-modular": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/eslint-config-modular/-/eslint-config-modular-5.0.1.tgz",
- "integrity": "sha512-fJyVQWfMdTFuneVOqgAiZPjaO4+0/oVAPTM1np31PZCssj+rqRwBd/z24RIAtIgUpByUO8hQFvoRfZIFOUTpig==",
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/eslint-config-modular/-/eslint-config-modular-7.0.0.tgz",
+ "integrity": "sha512-FapBmO/8EzKuETlImFHAHXeug2roKabLPqwaPLJ/NA/0lRG71Ca7vNWdMedexLgCAGaqMkWJ5Kd19Q2XOOup1w==",
"dev": true
},
"eslint-scope": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.0.tgz",
- "integrity": "sha512-1G6UTDi7Jc1ELFwnR58HV4fK9OQK4S6N985f166xqXxpjU6plxFISJa2Ba9KCQuFa8RCnj/lSFJbHo7UFDBnUA==",
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.2.tgz",
+ "integrity": "sha512-5q1+B/ogmHl8+paxtOKx38Z8LtWkVGuNt3+GQNErqwLl6ViNp/gdJGMCjZNxZ8j/VYjDNZ2Fo+eQc1TAVPIzbg==",
"dev": true,
"requires": {
"esrecurse": "^4.1.0",
@@ -1089,12 +1775,12 @@
"dev": true
},
"espree": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/espree/-/espree-5.0.0.tgz",
- "integrity": "sha512-1MpUfwsdS9MMoN7ZXqAr9e9UKdVHDcvrJpyx7mm1WuQlx/ygErEQBzgi5Nh5qBHIoYweprhtMkTCb9GhcAIcsA==",
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-5.0.1.tgz",
+ "integrity": "sha512-qWAZcWh4XE/RwzLJejfcofscgMc9CamR6Tn1+XRXNzrvUSSbiAjGOI/fggztjIi7y9VLPqnICMIPiGyr8JaZ0A==",
"dev": true,
"requires": {
- "acorn": "^6.0.2",
+ "acorn": "^6.0.7",
"acorn-jsx": "^5.0.0",
"eslint-visitor-keys": "^1.0.0"
}
@@ -1136,33 +1822,18 @@
"dev": true
},
"execa": {
- "version": "0.2.2",
- "resolved": "https://registry.npmjs.org/execa/-/execa-0.2.2.tgz",
- "integrity": "sha1-4urUcsLDGq1vc/GslW7vReEjIMs=",
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz",
+ "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==",
"dev": true,
"requires": {
- "cross-spawn-async": "^2.1.1",
- "npm-run-path": "^1.0.0",
- "object-assign": "^4.0.1",
- "path-key": "^1.0.0",
+ "cross-spawn": "^6.0.0",
+ "get-stream": "^4.0.0",
+ "is-stream": "^1.1.0",
+ "npm-run-path": "^2.0.0",
+ "p-finally": "^1.0.0",
+ "signal-exit": "^3.0.0",
"strip-eof": "^1.0.0"
- },
- "dependencies": {
- "npm-run-path": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-1.0.0.tgz",
- "integrity": "sha1-9cMr9ZX+ga6Sfa7FLoL4sACsPI8=",
- "dev": true,
- "requires": {
- "path-key": "^1.0.0"
- }
- },
- "path-key": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/path-key/-/path-key-1.0.0.tgz",
- "integrity": "sha1-XVPVeAGWRsDWiADbThRua9wqx68=",
- "dev": true
- }
}
},
"exit-hook": {
@@ -1171,6 +1842,38 @@
"integrity": "sha1-8FyiM7SMBdVP/wd2XfhQfpXAL/g=",
"dev": true
},
+ "expand-brackets": {
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
+ "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
+ "requires": {
+ "debug": "^2.3.3",
+ "define-property": "^0.2.5",
+ "extend-shallow": "^2.0.1",
+ "posix-character-classes": "^0.1.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
"expand-tilde": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz",
@@ -1186,6 +1889,25 @@
"integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==",
"dev": true
},
+ "extend-shallow": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
+ "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
+ "requires": {
+ "assign-symbols": "^1.0.0",
+ "is-extendable": "^1.0.1"
+ },
+ "dependencies": {
+ "is-extendable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+ "requires": {
+ "is-plain-object": "^2.0.4"
+ }
+ }
+ }
+ },
"external-editor": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.0.3.tgz",
@@ -1196,6 +1918,65 @@
"tmp": "^0.0.33"
}
},
+ "extglob": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
+ "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
+ "requires": {
+ "array-unique": "^0.3.2",
+ "define-property": "^1.0.0",
+ "expand-brackets": "^2.1.4",
+ "extend-shallow": "^2.0.1",
+ "fragment-cache": "^0.2.1",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "requires": {
+ "is-descriptor": "^1.0.0"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ }
+ }
+ }
+ },
"extsprintf": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
@@ -1203,9 +1984,9 @@
"dev": true
},
"ez-spawn": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/ez-spawn/-/ez-spawn-2.1.1.tgz",
- "integrity": "sha512-fAi+/2QwSAQsUDqkSX+3P6NRsnOZUnCpHlH9zNf6CPFnXpGIiyQO+3w31nykHosMSldwrTubX9ijeSOXA+l5vA==",
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ez-spawn/-/ez-spawn-2.1.2.tgz",
+ "integrity": "sha512-QUmwE8VjkZIUdac0KTkAL+3h2/YgjyHLJ6Nl76IGsQELhBV8QORv6BKm8yJQZD7cv62d9kUpZfSOwX5ebQn0Gg==",
"requires": {
"call-me-maybe": "^1.0.1",
"cross-spawn": "^6.0.5",
@@ -1214,11 +1995,24 @@
}
},
"fast-deep-equal": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz",
- "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=",
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz",
+ "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=",
"dev": true
},
+ "fast-glob": {
+ "version": "2.2.6",
+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.6.tgz",
+ "integrity": "sha512-0BvMaZc1k9F+MeWWMe8pL6YltFzZYcJsYU7D4JyDA6PAczaXvxqQQ/z+mDF7/4Mw01DeUc+i3CTKajnkANkV4w==",
+ "requires": {
+ "@mrmlnc/readdir-enhanced": "^2.2.1",
+ "@nodelib/fs.stat": "^1.1.2",
+ "glob-parent": "^3.1.0",
+ "is-glob": "^4.0.0",
+ "merge2": "^1.2.3",
+ "micromatch": "^3.1.10"
+ }
+ },
"fast-json-stable-stringify": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz",
@@ -1240,36 +2034,115 @@
}
},
"file-entry-cache": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz",
- "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=",
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz",
+ "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==",
"dev": true,
"requires": {
- "flat-cache": "^1.2.1",
- "object-assign": "^4.0.1"
+ "flat-cache": "^2.0.1"
+ }
+ },
+ "fill-range": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
+ "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
+ "requires": {
+ "extend-shallow": "^2.0.1",
+ "is-number": "^3.0.0",
+ "repeat-string": "^1.6.1",
+ "to-regex-range": "^2.1.0"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "find-replace": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-2.0.1.tgz",
+ "integrity": "sha512-LzDo3Fpa30FLIBsh6DCDnMN1KW2g4QKkqKmejlImgWY67dDFPX/x9Kh/op/GK522DchQXEvDi/wD48HKW49XOQ==",
+ "requires": {
+ "array-back": "^2.0.0",
+ "test-value": "^3.0.0"
}
},
"find-up": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
- "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
+ "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
+ "dev": true,
+ "requires": {
+ "locate-path": "^3.0.0"
+ }
+ },
+ "findup-sync": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-2.0.0.tgz",
+ "integrity": "sha1-kyaxSIwi0aYIhlCoaQGy2akKLLw=",
"dev": true,
"requires": {
- "locate-path": "^2.0.0"
+ "detect-file": "^1.0.0",
+ "is-glob": "^3.1.0",
+ "micromatch": "^3.0.4",
+ "resolve-dir": "^1.0.1"
+ },
+ "dependencies": {
+ "is-glob": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
+ "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
+ "dev": true,
+ "requires": {
+ "is-extglob": "^2.1.0"
+ }
+ }
+ }
+ },
+ "flat": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/flat/-/flat-4.1.0.tgz",
+ "integrity": "sha512-Px/TiLIznH7gEDlPXcUD4KnBusa6kR6ayRUVcnEAbreRIuhkqow/mun59BuRXwoYk7ZQOLW1ZM05ilIvK38hFw==",
+ "dev": true,
+ "requires": {
+ "is-buffer": "~2.0.3"
+ },
+ "dependencies": {
+ "is-buffer": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.3.tgz",
+ "integrity": "sha512-U15Q7MXTuZlrbymiz95PJpZxu8IlipAp4dtS3wOdgPXx3mqBnslrWU14kxfHB+Py/+2PVKSr37dMAgM2A4uArw==",
+ "dev": true
+ }
}
},
"flat-cache": {
- "version": "1.3.4",
- "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.4.tgz",
- "integrity": "sha512-VwyB3Lkgacfik2vhqR4uv2rvebqmDvFu4jlN/C1RzWoJEo8I7z4Q404oiqYCkq41mni8EzQnm95emU9seckwtg==",
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz",
+ "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==",
"dev": true,
"requires": {
- "circular-json": "^0.3.1",
- "graceful-fs": "^4.1.2",
- "rimraf": "~2.6.2",
- "write": "^0.2.1"
+ "flatted": "^2.0.0",
+ "rimraf": "2.6.3",
+ "write": "1.0.3"
}
},
+ "flatted": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.0.tgz",
+ "integrity": "sha512-R+H8IZclI8AAkSBRQJLVOsxwAoHd6WC40b4QTNWIjzAa6BXOBfQcM587MXDTVPeYaopFNWHUFLx7eNmHDSxMWg==",
+ "dev": true
+ },
+ "for-in": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
+ "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA="
+ },
"forever-agent": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
@@ -1277,25 +2150,22 @@
"dev": true
},
"form-data": {
- "version": "2.3.2",
- "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz",
- "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=",
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz",
+ "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==",
"dev": true,
"requires": {
"asynckit": "^0.4.0",
- "combined-stream": "1.0.6",
+ "combined-stream": "^1.0.6",
"mime-types": "^2.1.12"
- },
- "dependencies": {
- "combined-stream": {
- "version": "1.0.6",
- "resolved": "http://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz",
- "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=",
- "dev": true,
- "requires": {
- "delayed-stream": "~1.0.0"
- }
- }
+ }
+ },
+ "fragment-cache": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz",
+ "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=",
+ "requires": {
+ "map-cache": "^0.2.2"
}
},
"fs.realpath": {
@@ -1303,6 +2173,12 @@
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
"integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
},
+ "function-bind": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
+ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
+ "dev": true
+ },
"functional-red-black-tree": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz",
@@ -1327,11 +2203,19 @@
"integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=",
"dev": true
},
- "get-stream": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz",
- "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=",
- "dev": true
+ "get-stream": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz",
+ "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==",
+ "dev": true,
+ "requires": {
+ "pump": "^3.0.0"
+ }
+ },
+ "get-value": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz",
+ "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg="
},
"getpass": {
"version": "0.1.7",
@@ -1343,9 +2227,9 @@
}
},
"giturl": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/giturl/-/giturl-1.0.0.tgz",
- "integrity": "sha1-lzKoHp4lxFeiLw4socnFHbu1Ml8=",
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/giturl/-/giturl-1.0.1.tgz",
+ "integrity": "sha512-wQourBdI13n8tbjcZTDl6k+ZrCRMU6p9vfp9jknZq+zfWc8xXNztpZFM4XkPHVzHcMSUZxEMYYKZjIGkPlei6Q==",
"dev": true
},
"glob": {
@@ -1361,6 +2245,30 @@
"path-is-absolute": "^1.0.0"
}
},
+ "glob-parent": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz",
+ "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
+ "requires": {
+ "is-glob": "^3.1.0",
+ "path-dirname": "^1.0.0"
+ },
+ "dependencies": {
+ "is-glob": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
+ "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
+ "requires": {
+ "is-extglob": "^2.1.0"
+ }
+ }
+ }
+ },
+ "glob-to-regexp": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz",
+ "integrity": "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs="
+ },
"global-dirs": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz",
@@ -1395,30 +2303,24 @@
}
},
"globals": {
- "version": "11.9.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-11.9.0.tgz",
- "integrity": "sha512-5cJVtyXWH8PiJPVLZzzoIizXx944O4OmRro5MWKx5fT4MgcN7OfaMutPeaTdJCCURwbWdhhcCWcKIffPnmTzBg==",
+ "version": "11.11.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-11.11.0.tgz",
+ "integrity": "sha512-WHq43gS+6ufNOEqlrDBxVEbb8ntfXrfAUU2ZOpCxrBdGKW3gyv8mCxAfIBD0DroPKGrJ2eSsXsLtY9MPntsyTw==",
"dev": true
},
"globby": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz",
- "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=",
- "dev": true,
- "requires": {
- "array-union": "^1.0.1",
- "glob": "^7.0.3",
- "object-assign": "^4.0.1",
- "pify": "^2.0.0",
- "pinkie-promise": "^2.0.0"
- },
- "dependencies": {
- "pify": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
- "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
- "dev": true
- }
+ "version": "9.1.0",
+ "resolved": "https://registry.npmjs.org/globby/-/globby-9.1.0.tgz",
+ "integrity": "sha512-VtYjhHr7ncls724Of5W6Kaahz0ag7dB4G62/2HsN+xEKG6SrPzM1AJMerGxQTwJGnN9reeyxdvXbuZYpfssCvg==",
+ "requires": {
+ "@types/glob": "^7.1.1",
+ "array-union": "^1.0.2",
+ "dir-glob": "^2.2.1",
+ "fast-glob": "^2.2.6",
+ "glob": "^7.1.3",
+ "ignore": "^4.0.3",
+ "pify": "^4.0.1",
+ "slash": "^2.0.0"
}
},
"got": {
@@ -1438,12 +2340,20 @@
"timed-out": "^4.0.0",
"unzip-response": "^2.0.1",
"url-parse-lax": "^1.0.0"
+ },
+ "dependencies": {
+ "get-stream": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz",
+ "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=",
+ "dev": true
+ }
}
},
"graceful-fs": {
- "version": "4.1.11",
- "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
- "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=",
+ "version": "4.1.15",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz",
+ "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==",
"dev": true
},
"growl": {
@@ -1459,15 +2369,24 @@
"dev": true
},
"har-validator": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.0.tgz",
- "integrity": "sha512-+qnmNjI4OfH2ipQ9VQOw23bBd/ibtfbVdK2fYbY4acTDqKTW/YDp9McimZdDbG8iV9fZizUqQMD5xvriB146TA==",
+ "version": "5.1.3",
+ "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz",
+ "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==",
"dev": true,
"requires": {
- "ajv": "^5.3.0",
+ "ajv": "^6.5.5",
"har-schema": "^2.0.0"
}
},
+ "has": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
+ "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
+ "dev": true,
+ "requires": {
+ "function-bind": "^1.1.1"
+ }
+ },
"has-ansi": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
@@ -1488,13 +2407,47 @@
"has-flag": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
- "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
+ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0="
+ },
+ "has-symbols": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz",
+ "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=",
"dev": true
},
+ "has-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz",
+ "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=",
+ "requires": {
+ "get-value": "^2.0.6",
+ "has-values": "^1.0.0",
+ "isobject": "^3.0.0"
+ }
+ },
+ "has-values": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz",
+ "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=",
+ "requires": {
+ "is-number": "^3.0.0",
+ "kind-of": "^4.0.0"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz",
+ "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=",
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
"he": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz",
- "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=",
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz",
+ "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==",
"dev": true
},
"highlight-es": {
@@ -1517,9 +2470,9 @@
}
},
"homedir-polyfill": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.1.tgz",
- "integrity": "sha1-TCu8inWJmP7r9e1oWA921GdotLw=",
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz",
+ "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==",
"dev": true,
"requires": {
"parse-passwd": "^1.0.0"
@@ -1553,8 +2506,17 @@
"ignore": {
"version": "4.0.6",
"resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz",
- "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==",
- "dev": true
+ "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg=="
+ },
+ "import-fresh": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.0.0.tgz",
+ "integrity": "sha512-pOnA9tfM3Uwics+SaBLCNyZZZbK+4PTu0OPZtLlMIrv17EdBoC15S9Kn8ckJ9TZTyKb3ywNE5y1yeDxxGA7nTQ==",
+ "dev": true,
+ "requires": {
+ "parent-module": "^1.0.0",
+ "resolve-from": "^4.0.0"
+ }
},
"import-lazy": {
"version": "2.1.0",
@@ -1598,25 +2560,31 @@
"dev": true
},
"inquirer": {
- "version": "6.2.1",
- "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.2.1.tgz",
- "integrity": "sha512-088kl3DRT2dLU5riVMKKr1DlImd6X7smDhpXUCkJDCKvTEJeRiXh0G132HG9u5a+6Ylw9plFRY7RuTnwohYSpg==",
+ "version": "6.2.2",
+ "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.2.2.tgz",
+ "integrity": "sha512-Z2rREiXA6cHRR9KBOarR3WuLlFzlIfAEIiB45ll5SSadMg7WqOh1MKEjjndfuH5ewXdixWCxqnVfGOQzPeiztA==",
"requires": {
- "ansi-escapes": "^3.0.0",
- "chalk": "^2.0.0",
+ "ansi-escapes": "^3.2.0",
+ "chalk": "^2.4.2",
"cli-cursor": "^2.1.0",
"cli-width": "^2.0.0",
- "external-editor": "^3.0.0",
+ "external-editor": "^3.0.3",
"figures": "^2.0.0",
- "lodash": "^4.17.10",
+ "lodash": "^4.17.11",
"mute-stream": "0.0.7",
"run-async": "^2.2.0",
- "rxjs": "^6.1.0",
+ "rxjs": "^6.4.0",
"string-width": "^2.1.0",
"strip-ansi": "^5.0.0",
"through": "^2.3.6"
}
},
+ "interpret": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.2.0.tgz",
+ "integrity": "sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw==",
+ "dev": true
+ },
"invariant": {
"version": "2.2.4",
"resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz",
@@ -1627,25 +2595,45 @@
}
},
"invert-kv": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz",
- "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=",
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz",
+ "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==",
"dev": true
},
+ "is-accessor-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
"is-arrayish": {
"version": "0.2.1",
"resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
"integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=",
"dev": true
},
- "is-builtin-module": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz",
- "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=",
- "dev": true,
- "requires": {
- "builtin-modules": "^1.0.0"
- }
+ "is-buffer": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
+ "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w=="
+ },
+ "is-callable": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz",
+ "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==",
+ "dev": true
},
"is-ci": {
"version": "1.2.1",
@@ -1656,12 +2644,63 @@
"ci-info": "^1.5.0"
}
},
+ "is-data-descriptor": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "is-date-object": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz",
+ "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=",
+ "dev": true
+ },
+ "is-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+ "requires": {
+ "is-accessor-descriptor": "^0.1.6",
+ "is-data-descriptor": "^0.1.4",
+ "kind-of": "^5.0.0"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+ "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw=="
+ }
+ }
+ },
"is-es2016-keyword": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-es2016-keyword/-/is-es2016-keyword-1.0.0.tgz",
"integrity": "sha1-9uVOEQxeT40mXmnS7Q6vjPX0dxg=",
"dev": true
},
+ "is-extendable": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
+ "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik="
+ },
+ "is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI="
+ },
"is-finite": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz",
@@ -1676,6 +2715,14 @@
"resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
"integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8="
},
+ "is-glob": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz",
+ "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=",
+ "requires": {
+ "is-extglob": "^2.1.1"
+ }
+ },
"is-installed-globally": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.1.0.tgz",
@@ -1692,6 +2739,24 @@
"integrity": "sha1-8vtjpl5JBbQGyGBydloaTceTufQ=",
"dev": true
},
+ "is-number": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
+ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
"is-obj": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz",
@@ -1699,29 +2764,37 @@
"dev": true
},
"is-path-cwd": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz",
- "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=",
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.0.0.tgz",
+ "integrity": "sha512-m5dHHzpOXEiv18JEORttBO64UgTEypx99vCxQLjbBvGhOJxnTNglYoFXxwo6AbsQb79sqqycQEHv2hWkHZAijA==",
"dev": true
},
"is-path-in-cwd": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz",
- "integrity": "sha1-ZHdYK4IU1gI0YJRWcAO+ip6sBNw=",
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-2.0.0.tgz",
+ "integrity": "sha512-6Vz5Gc9s/sDA3JBVu0FzWufm8xaBsqy1zn8Q6gmvGP6nSDMw78aS4poBNeatWjaRpTpxxLn1WOndAiOlk+qY8A==",
"dev": true,
"requires": {
"is-path-inside": "^1.0.0"
}
},
"is-path-inside": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.0.tgz",
- "integrity": "sha1-/AbloWg/vaE95mev9xe7wQpI838=",
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz",
+ "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=",
"dev": true,
"requires": {
"path-is-inside": "^1.0.1"
}
},
+ "is-plain-object": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
+ "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
+ "requires": {
+ "isobject": "^3.0.1"
+ }
+ },
"is-promise": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz",
@@ -1733,6 +2806,15 @@
"integrity": "sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=",
"dev": true
},
+ "is-regex": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz",
+ "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=",
+ "dev": true,
+ "requires": {
+ "has": "^1.0.1"
+ }
+ },
"is-retry-allowed": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz",
@@ -1745,6 +2827,15 @@
"integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=",
"dev": true
},
+ "is-symbol": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz",
+ "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==",
+ "dev": true,
+ "requires": {
+ "has-symbols": "^1.0.0"
+ }
+ },
"is-typedarray": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
@@ -1760,14 +2851,23 @@
"is-windows": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
- "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==",
- "dev": true
+ "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA=="
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
},
"isexe": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
"integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA="
},
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8="
+ },
"isstream": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
@@ -1775,15 +2875,15 @@
"dev": true
},
"istanbul-lib-coverage": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.1.tgz",
- "integrity": "sha512-nPvSZsVlbG9aLhZYaC3Oi1gT/tpyo3Yt5fNyf6NmcKIayz4VV/txxJFFKAK/gU4dcNn8ehsanBbVHVl0+amOLA==",
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz",
+ "integrity": "sha512-dKWuzRGCs4G+67VfW9pBFFz2Jpi4vSp/k7zBcJ888ofV5Mi1g5CUML5GvMvV6u9Cjybftu+E8Cgp+k0dI1E5lw==",
"dev": true
},
"istanbul-lib-instrument": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-3.0.0.tgz",
- "integrity": "sha512-eQY9vN9elYjdgN9Iv6NS/00bptm02EBBk70lRMaVjeA6QYocQgenVrSgC28TJurdnZa80AGO3ASdFN+w/njGiQ==",
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-3.1.0.tgz",
+ "integrity": "sha512-ooVllVGT38HIk8MxDj/OIHXSYvH+1tq/Vb38s8ixt9GoJadXska4WkGY+0wkmtYCZNYtaARniH/DixUGGLZ0uA==",
"dev": true,
"requires": {
"@babel/generator": "^7.0.0",
@@ -1791,7 +2891,7 @@
"@babel/template": "^7.0.0",
"@babel/traverse": "^7.0.0",
"@babel/types": "^7.0.0",
- "istanbul-lib-coverage": "^2.0.1",
+ "istanbul-lib-coverage": "^2.0.3",
"semver": "^5.5.0"
}
},
@@ -1802,9 +2902,9 @@
"dev": true
},
"js-yaml": {
- "version": "3.12.0",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.0.tgz",
- "integrity": "sha512-PIt2cnwmPfL4hKNwqeiuz4bKfnzHTBv6HyVgjahA6mPLwPDzjDWrplJBMjHUFxku/N3FlmrbyPclad+I+4mJ3A==",
+ "version": "3.12.2",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.2.tgz",
+ "integrity": "sha512-QHn/Lh/7HhZ/Twc7vJYQTkjuCa0kaCcDcjK5Zlk2rvnUpy7DxMJ23+Jc2dcyvltwQVg1nygAVlB2oRDFHoRS5Q==",
"dev": true,
"requires": {
"argparse": "^1.0.7",
@@ -1815,8 +2915,7 @@
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
"integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=",
- "dev": true,
- "optional": true
+ "dev": true
},
"jsesc": {
"version": "2.5.2",
@@ -1831,9 +2930,9 @@
"dev": true
},
"json-schema-traverse": {
- "version": "0.3.1",
- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz",
- "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=",
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
"dev": true
},
"json-stable-stringify-without-jsonify": {
@@ -1860,6 +2959,11 @@
"verror": "1.10.0"
}
},
+ "kind-of": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+ "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA=="
+ },
"latest-version": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/latest-version/-/latest-version-3.1.0.tgz",
@@ -1870,12 +2974,12 @@
}
},
"lcid": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz",
- "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=",
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz",
+ "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==",
"dev": true,
"requires": {
- "invert-kv": "^1.0.0"
+ "invert-kv": "^2.0.0"
}
},
"lcov-parse": {
@@ -1935,21 +3039,13 @@
}
},
"locate-path": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz",
- "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=",
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
+ "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
"dev": true,
"requires": {
- "p-locate": "^2.0.0",
+ "p-locate": "^3.0.0",
"path-exists": "^3.0.0"
- },
- "dependencies": {
- "path-exists": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
- "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
- "dev": true
- }
}
},
"lodash": {
@@ -1957,6 +3053,11 @@
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz",
"integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg=="
},
+ "lodash.camelcase": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz",
+ "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY="
+ },
"lodash.toarray": {
"version": "4.4.0",
"resolved": "https://registry.npmjs.org/lodash.toarray/-/lodash.toarray-4.4.0.tgz",
@@ -2003,9 +3104,9 @@
"dev": true
},
"lru-cache": {
- "version": "4.1.3",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.3.tgz",
- "integrity": "sha512-fFEhvcgzuIoJVUF8fYr5KR0YqxD238zgObTps31YdADwPPAp82a4M8TrckkWyx7ekNlf9aBcVn81cFwwXngrJA==",
+ "version": "4.1.5",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz",
+ "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==",
"dev": true,
"requires": {
"pseudomap": "^1.0.2",
@@ -2019,21 +3120,53 @@
"dev": true,
"requires": {
"pify": "^3.0.0"
+ },
+ "dependencies": {
+ "pify": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
+ "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
+ "dev": true
+ }
}
},
+ "map-age-cleaner": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz",
+ "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==",
+ "dev": true,
+ "requires": {
+ "p-defer": "^1.0.0"
+ }
+ },
+ "map-cache": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz",
+ "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8="
+ },
"map-obj": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz",
"integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=",
"dev": true
},
+ "map-visit": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz",
+ "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=",
+ "requires": {
+ "object-visit": "^1.0.0"
+ }
+ },
"mem": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz",
- "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=",
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/mem/-/mem-4.1.0.tgz",
+ "integrity": "sha512-I5u6Q1x7wxO0kdOpYBB28xueHADYps5uty/zg936CiG8NTe5sJL8EjrCuLneuDW3PlMdZBGDIn8BirEVdovZvg==",
"dev": true,
"requires": {
- "mimic-fn": "^1.0.0"
+ "map-age-cleaner": "^0.1.1",
+ "mimic-fn": "^1.0.0",
+ "p-is-promise": "^2.0.0"
}
},
"meow": {
@@ -2077,6 +3210,15 @@
"strip-bom": "^2.0.0"
}
},
+ "path-exists": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz",
+ "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=",
+ "dev": true,
+ "requires": {
+ "pinkie-promise": "^2.0.0"
+ }
+ },
"path-type": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz",
@@ -2126,25 +3268,50 @@
}
}
},
+ "merge2": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.2.3.tgz",
+ "integrity": "sha512-gdUU1Fwj5ep4kplwcmftruWofEFt6lfpkkr3h860CXbAB9c3hGb55EOL2ali0Td5oebvW0E1+3Sr+Ur7XfKpRA=="
+ },
+ "micromatch": {
+ "version": "3.1.10",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
+ "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
+ "requires": {
+ "arr-diff": "^4.0.0",
+ "array-unique": "^0.3.2",
+ "braces": "^2.3.1",
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "extglob": "^2.0.4",
+ "fragment-cache": "^0.2.1",
+ "kind-of": "^6.0.2",
+ "nanomatch": "^1.2.9",
+ "object.pick": "^1.3.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.2"
+ }
+ },
"mime-db": {
- "version": "1.36.0",
- "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.36.0.tgz",
- "integrity": "sha512-L+xvyD9MkoYMXb1jAmzI/lWYAxAMCPvIBSWur0PZ5nOf5euahRLVqH//FKW9mWp2lkqUgYiXPgkzfMUFi4zVDw==",
+ "version": "1.38.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.38.0.tgz",
+ "integrity": "sha512-bqVioMFFzc2awcdJZIzR3HjZFX20QhilVS7hytkKrv7xFAn8bM1gzc/FOX2awLISvWe0PV8ptFKcon+wZ5qYkg==",
"dev": true
},
"mime-types": {
- "version": "2.1.20",
- "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.20.tgz",
- "integrity": "sha512-HrkrPaP9vGuWbLK1B1FfgAkbqNjIuy4eHlIYnFi7kamZyLLrGlo2mpcx0bBmNpKqBtYtAfGbodDddIgddSJC2A==",
+ "version": "2.1.22",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.22.tgz",
+ "integrity": "sha512-aGl6TZGnhm/li6F7yx82bJiBZwgiEa4Hf6CNr8YO+r5UHr53tSTYZb102zyU50DOWWKeOv0uQLRL0/9EiKWCog==",
"dev": true,
"requires": {
- "mime-db": "~1.36.0"
+ "mime-db": "~1.38.0"
}
},
"mimic-fn": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.1.0.tgz",
- "integrity": "sha1-5md4PZLonb00KBi1IwudYqZyrRg="
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz",
+ "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ=="
},
"minimatch": {
"version": "3.0.4",
@@ -2160,6 +3327,25 @@
"integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
"dev": true
},
+ "mixin-deep": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz",
+ "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==",
+ "requires": {
+ "for-in": "^1.0.2",
+ "is-extendable": "^1.0.1"
+ },
+ "dependencies": {
+ "is-extendable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+ "requires": {
+ "is-plain-object": "^2.0.4"
+ }
+ }
+ }
+ },
"mkdirp": {
"version": "0.5.1",
"resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
@@ -2178,63 +3364,65 @@
}
},
"mocha": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/mocha/-/mocha-5.2.0.tgz",
- "integrity": "sha512-2IUgKDhc3J7Uug+FxMXuqIyYzH7gJjXECKe/w43IGgQHTSj3InJi+yAA7T24L9bQMRKiUEHxEX37G5JpVUGLcQ==",
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/mocha/-/mocha-6.0.2.tgz",
+ "integrity": "sha512-RtTJsmmToGyeTznSOMoM6TPEk1A84FQaHIciKrRqARZx+B5ccJ5tXlmJzEKGBxZdqk9UjpRsesZTUkZmR5YnuQ==",
"dev": true,
"requires": {
+ "ansi-colors": "3.2.3",
"browser-stdout": "1.3.1",
- "commander": "2.15.1",
- "debug": "3.1.0",
+ "debug": "3.2.6",
"diff": "3.5.0",
"escape-string-regexp": "1.0.5",
- "glob": "7.1.2",
+ "findup-sync": "2.0.0",
+ "glob": "7.1.3",
"growl": "1.10.5",
- "he": "1.1.1",
+ "he": "1.2.0",
+ "js-yaml": "3.12.0",
+ "log-symbols": "2.2.0",
"minimatch": "3.0.4",
"mkdirp": "0.5.1",
- "supports-color": "5.4.0"
+ "ms": "2.1.1",
+ "node-environment-flags": "1.0.4",
+ "object.assign": "4.1.0",
+ "strip-json-comments": "2.0.1",
+ "supports-color": "6.0.0",
+ "which": "1.3.1",
+ "wide-align": "1.1.3",
+ "yargs": "12.0.5",
+ "yargs-parser": "11.1.1",
+ "yargs-unparser": "1.5.0"
},
"dependencies": {
- "commander": {
- "version": "2.15.1",
- "resolved": "http://registry.npmjs.org/commander/-/commander-2.15.1.tgz",
- "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==",
- "dev": true
- },
"debug": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
- "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
+ "version": "3.2.6",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
+ "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
"dev": true,
"requires": {
- "ms": "2.0.0"
+ "ms": "^2.1.1"
}
},
- "glob": {
- "version": "7.1.2",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
- "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
+ "js-yaml": {
+ "version": "3.12.0",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.0.tgz",
+ "integrity": "sha512-PIt2cnwmPfL4hKNwqeiuz4bKfnzHTBv6HyVgjahA6mPLwPDzjDWrplJBMjHUFxku/N3FlmrbyPclad+I+4mJ3A==",
"dev": true,
"requires": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^3.0.4",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
+ "argparse": "^1.0.7",
+ "esprima": "^4.0.0"
}
},
"ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
+ "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==",
"dev": true
},
"supports-color": {
- "version": "5.4.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz",
- "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==",
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz",
+ "integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==",
"dev": true,
"requires": {
"has-flag": "^3.0.0"
@@ -2242,17 +3430,44 @@
}
}
},
+ "mock-require": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/mock-require/-/mock-require-3.0.3.tgz",
+ "integrity": "sha512-lLzfLHcyc10MKQnNUCv7dMcoY/2Qxd6wJfbqCcVk3LDb8An4hF6ohk5AztrvgKhJCqj36uyzi/p5se+tvyD+Wg==",
+ "dev": true,
+ "requires": {
+ "get-caller-file": "^1.0.2",
+ "normalize-path": "^2.1.1"
+ }
+ },
"ms": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
- "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==",
- "dev": true
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
},
"mute-stream": {
"version": "0.0.7",
"resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz",
"integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s="
},
+ "nanomatch": {
+ "version": "1.2.13",
+ "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz",
+ "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==",
+ "requires": {
+ "arr-diff": "^4.0.0",
+ "array-unique": "^0.3.2",
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "fragment-cache": "^0.2.1",
+ "is-windows": "^1.0.2",
+ "kind-of": "^6.0.2",
+ "object.pick": "^1.3.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ }
+ },
"natural-compare": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
@@ -2260,31 +3475,49 @@
"dev": true
},
"nice-try": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.4.tgz",
- "integrity": "sha512-2NpiFHqC87y/zFke0fC0spBXL3bBsoh/p5H1EFhshxjCR5+0g2d6BiXbUFz9v1sAcxsk2htp2eQnNIci2dIYcA=="
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz",
+ "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ=="
},
"node-emoji": {
- "version": "1.8.1",
- "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.8.1.tgz",
- "integrity": "sha512-+ktMAh1Jwas+TnGodfCfjUbJKoANqPaJFN0z0iqh41eqD8dvguNzcitVSBSVK1pidz0AqGbLKcoVuVLRVZ/aVg==",
+ "version": "1.10.0",
+ "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.10.0.tgz",
+ "integrity": "sha512-Yt3384If5H6BYGVHiHwTL+99OzJKHhgp82S8/dktEK73T26BazdgZ4JZh92xSVtGNJvz9UbXdNAc5hcrXV42vw==",
"dev": true,
"requires": {
"lodash.toarray": "^4.4.0"
}
},
+ "node-environment-flags": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/node-environment-flags/-/node-environment-flags-1.0.4.tgz",
+ "integrity": "sha512-M9rwCnWVLW7PX+NUWe3ejEdiLYinRpsEre9hMkU/6NS4h+EEulYaDH1gCEZ2gyXsmw+RXYDaV2JkkTNcsPDJ0Q==",
+ "dev": true,
+ "requires": {
+ "object.getownpropertydescriptors": "^2.0.3"
+ }
+ },
"normalize-package-data": {
- "version": "2.4.0",
- "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz",
- "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==",
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz",
+ "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==",
"dev": true,
"requires": {
"hosted-git-info": "^2.1.4",
- "is-builtin-module": "^1.0.0",
+ "resolve": "^1.10.0",
"semver": "2 || 3 || 4 || 5",
"validate-npm-package-license": "^3.0.1"
}
},
+ "normalize-path": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
+ "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
+ "dev": true,
+ "requires": {
+ "remove-trailing-separator": "^1.0.1"
+ }
+ },
"npm-check": {
"version": "5.9.0",
"resolved": "https://registry.npmjs.org/npm-check/-/npm-check-5.9.0.tgz",
@@ -2359,6 +3592,19 @@
"restore-cursor": "^1.0.1"
}
},
+ "execa": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/execa/-/execa-0.2.2.tgz",
+ "integrity": "sha1-4urUcsLDGq1vc/GslW7vReEjIMs=",
+ "dev": true,
+ "requires": {
+ "cross-spawn-async": "^2.1.1",
+ "npm-run-path": "^1.0.0",
+ "object-assign": "^4.0.1",
+ "path-key": "^1.0.0",
+ "strip-eof": "^1.0.0"
+ }
+ },
"figures": {
"version": "1.7.0",
"resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz",
@@ -2426,12 +3672,36 @@
"number-is-nan": "^1.0.0"
}
},
+ "npm-run-path": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-1.0.0.tgz",
+ "integrity": "sha1-9cMr9ZX+ga6Sfa7FLoL4sACsPI8=",
+ "dev": true,
+ "requires": {
+ "path-key": "^1.0.0"
+ }
+ },
"onetime": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz",
"integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=",
"dev": true
},
+ "path-exists": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz",
+ "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=",
+ "dev": true,
+ "requires": {
+ "pinkie-promise": "^2.0.0"
+ }
+ },
+ "path-key": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-1.0.0.tgz",
+ "integrity": "sha1-XVPVeAGWRsDWiADbThRua9wqx68=",
+ "dev": true
+ },
"pify": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
@@ -2501,53 +3771,37 @@
"dev": true
},
"nyc": {
- "version": "13.1.0",
- "resolved": "https://registry.npmjs.org/nyc/-/nyc-13.1.0.tgz",
- "integrity": "sha512-3GyY6TpQ58z9Frpv4GMExE1SV2tAgYqC7HSy2omEhNiCT3mhT9NyiOvIE8zkbuJVFzmvvNTnE4h/7/wQae7xLg==",
+ "version": "13.3.0",
+ "resolved": "https://registry.npmjs.org/nyc/-/nyc-13.3.0.tgz",
+ "integrity": "sha512-P+FwIuro2aFG6B0Esd9ZDWUd51uZrAEoGutqZxzrVmYl3qSfkLgcQpBPBjtDFsUQLFY1dvTQJPOyeqr8S9GF8w==",
"dev": true,
"requires": {
"archy": "^1.0.0",
"arrify": "^1.0.1",
- "caching-transform": "^2.0.0",
+ "caching-transform": "^3.0.1",
"convert-source-map": "^1.6.0",
- "debug-log": "^1.0.1",
"find-cache-dir": "^2.0.0",
"find-up": "^3.0.0",
"foreground-child": "^1.5.6",
"glob": "^7.1.3",
- "istanbul-lib-coverage": "^2.0.1",
- "istanbul-lib-hook": "^2.0.1",
- "istanbul-lib-instrument": "^3.0.0",
- "istanbul-lib-report": "^2.0.2",
- "istanbul-lib-source-maps": "^2.0.1",
- "istanbul-reports": "^2.0.1",
+ "istanbul-lib-coverage": "^2.0.3",
+ "istanbul-lib-hook": "^2.0.3",
+ "istanbul-lib-instrument": "^3.1.0",
+ "istanbul-lib-report": "^2.0.4",
+ "istanbul-lib-source-maps": "^3.0.2",
+ "istanbul-reports": "^2.1.1",
"make-dir": "^1.3.0",
"merge-source-map": "^1.1.0",
"resolve-from": "^4.0.0",
- "rimraf": "^2.6.2",
+ "rimraf": "^2.6.3",
"signal-exit": "^3.0.2",
"spawn-wrap": "^1.4.2",
- "test-exclude": "^5.0.0",
+ "test-exclude": "^5.1.0",
"uuid": "^3.3.2",
- "yargs": "11.1.0",
- "yargs-parser": "^9.0.2"
+ "yargs": "^12.0.5",
+ "yargs-parser": "^11.1.1"
},
"dependencies": {
- "align-text": {
- "version": "0.1.4",
- "bundled": true,
- "dev": true,
- "requires": {
- "kind-of": "^3.0.2",
- "longest": "^1.0.1",
- "repeat-string": "^1.5.2"
- }
- },
- "amdefine": {
- "version": "1.0.1",
- "bundled": true,
- "dev": true
- },
"ansi-regex": {
"version": "3.0.0",
"bundled": true,
@@ -2572,9 +3826,12 @@
"dev": true
},
"async": {
- "version": "1.5.2",
+ "version": "2.6.2",
"bundled": true,
- "dev": true
+ "dev": true,
+ "requires": {
+ "lodash": "^4.17.11"
+ }
},
"balanced-match": {
"version": "1.0.0",
@@ -2590,55 +3847,30 @@
"concat-map": "0.0.1"
}
},
- "builtin-modules": {
- "version": "1.1.1",
- "bundled": true,
- "dev": true
- },
"caching-transform": {
- "version": "2.0.0",
+ "version": "3.0.1",
"bundled": true,
"dev": true,
"requires": {
- "make-dir": "^1.0.0",
- "md5-hex": "^2.0.0",
- "package-hash": "^2.0.0",
- "write-file-atomic": "^2.0.0"
+ "hasha": "^3.0.0",
+ "make-dir": "^1.3.0",
+ "package-hash": "^3.0.0",
+ "write-file-atomic": "^2.3.0"
}
},
"camelcase": {
- "version": "1.2.1",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "center-align": {
- "version": "0.1.3",
+ "version": "5.0.0",
"bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "align-text": "^0.1.3",
- "lazy-cache": "^1.0.3"
- }
+ "dev": true
},
"cliui": {
- "version": "2.1.0",
+ "version": "4.1.0",
"bundled": true,
"dev": true,
- "optional": true,
"requires": {
- "center-align": "^0.1.1",
- "right-align": "^0.1.1",
- "wordwrap": "0.0.2"
- },
- "dependencies": {
- "wordwrap": {
- "version": "0.0.2",
- "bundled": true,
- "dev": true,
- "optional": true
- }
+ "string-width": "^2.1.1",
+ "strip-ansi": "^4.0.0",
+ "wrap-ansi": "^2.0.0"
}
},
"code-point-at": {
@@ -2646,6 +3878,12 @@
"bundled": true,
"dev": true
},
+ "commander": {
+ "version": "2.17.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
"commondir": {
"version": "1.0.1",
"bundled": true,
@@ -2674,18 +3912,13 @@
}
},
"debug": {
- "version": "3.1.0",
+ "version": "4.1.1",
"bundled": true,
"dev": true,
"requires": {
- "ms": "2.0.0"
+ "ms": "^2.1.1"
}
},
- "debug-log": {
- "version": "1.0.1",
- "bundled": true,
- "dev": true
- },
"decamelize": {
"version": "1.2.0",
"bundled": true,
@@ -2699,6 +3932,14 @@
"strip-bom": "^3.0.0"
}
},
+ "end-of-stream": {
+ "version": "1.4.1",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "once": "^1.4.0"
+ }
+ },
"error-ex": {
"version": "1.3.2",
"bundled": true,
@@ -2713,12 +3954,12 @@
"dev": true
},
"execa": {
- "version": "0.7.0",
+ "version": "1.0.0",
"bundled": true,
"dev": true,
"requires": {
- "cross-spawn": "^5.0.1",
- "get-stream": "^3.0.0",
+ "cross-spawn": "^6.0.0",
+ "get-stream": "^4.0.0",
"is-stream": "^1.1.0",
"npm-run-path": "^2.0.0",
"p-finally": "^1.0.0",
@@ -2727,11 +3968,13 @@
},
"dependencies": {
"cross-spawn": {
- "version": "5.1.0",
+ "version": "6.0.5",
"bundled": true,
"dev": true,
"requires": {
- "lru-cache": "^4.0.1",
+ "nice-try": "^1.0.4",
+ "path-key": "^2.0.1",
+ "semver": "^5.5.0",
"shebang-command": "^1.2.0",
"which": "^1.2.9"
}
@@ -2776,9 +4019,12 @@
"dev": true
},
"get-stream": {
- "version": "3.0.0",
+ "version": "4.1.0",
"bundled": true,
- "dev": true
+ "dev": true,
+ "requires": {
+ "pump": "^3.0.0"
+ }
},
"glob": {
"version": "7.1.3",
@@ -2794,28 +4040,25 @@
}
},
"graceful-fs": {
- "version": "4.1.11",
+ "version": "4.1.15",
"bundled": true,
"dev": true
},
"handlebars": {
- "version": "4.0.11",
+ "version": "4.1.0",
"bundled": true,
"dev": true,
"requires": {
- "async": "^1.4.0",
+ "async": "^2.5.0",
"optimist": "^0.6.1",
- "source-map": "^0.4.4",
- "uglify-js": "^2.6"
+ "source-map": "^0.6.1",
+ "uglify-js": "^3.1.4"
},
"dependencies": {
"source-map": {
- "version": "0.4.4",
+ "version": "0.6.1",
"bundled": true,
- "dev": true,
- "requires": {
- "amdefine": ">=0.0.4"
- }
+ "dev": true
}
}
},
@@ -2824,6 +4067,14 @@
"bundled": true,
"dev": true
},
+ "hasha": {
+ "version": "3.0.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "is-stream": "^1.0.1"
+ }
+ },
"hosted-git-info": {
"version": "2.7.1",
"bundled": true,
@@ -2849,7 +4100,7 @@
"dev": true
},
"invert-kv": {
- "version": "1.0.0",
+ "version": "2.0.0",
"bundled": true,
"dev": true
},
@@ -2858,19 +4109,6 @@
"bundled": true,
"dev": true
},
- "is-buffer": {
- "version": "1.1.6",
- "bundled": true,
- "dev": true
- },
- "is-builtin-module": {
- "version": "1.0.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "builtin-modules": "^1.0.0"
- }
- },
"is-fullwidth-code-point": {
"version": "2.0.0",
"bundled": true,
@@ -2887,12 +4125,12 @@
"dev": true
},
"istanbul-lib-coverage": {
- "version": "2.0.1",
+ "version": "2.0.3",
"bundled": true,
"dev": true
},
"istanbul-lib-hook": {
- "version": "2.0.1",
+ "version": "2.0.3",
"bundled": true,
"dev": true,
"requires": {
@@ -2900,22 +4138,32 @@
}
},
"istanbul-lib-report": {
- "version": "2.0.2",
+ "version": "2.0.4",
"bundled": true,
"dev": true,
"requires": {
- "istanbul-lib-coverage": "^2.0.1",
+ "istanbul-lib-coverage": "^2.0.3",
"make-dir": "^1.3.0",
- "supports-color": "^5.4.0"
+ "supports-color": "^6.0.0"
+ },
+ "dependencies": {
+ "supports-color": {
+ "version": "6.1.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
}
},
"istanbul-lib-source-maps": {
- "version": "2.0.1",
+ "version": "3.0.2",
"bundled": true,
"dev": true,
"requires": {
- "debug": "^3.1.0",
- "istanbul-lib-coverage": "^2.0.1",
+ "debug": "^4.1.1",
+ "istanbul-lib-coverage": "^2.0.3",
"make-dir": "^1.3.0",
"rimraf": "^2.6.2",
"source-map": "^0.6.1"
@@ -2929,11 +4177,11 @@
}
},
"istanbul-reports": {
- "version": "2.0.1",
+ "version": "2.1.1",
"bundled": true,
"dev": true,
"requires": {
- "handlebars": "^4.0.11"
+ "handlebars": "^4.1.0"
}
},
"json-parse-better-errors": {
@@ -2941,26 +4189,12 @@
"bundled": true,
"dev": true
},
- "kind-of": {
- "version": "3.2.2",
- "bundled": true,
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- },
- "lazy-cache": {
- "version": "1.0.4",
- "bundled": true,
- "dev": true,
- "optional": true
- },
"lcid": {
- "version": "1.0.0",
+ "version": "2.0.0",
"bundled": true,
"dev": true,
"requires": {
- "invert-kv": "^1.0.0"
+ "invert-kv": "^2.0.0"
}
},
"load-json-file": {
@@ -2983,18 +4217,18 @@
"path-exists": "^3.0.0"
}
},
- "lodash.flattendeep": {
- "version": "4.4.0",
+ "lodash": {
+ "version": "4.17.11",
"bundled": true,
"dev": true
},
- "longest": {
- "version": "1.0.1",
+ "lodash.flattendeep": {
+ "version": "4.4.0",
"bundled": true,
"dev": true
},
"lru-cache": {
- "version": "4.1.3",
+ "version": "4.1.5",
"bundled": true,
"dev": true,
"requires": {
@@ -3010,25 +4244,22 @@
"pify": "^3.0.0"
}
},
- "md5-hex": {
- "version": "2.0.0",
+ "map-age-cleaner": {
+ "version": "0.1.3",
"bundled": true,
"dev": true,
"requires": {
- "md5-o-matic": "^0.1.1"
+ "p-defer": "^1.0.0"
}
},
- "md5-o-matic": {
- "version": "0.1.1",
- "bundled": true,
- "dev": true
- },
"mem": {
- "version": "1.1.0",
+ "version": "4.1.0",
"bundled": true,
"dev": true,
"requires": {
- "mimic-fn": "^1.0.0"
+ "map-age-cleaner": "^0.1.1",
+ "mimic-fn": "^1.0.0",
+ "p-is-promise": "^2.0.0"
}
},
"merge-source-map": {
@@ -3080,17 +4311,22 @@
}
},
"ms": {
- "version": "2.0.0",
+ "version": "2.1.1",
+ "bundled": true,
+ "dev": true
+ },
+ "nice-try": {
+ "version": "1.0.5",
"bundled": true,
"dev": true
},
"normalize-package-data": {
- "version": "2.4.0",
+ "version": "2.5.0",
"bundled": true,
"dev": true,
"requires": {
"hosted-git-info": "^2.1.4",
- "is-builtin-module": "^1.0.0",
+ "resolve": "^1.10.0",
"semver": "2 || 3 || 4 || 5",
"validate-npm-package-license": "^3.0.1"
}
@@ -3131,23 +4367,33 @@
"dev": true
},
"os-locale": {
- "version": "2.1.0",
+ "version": "3.1.0",
"bundled": true,
"dev": true,
"requires": {
- "execa": "^0.7.0",
- "lcid": "^1.0.0",
- "mem": "^1.1.0"
+ "execa": "^1.0.0",
+ "lcid": "^2.0.0",
+ "mem": "^4.0.0"
}
},
+ "p-defer": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true
+ },
"p-finally": {
"version": "1.0.0",
"bundled": true,
"dev": true
},
- "p-limit": {
+ "p-is-promise": {
"version": "2.0.0",
"bundled": true,
+ "dev": true
+ },
+ "p-limit": {
+ "version": "2.1.0",
+ "bundled": true,
"dev": true,
"requires": {
"p-try": "^2.0.0"
@@ -3167,13 +4413,13 @@
"dev": true
},
"package-hash": {
- "version": "2.0.0",
+ "version": "3.0.0",
"bundled": true,
"dev": true,
"requires": {
- "graceful-fs": "^4.1.11",
+ "graceful-fs": "^4.1.15",
+ "hasha": "^3.0.0",
"lodash.flattendeep": "^4.4.0",
- "md5-hex": "^2.0.0",
"release-zalgo": "^1.0.0"
}
},
@@ -3201,6 +4447,11 @@
"bundled": true,
"dev": true
},
+ "path-parse": {
+ "version": "1.0.6",
+ "bundled": true,
+ "dev": true
+ },
"path-type": {
"version": "3.0.0",
"bundled": true,
@@ -3227,6 +4478,15 @@
"bundled": true,
"dev": true
},
+ "pump": {
+ "version": "3.0.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "end-of-stream": "^1.1.0",
+ "once": "^1.3.1"
+ }
+ },
"read-pkg": {
"version": "3.0.0",
"bundled": true,
@@ -3254,11 +4514,6 @@
"es6-error": "^4.0.1"
}
},
- "repeat-string": {
- "version": "1.6.1",
- "bundled": true,
- "dev": true
- },
"require-directory": {
"version": "2.1.1",
"bundled": true,
@@ -3269,26 +4524,25 @@
"bundled": true,
"dev": true
},
- "resolve-from": {
- "version": "4.0.0",
- "bundled": true,
- "dev": true
- },
- "right-align": {
- "version": "0.1.3",
+ "resolve": {
+ "version": "1.10.0",
"bundled": true,
"dev": true,
- "optional": true,
"requires": {
- "align-text": "^0.1.1"
+ "path-parse": "^1.0.6"
}
},
+ "resolve-from": {
+ "version": "4.0.0",
+ "bundled": true,
+ "dev": true
+ },
"rimraf": {
- "version": "2.6.2",
+ "version": "2.6.3",
"bundled": true,
"dev": true,
"requires": {
- "glob": "^7.0.5"
+ "glob": "^7.1.3"
}
},
"safe-buffer": {
@@ -3297,7 +4551,7 @@
"dev": true
},
"semver": {
- "version": "5.5.0",
+ "version": "5.6.0",
"bundled": true,
"dev": true
},
@@ -3324,12 +4578,6 @@
"bundled": true,
"dev": true
},
- "source-map": {
- "version": "0.5.7",
- "bundled": true,
- "dev": true,
- "optional": true
- },
"spawn-wrap": {
"version": "1.4.2",
"bundled": true,
@@ -3344,7 +4592,7 @@
}
},
"spdx-correct": {
- "version": "3.0.0",
+ "version": "3.1.0",
"bundled": true,
"dev": true,
"requires": {
@@ -3353,7 +4601,7 @@
}
},
"spdx-exceptions": {
- "version": "2.1.0",
+ "version": "2.2.0",
"bundled": true,
"dev": true
},
@@ -3367,7 +4615,7 @@
}
},
"spdx-license-ids": {
- "version": "3.0.0",
+ "version": "3.0.3",
"bundled": true,
"dev": true
},
@@ -3398,16 +4646,8 @@
"bundled": true,
"dev": true
},
- "supports-color": {
- "version": "5.4.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "has-flag": "^3.0.0"
- }
- },
"test-exclude": {
- "version": "5.0.0",
+ "version": "5.1.0",
"bundled": true,
"dev": true,
"requires": {
@@ -3418,35 +4658,22 @@
}
},
"uglify-js": {
- "version": "2.8.29",
+ "version": "3.4.9",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
- "source-map": "~0.5.1",
- "uglify-to-browserify": "~1.0.0",
- "yargs": "~3.10.0"
+ "commander": "~2.17.1",
+ "source-map": "~0.6.1"
},
"dependencies": {
- "yargs": {
- "version": "3.10.0",
+ "source-map": {
+ "version": "0.6.1",
"bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "camelcase": "^1.0.2",
- "cliui": "^2.1.0",
- "decamelize": "^1.0.0",
- "window-size": "0.1.0"
- }
- }
- }
- },
- "uglify-to-browserify": {
- "version": "1.0.2",
- "bundled": true,
- "dev": true,
- "optional": true
+ "dev": true,
+ "optional": true
+ }
+ }
},
"uuid": {
"version": "3.3.2",
@@ -3454,7 +4681,7 @@
"dev": true
},
"validate-npm-package-license": {
- "version": "3.0.3",
+ "version": "3.0.4",
"bundled": true,
"dev": true,
"requires": {
@@ -3475,12 +4702,6 @@
"bundled": true,
"dev": true
},
- "window-size": {
- "version": "0.1.0",
- "bundled": true,
- "dev": true,
- "optional": true
- },
"wordwrap": {
"version": "0.0.3",
"bundled": true,
@@ -3534,7 +4755,7 @@
"dev": true
},
"write-file-atomic": {
- "version": "2.3.0",
+ "version": "2.4.2",
"bundled": true,
"dev": true,
"requires": {
@@ -3544,7 +4765,7 @@
}
},
"y18n": {
- "version": "3.2.1",
+ "version": "4.0.0",
"bundled": true,
"dev": true
},
@@ -3554,87 +4775,31 @@
"dev": true
},
"yargs": {
- "version": "11.1.0",
+ "version": "12.0.5",
"bundled": true,
"dev": true,
"requires": {
"cliui": "^4.0.0",
- "decamelize": "^1.1.1",
- "find-up": "^2.1.0",
+ "decamelize": "^1.2.0",
+ "find-up": "^3.0.0",
"get-caller-file": "^1.0.1",
- "os-locale": "^2.0.0",
+ "os-locale": "^3.0.0",
"require-directory": "^2.1.1",
"require-main-filename": "^1.0.1",
"set-blocking": "^2.0.0",
"string-width": "^2.0.0",
"which-module": "^2.0.0",
- "y18n": "^3.2.1",
- "yargs-parser": "^9.0.2"
- },
- "dependencies": {
- "cliui": {
- "version": "4.1.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "string-width": "^2.1.1",
- "strip-ansi": "^4.0.0",
- "wrap-ansi": "^2.0.0"
- }
- },
- "find-up": {
- "version": "2.1.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "locate-path": "^2.0.0"
- }
- },
- "locate-path": {
- "version": "2.0.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "p-locate": "^2.0.0",
- "path-exists": "^3.0.0"
- }
- },
- "p-limit": {
- "version": "1.3.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "p-try": "^1.0.0"
- }
- },
- "p-locate": {
- "version": "2.0.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "p-limit": "^1.1.0"
- }
- },
- "p-try": {
- "version": "1.0.0",
- "bundled": true,
- "dev": true
- }
+ "y18n": "^3.2.1 || ^4.0.0",
+ "yargs-parser": "^11.1.1"
}
},
"yargs-parser": {
- "version": "9.0.2",
+ "version": "11.1.1",
"bundled": true,
"dev": true,
"requires": {
- "camelcase": "^4.1.0"
- },
- "dependencies": {
- "camelcase": {
- "version": "4.1.0",
- "bundled": true,
- "dev": true
- }
+ "camelcase": "^5.0.0",
+ "decamelize": "^1.2.0"
}
}
}
@@ -3651,6 +4816,78 @@
"integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
"dev": true
},
+ "object-copy": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz",
+ "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=",
+ "requires": {
+ "copy-descriptor": "^0.1.0",
+ "define-property": "^0.2.5",
+ "kind-of": "^3.0.3"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ },
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "object-keys": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.0.tgz",
+ "integrity": "sha512-6OO5X1+2tYkNyNEx6TsCxEqFfRWaqx6EtMiSbGrw8Ob8v9Ne+Hl8rBAgLBZn5wjEz3s/s6U1WXFUFOcxxAwUpg==",
+ "dev": true
+ },
+ "object-visit": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz",
+ "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=",
+ "requires": {
+ "isobject": "^3.0.0"
+ }
+ },
+ "object.assign": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz",
+ "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==",
+ "dev": true,
+ "requires": {
+ "define-properties": "^1.1.2",
+ "function-bind": "^1.1.1",
+ "has-symbols": "^1.0.0",
+ "object-keys": "^1.0.11"
+ }
+ },
+ "object.getownpropertydescriptors": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz",
+ "integrity": "sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=",
+ "dev": true,
+ "requires": {
+ "define-properties": "^1.1.2",
+ "es-abstract": "^1.5.1"
+ }
+ },
+ "object.pick": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz",
+ "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=",
+ "requires": {
+ "isobject": "^3.0.1"
+ }
+ },
"once": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
@@ -3761,42 +4998,14 @@
}
},
"os-locale": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz",
- "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==",
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz",
+ "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==",
"dev": true,
"requires": {
- "execa": "^0.7.0",
- "lcid": "^1.0.0",
- "mem": "^1.1.0"
- },
- "dependencies": {
- "cross-spawn": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz",
- "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=",
- "dev": true,
- "requires": {
- "lru-cache": "^4.0.1",
- "shebang-command": "^1.2.0",
- "which": "^1.2.9"
- }
- },
- "execa": {
- "version": "0.7.0",
- "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz",
- "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=",
- "dev": true,
- "requires": {
- "cross-spawn": "^5.0.1",
- "get-stream": "^3.0.0",
- "is-stream": "^1.1.0",
- "npm-run-path": "^2.0.0",
- "p-finally": "^1.0.0",
- "signal-exit": "^3.0.0",
- "strip-eof": "^1.0.0"
- }
- }
+ "execa": "^1.0.0",
+ "lcid": "^2.0.0",
+ "mem": "^4.0.0"
}
},
"os-tmpdir": {
@@ -3804,40 +5013,52 @@
"resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
"integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ="
},
+ "p-defer": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz",
+ "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=",
+ "dev": true
+ },
"p-finally": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz",
"integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=",
"dev": true
},
+ "p-is-promise": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.0.0.tgz",
+ "integrity": "sha512-pzQPhYMCAgLAKPWD2jC3Se9fEfrD9npNos0y150EeqZll7akhEgGhTW/slB6lHku8AvYGiJ+YJ5hfHKePPgFWg==",
+ "dev": true
+ },
"p-limit": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz",
- "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==",
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz",
+ "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==",
"dev": true,
"requires": {
- "p-try": "^1.0.0"
+ "p-try": "^2.0.0"
}
},
"p-locate": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz",
- "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=",
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
+ "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
"dev": true,
"requires": {
- "p-limit": "^1.1.0"
+ "p-limit": "^2.0.0"
}
},
"p-map": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/p-map/-/p-map-1.2.0.tgz",
- "integrity": "sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA==",
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.0.0.tgz",
+ "integrity": "sha512-GO107XdrSUmtHxVoi60qc9tUl/KkNKm+X2CF4P9amalpGxv5YqVPJNfSb0wcA+syCopkZvYYIzW8OVTQW59x/w==",
"dev": true
},
"p-try": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz",
- "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=",
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.0.0.tgz",
+ "integrity": "sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ==",
"dev": true
},
"package-json": {
@@ -3852,6 +5073,15 @@
"semver": "^5.1.0"
}
},
+ "parent-module": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.0.tgz",
+ "integrity": "sha512-8Mf5juOMmiE4FcmzYc4IaiS9L3+9paz2KOiXzkRviCP6aDmN49Hz6EMWz0lGNp9pX80GvvAuLADtyGfW/Em3TA==",
+ "dev": true,
+ "requires": {
+ "callsites": "^3.0.0"
+ }
+ },
"parse-json": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz",
@@ -3867,14 +5097,21 @@
"integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=",
"dev": true
},
+ "pascalcase": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz",
+ "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ="
+ },
+ "path-dirname": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz",
+ "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA="
+ },
"path-exists": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz",
- "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=",
- "dev": true,
- "requires": {
- "pinkie-promise": "^2.0.0"
- }
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
+ "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
+ "dev": true
},
"path-is-absolute": {
"version": "1.0.1",
@@ -3892,20 +5129,24 @@
"resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
"integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A="
},
+ "path-parse": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz",
+ "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==",
+ "dev": true
+ },
"path-type": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz",
- "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=",
- "dev": true,
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz",
+ "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==",
"requires": {
- "pify": "^2.0.0"
+ "pify": "^3.0.0"
},
"dependencies": {
"pify": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
- "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
- "dev": true
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
+ "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY="
}
}
},
@@ -3922,10 +5163,9 @@
"dev": true
},
"pify": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
- "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
- "dev": true
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz",
+ "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g=="
},
"pinkie": {
"version": "2.0.4",
@@ -3960,14 +5200,22 @@
"path-exists": "^2.0.0",
"pinkie-promise": "^2.0.0"
}
+ },
+ "path-exists": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz",
+ "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=",
+ "dev": true,
+ "requires": {
+ "pinkie-promise": "^2.0.0"
+ }
}
}
},
- "pluralize": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-7.0.0.tgz",
- "integrity": "sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==",
- "dev": true
+ "posix-character-classes": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz",
+ "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs="
},
"preferred-pm": {
"version": "1.0.1",
@@ -3977,14 +5225,6 @@
"requires": {
"path-exists": "^3.0.0",
"which-pm": "^1.0.1"
- },
- "dependencies": {
- "path-exists": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
- "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
- "dev": true
- }
}
},
"prelude-ls": {
@@ -4012,15 +5252,25 @@
"dev": true
},
"psl": {
- "version": "1.1.29",
- "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.29.tgz",
- "integrity": "sha512-AeUmQ0oLN02flVHXWh9sSJF7mcdFq0ppid/JkErufc3hGIV/AMa8Fo9VgDo/cT2jFdOWoFvHp90qqBH54W+gjQ==",
+ "version": "1.1.31",
+ "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.31.tgz",
+ "integrity": "sha512-/6pt4+C+T+wZUieKR620OpzN/LlnNKuWjy1iFLQ/UG35JqHlR/89MP1d96dUfkf6Dne3TuLQzOYEYshJ+Hx8mw==",
"dev": true
},
+ "pump": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
+ "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
+ "dev": true,
+ "requires": {
+ "end-of-stream": "^1.1.0",
+ "once": "^1.3.1"
+ }
+ },
"punycode": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
- "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=",
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
+ "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
"dev": true
},
"qs": {
@@ -4050,6 +5300,23 @@
"load-json-file": "^2.0.0",
"normalize-package-data": "^2.3.2",
"path-type": "^2.0.0"
+ },
+ "dependencies": {
+ "path-type": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz",
+ "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=",
+ "dev": true,
+ "requires": {
+ "pify": "^2.0.0"
+ }
+ },
+ "pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
+ "dev": true
+ }
}
},
"read-pkg-up": {
@@ -4060,6 +5327,51 @@
"requires": {
"find-up": "^2.0.0",
"read-pkg": "^2.0.0"
+ },
+ "dependencies": {
+ "find-up": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
+ "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
+ "dev": true,
+ "requires": {
+ "locate-path": "^2.0.0"
+ }
+ },
+ "locate-path": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz",
+ "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=",
+ "dev": true,
+ "requires": {
+ "p-locate": "^2.0.0",
+ "path-exists": "^3.0.0"
+ }
+ },
+ "p-limit": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz",
+ "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==",
+ "dev": true,
+ "requires": {
+ "p-try": "^1.0.0"
+ }
+ },
+ "p-locate": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz",
+ "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=",
+ "dev": true,
+ "requires": {
+ "p-limit": "^1.1.0"
+ }
+ },
+ "p-try": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz",
+ "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=",
+ "dev": true
+ }
}
},
"readline2": {
@@ -4090,6 +5402,15 @@
}
}
},
+ "rechoir": {
+ "version": "0.6.2",
+ "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz",
+ "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=",
+ "dev": true,
+ "requires": {
+ "resolve": "^1.1.6"
+ }
+ },
"redent": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz",
@@ -4106,6 +5427,15 @@
"integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
"dev": true
},
+ "regex-not": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz",
+ "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==",
+ "requires": {
+ "extend-shallow": "^3.0.2",
+ "safe-regex": "^1.1.0"
+ }
+ },
"regexpp": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz",
@@ -4131,6 +5461,22 @@
"rc": "^1.0.1"
}
},
+ "remove-trailing-separator": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz",
+ "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=",
+ "dev": true
+ },
+ "repeat-element": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz",
+ "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g=="
+ },
+ "repeat-string": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
+ "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc="
+ },
"repeating": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz",
@@ -4186,14 +5532,13 @@
"integrity": "sha1-wR6XJ2tluOKSP3Xav1+y7ww4Qbk=",
"dev": true
},
- "require-uncached": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz",
- "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=",
+ "resolve": {
+ "version": "1.10.0",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.10.0.tgz",
+ "integrity": "sha512-3sUr9aq5OfSg2S9pNtPA9hL1FVEAjvfOC4leW0SNf/mpnaakz2a9femSd6LqAww2RaFctwyf1lCqnTHuF1rxDg==",
"dev": true,
"requires": {
- "caller-path": "^0.1.0",
- "resolve-from": "^1.0.0"
+ "path-parse": "^1.0.6"
}
},
"resolve-dir": {
@@ -4207,11 +5552,16 @@
}
},
"resolve-from": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz",
- "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=",
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
+ "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
"dev": true
},
+ "resolve-url": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",
+ "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo="
+ },
"restore-cursor": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz",
@@ -4221,13 +5571,18 @@
"signal-exit": "^3.0.2"
}
},
+ "ret": {
+ "version": "0.1.15",
+ "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz",
+ "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg=="
+ },
"rimraf": {
- "version": "2.6.2",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz",
- "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==",
+ "version": "2.6.3",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz",
+ "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==",
"dev": true,
"requires": {
- "glob": "^7.0.5"
+ "glob": "^7.1.3"
}
},
"run-async": {
@@ -4245,9 +5600,9 @@
"dev": true
},
"rxjs": {
- "version": "6.3.3",
- "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.3.3.tgz",
- "integrity": "sha512-JTWmoY9tWCs7zvIk/CvRjhjGaOd+OVBM987mxFo+OW66cGpdKjZcpmc74ES1sB//7Kl/PAe8+wEakuhG4pcgOw==",
+ "version": "6.4.0",
+ "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.4.0.tgz",
+ "integrity": "sha512-Z9Yfa11F6B9Sg/BK9MnqnQ+aQYicPLtilXBp2yUtDt2JRCE0h26d33EnfO3ZxoNxG0T92OUucP3Ct7cpfkdFfw==",
"requires": {
"tslib": "^1.9.0"
}
@@ -4258,6 +5613,14 @@
"integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
"dev": true
},
+ "safe-regex": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz",
+ "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=",
+ "requires": {
+ "ret": "~0.1.10"
+ }
+ },
"safer-buffer": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
@@ -4283,6 +5646,27 @@
"integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=",
"dev": true
},
+ "set-value": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz",
+ "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==",
+ "requires": {
+ "extend-shallow": "^2.0.1",
+ "is-extendable": "^0.1.1",
+ "is-plain-object": "^2.0.3",
+ "split-string": "^3.0.1"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
"shebang-command": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
@@ -4296,15 +5680,42 @@
"resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
"integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM="
},
+ "shelljs": {
+ "version": "0.8.3",
+ "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.3.tgz",
+ "integrity": "sha512-fc0BKlAWiLpwZljmOvAOTE/gXawtCoNrP5oaY7KIaQbbyHeQVg01pSEuEGvGh3HEdBU4baCD7wQBwADmM/7f7A==",
+ "dev": true,
+ "requires": {
+ "glob": "^7.0.0",
+ "interpret": "^1.0.0",
+ "rechoir": "^0.6.2"
+ }
+ },
+ "shx": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/shx/-/shx-0.3.2.tgz",
+ "integrity": "sha512-aS0mWtW3T2sHAenrSrip2XGv39O9dXIFUqxAEWHEOS1ePtGIBavdPJY1kE2IHl14V/4iCbUiNDPGdyYTtmhSoA==",
+ "dev": true,
+ "requires": {
+ "es6-object-assign": "^1.0.3",
+ "minimist": "^1.2.0",
+ "shelljs": "^0.8.1"
+ }
+ },
"signal-exit": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
"integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0="
},
- "slice-ansi": {
+ "slash": {
"version": "2.0.0",
- "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.0.0.tgz",
- "integrity": "sha512-4j2WTWjp3GsZ+AOagyzVbzp4vWGtZ0hEZ/gDY/uTvm6MTxUfTUIsnMIFb1bn8o0RuXiqUw15H1bue8f22Vw2oQ==",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz",
+ "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A=="
+ },
+ "slice-ansi": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz",
+ "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==",
"dev": true,
"requires": {
"ansi-styles": "^3.2.0",
@@ -4312,16 +5723,129 @@
"is-fullwidth-code-point": "^2.0.0"
}
},
+ "snapdragon": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz",
+ "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==",
+ "requires": {
+ "base": "^0.11.1",
+ "debug": "^2.2.0",
+ "define-property": "^0.2.5",
+ "extend-shallow": "^2.0.1",
+ "map-cache": "^0.2.2",
+ "source-map": "^0.5.6",
+ "source-map-resolve": "^0.5.0",
+ "use": "^3.1.0"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "snapdragon-node": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz",
+ "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==",
+ "requires": {
+ "define-property": "^1.0.0",
+ "isobject": "^3.0.0",
+ "snapdragon-util": "^3.0.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "requires": {
+ "is-descriptor": "^1.0.0"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ }
+ }
+ }
+ },
+ "snapdragon-util": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz",
+ "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==",
+ "requires": {
+ "kind-of": "^3.2.0"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
"source-map": {
"version": "0.5.7",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
- "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
- "dev": true
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
+ },
+ "source-map-resolve": {
+ "version": "0.5.2",
+ "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz",
+ "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==",
+ "requires": {
+ "atob": "^2.1.1",
+ "decode-uri-component": "^0.2.0",
+ "resolve-url": "^0.2.1",
+ "source-map-url": "^0.4.0",
+ "urix": "^0.1.0"
+ }
+ },
+ "source-map-url": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz",
+ "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM="
},
"spdx-correct": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.1.tgz",
- "integrity": "sha512-hxSPZbRZvSDuOvADntOElzJpenIR7wXJkuoUcUtS0erbgt2fgeaoPIYretfKpslMhfFDY4k0MZ2F5CUzhBsSvQ==",
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz",
+ "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==",
"dev": true,
"requires": {
"spdx-expression-parse": "^3.0.0",
@@ -4329,9 +5853,9 @@
}
},
"spdx-exceptions": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.1.0.tgz",
- "integrity": "sha512-4K1NsmrlCU1JJgUrtgEeTVyfx8VaYea9J9LvARxhbHtVtohPs/gFGG5yy49beySjlIMhhXZ4QqujIZEfS4l6Cg==",
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz",
+ "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==",
"dev": true
},
"spdx-expression-parse": {
@@ -4345,11 +5869,19 @@
}
},
"spdx-license-ids": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.1.tgz",
- "integrity": "sha512-TfOfPcYGBB5sDuPn3deByxPhmfegAhpDYKSOXZQN81Oyrrif8ZCodOLzK3AesELnCx03kikhyDwh0pfvvQvF8w==",
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.3.tgz",
+ "integrity": "sha512-uBIcIl3Ih6Phe3XHK1NqboJLdGfwr1UN3k6wSD1dZpmPsIkb8AGNbZYJ1fOBk834+Gxy8rpfDxrS6XLEMZMY2g==",
"dev": true
},
+ "split-string": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz",
+ "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==",
+ "requires": {
+ "extend-shallow": "^3.0.0"
+ }
+ },
"sprintf-js": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
@@ -4357,9 +5889,9 @@
"dev": true
},
"sshpk": {
- "version": "1.14.2",
- "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.14.2.tgz",
- "integrity": "sha1-xvxhZIo9nE52T9P8306hBeSSupg=",
+ "version": "1.16.1",
+ "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz",
+ "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==",
"dev": true,
"requires": {
"asn1": "~0.2.3",
@@ -4379,6 +5911,25 @@
"integrity": "sha1-M6qE8Rd6VUjIk1Uzy/6zQgl19aQ=",
"dev": true
},
+ "static-extend": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz",
+ "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=",
+ "requires": {
+ "define-property": "^0.2.5",
+ "object-copy": "^0.1.0"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ }
+ }
+ },
"string-argv": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.1.1.tgz",
@@ -4404,17 +5955,17 @@
}
},
"strip-ansi": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.0.0.tgz",
- "integrity": "sha512-Uu7gQyZI7J7gn5qLn1Np3G9vcYGTVqB+lFTytnDJv83dd8T22aGH451P3jueT2/QemInJDfxHB5Tde5OzgG1Ow==",
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.1.0.tgz",
+ "integrity": "sha512-TjxrkPONqO2Z8QDCpeE2j6n0M6EwxzyDgzEeGp+FbdvaJAt//ClYi6W5my+3ROlC/hZX2KACUwDfK49Ka5eDvg==",
"requires": {
- "ansi-regex": "^4.0.0"
+ "ansi-regex": "^4.1.0"
},
"dependencies": {
"ansi-regex": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.0.0.tgz",
- "integrity": "sha512-iB5Dda8t/UqpPI/IjsejXu5jOGDrzn41wJyljwPH65VCIbk6+1BzFIMJGFwTNrYXT1CrD+B4l19U7awiQ8rk7w=="
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
+ "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg=="
}
}
},
@@ -4451,50 +6002,30 @@
"integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
"requires": {
"has-flag": "^3.0.0"
- },
- "dependencies": {
- "has-flag": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
- "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0="
- }
}
},
"table": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/table/-/table-5.1.1.tgz",
- "integrity": "sha512-NUjapYb/qd4PeFW03HnAuOJ7OMcBkJlqeClWxeNlQ0lXGSb52oZXGzkO0/I0ARegQ2eUT1g2VDJH0eUxDRcHmw==",
+ "version": "5.2.3",
+ "resolved": "https://registry.npmjs.org/table/-/table-5.2.3.tgz",
+ "integrity": "sha512-N2RsDAMvDLvYwFcwbPyF3VmVSSkuF+G1e+8inhBLtHpvwXGw4QRPEZhihQNeEN0i1up6/f6ObCJXNdlRG3YVyQ==",
"dev": true,
"requires": {
- "ajv": "^6.6.1",
+ "ajv": "^6.9.1",
"lodash": "^4.17.11",
- "slice-ansi": "2.0.0",
- "string-width": "^2.1.1"
+ "slice-ansi": "^2.1.0",
+ "string-width": "^3.0.0"
},
"dependencies": {
- "ajv": {
- "version": "6.6.2",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.6.2.tgz",
- "integrity": "sha512-FBHEW6Jf5TB9MGBgUUA9XHkTbjXYfAUjY43ACMfmdMRHniyoMHjHjzD50OK8LGDWQwp4rWEsIq5kEqq7rvIM1g==",
+ "string-width": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
+ "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
"dev": true,
"requires": {
- "fast-deep-equal": "^2.0.1",
- "fast-json-stable-stringify": "^2.0.0",
- "json-schema-traverse": "^0.4.1",
- "uri-js": "^4.2.2"
+ "emoji-regex": "^7.0.1",
+ "is-fullwidth-code-point": "^2.0.0",
+ "strip-ansi": "^5.1.0"
}
- },
- "fast-deep-equal": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz",
- "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=",
- "dev": true
- },
- "json-schema-traverse": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
- "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
- "dev": true
}
}
},
@@ -4532,9 +6063,24 @@
"signal-exit": "^3.0.0",
"strip-eof": "^1.0.0"
}
+ },
+ "get-stream": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz",
+ "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=",
+ "dev": true
}
}
},
+ "test-value": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/test-value/-/test-value-3.0.0.tgz",
+ "integrity": "sha512-sVACdAWcZkSU9x7AOmJo5TqE+GyNJknHaHsMrR6ZnhjVlVN9Yx6FjHrsKZ3BjIpPCT68zYesPWkakrNupwfOTQ==",
+ "requires": {
+ "array-back": "^2.0.0",
+ "typical": "^2.6.1"
+ }
+ },
"text-table": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
@@ -4572,6 +6118,44 @@
"integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=",
"dev": true
},
+ "to-object-path": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz",
+ "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=",
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "to-regex": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz",
+ "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==",
+ "requires": {
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "regex-not": "^1.0.2",
+ "safe-regex": "^1.1.0"
+ }
+ },
+ "to-regex-range": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
+ "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
+ "requires": {
+ "is-number": "^3.0.0",
+ "repeat-string": "^1.6.1"
+ }
+ },
"tough-cookie": {
"version": "2.4.3",
"resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz",
@@ -4580,6 +6164,14 @@
"requires": {
"psl": "^1.1.24",
"punycode": "^1.4.1"
+ },
+ "dependencies": {
+ "punycode": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
+ "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=",
+ "dev": true
+ }
}
},
"trim-newlines": {
@@ -4599,6 +6191,42 @@
"resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz",
"integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ=="
},
+ "tslint": {
+ "version": "5.13.1",
+ "resolved": "https://registry.npmjs.org/tslint/-/tslint-5.13.1.tgz",
+ "integrity": "sha512-fplQqb2miLbcPhyHoMV4FU9PtNRbgmm/zI5d3SZwwmJQM6V0eodju+hplpyfhLWpmwrDNfNYU57uYRb8s0zZoQ==",
+ "dev": true,
+ "requires": {
+ "babel-code-frame": "^6.22.0",
+ "builtin-modules": "^1.1.1",
+ "chalk": "^2.3.0",
+ "commander": "^2.12.1",
+ "diff": "^3.2.0",
+ "glob": "^7.1.1",
+ "js-yaml": "^3.7.0",
+ "minimatch": "^3.0.4",
+ "mkdirp": "^0.5.1",
+ "resolve": "^1.3.2",
+ "semver": "^5.3.0",
+ "tslib": "^1.8.0",
+ "tsutils": "^2.27.2"
+ }
+ },
+ "tslint-modular": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/tslint-modular/-/tslint-modular-1.3.0.tgz",
+ "integrity": "sha512-n0e24FkNEtZLezreRs1QDO4IOA1ybhkhORy8hw3Rmaz/zt815BjKNMtPcwTDm5YWeskdWiI6d3cKfGzndOOpiA==",
+ "dev": true
+ },
+ "tsutils": {
+ "version": "2.29.0",
+ "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.29.0.tgz",
+ "integrity": "sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==",
+ "dev": true,
+ "requires": {
+ "tslib": "^1.8.1"
+ }
+ },
"tunnel-agent": {
"version": "0.6.0",
"resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
@@ -4612,8 +6240,7 @@
"version": "0.14.5",
"resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
"integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=",
- "dev": true,
- "optional": true
+ "dev": true
},
"type-check": {
"version": "0.3.2",
@@ -4629,6 +6256,60 @@
"resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz",
"integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g=="
},
+ "typescript": {
+ "version": "3.3.3333",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.3.3333.tgz",
+ "integrity": "sha512-JjSKsAfuHBE/fB2oZ8NxtRTk5iGcg6hkYXMnZ3Wc+b2RSqejEqTaem11mHASMnFilHrax3sLK0GDzcJrekZYLw==",
+ "dev": true
+ },
+ "typescript-tslint-plugin": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/typescript-tslint-plugin/-/typescript-tslint-plugin-0.3.1.tgz",
+ "integrity": "sha512-h8HEPBm36UEs901ld1x6m5eY/UFb4mF+A0nvERr4BWMww5wnV5nfcm9ZFt18foYL0GQ5NVMt1Tb3466WUU8dRQ==",
+ "dev": true,
+ "requires": {
+ "minimatch": "^3.0.4",
+ "mock-require": "^3.0.2",
+ "vscode-languageserver": "^5.1.0"
+ }
+ },
+ "typical": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/typical/-/typical-2.6.1.tgz",
+ "integrity": "sha1-XAgOXWYcu+OCWdLnCjxyU+hziB0="
+ },
+ "union-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz",
+ "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=",
+ "requires": {
+ "arr-union": "^3.1.0",
+ "get-value": "^2.0.6",
+ "is-extendable": "^0.1.1",
+ "set-value": "^0.4.3"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ },
+ "set-value": {
+ "version": "0.4.3",
+ "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz",
+ "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=",
+ "requires": {
+ "extend-shallow": "^2.0.1",
+ "is-extendable": "^0.1.1",
+ "is-plain-object": "^2.0.1",
+ "to-object-path": "^0.3.0"
+ }
+ }
+ }
+ },
"unique-string": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz",
@@ -4638,6 +6319,42 @@
"crypto-random-string": "^1.0.0"
}
},
+ "unset-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz",
+ "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=",
+ "requires": {
+ "has-value": "^0.3.1",
+ "isobject": "^3.0.0"
+ },
+ "dependencies": {
+ "has-value": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz",
+ "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=",
+ "requires": {
+ "get-value": "^2.0.3",
+ "has-values": "^0.1.4",
+ "isobject": "^2.0.0"
+ },
+ "dependencies": {
+ "isobject": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
+ "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
+ "requires": {
+ "isarray": "1.0.0"
+ }
+ }
+ }
+ },
+ "has-values": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz",
+ "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E="
+ }
+ }
+ },
"unzip-response": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-2.0.1.tgz",
@@ -4669,16 +6386,13 @@
"dev": true,
"requires": {
"punycode": "^2.1.0"
- },
- "dependencies": {
- "punycode": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
- "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
- "dev": true
- }
}
},
+ "urix": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz",
+ "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI="
+ },
"url-parse-lax": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz",
@@ -4688,6 +6402,11 @@
"prepend-http": "^1.0.1"
}
},
+ "use": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz",
+ "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ=="
+ },
"uuid": {
"version": "3.3.2",
"resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz",
@@ -4715,6 +6434,44 @@
"extsprintf": "^1.2.0"
}
},
+ "vscode-jsonrpc": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-4.0.0.tgz",
+ "integrity": "sha512-perEnXQdQOJMTDFNv+UF3h1Y0z4iSiaN9jIlb0OqIYgosPCZGYh/MCUlkFtV2668PL69lRDO32hmvL2yiidUYg==",
+ "dev": true
+ },
+ "vscode-languageserver": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/vscode-languageserver/-/vscode-languageserver-5.2.1.tgz",
+ "integrity": "sha512-GuayqdKZqAwwaCUjDvMTAVRPJOp/SLON3mJ07eGsx/Iq9HjRymhKWztX41rISqDKhHVVyFM+IywICyZDla6U3A==",
+ "dev": true,
+ "requires": {
+ "vscode-languageserver-protocol": "3.14.1",
+ "vscode-uri": "^1.0.6"
+ }
+ },
+ "vscode-languageserver-protocol": {
+ "version": "3.14.1",
+ "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.14.1.tgz",
+ "integrity": "sha512-IL66BLb2g20uIKog5Y2dQ0IiigW0XKrvmWiOvc0yXw80z3tMEzEnHjaGAb3ENuU7MnQqgnYJ1Cl2l9RvNgDi4g==",
+ "dev": true,
+ "requires": {
+ "vscode-jsonrpc": "^4.0.0",
+ "vscode-languageserver-types": "3.14.0"
+ }
+ },
+ "vscode-languageserver-types": {
+ "version": "3.14.0",
+ "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.14.0.tgz",
+ "integrity": "sha512-lTmS6AlAlMHOvPQemVwo3CezxBp0sNB95KNPkqp3Nxd5VFEnuG1ByM0zlRWos0zjO3ZWtkvhal0COgiV1xIA4A==",
+ "dev": true
+ },
+ "vscode-uri": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-1.0.6.tgz",
+ "integrity": "sha512-sLI2L0uGov3wKVb9EB+vIQBl9tVP90nqRvxSoJ35vI3NjxE8jfsE5DSOhWgSunHSZmKS4OCi2jrtfxK7uyp2ww==",
+ "dev": true
+ },
"walkdir": {
"version": "0.0.11",
"resolved": "https://registry.npmjs.org/walkdir/-/walkdir-0.0.11.tgz",
@@ -4722,9 +6479,9 @@
"dev": true
},
"which": {
- "version": "1.2.14",
- "resolved": "https://registry.npmjs.org/which/-/which-1.2.14.tgz",
- "integrity": "sha1-mofEN48D6CfOyvGs31bHNsAcFOU=",
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
+ "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
"requires": {
"isexe": "^2.0.0"
}
@@ -4743,20 +6500,21 @@
"requires": {
"load-yaml-file": "^0.1.0",
"path-exists": "^3.0.0"
- },
- "dependencies": {
- "path-exists": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
- "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
- "dev": true
- }
+ }
+ },
+ "wide-align": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz",
+ "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==",
+ "dev": true,
+ "requires": {
+ "string-width": "^1.0.2 || 2"
}
},
"widest-line": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-2.0.0.tgz",
- "integrity": "sha1-AUKk6KJD+IgsAjOqDgKBqnYVInM=",
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-2.0.1.tgz",
+ "integrity": "sha512-Ba5m9/Fa4Xt9eb2ELXt77JxVDV8w7qQrH0zS/TWSJdLyAwQjWoOzpzj5lwVftDz6n/EOu3tNACS84v509qwnJA==",
"dev": true,
"requires": {
"string-width": "^2.1.1"
@@ -4821,18 +6579,18 @@
"integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
},
"write": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz",
- "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=",
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz",
+ "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==",
"dev": true,
"requires": {
"mkdirp": "^0.5.1"
}
},
"write-file-atomic": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.3.0.tgz",
- "integrity": "sha512-xuPeK4OdjWqtfi59ylvVL0Yn35SF3zgcAcv7rBPFHVaEapaDr4GdGgm3j7ckTwH9wHL7fGmgfAnb0+THrHb8tA==",
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.2.tgz",
+ "integrity": "sha512-s0b6vB3xIVRLWywa6X9TOMA7k9zio0TMOsl9ZnDkliA/cfJlpHXAscj0gbHVJiTdIuAYpIyqS5GW91fqm6gG5g==",
"dev": true,
"requires": {
"graceful-fs": "^4.1.11",
@@ -4853,9 +6611,9 @@
"dev": true
},
"y18n": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz",
- "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=",
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz",
+ "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==",
"dev": true
},
"yallist": {
@@ -4865,33 +6623,44 @@
"dev": true
},
"yargs": {
- "version": "8.0.2",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-8.0.2.tgz",
- "integrity": "sha1-YpmpBVsc78lp/355wdkY3Osiw2A=",
+ "version": "12.0.5",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.5.tgz",
+ "integrity": "sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==",
"dev": true,
"requires": {
- "camelcase": "^4.1.0",
- "cliui": "^3.2.0",
- "decamelize": "^1.1.1",
+ "cliui": "^4.0.0",
+ "decamelize": "^1.2.0",
+ "find-up": "^3.0.0",
"get-caller-file": "^1.0.1",
- "os-locale": "^2.0.0",
- "read-pkg-up": "^2.0.0",
+ "os-locale": "^3.0.0",
"require-directory": "^2.1.1",
"require-main-filename": "^1.0.1",
"set-blocking": "^2.0.0",
"string-width": "^2.0.0",
"which-module": "^2.0.0",
- "y18n": "^3.2.1",
- "yargs-parser": "^7.0.0"
+ "y18n": "^3.2.1 || ^4.0.0",
+ "yargs-parser": "^11.1.1"
}
},
"yargs-parser": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-7.0.0.tgz",
- "integrity": "sha1-jQrELxbqVd69MyyvTEA4s+P139k=",
+ "version": "11.1.1",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-11.1.1.tgz",
+ "integrity": "sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==",
+ "dev": true,
+ "requires": {
+ "camelcase": "^5.0.0",
+ "decamelize": "^1.2.0"
+ }
+ },
+ "yargs-unparser": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-1.5.0.tgz",
+ "integrity": "sha512-HK25qidFTCVuj/D1VfNiEndpLIeJN78aqgR23nL3y4N0U/91cOAzqfHlF8n2BvoNDcZmJKin3ddNSvOxSr8flw==",
"dev": true,
"requires": {
- "camelcase": "^4.1.0"
+ "flat": "^4.1.0",
+ "lodash": "^4.17.11",
+ "yargs": "^12.0.5"
}
}
}
diff --git a/package.json b/package.json
index 5dc8786..d763577 100644
--- a/package.json
+++ b/package.json
@@ -18,56 +18,73 @@
"name": "James Messinger",
"url": "https://jamesmessinger.com"
},
- "contributors": [
- "Alexey Raspopov (https://github.com/alexeyraspopov)",
- "James Messinger (https://jamesmessinger.com)"
- ],
- "homepage": "https://jsdevtools.org/version-bump-prompt",
"license": "MIT",
+ "homepage": "https://jsdevtools.org/version-bump-prompt",
"repository": {
"type": "git",
"url": "https://github.com/JS-DevTools/version-bump-prompt.git"
},
"main": "lib/index.js",
+ "types": "lib/index.d.js",
+ "bin": {
+ "bump": "bin/bump.js"
+ },
"files": [
"bin",
"lib"
],
"scripts": {
- "lint": "eslint bin lib test",
+ "clean": "shx rm -rf .nyc_output coverage lib",
+ "lint": "npm run lint:typescript && npm run lint:javascript",
+ "lint:typescript": "tslint -p tsconfig.json",
+ "lint:javascript": "eslint test",
+ "build": "tsc",
+ "watch": "tsc --watch",
"test": "mocha && npm run lint",
"coverage": "nyc --reporter=text --reporter=lcov mocha",
"upgrade": "npm-check -u",
- "bump": "node bin/bump.js --prompt --tag --push --all",
- "release": "npm run upgrade && npm test && npm run bump",
- "semver": "semver"
+ "bump": "node bin/bump.js --tag --push --all",
+ "release": "npm run upgrade && npm run clean && npm run build && npm test && npm run bump"
},
"devDependencies": {
+ "@types/chai": "^4.1.7",
+ "@types/command-line-args": "^5.0.0",
+ "@types/detect-indent": "^5.0.0",
+ "@types/detect-newline": "^2.1.0",
+ "@types/globby": "^9.1.0",
+ "@types/inquirer": "0.0.44",
+ "@types/log-symbols": "^2.0.0",
+ "@types/mocha": "^5.2.6",
+ "@types/node": "^11.11.0",
+ "@types/semver": "^5.5.0",
"chai": "^4.2.0",
"chai-exec": "^1.1.1",
- "coveralls": "^3.0.2",
- "del": "^3.0.0",
- "eslint": "^5.11.0",
- "eslint-config-modular": "^5.0.1",
- "mocha": "^5.2.0",
+ "coveralls": "^3.0.3",
+ "del": "^4.0.0",
+ "eslint": "^5.15.1",
+ "eslint-config-modular": "^7.0.0",
+ "mkdirp": "^0.5.1",
+ "mocha": "^6.0.2",
"npm-check": "^5.9.0",
- "nyc": "^13.1.0",
- "strip-ansi": "^5.0.0"
+ "nyc": "^13.3.0",
+ "shx": "^0.3.2",
+ "strip-ansi": "^5.1.0",
+ "tslint": "^5.13.1",
+ "tslint-modular": "^1.3.0",
+ "typescript": "^3.3.3333",
+ "typescript-tslint-plugin": "^0.3.1"
},
"dependencies": {
- "chalk": "^2.4.1",
- "commander": "^2.19.0",
+ "command-line-args": "^5.0.2",
"detect-indent": "^5.0.0",
+ "detect-newline": "^2.1.0",
"ez-spawn": "^2.1.1",
- "glob": "^7.1.3",
- "inquirer": "^6.2.1",
+ "globby": "^9.1.0",
+ "inquirer": "^6.2.2",
"log-symbols": "^2.2.0",
"semver": "^5.6.0"
},
- "bin": {
- "bump": "bin/bump.js"
- },
"engines": {
- "node": ">=6"
+ "node": ">=7"
}
}
diff --git a/readme.md b/readme.md
index 86b6a31..280d458 100644
--- a/readme.md
+++ b/readme.md
@@ -31,7 +31,7 @@
Installation
--------------------------
-You can install `version-bump-prompt` via [npm](https://docs.npmjs.com/getting-started/what-is-npm).
+You can install `version-bump-prompt` via [npm](https://docs.npmjs.com/about-npm/).
```bash
npm install -g version-bump-prompt
@@ -97,7 +97,10 @@ To build the project locally on your computer:
2. __Install dependencies__
`npm install`
-3. __Run the tests__
+3. __Build the code__
+`npm run build`
+
+4. __Run the tests__
`npm test`
diff --git a/src/cli/exit-code.ts b/src/cli/exit-code.ts
new file mode 100644
index 0000000..c47b961
--- /dev/null
+++ b/src/cli/exit-code.ts
@@ -0,0 +1,10 @@
+/**
+ * CLI exit codes.
+ *
+ * @see https://nodejs.org/api/process.html#process_exit_codes
+ */
+export enum ExitCode {
+ Success = 0,
+ FatalError = 1,
+ InvalidArgument = 9
+}
diff --git a/src/cli/help.ts b/src/cli/help.ts
new file mode 100644
index 0000000..df02835
--- /dev/null
+++ b/src/cli/help.ts
@@ -0,0 +1,74 @@
+import { manifest } from "../manifest";
+
+/**
+ * The CLI help text
+ */
+export const helpText = `
+Usage: ${manifest.name} [release] [options] [files...]
+
+${manifest.description}
+
+release:
+ The release version or type. Can be one of the following:
+ - A semver version number (ex: 1.23.456)
+ - prompt: Prompt for the version number (this is the default)
+ - major: Increase major version
+ - minor: Increase minor version
+ - patch: Increase patch version
+ - premajor: Increase major version, pre-release
+ - preminor: Increase preminor version, pre-release
+ - prepatch: Increase prepatch version, pre-release
+ - prerelease: Increase prerelease version
+
+options:
+ --preid The identifier for prerelease versions.
+ Defaults to "beta".
+
+ -c, --commit [message] Commit changed files to Git.
+ Defaults to "release vX.X.X".
+
+ -t, --tag [tag] Tag the commit in Git.
+ The Default tag is "vX.X.X"
+
+ -p, --push Push the Git commit.
+
+ -a, --all Commit/tag/push ALL pending files,
+ not just the ones that were bumped.
+ (same as "git commit -a")
+
+ --no-verify Bypass Git commit hooks
+ (same as "git commit --no-verify")
+
+ -v, --version Show the version number
+
+ -q, --quiet Suppress unnecessary output
+
+ -h, --help Show usage information
+
+files...
+ One or more files and/or globs to bump (ex: README.md *.txt docs/**/*).
+ Defaults to package.json and package-lock.json.
+
+Examples:
+
+ bump patch
+
+ Bumps the patch version number in package.json and package-lock.json.
+ Nothing is committed to git.
+
+ bump major --commit
+
+ Bumps the major version number in package.json and package-lock.json.
+ Commits package.json and package-lock.json to git, but does not tag the commit.
+
+ bump -tpa README.md
+
+ Prompts for the new version number and updates package.json, package-lock.json, and README.md.
+ Commits ALL modified files to git, tags the commit, and pushes the commit.
+
+ bump 4.27.9934 --tag "Version " bower.json docs/**/*.md
+
+ Sets the version number to 4.27.9934 in package.json, package-lock.json, bower.json,
+ and all markdown files in the "docs" directory. Commits the updated files to git,
+ and tags the commit as "Version 4.27.9934".
+`;
diff --git a/src/cli/index.ts b/src/cli/index.ts
new file mode 100644
index 0000000..de092f4
--- /dev/null
+++ b/src/cli/index.ts
@@ -0,0 +1,86 @@
+// tslint:disable: no-console
+import { info, success } from "log-symbols";
+import { manifest } from "../manifest";
+import { ProgressEvent, VersionBumpProgress } from "../types/version-bump-progress";
+import { versionBump } from "../version-bump";
+import { ExitCode } from "./exit-code";
+import { helpText } from "./help";
+import { parseArgs } from "./parse-args";
+
+/**
+ * The main entry point of the CLI
+ *
+ * @param args - The command-line arguments (e.g. ["major", "--preid=alpha", "-ctpa"])
+ */
+export async function main(args: string[]): Promise {
+ try {
+ // Setup global error handlers
+ process.on("uncaughtException", errorHandler);
+ process.on("unhandledRejection", errorHandler);
+
+ // Parse the command-line arguments
+ let { help, version, quiet, options } = parseArgs(args);
+
+ if (help) {
+ // Show the help text and exit
+ console.log(helpText);
+ process.exit(ExitCode.Success);
+ }
+ else if (version) {
+ // Show the version number and exit
+ console.log(manifest.version);
+ process.exit(ExitCode.Success);
+ }
+ else {
+ if (!quiet) {
+ options.progress = progress;
+ }
+
+ await versionBump(options);
+ }
+ }
+ catch (error) {
+ errorHandler(error as Error);
+ }
+}
+
+function progress({ event, script, updatedFiles, skippedFiles, newVersion }: VersionBumpProgress): void {
+ // tslint:disable-next-line: switch-default
+ switch (event) {
+ case ProgressEvent.FileUpdated:
+ console.log(success, `Updated ${updatedFiles.pop()} to ${newVersion}`);
+ break;
+
+ case ProgressEvent.FileSkipped:
+ console.log(info, `${skippedFiles.pop()} did not need to be updated`);
+ break;
+
+ case ProgressEvent.GitCommit:
+ console.log(success, "Git commit");
+ break;
+
+ case ProgressEvent.GitTag:
+ console.log(success, "Git tag");
+ break;
+
+ case ProgressEvent.GitPush:
+ console.log(success, "Git push");
+ break;
+
+ case ProgressEvent.NpmScript:
+ console.log(success, `Npm run ${script}`);
+ break;
+ }
+}
+
+
+function errorHandler(error: Error): void {
+ let message = error.message || String(error);
+
+ if (process.env.DEBUG || process.env.NODE_ENV === "development") {
+ message = error.stack || message;
+ }
+
+ console.error(message);
+ process.exit(ExitCode.FatalError);
+}
diff --git a/src/cli/parse-args.ts b/src/cli/parse-args.ts
new file mode 100644
index 0000000..86cb224
--- /dev/null
+++ b/src/cli/parse-args.ts
@@ -0,0 +1,89 @@
+// tslint:disable: no-console
+import * as commandLineArgs from "command-line-args";
+import * as semver from "semver";
+import { isReleaseType } from "../release-type";
+import { VersionBumpOptions } from "../types/version-bump-options";
+import { ExitCode } from "./exit-code";
+import { helpText } from "./help";
+
+/**
+ * The parsed command-line arguments
+ */
+export interface ParsedArgs {
+ help?: boolean;
+ version?: boolean;
+ quiet?: boolean;
+ options: VersionBumpOptions;
+}
+
+/**
+ * Parses the command-line arguments
+ */
+export function parseArgs(argv: string[]): ParsedArgs {
+ try {
+ let args = commandLineArgs(
+ [
+ { name: "preid", type: String },
+ { name: "commit", alias: "c", type: String },
+ { name: "tag", alias: "t", type: String },
+ { name: "push", alias: "p", type: Boolean },
+ { name: "all", alias: "a", type: Boolean },
+ { name: "no-verify", type: Boolean },
+ { name: "quiet", alias: "q", type: Boolean },
+ { name: "version", alias: "v", type: Boolean },
+ { name: "help", alias: "h", type: Boolean },
+ { name: "files", type: String, multiple: true, defaultOption: true },
+ ],
+ { argv }
+ );
+
+ let parsedArgs: ParsedArgs = {
+ help: args.help as boolean,
+ version: args.version as boolean,
+ quiet: args.quiet as boolean,
+ options: {
+ preid: args.preid as string,
+ commit: args.commit as string | boolean,
+ tag: args.tag as string | boolean,
+ push: args.push as boolean,
+ all: args.all as boolean,
+ noVerify: args["no-verify"] as boolean,
+ files: args.files as string[],
+ }
+ };
+
+ // If --preid is used without an argument, then throw an error, since it's probably a mistake.
+ // If they want to use the default value ("beta"), then they should not pass the argument at all
+ if (args.preid === null) {
+ throw new Error(`The --preid option requires a value, such as "alpha", "beta", etc.`);
+ }
+
+ // If --commit is used without an argument, then treat it as a boolean flag
+ if (args.commit === null) {
+ parsedArgs.options.commit = true;
+ }
+
+ // If --tag is used without an argument, then treat it as a boolean flag
+ if (args.tag === null) {
+ parsedArgs.options.tag = true;
+ }
+
+ // If a version number or release type was specified, then it will mistakenly be added to the "files" array
+ if (parsedArgs.options.files && parsedArgs.options.files.length > 0) {
+ let firstArg = parsedArgs.options.files[0];
+
+ if (firstArg === "prompt" || isReleaseType(firstArg) || semver.valid(firstArg)) {
+ parsedArgs.options.release = firstArg;
+ parsedArgs.options.files.shift();
+ }
+ }
+
+ return parsedArgs;
+ }
+ catch (error) {
+ // There was an error parsing the command-line args
+ console.error((error as Error).message);
+ console.error(helpText);
+ return process.exit(ExitCode.InvalidArgument);
+ }
+}
diff --git a/src/fs.ts b/src/fs.ts
new file mode 100644
index 0000000..1c6ff46
--- /dev/null
+++ b/src/fs.ts
@@ -0,0 +1,86 @@
+import * as detectIndent from "detect-indent";
+import * as detectNewline from "detect-newline";
+import * as fs from "fs";
+import * as path from "path";
+
+/**
+ * Describes a plain-text file.
+ */
+export interface TextFile {
+ path: string;
+ data: string;
+}
+
+/**
+ * Describes a JSON file.
+ */
+interface JsonFile {
+ path: string;
+ data: unknown;
+ indent: string;
+ newline: string | null;
+}
+
+/**
+ * Reads a JSON file and returns the parsed data.
+ */
+export async function readJsonFile(name: string, cwd: string): Promise {
+ let file = await readTextFile(name, cwd);
+ let data = JSON.parse(file.data) as unknown;
+ let indent = detectIndent(file.data).indent;
+ let newline = detectNewline(file.data);
+
+ return { ...file, data, indent, newline };
+}
+
+/**
+ * Writes the given data to the specified JSON file.
+ */
+export async function writeJsonFile(file: JsonFile): Promise {
+ let json = JSON.stringify(file.data, undefined, file.indent);
+
+ if (file.newline) {
+ json += file.newline;
+ }
+
+ return writeTextFile({ ...file, data: json });
+}
+
+/**
+ * Reads a text file and returns its contents.
+ */
+export function readTextFile(name: string, cwd: string): Promise { // tslint:disable-line: promise-function-async
+ return new Promise((resolve, reject) => {
+ let filePath = path.join(cwd, name);
+
+ // tslint:disable-next-line ban
+ fs.readFile(filePath, "utf8", (err, text) => {
+ if (err) {
+ reject(err);
+ }
+ else {
+ resolve({
+ path: filePath,
+ data: text,
+ });
+ }
+ });
+ });
+}
+
+/**
+ * Writes the given text to the specified file.
+ */
+export function writeTextFile(file: TextFile): Promise { // tslint:disable-line: promise-function-async
+ return new Promise((resolve, reject) => {
+ // tslint:disable-next-line ban
+ fs.writeFile(file.path, file.data, (err) => {
+ if (err) {
+ reject(err);
+ }
+ else {
+ resolve();
+ }
+ });
+ });
+}
diff --git a/src/get-new-version.ts b/src/get-new-version.ts
new file mode 100644
index 0000000..e18ef84
--- /dev/null
+++ b/src/get-new-version.ts
@@ -0,0 +1,132 @@
+import * as inquirer from "inquirer";
+import * as semver from "semver";
+import { ReleaseType, SemVer } from "semver"; // tslint:disable-line: no-duplicate-imports
+import { BumpRelease, PromptRelease } from "./normalize-options";
+import { Operation } from "./operation";
+import { isPrerelease, releaseTypes } from "./release-type";
+
+/**
+ * Determines the new version number, possibly by prompting the user for it.
+ */
+export async function getNewVersion(operation: Operation): Promise {
+ let { release } = operation.options;
+ let { oldVersion } = operation.state;
+
+ switch (release.type) {
+ case "prompt":
+ return promptForNewVersion(operation);
+
+ case "version":
+ let newSemVer = new SemVer(release.version, true);
+ return operation.update({
+ newVersion: newSemVer.version,
+ });
+
+ default:
+ return operation.update({
+ release: release.type,
+ newVersion: getNextVersion(oldVersion, release),
+ });
+ }
+}
+
+/**
+ * Returns the next version number of the specified type.
+ */
+function getNextVersion(oldVersion: string, bump: BumpRelease): string {
+ let oldSemVer = new SemVer(oldVersion);
+ let newSemVer = oldSemVer.inc(bump.type, bump.preid);
+
+ if (
+ isPrerelease(bump.type) &&
+ newSemVer.prerelease.length === 2 &&
+ newSemVer.prerelease[0] === bump.preid &&
+ String(newSemVer.prerelease[1]) === "0"
+ ) {
+ // This is a special case when going from a non-prerelease version to a prerelease version.
+ // SemVer sets the prerelease version to zero (e.g. "1.23.456" => "1.23.456-beta.0").
+ // But the user probably expected it to be "1.23.456-beta.1" instead.
+ newSemVer.prerelease[1] = "1";
+ newSemVer.format();
+ }
+
+ return newSemVer.version;
+}
+
+/**
+ * Returns the next version number for all release types.
+ */
+function getNextVersions(oldVersion: string, preid: string): Record {
+ let next: Record = {};
+
+ for (let type of releaseTypes) {
+ next[type] = getNextVersion(oldVersion, { type, preid });
+ }
+
+ return next;
+}
+
+/**
+ * Prompts the user for the new version number.
+ *
+ * @returns - A tuple containing the new version number and the release type (if any)
+ */
+async function promptForNewVersion(operation: Operation): Promise {
+ let { oldVersion, oldVersionSource } = operation.state;
+ let release = operation.options.release as PromptRelease;
+ let prompts = inquirer.createPromptModule(operation.options.interface as inquirer.StreamOptions);
+
+ let next = getNextVersions(oldVersion, release.preid);
+
+ let answers: {
+ release: ReleaseType | "none" | "custom";
+ newVersion?: string;
+ };
+
+ answers = await prompts([
+ {
+ type: "list",
+ name: "release",
+ message: `\nThe current version in ${oldVersionSource} is ${oldVersion}\nHow would you like to bump it?`,
+ default: "patch",
+ pageSize: 10,
+ choices: [
+ { value: "major", name: `major (${next.major})` },
+ { value: "minor", name: `minor (${next.minor})` },
+ { value: "patch", name: `patch (${next.patch})` },
+ { value: "premajor", name: `pre-release major (${next.premajor})` },
+ { value: "preminor", name: `pre-release minor (${next.preminor})` },
+ { value: "prepatch", name: `pre-release patch (${next.prepatch})` },
+ { value: "prerelease", name: `pre-release (${next.prerelease})` },
+ new inquirer.Separator(),
+ { value: "none", name: `leave as-is (${oldVersion})` },
+ { value: "custom", name: "custom..." },
+ ]
+ },
+ {
+ type: "input",
+ name: "newVersion",
+ message: "Enter the new version number:",
+ default: oldVersion,
+ when: (previousAnswer) => previousAnswer.release === "custom",
+ filter: semver.clean,
+ validate: (newVersion: string) => {
+ return semver.valid(newVersion) ? true : "That's not a valid version number";
+ },
+ }
+ ]);
+
+ switch (answers.release) {
+ case "none":
+ return operation.update({ newVersion: oldVersion });
+
+ case "custom":
+ return operation.update({ newVersion: answers.newVersion! });
+
+ default:
+ return operation.update({
+ release: answers.release,
+ newVersion: next[answers.release],
+ });
+ }
+}
diff --git a/src/get-old-version.ts b/src/get-old-version.ts
new file mode 100644
index 0000000..8c7b16e
--- /dev/null
+++ b/src/get-old-version.ts
@@ -0,0 +1,60 @@
+import * as semver from "semver";
+import { readJsonFile } from "./fs";
+import { isManifest } from "./manifest";
+import { Operation } from "./operation";
+
+/**
+ * Finds the current version number from files such as package.json.
+ * An error is thrown if no version number can be found.
+ */
+export async function getOldVersion(operation: Operation): Promise {
+ let { cwd, files } = operation.options;
+
+ // Check all JSON files in the files list
+ let filesToCheck = files.filter((file) => file.endsWith(".json"));
+
+ // Always check package.json
+ if (!filesToCheck.includes("package.json")) {
+ filesToCheck.push("package.json");
+ }
+
+ // Check each file, in order, and return the first valid version number we find
+ for (let file of filesToCheck) {
+ let version = await readVersion(file, cwd);
+
+ if (version) {
+ // We found the current version number!
+ return operation.update({
+ oldVersionSource: file,
+ oldVersion: version,
+ });
+ }
+ }
+
+ // If we get here, then no version number was found
+ throw new Error(
+ `Unable to determine the current version number. Checked ${filesToCheck.join(", ")}.`
+ );
+}
+
+/**
+ * Tries to read the version number from the specified JSON file.
+ *
+ * @returns - The version number, or undefined if the file doesn't have a version number
+ */
+async function readVersion(file: string, cwd: string): Promise {
+ try {
+ let { data: manifest } = await readJsonFile(file, cwd);
+
+ if (isManifest(manifest)) {
+ if (semver.valid(manifest.version as string)) {
+ return manifest.version;
+ }
+ }
+ }
+ catch (error) {
+ // Ignore errors (no such file, not valid JSON, etc.)
+ // Just try the next file instead.
+ return undefined;
+ }
+}
diff --git a/src/git.ts b/src/git.ts
new file mode 100644
index 0000000..9a77054
--- /dev/null
+++ b/src/git.ts
@@ -0,0 +1,101 @@
+import * as ezSpawn from "ez-spawn";
+import { Operation } from "./operation";
+import { ProgressEvent } from "./types/version-bump-progress";
+
+/**
+ * Commits the modififed files to Git, if the `commit` option is enabled.
+ */
+export async function gitCommit(operation: Operation): Promise {
+ if (!operation.options.commit) {
+ return operation;
+ }
+
+ let { all, noVerify, message } = operation.options.commit;
+ let { updatedFiles, newVersion } = operation.state;
+ let args = [];
+
+ if (all) {
+ // Commit ALL files, not just the ones that were bumped
+ args.push("--all");
+ }
+
+ if (noVerify) {
+ // Bypass git commit hooks
+ args.push("--no-verify");
+ }
+
+ // Create the commit message
+ let commitMessage = formatVersionString(message, newVersion);
+ args.push("--message", commitMessage);
+
+ // Append the file names last, as variadic arguments
+ if (!all) {
+ args = args.concat(updatedFiles);
+ }
+
+ await ezSpawn.async("git", ["commit", ...args]);
+
+ return operation.update({ event: ProgressEvent.GitCommit, commitMessage });
+}
+
+/**
+ * Tags the Git commit, if the `tag` option is enabled.
+ */
+export async function gitTag(operation: Operation): Promise {
+ if (!operation.options.tag) {
+ return operation;
+ }
+
+ let { commit, tag } = operation.options;
+ let { newVersion } = operation.state;
+
+ let args = [
+ // Create an annotated tag, which is recommended for releases.
+ // See https://git-scm.com/docs/git-tag
+ "--annotate",
+
+ // Use the same commit message for the tag
+ "--message", formatVersionString(commit!.message, newVersion),
+ ];
+
+ // Create the Tag name
+ let tagName = formatVersionString(tag.name, newVersion);
+ args.push(tagName);
+
+ await ezSpawn.async("git", ["tag", ...args]);
+
+ return operation.update({ event: ProgressEvent.GitTag, tagName });
+}
+
+/**
+ * Pushes the Git commit and tag, if the `push` option is enabled.
+ */
+export async function gitPush(operation: Operation): Promise {
+ if (!operation.options.push) {
+ return operation;
+ }
+
+ // Push the commit
+ await ezSpawn.async("git", "push");
+
+ if (operation.options.tag) {
+ // Push the tag
+ await ezSpawn.async("git", ["push", "--tags"]);
+ }
+
+ return operation.update({ event: ProgressEvent.GitPush });
+}
+
+/**
+ * Accepts a version string template (e.g. "release v" or "This is the %s release").
+ * If the template contains any "%s" placeholders, then they are replaced with the version number;
+ * otherwise, the version number is appended to the string.
+ */
+function formatVersionString(template: string, newVersion: string): string {
+ if (template.includes("%s")) {
+ return template.replace(/%s/g, newVersion);
+ }
+ else {
+ return template + newVersion;
+ }
+}
diff --git a/src/index.ts b/src/index.ts
new file mode 100644
index 0000000..dfbe40b
--- /dev/null
+++ b/src/index.ts
@@ -0,0 +1,17 @@
+// tslint:disable: no-default-export
+import { versionBump } from "./version-bump";
+
+// Exprot the external type definitions as named exports
+export { ReleaseType } from "./release-type";
+export * from "./types/version-bump-options";
+export * from "./types/version-bump-results";
+export * from "./types/version-bump-progress";
+
+// Export `versionBump` as a named export and the default export
+export { versionBump };
+export default versionBump;
+
+// CommonJS default export hack
+if (typeof module === "object" && typeof module.exports === "object") {
+ module.exports = Object.assign(module.exports.default, module.exports); // tslint:disable-line: no-unsafe-any
+}
diff --git a/src/manifest.ts b/src/manifest.ts
new file mode 100644
index 0000000..627c0dd
--- /dev/null
+++ b/src/manifest.ts
@@ -0,0 +1,42 @@
+// NOTE: We can't `import` the package.json file because it's outside of the "src" directory.
+// tslint:disable-next-line: no-var-requires no-require-imports
+const manifest = require("../package.json") as Manifest;
+
+// Don't use the npm package name ("version-bump-prompt").
+// Use the name of the binary ("bump") instead.
+let name = Object.keys(manifest.bin as Record)[0];
+const alteredManifest: Manifest = { ...manifest, name };
+export { alteredManifest as manifest };
+
+/**
+ * The npm package manifest (package.json)
+ */
+export interface Manifest {
+ name?: string;
+ version?: string;
+ description?: string;
+ [key: string]: unknown;
+}
+
+// tslint:disable: no-any no-unsafe-any
+
+/**
+ * Determines whether the specified value is a package manifest.
+ */
+export function isManifest(obj: any): obj is Manifest {
+ return obj &&
+ typeof obj === "object" &&
+ isOptionalString(obj.name) &&
+ isOptionalString(obj.version) &&
+ isOptionalString(obj.description);
+}
+
+/**
+ * Determines whether the specified value is a string, null, or undefined.
+ */
+function isOptionalString(value: any): value is string | null | undefined {
+ let type = typeof value;
+ return value === null ||
+ type === "undefined" ||
+ type === "string";
+}
diff --git a/src/normalize-options.ts b/src/normalize-options.ts
new file mode 100644
index 0000000..acc2bb6
--- /dev/null
+++ b/src/normalize-options.ts
@@ -0,0 +1,173 @@
+import globby, { hasMagic } from "globby";
+import { isReleaseType, ReleaseType } from "./release-type";
+import { VersionBumpOptions } from "./types/version-bump-options";
+
+interface Interface {
+ input?: NodeJS.ReadableStream | NodeJS.ReadStream | false;
+ output?: NodeJS.WritableStream | NodeJS.WriteStream | false;
+ [key: string]: unknown;
+}
+
+/**
+ * A specific version release.
+ */
+export interface VersionRelease {
+ type: "version";
+ version: string;
+}
+
+/**
+ * Prompt the user for the release number.
+ */
+export interface PromptRelease {
+ type: "prompt";
+ preid: string;
+}
+
+/**
+ * A bump release, relative to the current version number.
+ */
+export interface BumpRelease {
+ type: ReleaseType;
+ preid: string;
+}
+
+/**
+ * One of the possible Release types.
+ */
+export type Release = VersionRelease | PromptRelease | BumpRelease;
+
+/**
+ * Normalized and sanitized options
+ */
+export interface NormalizedOptions {
+ release: Release;
+ commit?: {
+ message: string;
+ noVerify: boolean;
+ all: boolean;
+ };
+ tag?: {
+ name: string;
+ };
+ push: boolean;
+ files: string[];
+ cwd: string;
+ interface: Interface;
+}
+
+/**
+ * Converts raw VersionBumpOptions to a normalized and sanitized Options object.
+ */
+export async function normalizeOptions(raw: VersionBumpOptions): Promise {
+ // Set the simple properties first
+ let preid = typeof raw.preid === "string" ? raw.preid : "beta";
+ let push = Boolean(raw.push);
+ let all = Boolean(raw.all);
+ let noVerify = Boolean(raw.noVerify);
+ let cwd = raw.cwd || process.cwd();
+
+ let release: Release;
+ if (!raw.release || raw.release === "prompt") {
+ release = { type: "prompt", preid };
+ }
+ else if (isReleaseType(raw.release)) {
+ release = { type: raw.release, preid };
+ }
+ else {
+ release = { type: "version", version: raw.release };
+ }
+
+ let tag;
+ if (typeof raw.tag === "string") {
+ tag = { name: raw.tag };
+ }
+ else if (raw.tag) {
+ tag = { name: "v" };
+ }
+
+ // NOTE: This must come AFTER `tag` and `push`, because it relies on them
+ let commit;
+ if (typeof raw.commit === "string") {
+ commit = { all, noVerify, message: raw.commit };
+ }
+ else if (raw.commit || tag || push) {
+ commit = { all, noVerify, message: "release v" };
+ }
+
+ let files;
+ if (Array.isArray(raw.files) && raw.files.length > 0) {
+ files = await strictGlobMatches(raw.files, { cwd });
+ }
+ else {
+ // Try to find these files by default.
+ // If they don't exist, then they will NOT be included in the `files` array.
+ files = await globby(["package.json", "package-lock.json"], { cwd });
+ }
+
+ let ui: Interface;
+ if (raw.interface === false) {
+ ui = { input: false, outut: false };
+ }
+ else if (raw.interface === true || !raw.interface) {
+ ui = { input: process.stdin, output: process.stdout };
+ }
+ else {
+ let { input, output, ...other } = raw.interface;
+
+ if (input === true || (input !== false && !input)) {
+ input = process.stdin;
+ }
+
+ if (output === true || (output !== false && !output)) {
+ output = process.stdout;
+ }
+
+ ui = { input, output, ...other };
+ }
+
+ if (release.type === "prompt" && !(ui.input && ui.output)) {
+ throw new Error(`Cannot prompt for the version number because input or output has been disabled.`);
+ }
+
+ return { release, commit, tag, push, files, cwd, interface: ui };
+}
+
+/**
+ * Returns all files that match the given glob patterns.
+ * An error is thrown if any pattern matches zero files.
+ */
+async function strictGlobMatches(files: string[], options: object): Promise {
+ // Match all glob patterns simultaneously
+ let matches = await Promise.all(files.map((file) => strictGlobMatch(file, options)));
+
+ // Get all the unique files
+ let matchedFiles = new Set();
+ for (let match of matches) {
+ for (let file of match) {
+ matchedFiles.add(file);
+ }
+ }
+
+ return [...matchedFiles];
+}
+
+/**
+ * Returns all files that match the given glob pattern.
+ * An error is thrown if the pattern matches zero files.
+ */
+async function strictGlobMatch(file: string, options: object): Promise {
+ let matches = await globby(file, options);
+
+ if (matches.length === 0) {
+ if (hasMagic(file)) {
+ throw new Error(`Could not find any files matching "${file}".`);
+ }
+ else {
+ throw new Error(`Could not find file: ${file}.`);
+ }
+ }
+
+ // Return files in a predictable order
+ return matches.sort();
+}
diff --git a/src/operation.ts b/src/operation.ts
new file mode 100644
index 0000000..fd10fe8
--- /dev/null
+++ b/src/operation.ts
@@ -0,0 +1,104 @@
+import { NormalizedOptions, normalizeOptions } from "./normalize-options";
+import { ReleaseType } from "./release-type";
+import { VersionBumpOptions } from "./types/version-bump-options";
+import { NpmScript, ProgressEvent, VersionBumpProgress } from "./types/version-bump-progress";
+import { VersionBumpResults } from "./types/version-bump-results";
+
+type ProgressCallback = (progress: VersionBumpProgress) => void;
+
+interface OperationState {
+ release: ReleaseType | undefined;
+ oldVersionSource: string;
+ oldVersion: string;
+ newVersion: string;
+ commitMessage: string;
+ tagName: string;
+ updatedFiles: string[];
+ skippedFiles: string[];
+}
+
+interface UpdateOperationState extends Partial {
+ event?: ProgressEvent;
+ script?: NpmScript;
+}
+
+/**
+ * All of the inputs, outputs, and state of a single `versionBump()` call.
+ */
+export class Operation {
+ /**
+ * The options for this operation.
+ */
+ public options: NormalizedOptions;
+
+ /**
+ * The current state of the operation.
+ */
+ public readonly state: Readonly = {
+ release: undefined,
+ oldVersion: "",
+ oldVersionSource: "",
+ newVersion: "",
+ commitMessage: "",
+ tagName: "",
+ updatedFiles: [],
+ skippedFiles: [],
+ };
+
+ /**
+ * The results of the operation.
+ */
+ public get results(): VersionBumpResults {
+ let options = this.options;
+ let state = this.state;
+
+ return {
+ release: state.release,
+ oldVersion: state.oldVersion,
+ newVersion: state.newVersion,
+ commit: options.commit ? state.commitMessage : false,
+ tag: options.tag ? state.tagName : false,
+ updatedFiles: state.updatedFiles.slice(),
+ skippedFiles: state.skippedFiles.slice(),
+ };
+ }
+
+ /**
+ * The callback that's used to report the progress of the operation.
+ */
+ private readonly _progress?: ProgressCallback;
+
+ /**
+ * Private constructor. Use the `Operation.start()` static method instead.
+ */
+ private constructor(options: NormalizedOptions, progress?: ProgressCallback) {
+ this.options = options;
+ this._progress = progress;
+ }
+
+ /**
+ * Starts a new `versionBump()` operation.
+ */
+ public static async start(input: VersionBumpOptions): Promise {
+ // Validate and normalize the options
+ let options = await normalizeOptions(input);
+
+ // tslint:disable-next-line: no-unbound-method
+ return new Operation(options, input.progress);
+ }
+
+ /**
+ * Updates the operation state and results, and reports the updated progress to the user.
+ */
+ public update({ event, script, ...newState }: UpdateOperationState): this {
+ // Update the operation state
+ Object.assign(this.state, newState);
+
+ if (event && this._progress) {
+ // Report the progress to the user
+ this._progress({ event, script, ...this.results });
+ }
+
+ return this;
+ }
+}
diff --git a/src/release-type.ts b/src/release-type.ts
new file mode 100644
index 0000000..6816166
--- /dev/null
+++ b/src/release-type.ts
@@ -0,0 +1,29 @@
+import { ReleaseType } from "semver";
+
+export { ReleaseType };
+
+/**
+ * The different types of pre-releases.
+ */
+export const prereleaseTypes: ReleaseType[] = ["premajor", "preminor", "prepatch", "prerelease"];
+
+/**
+ * All possible release types.
+ */
+export const releaseTypes: ReleaseType[] = prereleaseTypes.concat(["major", "minor", "patch"]);
+
+// tslint:disable: no-any no-unsafe-any
+
+/**
+ * Determines whether the specified value is a pre-release.
+ */
+export function isPrerelease(value: any): boolean {
+ return prereleaseTypes.includes(value);
+}
+
+/**
+ * Determines whether the specified value is a valid ReleaseType string.
+ */
+export function isReleaseType(value: any): value is ReleaseType {
+ return releaseTypes.includes(value);
+}
diff --git a/src/run-npm-script.ts b/src/run-npm-script.ts
new file mode 100644
index 0000000..aa62924
--- /dev/null
+++ b/src/run-npm-script.ts
@@ -0,0 +1,34 @@
+import * as ezSpawn from "ez-spawn";
+import { readJsonFile } from "./fs";
+import { isManifest, Manifest } from "./manifest";
+import { Operation } from "./operation";
+import { NpmScript, ProgressEvent } from "./types/version-bump-progress";
+
+/**
+ * Runs the specified NPM script in the package.json file.
+ */
+export async function runNpmScript(script: NpmScript, operation: Operation): Promise {
+ let { cwd } = operation.options;
+
+ let { data: manifest } = await readJsonFile("package.json", cwd);
+
+ if (isManifest(manifest) && hasScript(manifest, script)) {
+ await ezSpawn.async("npm", ["run", script, "--silent"], { stdio: "inherit" });
+ operation.update({ event: ProgressEvent.NpmScript, script });
+ }
+
+ return operation;
+}
+
+/**
+ * Determines whether the specified NPM script exists in the given manifest.
+ */
+function hasScript(manifest: Manifest, script: NpmScript): boolean {
+ let scripts = manifest.scripts as Record | undefined;
+
+ if (scripts && typeof scripts === "object") {
+ return Boolean(scripts[script]);
+ }
+
+ return false;
+}
diff --git a/src/types/version-bump-options.ts b/src/types/version-bump-options.ts
new file mode 100644
index 0000000..70e35ed
--- /dev/null
+++ b/src/types/version-bump-options.ts
@@ -0,0 +1,133 @@
+import { VersionBumpProgress } from "./version-bump-progress";
+
+/**
+ * Options for the `versionBump()` function.
+ */
+export interface VersionBumpOptions {
+ /**
+ * The release version or type. Can be one of the following:
+ *
+ * - The new version number (e.g. "1.23.456")
+ * - A release type (e.g. "major", "minor", "patch", "prerelease", etc.)
+ * - "prompt" to prompt the user for the version number
+ *
+ * Defaults to "prompt".
+ */
+ release?: string;
+
+ /**
+ * The prerelease type (e.g. "alpha", "beta", "next").
+ *
+ * Defaults to "beta".
+ */
+ preid?: string;
+
+ /**
+ * Indicates whether to create a git commit. Can be set to a custom commit message string
+ * or `true` to use "release v". Any `%s` placeholders in the message string will be replaced
+ * with the new version number. If the message string does _not_ contain any `%s` placeholders,
+ * then the new version number will be appended to the message.
+ *
+ * Defaults to `false`.
+ */
+ commit?: boolean | string;
+
+ /**
+ * Indicates whether to tag the git commit. Can be set to a custom tag string
+ * or `true` to use "v". Any `%s` placeholders in the tag string will be replaced
+ * with the new version number. If the tag string does _not_ contain any `%s` placeholders,
+ * then the new version number will be appended to the tag.
+ *
+ * Defaults to `false`.
+ */
+ tag?: boolean | string;
+
+ /**
+ * Indicates whether to push the git commit and tag.
+ *
+ * Defaults to `false`.
+ */
+ push?: boolean;
+
+ /**
+ * Indicates whether the git commit should include ALL files (`git commit --all`)
+ * rather than just the files that were modified by `versionBump()`.
+ *
+ * Defaults to `false`.
+ */
+ all?: boolean;
+
+ /**
+ * Indicates whether to bypass git commit hooks (`git commit --no-verify`).
+ *
+ * Defaults to `false`.
+ */
+ noVerify?: boolean;
+
+ /**
+ * The files to be updated. For certain known files ("package.json", "bower.json", etc.)
+ * `versionBump()` will explicitly update the file's version number. For other files
+ * (ReadMe files, config files, source code, etc.) it will simply do a global replacement
+ * of the old version number with the new version number.
+ *
+ * Defaults to ["package.json", "package-lock.json"]
+ */
+ files?: string[];
+
+ /**
+ * The working directory, which is used as the basis for locating all files.
+ *
+ * Defaults to `process.cwd()`
+ */
+ cwd?: string;
+
+ /**
+ * Options for the command-line interface. Can be one of the following:
+ *
+ * - `true` - To default to `process.stdin` and `process.stdout`.
+ * - `false` - To disable all CLI output. Cannot be used when `release` is "prompt".
+ * - An object that will be passed to `readline.createInterface()`.
+ *
+ * Defaults to `true`.
+ */
+ interface?: boolean | InterfaceOptions;
+
+ /**
+ * A callback that is provides information about the progress of the `versionBump()` function.
+ */
+ progress?(progress: VersionBumpProgress): void;
+}
+
+/**
+ * Options for the command-line interface.
+ */
+export interface InterfaceOptions {
+ /**
+ * The stream that will be used to read user input. Can be one of the following:
+ *
+ * - `true` - To default to `process.stdin`
+ * - `false` - To disable all CLI input
+ * - Any readable stream
+ *
+ * Defaults to `true`.
+ */
+ input?: NodeJS.ReadableStream | NodeJS.ReadStream | boolean;
+
+ /**
+ * The stream that will be used to write output, such as prompts and progress.
+ * Can be one of the following:
+ *
+ * - `true` - To default to `process.stdout`
+ * - `false` - To disable all CLI output
+ * - Any writable stream
+ *
+ * Defaults to `true`.
+ */
+ output?: NodeJS.WritableStream | NodeJS.WriteStream | boolean;
+
+ /**
+ * Any other properties will be passed directly to `readline.createInterface()`.
+ * See the `ReadLineOptions` interface for possible options.
+ */
+ [key: string]: unknown;
+}
diff --git a/src/types/version-bump-progress.ts b/src/types/version-bump-progress.ts
new file mode 100644
index 0000000..edfeecf
--- /dev/null
+++ b/src/types/version-bump-progress.ts
@@ -0,0 +1,32 @@
+import { VersionBumpResults } from "./version-bump-results";
+
+/**
+ * Progress events that indicate the progress of the `versionBump()` function.
+ */
+export const enum ProgressEvent {
+ FileUpdated = "file updated",
+ FileSkipped = "file skipped",
+ GitCommit = "git commit",
+ GitTag = "git tag",
+ GitPush = "git push",
+ NpmScript = "npm script",
+}
+
+/**
+ * The NPM version scripts
+ *
+ * @see https://docs.npmjs.com/cli/version.html
+ */
+export const enum NpmScript {
+ PreVersion = "preversion",
+ Version = "version",
+ PostVersion = "postversion",
+}
+
+/**
+ * Information about the progress of the `versionBump()` function.
+ */
+export interface VersionBumpProgress extends VersionBumpResults {
+ event: ProgressEvent;
+ script?: NpmScript;
+}
diff --git a/src/types/version-bump-results.ts b/src/types/version-bump-results.ts
new file mode 100644
index 0000000..78391dd
--- /dev/null
+++ b/src/types/version-bump-results.ts
@@ -0,0 +1,45 @@
+import { ReleaseType } from "../release-type";
+
+/**
+ * Information about the work that was performed by the `versionBump()` function.
+ */
+export interface VersionBumpResults {
+ /**
+ * The release type that was used, or `undefined` if an explicit version number was used.
+ */
+ release?: ReleaseType;
+
+ /**
+ * The previous version number in package.json.
+ */
+ oldVersion: string;
+
+ /**
+ * The new version number.
+ */
+ newVersion: string;
+
+ /**
+ * The commit message that was used for the git commit, or `false` if no git commit was created.
+ *
+ * NOTE: This will never be an empty string. It will always contain at least the new version number.
+ */
+ commit: string | false;
+
+ /**
+ * The tag name that was used for the git tag, or `false` if no git tag was created.
+ *
+ * NOTE: This will never be an empty string. It will always contain at least the new version number.
+ */
+ tag: string | false;
+
+ /**
+ * The files that were actually modified.
+ */
+ updatedFiles: string[];
+
+ /**
+ * The files that were not updated because they did not contain the old version number.
+ */
+ skippedFiles: string[];
+}
diff --git a/src/update-files.ts b/src/update-files.ts
new file mode 100644
index 0000000..92bf38b
--- /dev/null
+++ b/src/update-files.ts
@@ -0,0 +1,105 @@
+import * as path from "path";
+import { readJsonFile, readTextFile, writeJsonFile, writeTextFile } from "./fs";
+import { isManifest } from "./manifest";
+import { Operation } from "./operation";
+import { ProgressEvent } from "./types/version-bump-progress";
+
+/**
+ * Updates the version number in the specified files.
+ */
+export async function updateFiles(operation: Operation): Promise {
+ let { files } = operation.options;
+
+ for (let relPath of files) {
+ let modified = await updateFile(relPath, operation);
+
+ if (modified) {
+ operation.update({
+ event: ProgressEvent.FileUpdated,
+ updatedFiles: operation.state.updatedFiles.concat(relPath),
+ });
+ }
+ else {
+ operation.update({
+ event: ProgressEvent.FileSkipped,
+ skippedFiles: operation.state.skippedFiles.concat(relPath),
+ });
+ }
+ }
+
+ return operation;
+}
+
+/**
+ * Updates the version number in the specified file.
+ *
+ * @returns - `true` if the file was actually modified
+ */
+async function updateFile(relPath: string, operation: Operation): Promise {
+ let name = path.basename(relPath).trim().toLowerCase();
+
+ switch (name) {
+ case "package.json":
+ case "package-lock.json":
+ case "bower.json":
+ case "component.json":
+ return updateManifestFile(relPath, operation);
+
+ default:
+ return updateTextFile(relPath, operation);
+ }
+}
+
+/**
+ * Updates the version number in the specified JSON manifest file.
+ *
+ * NOTE: Unlike text files, this is NOT a global find-and-replace. It _specifically_ sets
+ * the top-level `version` property.
+ *
+ * @returns - `true` if the file was actually modified
+ */
+async function updateManifestFile(relPath: string, operation: Operation): Promise {
+ let { cwd } = operation.options;
+ let { newVersion } = operation.state;
+ let modified = false;
+
+ let file = await readJsonFile(relPath, cwd);
+
+ if (isManifest(file.data) && file.data.version !== newVersion) {
+ file.data.version = newVersion;
+ await writeJsonFile(file);
+ modified = true;
+ }
+
+ return modified;
+}
+
+/**
+ * Updates all occurrences of the version number in the specified text file.
+ *
+ * @returns - `true` if the file was actually modified
+ */
+async function updateTextFile(relPath: string, operation: Operation): Promise {
+ let { cwd } = operation.options;
+ let { oldVersion, newVersion } = operation.state;
+ let modified = false;
+
+ let file = await readTextFile(relPath, cwd);
+
+ // Only update the file if it contains at least one occurrence of the old version
+ if (file.data.includes(oldVersion)) {
+ // Escape all non-alphanumeric characters in the version
+ let sanitizedVersion = oldVersion.replace(/(\W)/g, "\\$1");
+
+ // Replace occurrences of the old version number that are surrounded by word boundaries.
+ // This ensures that it matches "1.23.456" or "v1.23.456", but not "321.23.456".
+ let replacePattern = new RegExp("(\\b|v)" + sanitizedVersion + "\\b", "g");
+
+ file.data = file.data.replace(replacePattern, "$1" + newVersion);
+ await writeTextFile(file);
+
+ return true;
+ }
+
+ return modified;
+}
diff --git a/src/version-bump.ts b/src/version-bump.ts
new file mode 100644
index 0000000..4c049e5
--- /dev/null
+++ b/src/version-bump.ts
@@ -0,0 +1,71 @@
+import { getNewVersion } from "./get-new-version";
+import { getOldVersion } from "./get-old-version";
+import { gitCommit, gitPush, gitTag } from "./git";
+import { Operation } from "./operation";
+import { runNpmScript } from "./run-npm-script";
+import { VersionBumpOptions } from "./types/version-bump-options";
+import { NpmScript } from "./types/version-bump-progress";
+import { VersionBumpResults } from "./types/version-bump-results";
+import { updateFiles } from "./update-files";
+
+/**
+ * Prompts the user for a version number and updates package.json and package-lock.json.
+ *
+ * @returns - The new version number
+ */
+export async function versionBump(): Promise;
+
+/**
+ * Bumps the version number in package.json, package-lock.json.
+ *
+ * @param release
+ * The release version or type. Can be one of the following:
+ *
+ * - The new version number (e.g. "1.23.456")
+ * - A release type (e.g. "major", "minor", "patch", "prerelease", etc.)
+ * - "prompt" to prompt the user for the version number
+ */
+export async function versionBump(release: string): Promise;
+
+/**
+ * Bumps the version number in one or more files, prompting the user if necessary.
+ * Optionally also commits, tags, and pushes to git.
+ */
+export async function versionBump(options: VersionBumpOptions): Promise;
+
+/**
+ * Bumps the version number in one or more files, prompting the user if necessary.
+ * Optionally also commits, tags, and pushes to git.
+ */
+export async function versionBump(arg: VersionBumpOptions | string = {}): Promise {
+ if (typeof arg === "string") {
+ arg = { release: arg };
+ }
+
+ let operation = await Operation.start(arg);
+
+ // Get the old and new version numbers
+ await getOldVersion(operation);
+ await getNewVersion(operation);
+
+ // Run npm preversion script, if any
+ await runNpmScript(NpmScript.PreVersion, operation);
+
+ // Update the version number in all files
+ await updateFiles(operation);
+
+ // Run npm version script, if any
+ await runNpmScript(NpmScript.Version, operation);
+
+ // Git commit and tag, if enabled
+ await gitCommit(operation);
+ await gitTag(operation);
+
+ // Run npm postversion script, if any
+ await runNpmScript(NpmScript.PostVersion, operation);
+
+ // Push the git commit and tag, if enabled
+ await gitPush(operation);
+
+ return operation.results;
+}
diff --git a/test/.eslintrc.yml b/test/.eslintrc.yml
index 045d4a4..928e579 100644
--- a/test/.eslintrc.yml
+++ b/test/.eslintrc.yml
@@ -1,2 +1,12 @@
+# ESLint config
+# http://eslint.org/docs/user-guide/configuring
+# https://github.com/JS-DevTools/eslint-config-modular
+
+root: true
+
extends:
+ - modular/best-practices
+ - modular/style
+ - modular/es6
+ - modular/node
- modular/test
diff --git a/test/fixtures/check.js b/test/fixtures/check.js
deleted file mode 100644
index c404193..0000000
--- a/test/fixtures/check.js
+++ /dev/null
@@ -1,8 +0,0 @@
-"use strict";
-
-const stripAnsi = require("strip-ansi");
-const logSymbols = require("log-symbols");
-
-// Export the check symbol (✔ on Mac/Linux, √ on Windows)
-// with the ANSI color sequences removed
-module.exports = stripAnsi(logSymbols.success);
diff --git a/test/fixtures/files/README.md b/test/fixtures/files/README.md
index 0b2ceb9..6599e93 100644
--- a/test/fixtures/files/README.md
+++ b/test/fixtures/files/README.md
@@ -1,3 +1,4 @@
-This file is for testing the `--grep` option.
+This is a test to make sure that `version-bump-prompt` correctly updates plain-text files.
+It does a global find-and-replace, so all occurrances of the old version number should be replaced with the new version, but any other version numbers should remain unchanged.
If all goes well, version 1.2.3 and v1.2.3 should both get updated, but version 5.6.7 and v8.9.10 should not be changed.
diff --git a/test/fixtures/files/script1.js b/test/fixtures/files/script1.js
index 7afec07..d93bca3 100644
--- a/test/fixtures/files/script1.js
+++ b/test/fixtures/files/script1.js
@@ -2,8 +2,7 @@
(function () {
"use strict";
- // This file is for testing the --grep option
- // to make sure v1.2.3 gets replaced correctly
+ // Testing to make sure v1.2.3 gets replaced in code files
let version = "1.2.3";
return version;
diff --git a/test/fixtures/files/script2.js b/test/fixtures/files/script2.js
index e243a70..7f3fdba 100644
--- a/test/fixtures/files/script2.js
+++ b/test/fixtures/files/script2.js
@@ -1,4 +1,11 @@
-"use strict";
+/* eslint strict:off */
+(function () {
+ "use strict";
-// This file should not get updated when the --grep option is used,
-// because version 3.2.1 and v8.9.10 don't match the old version number
+ // This file should not get updated because
+ // version 3.2.1 and v8.9.10 don't match the old version number
+ let version = "3.2.1";
+ let someNumbers = "8.9.10";
+ return version + someNumbers;
+
+}());
diff --git a/test/fixtures/clean-temp-dir.js b/test/fixtures/mocha-hooks.js
similarity index 51%
rename from test/fixtures/clean-temp-dir.js
rename to test/fixtures/mocha-hooks.js
index cac8d59..acaaecb 100644
--- a/test/fixtures/clean-temp-dir.js
+++ b/test/fixtures/mocha-hooks.js
@@ -6,10 +6,12 @@ const del = require("del");
/**
* Clean the .tmp directory before each test
*/
-beforeEach(() => {
+beforeEach("clean the .tmp directory", async () => {
// Delete the .tmp directory, if it exists
- del.sync("test/.tmp");
+ await del("test/.tmp");
// Re-create the .tmp directory
- fs.mkdirSync("test/.tmp");
+ await new Promise((resolve, reject) => {
+ fs.mkdir("test/.tmp", (err) => err ? reject(err) : resolve());
+ });
});
diff --git a/test/fixtures/mocks/git b/test/fixtures/mocks/git
index c4eb780..ed105e6 100644
--- a/test/fixtures/mocks/git
+++ b/test/fixtures/mocks/git
@@ -1,5 +1,5 @@
#!/usr/bin/env node
-'use strict';
+"use strict";
/**
*
@@ -8,5 +8,5 @@
*
*/
-const mocks = require('./index');
-mocks.record('git', process.argv.slice(2));
+const mocks = require("../../utils/mocks");
+mocks.record("git", process.argv.slice(2));
diff --git a/test/fixtures/mocks/npm b/test/fixtures/mocks/npm
index a43457f..9c81d6a 100644
--- a/test/fixtures/mocks/npm
+++ b/test/fixtures/mocks/npm
@@ -1,5 +1,5 @@
#!/usr/bin/env node
-'use strict';
+"use strict";
/**
*
@@ -8,5 +8,5 @@
*
*/
-const mocks = require('./index');
-mocks.record('npm', process.argv.slice(2));
+const mocks = require("../../utils/mocks");
+mocks.record("npm", process.argv.slice(2));
diff --git a/test/fixtures/setup-mocks.js b/test/fixtures/setup-mocks.js
new file mode 100644
index 0000000..16669bc
--- /dev/null
+++ b/test/fixtures/setup-mocks.js
@@ -0,0 +1,30 @@
+"use strict";
+
+const fs = require("fs");
+const path = require("path");
+
+const mocksDir = path.resolve("test", "fixtures", "mocks");
+
+// Ensure that the mock binaries are executable
+fs.chmodSync(path.join(mocksDir, "git"), "0777");
+fs.chmodSync(path.join(mocksDir, "npm"), "0777");
+
+// Inject our mocks directory path into the PATH variable,
+// so that version-bump-prompt runs our mock `git` and `npm` binaries
+// instead of the real ones.
+let otherPaths = getEnvPath();
+process.env.PATH = mocksDir + path.delimiter + otherPaths; // eslint-disable-line no-path-concat
+
+
+/**
+ * Returns the PATH environment variable, case-insensitively
+ */
+function getEnvPath () {
+ let keys = Object.keys(process.env);
+
+ for (let key of keys) {
+ if (key.toUpperCase() === "PATH") {
+ return process.env[key];
+ }
+ }
+}
diff --git a/test/mocha.opts b/test/mocha.opts
deleted file mode 100644
index 6406b99..0000000
--- a/test/mocha.opts
+++ /dev/null
@@ -1,6 +0,0 @@
---bail
---timeout 6000
---retries 2
---recursive
-test/fixtures/**/*.js
-test/specs/**/*.js
\ No newline at end of file
diff --git a/test/specs/api.spec.js b/test/specs/api.spec.js
new file mode 100644
index 0000000..0ec3dc1
--- /dev/null
+++ b/test/specs/api.spec.js
@@ -0,0 +1,176 @@
+"use strict";
+
+const versionBump = require("../../");
+const { files, mocks } = require("../utils");
+const { expect } = require("chai");
+
+const ORIGINAL_CWD = process.cwd();
+
+describe("versionBup() API", () => {
+ afterEach("restore the CWD", () => {
+ // Many of the tests in this file change the CWD, so change it back after each test
+ process.chdir(ORIGINAL_CWD);
+ });
+
+ it("should accept a specific version number", async () => {
+ files.create("package.json", { version: "1.0.0" });
+
+ // Change the cwd, since we're not setting the `cwd` option
+ process.chdir("test/.tmp");
+
+ let results = await versionBump("2.34.567");
+
+ expect(results).to.deep.equal({
+ release: undefined,
+ oldVersion: "1.0.0",
+ newVersion: "2.34.567",
+ commit: false,
+ tag: false,
+ updatedFiles: ["package.json"],
+ skippedFiles: [],
+ });
+
+ // The package.json file should have been updated
+ expect(files.json("package.json")).to.deep.equal({ version: "2.34.567" });
+
+ // Git and NPM should NOT have been called
+ expect(mocks.git()).to.be.empty;
+ expect(mocks.npm()).to.be.empty;
+ });
+
+ it("should accept a bump type", async () => {
+ files.create("package.json", { version: "1.0.0" });
+
+ // Change the cwd, since we're not setting the `cwd` option
+ process.chdir("test/.tmp");
+
+ let results = await versionBump("minor");
+
+ expect(results).to.deep.equal({
+ release: "minor",
+ oldVersion: "1.0.0",
+ newVersion: "1.1.0",
+ commit: false,
+ tag: false,
+ updatedFiles: ["package.json"],
+ skippedFiles: [],
+ });
+
+ // The package.json file should have been updated
+ expect(files.json("package.json")).to.deep.equal({ version: "1.1.0" });
+
+ // Git and NPM should NOT have been called
+ expect(mocks.git()).to.be.empty;
+ expect(mocks.npm()).to.be.empty;
+ });
+
+ it("should accept options", async () => {
+ files.create("package.json", { version: "1.0.0" });
+ files.create("README.md", "The latest release is v1.0.0\n");
+ files.create("subdir/deep/changelog.md", "# Changelog\n\n## v1.0.0\n\n## v0.0.1\n");
+ files.create("random-file.json", {
+ name: "v1.0.0",
+ version: "1.0.0",
+ desc: "This is version 1.0.0.",
+ });
+
+ let results = await versionBump({
+ release: "preminor",
+ preid: "test",
+ commit: "A test of the upcoming v",
+ tag: "",
+ cwd: "test/.tmp",
+ files: [
+ "random-file.json",
+ "**/*.md",
+ ],
+ });
+
+ expect(results).to.deep.equal({
+ release: "preminor",
+ oldVersion: "1.0.0",
+ newVersion: "1.1.0-test.1",
+ commit: "A test of the upcoming v1.1.0-test.1",
+ tag: "1.1.0-test.1",
+ updatedFiles: [
+ "random-file.json",
+ "README.md",
+ "subdir/deep/changelog.md"
+ ],
+ skippedFiles: [],
+ });
+
+ // The CWD should not have changed
+ expect(process.cwd()).to.equal(ORIGINAL_CWD);
+
+ // The package.json file should NOT have been updated, because it wasn't in the `files` list
+ expect(files.json("package.json")).to.deep.equal({ version: "1.0.0" });
+
+ // The other files should have been updated
+ files.text("README.md", "The latest release is v1.1.0-test.1\n");
+
+ files.text("subdir/deep/changelog.md", "# Changelog\n\n## v1.1.0-test.1\n\n## v0.0.1\n");
+
+ expect(files.json("random-file.json")).to.deep.equal({
+ name: "v1.1.0-test.1",
+ version: "1.1.0-test.1",
+ desc: "This is version 1.1.0-test.1.",
+ });
+
+ // A git commit and tag should have been created
+ expect(mocks.git()).to.deep.equal([
+ 'git commit --message "A test of the upcoming v1.1.0-test.1" random-file.json README.md subdir/deep/changelog.md',
+ 'git tag --annotate --message "A test of the upcoming v1.1.0-test.1" 1.1.0-test.1',
+ ]);
+
+ // NPM should NOT have been called
+ expect(mocks.npm()).to.be.empty;
+ });
+
+ it("should throw an error if the options are invalid", async () => {
+ try {
+ let results = await versionBump({ release: "hello world" });
+ throw new Error(
+ "An error should have been thrown, but results were returned:\n" +
+ JSON.stringify(results, null, 2)
+ );
+ }
+ catch (error) {
+ expect(error).to.be.an.instanceOf(Error);
+ expect(error.message).to.equal("Invalid Version: hello world");
+ }
+ });
+
+ it("should throw an error if the current version number is invalid", async () => {
+ files.create("package.json", { version: "hello world" });
+
+ try {
+ let results = await versionBump({
+ release: "major",
+ cwd: "test/.tmp",
+ });
+
+ throw new Error(
+ "An error should have been thrown, but results were returned:\n" +
+ JSON.stringify(results, null, 2)
+ );
+ }
+ catch (error) {
+ expect(error).to.be.an.instanceOf(Error);
+ expect(error.message).to.equal(
+ "Unable to determine the current version number. Checked package.json."
+ );
+
+ // The CWD should not have changed
+ expect(process.cwd()).to.equal(ORIGINAL_CWD);
+
+ // The package.json file should not have changed
+ expect(files.json("package.json")).to.deep.equal({ version: "hello world" });
+
+ // Git and NPM should NOT have been called
+ expect(mocks.git()).to.be.empty;
+ expect(mocks.npm()).to.be.empty;
+ }
+ });
+
+});
diff --git a/test/specs/cli.spec.js b/test/specs/cli.spec.js
new file mode 100644
index 0000000..da146dc
--- /dev/null
+++ b/test/specs/cli.spec.js
@@ -0,0 +1,136 @@
+"use strict";
+
+const { files, bump } = require("../utils");
+const { expect } = require("chai");
+const manifest = require("../../package.json");
+
+describe("bump", () => {
+
+ it("should run without any arguments", () => {
+ // Create a dummy package.json, otherwise an error will occur
+ files.create("package.json", { version: "1.0.0" });
+
+ // Run the CLI without any arguments.
+ // It will prompt the user and wait forever, so add a timeout.
+ let cli = bump("", { timeout: 6000 });
+
+ // It should have prompted for input
+ expect(cli.stdout).to.contain("The current version in package.json is 1.0.0\nHow would you like to bump it? (Use arrow keys)");
+ });
+
+ it("should error if an invalid argument is used", () => {
+ let cli = bump("--commit --help --fizzbuzz --quiet");
+
+ expect(cli).to.have.exitCode(9);
+ expect(cli).to.have.stdout("");
+ expect(cli.stderr).to.match(/^Unknown option: --fizzbuzz\n\nUsage: bump \[release\] \[options\] \[files...\]\n/);
+ expect(cli.stderr).to.contain(manifest.description);
+ });
+
+ it("should error if an invalid shorthand argument is used", () => {
+ let cli = bump("-cqhzt");
+
+ expect(cli).to.have.exitCode(9);
+ expect(cli).to.have.stdout("");
+ expect(cli.stderr).to.match(/^Unknown option: -z\n\nUsage: bump \[release\] \[options\] \[files...\]\n/);
+ expect(cli.stderr).to.contain(manifest.description);
+ });
+
+ it("should error if an argument is missing its value", () => {
+ let cli = bump("--commit --help --preid --quiet");
+
+ expect(cli).to.have.exitCode(9);
+ expect(cli).to.have.stdout("");
+ expect(cli.stderr).to.match(
+ /^The --preid option requires a value, such as "alpha", "beta", etc\.\n\nUsage: bump \[release\] \[options\] \[files...\]\n/
+ );
+ expect(cli.stderr).to.contain(manifest.description);
+ });
+
+ it("should print a more detailed error if DEBUG is set", () => {
+ files.create("package.json", { version: "" });
+
+ let cli = bump("major", { env: { DEBUG: "true" }});
+
+ expect(cli).to.have.stdout("");
+ expect(cli).to.have.exitCode(1);
+
+ expect(cli).to.have.stderr.that.matches(
+ /^Error: Unable to determine the current version number. Checked package.json.\n\s+at \w+/
+ );
+
+ expect(files.json("package.json")).to.deep.equal({ version: "" });
+ });
+
+ describe("bump --help", () => {
+ it("should show usage text", () => {
+ let cli = bump("--help");
+
+ expect(cli).to.have.exitCode(0);
+ expect(cli).to.have.stderr("");
+ expect(cli.stdout).to.match(/^\nUsage: bump \[release\] \[options\] \[files...\]\n/);
+ expect(cli.stdout).to.contain(manifest.description);
+ });
+
+ it("should support -h shorthand", () => {
+ let cli = bump("-h");
+
+ expect(cli).to.have.exitCode(0);
+ expect(cli).to.have.stderr("");
+ expect(cli.stdout).to.match(/^\nUsage: bump \[release\] \[options\] \[files...\]\n/);
+ expect(cli.stdout).to.contain(manifest.description);
+ });
+
+ it("should ignore other arguments", () => {
+ let cli = bump("--quiet --help --tag");
+
+ expect(cli).to.have.exitCode(0);
+ expect(cli).to.have.stderr("");
+ expect(cli.stdout).to.match(/^\nUsage: bump \[release\] \[options\] \[files...\]\n/);
+ expect(cli.stdout).to.contain(manifest.description);
+ });
+
+ it("should ignore other shorthand arguments", () => {
+ let cli = bump("-cht");
+
+ expect(cli).to.have.exitCode(0);
+ expect(cli).to.have.stderr("");
+ expect(cli.stdout).to.match(/^\nUsage: bump \[release\] \[options\] \[files...\]\n/);
+ expect(cli.stdout).to.contain(manifest.description);
+ });
+ });
+
+ describe("bump --version", () => {
+ it("should show the version number", () => {
+ let cli = bump("--version");
+
+ expect(cli).to.have.exitCode(0);
+ expect(cli).to.have.stderr("");
+ expect(cli).to.have.stdout(manifest.version + "\n");
+ });
+
+ it("should support -v shorthand", () => {
+ let cli = bump("-v");
+
+ expect(cli).to.have.exitCode(0);
+ expect(cli).to.have.stderr("");
+ expect(cli).to.have.stdout(manifest.version + "\n");
+ });
+
+ it("should ignore other arguments", () => {
+ let cli = bump("--quiet --version --tag");
+
+ expect(cli).to.have.exitCode(0);
+ expect(cli).to.have.stderr("");
+ expect(cli).to.have.stdout(manifest.version + "\n");
+ });
+
+ it("should ignore other shorthand arguments", () => {
+ let cli = bump("-cvt");
+
+ expect(cli).to.have.exitCode(0);
+ expect(cli).to.have.stderr("");
+ expect(cli).to.have.stdout(manifest.version + "\n");
+ });
+ });
+});
diff --git a/test/specs/exports.spec.js b/test/specs/exports.spec.js
new file mode 100644
index 0000000..a30e79f
--- /dev/null
+++ b/test/specs/exports.spec.js
@@ -0,0 +1,31 @@
+"use strict";
+
+const commonJSExport = require("../../");
+const { expect } = require("chai");
+const { default: defaultExport, versionBump: namedExport } = require("../../");
+
+describe("version-bump-prompt package exports", () => {
+
+ it("should export the versionBump() function as the default CommonJS export", () => {
+ expect(commonJSExport).to.be.a("function");
+ expect(commonJSExport.name).to.equal("versionBump");
+ });
+
+ it("should export the versionBump() function as the default ESM export", () => {
+ expect(defaultExport).to.be.a("function");
+ expect(defaultExport).to.equal(commonJSExport);
+ });
+
+ it("should export the versionBump() function as a named export", () => {
+ expect(namedExport).to.be.a("function");
+ expect(namedExport).to.equal(commonJSExport);
+ });
+
+ it("should not export anything else", () => {
+ expect(Object.keys(commonJSExport)).to.have.same.members([
+ "default",
+ "versionBump",
+ ]);
+ });
+
+});
diff --git a/test/specs/files.spec.js b/test/specs/files.spec.js
new file mode 100644
index 0000000..0278d32
--- /dev/null
+++ b/test/specs/files.spec.js
@@ -0,0 +1,206 @@
+"use strict";
+
+const { check, info, files, fixtures, bump } = require("../utils");
+const { expect } = require("chai");
+
+describe("bump [files...]", () => {
+
+ it("should update the package.json and package-lock.json by default", () => {
+ files.create("package.json", { version: "1.2.3" });
+ files.create("package-lock.json", { version: "1.2.3" });
+
+ let cli = bump("major");
+
+ expect(cli).to.have.stderr("");
+ expect(cli).to.have.exitCode(0);
+
+ expect(cli).to.have.stdout(
+ `${check} Updated package.json to 2.0.0\n` +
+ `${check} Updated package-lock.json to 2.0.0\n`
+ );
+
+ expect(files.json("package.json")).to.deep.equal({ version: "2.0.0" });
+ expect(files.json("package-lock.json")).to.deep.equal({ version: "2.0.0" });
+ });
+
+ it("should not update package-lock.json if package.json is explicitly specified", () => {
+ files.create("package.json", { version: "1.2.3" });
+ files.create("package-lock.json", { version: "1.2.3" });
+
+ let cli = bump("major package.json");
+
+ expect(cli).to.have.stderr("");
+ expect(cli).to.have.exitCode(0);
+
+ expect(cli).to.have.stdout(
+ `${check} Updated package.json to 2.0.0\n`
+ );
+
+ expect(files.json("package.json")).to.deep.equal({ version: "2.0.0" });
+ expect(files.json("package-lock.json")).to.deep.equal({ version: "1.2.3" });
+ });
+
+ it("should not update package.json if package-lock.json is explicitly specified", () => {
+ files.create("package.json", { version: "1.2.3" });
+ files.create("package-lock.json", { version: "1.2.3" });
+
+ let cli = bump("major package-lock.json");
+
+ expect(cli).to.have.stderr("");
+ expect(cli).to.have.exitCode(0);
+
+ expect(cli).to.have.stdout(
+ `${check} Updated package-lock.json to 2.0.0\n`
+ );
+
+ expect(files.json("package.json")).to.deep.equal({ version: "1.2.3" });
+ expect(files.json("package-lock.json")).to.deep.equal({ version: "2.0.0" });
+ });
+
+ it("should not update package.json or package-lock.json if another file is explicitly specified", () => {
+ files.create("package.json", { version: "1.2.3" });
+ files.create("package-lock.json", { version: "1.2.3" });
+ files.create("bower.json", { version: "1.2.3" });
+
+ let cli = bump("major bower.json");
+
+ expect(cli).to.have.stderr("");
+ expect(cli).to.have.exitCode(0);
+
+ expect(cli).to.have.stdout(
+ `${check} Updated bower.json to 2.0.0\n`
+ );
+
+ expect(files.json("package.json")).to.deep.equal({ version: "1.2.3" });
+ expect(files.json("package-lock.json")).to.deep.equal({ version: "1.2.3" });
+ expect(files.json("bower.json")).to.deep.equal({ version: "2.0.0" });
+ });
+
+ it("should replace the version number in non-manifest files", () => {
+ files.create("package.json", { version: "1.2.3" });
+ files.create("LICENSE", fixtures.license);
+ files.create("README.md", fixtures.readme);
+ files.create("script1.js", fixtures.script1);
+ files.create("script2.js", fixtures.script2);
+ files.create("subdir/deep/script1.js", fixtures.script1);
+ files.create("subdir/deep/script2.js", fixtures.script2);
+
+ let cli = bump("major LICENSE README.* **/*.js");
+
+ expect(cli).to.have.stderr("");
+ expect(cli).to.have.exitCode(0);
+
+ expect(cli).to.have.stdout(
+ `${check} Updated LICENSE to 2.0.0\n` +
+ `${check} Updated README.md to 2.0.0\n` +
+ `${check} Updated script1.js to 2.0.0\n` +
+ `${info} script2.js did not need to be updated\n` +
+ `${check} Updated subdir/deep/script1.js to 2.0.0\n` +
+ `${info} subdir/deep/script2.js did not need to be updated\n`
+ );
+
+ expect(files.json("package.json")).to.deep.equal({ version: "1.2.3" });
+ expect(files.text("LICENSE")).to.match(/MyApp v2.0.0 Copyright/);
+ expect(files.text("README.md")).to.match(/version 2.0.0 and v2.0.0 should both get updated/);
+ expect(files.text("script1.js")).to.match(/make sure v2.0.0 gets replaced/);
+ expect(files.text("script1.js")).to.match(/let version = "2.0.0";/);
+ expect(files.text("script2.js")).to.match(/version 3.2.1 and v8.9.10 don't match the old version number/);
+ expect(files.text("subdir/deep/script1.js")).to.match(/make sure v2.0.0 gets replaced/);
+ expect(files.text("subdir/deep/script1.js")).to.match(/let version = "2.0.0";/);
+ expect(files.text("subdir/deep/script2.js")).to.match(/version 3.2.1 and v8.9.10 don't match the old version number/);
+ });
+
+ it("should not replace other version fields in manifest files", () => {
+ files.create("package.json", { version: "1.2.3", notTheVersion: "1.2.3" });
+ files.create("package-lock.json", { version: "1.2.3", notTheVersion: "1.2.3" });
+
+ let cli = bump("major");
+
+ expect(cli).to.have.stderr("");
+ expect(cli).to.have.exitCode(0);
+
+ expect(cli).to.have.stdout(
+ `${check} Updated package.json to 2.0.0\n` +
+ `${check} Updated package-lock.json to 2.0.0\n`
+ );
+
+ expect(files.json("package.json")).to.deep.equal({ version: "2.0.0", notTheVersion: "1.2.3" });
+ expect(files.json("package-lock.json")).to.deep.equal({ version: "2.0.0", notTheVersion: "1.2.3" });
+ });
+
+ it("should not replace other version numbers in non-manifest files", () => {
+ files.create("package.json", { version: "1.2.3" });
+ files.create("LICENSE", fixtures.license);
+ files.create("README.md", fixtures.readme);
+ files.create("script1.js", fixtures.script1);
+ files.create("script2.js", fixtures.script2);
+
+ let cli = bump("major LICENSE README.* *.js");
+
+ expect(cli).to.have.stderr("");
+ expect(cli).to.have.exitCode(0);
+
+ expect(cli).to.have.stdout(
+ `${check} Updated LICENSE to 2.0.0\n` +
+ `${check} Updated README.md to 2.0.0\n` +
+ `${check} Updated script1.js to 2.0.0\n` +
+ `${info} script2.js did not need to be updated\n`
+ );
+
+ expect(files.text("LICENSE")).to.match(/MyApp v2.0.0 Copyright/);
+ expect(files.text("README.md")).to.match(/version 5.6.7 and v8.9.10 should not be changed/);
+ expect(files.text("script2.js")).to.match(/version 3.2.1 and v8.9.10 don't match the old version number/);
+ });
+
+ it("should not not modify non-manifest files that don't contain the old version number", () => {
+ files.create("package.json", { version: "4.5.6" });
+ files.create("LICENSE", fixtures.license);
+ files.create("README.md", fixtures.readme);
+ files.create("script1.js", fixtures.script1);
+ files.create("script2.js", fixtures.script2);
+
+ let cli = bump("major LICENSE README.* *.js");
+
+ expect(cli).to.have.stderr("");
+ expect(cli).to.have.exitCode(0);
+
+ expect(cli).to.have.stdout(
+ `${info} LICENSE did not need to be updated\n` +
+ `${info} README.md did not need to be updated\n` +
+ `${info} script1.js did not need to be updated\n` +
+ `${info} script2.js did not need to be updated\n`
+ );
+
+ expect(files.json("package.json")).to.deep.equal({ version: "4.5.6" });
+ expect(files.text("LICENSE")).to.match(/MyApp v1.2.3 Copyright/);
+ expect(files.text("README.md")).to.match(/version 5.6.7 and v8.9.10 should not be changed/);
+ expect(files.text("README.md")).to.match(/version 1.2.3 and v1.2.3 should both get updated/);
+ expect(files.text("script1.js")).to.match(/make sure v1.2.3 gets replaced/);
+ expect(files.text("script1.js")).to.match(/let version = "1.2.3";/);
+ expect(files.text("script1.js")).to.match(/let version = "1.2.3";/);
+ expect(files.text("script2.js")).to.match(/version 3.2.1 and v8.9.10 don't match the old version number/);
+ });
+
+ it("should error if an explicitly-specified file doesn't exist", () => {
+ files.create("package.json", { version: "1.2.3" });
+
+ let cli = bump("major README.md");
+
+ expect(cli).to.have.stderr("Could not find file: README.md.\n");
+ expect(cli).to.have.exitCode(1);
+
+ expect(files.json("package.json")).to.deep.equal({ version: "1.2.3" });
+ });
+
+ it("should error if a glob pattern doesn't match any files", () => {
+ files.create("package.json", { version: "1.2.3" });
+
+ let cli = bump("major **/*.js");
+
+ expect(cli).to.have.stderr('Could not find any files matching "**/*.js".\n');
+ expect(cli).to.have.exitCode(1);
+
+ expect(files.json("package.json")).to.deep.equal({ version: "1.2.3" });
+ });
+
+});
diff --git a/test/specs/git-commit.spec.js b/test/specs/git-commit.spec.js
new file mode 100644
index 0000000..00ac2cf
--- /dev/null
+++ b/test/specs/git-commit.spec.js
@@ -0,0 +1,155 @@
+"use strict";
+
+const { check, files, mocks, bump } = require("../utils");
+const { expect } = require("chai");
+
+describe("bump --commit", () => {
+
+ it("should not commit by default", () => {
+ files.create("package.json", { version: "1.0.0" });
+
+ let cli = bump("major");
+
+ expect(cli).to.have.stderr("");
+ expect(cli).to.have.exitCode(0);
+
+ expect(cli).to.have.stdout(
+ `${check} Updated package.json to 2.0.0\n`
+ );
+
+ let git = mocks.git();
+ expect(git.length).to.equal(0);
+ });
+
+ it("should commit the manifest file to git", () => {
+ files.create("package.json", { version: "1.0.0" });
+
+ let cli = bump("major --commit");
+
+ expect(cli).to.have.stderr("");
+ expect(cli).to.have.exitCode(0);
+
+ expect(cli).to.have.stdout(
+ `${check} Updated package.json to 2.0.0\n` +
+ `${check} Git commit\n`
+ );
+
+ let git = mocks.git();
+ expect(git.length).to.equal(1);
+ expect(git[0]).to.equal('git commit --message "release v2.0.0" package.json');
+ });
+
+ it("should commit multiple manifest files to git", () => {
+ files.create("package.json", { version: "1.0.0" });
+ files.create("bower.json", { version: "1.0.0" });
+ files.create("component.json", { version: "1.0.0" });
+
+ let cli = bump("minor *.json --commit");
+
+ expect(cli).to.have.stderr("");
+ expect(cli).to.have.exitCode(0);
+
+ expect(cli).to.have.stdout(
+ `${check} Updated bower.json to 1.1.0\n` +
+ `${check} Updated component.json to 1.1.0\n` +
+ `${check} Updated package.json to 1.1.0\n` +
+ `${check} Git commit\n`
+ );
+
+ let git = mocks.git();
+ expect(git.length).to.equal(1);
+ expect(git[0]).to.equal('git commit --message "release v1.1.0" bower.json component.json package.json');
+ });
+
+ it("should commit all files to git", () => {
+ files.create("package.json", { version: "1.0.0" });
+
+ let cli = bump("minor --commit --all");
+
+ expect(cli).to.have.stderr("");
+ expect(cli).to.have.exitCode(0);
+
+ expect(cli).to.have.stdout(
+ `${check} Updated package.json to 1.1.0\n` +
+ `${check} Git commit\n`
+ );
+
+ let git = mocks.git();
+ expect(git.length).to.equal(1);
+ expect(git[0]).to.equal('git commit --all --message "release v1.1.0"');
+ });
+
+ it("should commit without running pre-commit hooks", () => {
+ files.create("package.json", { version: "1.0.0" });
+
+ let cli = bump("minor --commit --all --no-verify");
+
+ expect(cli.stderr).to.be.empty;
+ expect(cli).to.have.exitCode(0);
+
+ expect(cli).to.have.stdout(
+ `${check} Updated package.json to 1.1.0\n` +
+ `${check} Git commit\n`
+ );
+
+ let git = mocks.git();
+ expect(git.length).to.equal(1);
+ expect(git[0]).to.equal('git commit --all --no-verify --message "release v1.1.0"');
+ });
+
+ it("should append the version number to the commit message", () => {
+ files.create("package.json", { version: "1.0.0" });
+
+ let cli = bump('patch --all --commit "this is release v"');
+
+ expect(cli).to.have.stderr("");
+ expect(cli).to.have.exitCode(0);
+
+ expect(cli).to.have.stdout(
+ `${check} Updated package.json to 1.0.1\n` +
+ `${check} Git commit\n`
+ );
+
+ let git = mocks.git();
+ expect(git.length).to.equal(1);
+ expect(git[0]).to.equal('git commit --all --message "this is release v1.0.1"');
+ });
+
+ it("should replace version number placeholders in the commit message", () => {
+ files.create("package.json", { version: "1.0.0" });
+
+ let cli = bump('patch --all --commit "Releasing v%s. This is release v%s."');
+
+ expect(cli).to.have.stderr("");
+ expect(cli).to.have.exitCode(0);
+
+ expect(cli).to.have.stdout(
+ `${check} Updated package.json to 1.0.1\n` +
+ `${check} Git commit\n`
+ );
+
+ let git = mocks.git();
+ expect(git.length).to.equal(1);
+ expect(git[0]).to.equal('git commit --all --message "Releasing v1.0.1. This is release v1.0.1."');
+ });
+
+ it("should accept an empty commit message", () => {
+ files.create("package.json", { version: "1.0.0" });
+
+ let cli = bump(["patch", "--all", "--commit", ""]);
+
+ expect(cli).to.have.stderr("");
+ expect(cli).to.have.exitCode(0);
+
+ expect(cli).to.have.stdout(
+ `${check} Updated package.json to 1.0.1\n` +
+ `${check} Git commit\n`
+ );
+
+ let git = mocks.git();
+ expect(git.length).to.equal(1);
+
+ expect(git[0]).to.equal("git commit --all --message 1.0.1");
+ });
+
+});
diff --git a/test/specs/git-push.spec.js b/test/specs/git-push.spec.js
new file mode 100644
index 0000000..c5d9a4a
--- /dev/null
+++ b/test/specs/git-push.spec.js
@@ -0,0 +1,110 @@
+"use strict";
+
+const { check, files, mocks, bump } = require("../utils");
+const { expect } = require("chai");
+
+describe("bump --push", () => {
+
+ it("should not push by default", () => {
+ files.create("package.json", { version: "1.0.0" });
+
+ let cli = bump("major");
+
+ expect(cli).to.have.stderr("");
+ expect(cli).to.have.exitCode(0);
+
+ expect(cli).to.have.stdout(
+ `${check} Updated package.json to 2.0.0\n`
+ );
+
+ let git = mocks.git();
+ expect(git.length).to.equal(0);
+ });
+
+ it("should not push by default, even if --commit or --tag is used", () => {
+ files.create("package.json", { version: "1.0.0" });
+
+ let cli = bump("major --commit --tag");
+
+ expect(cli).to.have.stderr("");
+ expect(cli).to.have.exitCode(0);
+
+ expect(cli).to.have.stdout(
+ `${check} Updated package.json to 2.0.0\n` +
+ `${check} Git commit\n` +
+ `${check} Git tag\n`
+ );
+
+ let git = mocks.git();
+ expect(git.length).to.equal(2);
+
+ expect(git[0]).to.equal('git commit --message "release v2.0.0" package.json');
+ expect(git[1]).to.equal('git tag --annotate --message "release v2.0.0" v2.0.0');
+ });
+
+ it("should commit and push to git", () => {
+ files.create("package.json", { version: "1.0.0" });
+
+ let cli = bump("major --push");
+
+ expect(cli).to.have.stderr("");
+ expect(cli).to.have.exitCode(0);
+
+ expect(cli).to.have.stdout(
+ `${check} Updated package.json to 2.0.0\n` +
+ `${check} Git commit\n` +
+ `${check} Git push\n`
+ );
+
+ let git = mocks.git();
+ expect(git.length).to.equal(2);
+
+ expect(git[0]).to.equal('git commit --message "release v2.0.0" package.json');
+ expect(git[1]).to.equal("git push");
+ });
+
+ it("should push all files", () => {
+ files.create("package.json", { version: "1.0.0" });
+
+ let cli = bump("minor --push --all");
+
+ expect(cli).to.have.stderr("");
+ expect(cli).to.have.exitCode(0);
+
+ expect(cli).to.have.stdout(
+ `${check} Updated package.json to 1.1.0\n` +
+ `${check} Git commit\n` +
+ `${check} Git push\n`
+ );
+
+ let git = mocks.git();
+ expect(git.length).to.equal(2);
+
+ expect(git[0]).to.equal('git commit --all --message "release v1.1.0"');
+ expect(git[1]).to.equal("git push");
+ });
+
+ it("should push git tags", () => {
+ files.create("package.json", { version: "1.0.0" });
+
+ let cli = bump("premajor --tag --push");
+
+ expect(cli).to.have.stderr("");
+ expect(cli).to.have.exitCode(0);
+
+ expect(cli).to.have.stdout(
+ `${check} Updated package.json to 2.0.0-beta.1\n` +
+ `${check} Git commit\n` +
+ `${check} Git tag\n` +
+ `${check} Git push\n`
+ );
+
+ let git = mocks.git();
+ expect(git.length).to.equal(4);
+
+ expect(git[0]).to.equal('git commit --message "release v2.0.0-beta.1" package.json');
+ expect(git[1]).to.equal('git tag --annotate --message "release v2.0.0-beta.1" v2.0.0-beta.1');
+ expect(git[2]).to.equal("git push");
+ expect(git[3]).to.equal("git push --tags");
+ });
+});
diff --git a/test/specs/git-tag.spec.js b/test/specs/git-tag.spec.js
new file mode 100644
index 0000000..04db4a4
--- /dev/null
+++ b/test/specs/git-tag.spec.js
@@ -0,0 +1,130 @@
+"use strict";
+
+const { check, files, mocks, bump } = require("../utils");
+const { expect } = require("chai");
+
+describe("bump --tag", () => {
+
+ it("should not tag by default", () => {
+ files.create("package.json", { version: "1.0.0" });
+
+ let cli = bump("major");
+
+ expect(cli).to.have.stderr("");
+ expect(cli).to.have.exitCode(0);
+
+ expect(cli).to.have.stdout(
+ `${check} Updated package.json to 2.0.0\n`
+ );
+
+ let git = mocks.git();
+ expect(git.length).to.equal(0);
+ });
+
+ it("should not tag by default, even if --commit is used", () => {
+ files.create("package.json", { version: "1.0.0" });
+
+ let cli = bump("major --commit");
+
+ expect(cli).to.have.stderr("");
+ expect(cli).to.have.exitCode(0);
+
+ expect(cli).to.have.stdout(
+ `${check} Updated package.json to 2.0.0\n` +
+ `${check} Git commit\n`
+ );
+
+ let git = mocks.git();
+ expect(git.length).to.equal(1);
+ expect(git[0]).to.equal('git commit --message "release v2.0.0" package.json');
+ });
+
+ it("should add a git tag", () => {
+ files.create("package.json", { version: "1.0.0" });
+
+ let cli = bump("major --commit --tag");
+
+ expect(cli).to.have.stderr("");
+ expect(cli).to.have.exitCode(0);
+
+ expect(cli).to.have.stdout(
+ `${check} Updated package.json to 2.0.0\n` +
+ `${check} Git commit\n` +
+ `${check} Git tag\n`
+ );
+
+ let git = mocks.git();
+ expect(git.length).to.equal(2);
+
+ expect(git[0]).to.equal('git commit --message "release v2.0.0" package.json');
+ expect(git[1]).to.equal('git tag --annotate --message "release v2.0.0" v2.0.0');
+ });
+
+ it("should add a git tag, even if --commit is not specified", () => {
+ files.create("package.json", { version: "1.0.0" });
+
+ let cli = bump("minor --tag");
+
+ expect(cli).to.have.stderr("");
+ expect(cli).to.have.exitCode(0);
+
+ expect(cli).to.have.stdout(
+ `${check} Updated package.json to 1.1.0\n` +
+ `${check} Git commit\n` +
+ `${check} Git tag\n`
+ );
+
+ let git = mocks.git();
+ expect(git.length).to.equal(2);
+
+ expect(git[0]).to.equal('git commit --message "release v1.1.0" package.json');
+ expect(git[1]).to.equal('git tag --annotate --message "release v1.1.0" v1.1.0');
+ });
+
+ it("should tag all files", () => {
+ files.create("package.json", { version: "1.0.0" });
+
+ let cli = bump("patch --tag --all");
+
+ expect(cli).to.have.stderr("");
+ expect(cli).to.have.exitCode(0);
+
+ expect(cli).to.have.stdout(
+ `${check} Updated package.json to 1.0.1\n` +
+ `${check} Git commit\n` +
+ `${check} Git tag\n`
+ );
+
+ let git = mocks.git();
+ expect(git.length).to.equal(2);
+
+ expect(git[0]).to.equal('git commit --all --message "release v1.0.1"');
+ expect(git[1]).to.equal('git tag --annotate --message "release v1.0.1" v1.0.1');
+ });
+
+ it("should push git tags", () => {
+ files.create("package.json", { version: "1.0.0" });
+ files.create("bower.json", { version: "1.0.0" });
+
+ let cli = bump("premajor --tag --push *.json");
+
+ expect(cli).to.have.stderr("");
+ expect(cli).to.have.exitCode(0);
+
+ expect(cli).to.have.stdout(
+ `${check} Updated bower.json to 2.0.0-beta.1\n` +
+ `${check} Updated package.json to 2.0.0-beta.1\n` +
+ `${check} Git commit\n` +
+ `${check} Git tag\n` +
+ `${check} Git push\n`
+ );
+
+ let git = mocks.git();
+ expect(git.length).to.equal(4);
+
+ expect(git[0]).to.equal('git commit --message "release v2.0.0-beta.1" bower.json package.json');
+ expect(git[1]).to.equal('git tag --annotate --message "release v2.0.0-beta.1" v2.0.0-beta.1');
+ expect(git[2]).to.equal("git push");
+ expect(git[3]).to.equal("git push --tags");
+ });
+});
diff --git a/test/specs/grep.spec.js b/test/specs/grep.spec.js
deleted file mode 100644
index a4cf3c3..0000000
--- a/test/specs/grep.spec.js
+++ /dev/null
@@ -1,85 +0,0 @@
-"use strict";
-
-const files = require("../fixtures/files");
-const check = require("../fixtures/check");
-const chaiExec = require("chai-exec");
-
-describe("bump --grep", () => {
-
- it("should replace the version number in non-manifest files", () => {
- files.create("package.json", { version: "1.2.3" });
- files.copy("LICENSE");
- files.copy("README.md");
- files.copy("script1.js");
- files.copy("script2.js");
-
- let bump = chaiExec("--major --grep LICENSE README.* *.js");
-
- bump.stderr.should.be.empty;
- bump.should.have.exitCode(0);
-
- bump.should.have.stdout(
- `${check} Updated package.json to 2.0.0\n` +
- `${check} Updated README.md to 2.0.0\n` +
- `${check} Updated script1.js to 2.0.0\n` +
- `${check} Updated LICENSE to 2.0.0\n`
- );
-
- files.json("package.json").version.should.equal("2.0.0");
- files.text("LICENSE").should.match(/MyApp v2.0.0 Copyright/);
- files.text("README.md").should.match(/version 2.0.0 and v2.0.0 should both get updated/);
- files.text("script1.js").should.match(/make sure v2.0.0 gets replaced correctly/);
- files.text("script1.js").should.match(/let version = "2.0.0";/);
- files.text("script1.js").should.match(/let version = "2.0.0";/);
- });
-
- it("should not replace other version numbers in non-manifest files", () => {
- files.create("package.json", { version: "1.2.3" });
- files.copy("LICENSE");
- files.copy("README.md");
- files.copy("script1.js");
- files.copy("script2.js");
-
- let bump = chaiExec("--major --grep LICENSE README.* *.js");
-
- bump.stderr.should.be.empty;
- bump.should.have.exitCode(0);
-
- bump.should.have.stdout(
- `${check} Updated package.json to 2.0.0\n` +
- `${check} Updated README.md to 2.0.0\n` +
- `${check} Updated script1.js to 2.0.0\n` +
- `${check} Updated LICENSE to 2.0.0\n`
- );
-
- files.text("README.md").should.match(/version 5.6.7 and v8.9.10 should not be changed/);
- files.text("script2.js").should.match(/version 3.2.1 and v8.9.10 don't match the old version number/);
- });
-
- it("should not not modify non-manifest files that don't contain the old version number", () => {
- files.create("package.json", { version: "4.5.6" });
- files.copy("LICENSE");
- files.copy("README.md");
- files.copy("script1.js");
- files.copy("script2.js");
-
- let bump = chaiExec("--major --grep LICENSE README.* *.js");
-
- bump.stderr.should.be.empty;
- bump.should.have.exitCode(0);
-
- bump.should.have.stdout(
- `${check} Updated package.json to 5.0.0\n`
- );
-
- files.json("package.json").version.should.equal("5.0.0");
- files.text("LICENSE").should.match(/MyApp v1.2.3 Copyright/);
- files.text("README.md").should.match(/version 5.6.7 and v8.9.10 should not be changed/);
- files.text("README.md").should.match(/version 1.2.3 and v1.2.3 should both get updated/);
- files.text("script1.js").should.match(/make sure v1.2.3 gets replaced correctly/);
- files.text("script1.js").should.match(/let version = "1.2.3";/);
- files.text("script1.js").should.match(/let version = "1.2.3";/);
- files.text("script2.js").should.match(/version 3.2.1 and v8.9.10 don't match the old version number/);
- });
-
-});
diff --git a/test/specs/lock.spec.js b/test/specs/lock.spec.js
deleted file mode 100644
index c64f570..0000000
--- a/test/specs/lock.spec.js
+++ /dev/null
@@ -1,34 +0,0 @@
-"use strict";
-
-const files = require("../fixtures/files");
-const check = require("../fixtures/check");
-const chaiExec = require("chai-exec");
-
-describe("bump --lock", () => {
- it("should not increment lock file by default", () => {
- files.create("package-lock.json", { version: "1.0.0" });
-
- let bump = chaiExec("--patch");
-
- bump.stderr.should.be.empty;
- bump.stdout.should.be.empty;
- bump.should.have.exitCode(0);
-
- files.json("package-lock.json").should.deep.equal({ version: "1.0.0" });
- });
-
- it("should increment version when lock option is provided", () => {
- files.create("package-lock.json", { version: "0.0.0" });
-
- let bump = chaiExec("--patch --lock");
-
- bump.stderr.should.be.empty;
- bump.should.have.exitCode(0);
-
- bump.should.have.stdout(
- `${check} Updated package-lock.json to 0.0.1\n`
- );
-
- files.json("package-lock.json").should.deep.equal({ version: "0.0.1" });
- });
-});
diff --git a/test/specs/major.spec.js b/test/specs/major.spec.js
deleted file mode 100644
index 8e6f133..0000000
--- a/test/specs/major.spec.js
+++ /dev/null
@@ -1,102 +0,0 @@
-"use strict";
-
-const files = require("../fixtures/files");
-const check = require("../fixtures/check");
-const chaiExec = require("chai-exec");
-
-describe("bump --major", () => {
- it("should not increment a non-existent version number", () => {
- files.create("package.json", {});
- files.create("bower.json", { name: "my-app" });
-
- let bump = chaiExec("--major");
-
- bump.stderr.should.be.empty;
- bump.stdout.should.be.empty;
- bump.should.have.exitCode(0);
-
- files.json("package.json").should.deep.equal({});
- files.json("bower.json").should.deep.equal({ name: "my-app" });
- });
-
- it("should treat empty version numbers as 0.0.0", () => {
- files.create("package.json", { version: "" });
- files.create("bower.json", { version: null });
- files.create("component.json", { version: 0 });
-
- let bump = chaiExec("--major");
-
- bump.stderr.should.be.empty;
- bump.should.have.exitCode(0);
-
- bump.should.have.stdout(
- `${check} Updated package.json to 1.0.0\n` +
- `${check} Updated bower.json to 1.0.0\n` +
- `${check} Updated component.json to 1.0.0\n`
- );
-
- files.json("package.json").should.deep.equal({ version: "1.0.0" });
- files.json("bower.json").should.deep.equal({ version: "1.0.0" });
- files.json("component.json").should.deep.equal({ version: "1.0.0" });
- });
-
- it("should increment an all-zero version number", () => {
- files.create("package.json", { version: "0.0.0" });
-
- let bump = chaiExec("--major");
-
- bump.stderr.should.be.empty;
- bump.should.have.exitCode(0);
-
- bump.should.have.stdout(
- `${check} Updated package.json to 1.0.0\n`
- );
-
- files.json("package.json").should.deep.equal({ version: "1.0.0" });
- });
-
- it("should reset the minor and patch", () => {
- files.create("package.json", { version: "1.2.3" });
-
- let bump = chaiExec("--major");
-
- bump.stderr.should.be.empty;
- bump.should.have.exitCode(0);
-
- bump.should.have.stdout(
- `${check} Updated package.json to 2.0.0\n`
- );
-
- files.json("package.json").should.deep.equal({ version: "2.0.0" });
- });
-
- it("should reset the prerelease version", () => {
- files.create("package.json", { version: "1.2.3-beta.4" });
-
- let bump = chaiExec("--major");
-
- bump.stderr.should.be.empty;
- bump.should.have.exitCode(0);
-
- bump.should.have.stdout(
- `${check} Updated package.json to 2.0.0\n`
- );
-
- files.json("package.json").should.deep.equal({ version: "2.0.0" });
- });
-
- it("should not be affected by the --preid flag", () => {
- files.create("package.json", { version: "1.2.3-beta.4" });
-
- let bump = chaiExec("--major --preid alpha");
-
- bump.stderr.should.be.empty;
- bump.should.have.exitCode(0);
-
- bump.should.have.stdout(
- `${check} Updated package.json to 2.0.0\n`
- );
-
- files.json("package.json").should.deep.equal({ version: "2.0.0" });
- });
-});
diff --git a/test/specs/minor.spec.js b/test/specs/minor.spec.js
index 41f4048..7b393b4 100644
--- a/test/specs/minor.spec.js
+++ b/test/specs/minor.spec.js
@@ -1,102 +1,84 @@
"use strict";
-const files = require("../fixtures/files");
-const check = require("../fixtures/check");
-const chaiExec = require("chai-exec");
+const { check, files, bump } = require("../utils");
+const { expect } = require("chai");
-describe("bump --minor", () => {
- it("should not increment a non-existent version number", () => {
- files.create("package.json", {});
- files.create("bower.json", { name: "my-app" });
-
- let bump = chaiExec("--minor");
-
- bump.stderr.should.be.empty;
- bump.stdout.should.be.empty;
- bump.should.have.exitCode(0);
-
- files.json("package.json").should.deep.equal({});
- files.json("bower.json").should.deep.equal({ name: "my-app" });
- });
-
- it("should treat empty version numbers as 0.0.0", () => {
- files.create("package.json", { version: "" });
- files.create("bower.json", { version: null });
- files.create("component.json", { version: 0 });
-
- let bump = chaiExec("--minor");
-
- bump.stderr.should.be.empty;
- bump.should.have.exitCode(0);
-
- bump.should.have.stdout(
- `${check} Updated package.json to 0.1.0\n` +
- `${check} Updated bower.json to 0.1.0\n` +
- `${check} Updated component.json to 0.1.0\n`
- );
-
- files.json("package.json").should.deep.equal({ version: "0.1.0" });
- files.json("bower.json").should.deep.equal({ version: "0.1.0" });
- files.json("component.json").should.deep.equal({ version: "0.1.0" });
- });
+describe("bump minor", () => {
it("should increment an all-zero version number", () => {
files.create("package.json", { version: "0.0.0" });
- let bump = chaiExec("--minor");
+ let cli = bump("minor");
- bump.stderr.should.be.empty;
- bump.should.have.exitCode(0);
+ expect(cli).to.have.stderr("");
+ expect(cli).to.have.exitCode(0);
- bump.should.have.stdout(
+ expect(cli).to.have.stdout(
`${check} Updated package.json to 0.1.0\n`
);
- files.json("package.json").should.deep.equal({ version: "0.1.0" });
+ expect(files.json("package.json")).to.deep.equal({ version: "0.1.0" });
});
it("should reset the patch", () => {
files.create("package.json", { version: "1.2.3" });
- let bump = chaiExec("--minor");
+ let cli = bump("minor");
- bump.stderr.should.be.empty;
- bump.should.have.exitCode(0);
+ expect(cli).to.have.stderr("");
+ expect(cli).to.have.exitCode(0);
- bump.should.have.stdout(
+ expect(cli).to.have.stdout(
`${check} Updated package.json to 1.3.0\n`
);
- files.json("package.json").should.deep.equal({ version: "1.3.0" });
+ expect(files.json("package.json")).to.deep.equal({ version: "1.3.0" });
});
it("should reset the prerelease version", () => {
files.create("package.json", { version: "1.2.3-beta.4" });
- let bump = chaiExec("--minor");
+ let cli = bump("minor");
- bump.stderr.should.be.empty;
- bump.should.have.exitCode(0);
+ expect(cli).to.have.stderr("");
+ expect(cli).to.have.exitCode(0);
- bump.should.have.stdout(
+ expect(cli).to.have.stdout(
`${check} Updated package.json to 1.3.0\n`
);
- files.json("package.json").should.deep.equal({ version: "1.3.0" });
+ expect(files.json("package.json")).to.deep.equal({ version: "1.3.0" });
});
it("should not be affected by the --preid flag", () => {
files.create("package.json", { version: "1.2.3-beta.4" });
- let bump = chaiExec("--minor --preid alpha");
+ let cli = bump("minor --preid alpha");
- bump.stderr.should.be.empty;
- bump.should.have.exitCode(0);
+ expect(cli).to.have.stderr("");
+ expect(cli).to.have.exitCode(0);
- bump.should.have.stdout(
+ expect(cli).to.have.stdout(
`${check} Updated package.json to 1.3.0\n`
);
- files.json("package.json").should.deep.equal({ version: "1.3.0" });
+ expect(files.json("package.json")).to.deep.equal({ version: "1.3.0" });
});
+
+ it("should error if there is no existing version number", () => {
+ files.create("package.json", { name: "my-app" });
+ files.create("bower.json", { version: "" });
+ files.create("component.json", { version: 0 });
+
+ let cli = bump("minor *.json");
+
+ expect(cli).to.have.stdout("");
+ expect(cli).to.have.stderr("Unable to determine the current version number. Checked bower.json, component.json, package.json.\n");
+ expect(cli).to.have.exitCode(1);
+
+ expect(files.json("package.json")).to.deep.equal({ name: "my-app" });
+ expect(files.json("bower.json")).to.deep.equal({ version: "" });
+ expect(files.json("component.json")).to.deep.equal({ version: 0 });
+ });
+
});
diff --git a/test/specs/npm.spec.js b/test/specs/npm.spec.js
new file mode 100644
index 0000000..3caf84c
--- /dev/null
+++ b/test/specs/npm.spec.js
@@ -0,0 +1,144 @@
+"use strict";
+
+const { check, files, mocks, bump } = require("../utils");
+const { expect } = require("chai");
+
+describe("npm version hooks", () => {
+
+ if (process.platform === "win32" && process.env.CI) {
+ // Spawning NPM fails on Windows due to a bug in NYC
+ return;
+ }
+
+ it("should run the preversion script before updating the version number", () => {
+ files.create("package.json", {
+ version: "1.0.0",
+ scripts: {
+ preversion: "echo hello world",
+ },
+ });
+
+ let cli = bump("major");
+
+ expect(cli).to.have.stderr("");
+ expect(cli).to.have.exitCode(0);
+
+ expect(cli).to.have.stdout(
+ `${check} Npm run preversion\n` +
+ `${check} Updated package.json to 2.0.0\n`
+ );
+
+ let npm = mocks.npmDetails();
+ expect(npm.length).to.equal(1);
+
+ expect(npm[0].cmd).to.equal("npm run preversion --silent");
+ expect(npm[0].version).to.equal("1.0.0");
+ });
+
+ it("should run the version script after updating the version number", () => {
+ files.create("package.json", {
+ version: "1.0.0",
+ scripts: {
+ version: "echo hello world",
+ },
+ });
+
+ let cli = bump("major");
+
+ expect(cli).to.have.stderr("");
+ expect(cli).to.have.exitCode(0);
+
+ expect(cli).to.have.stdout(
+ `${check} Updated package.json to 2.0.0\n` +
+ `${check} Npm run version\n`
+ );
+
+ let npm = mocks.npmDetails();
+ expect(npm.length).to.equal(1);
+
+ expect(npm[0].cmd).to.equal("npm run version --silent");
+ expect(npm[0].version).to.equal("2.0.0");
+ });
+
+ it("should run the postversion script after updating the version number", () => {
+ files.create("package.json", {
+ version: "1.0.0",
+ scripts: {
+ postversion: "echo hello world",
+ },
+ });
+
+ let cli = bump("major");
+
+ expect(cli).to.have.stderr("");
+ expect(cli).to.have.exitCode(0);
+
+ expect(cli).to.have.stdout(
+ `${check} Updated package.json to 2.0.0\n` +
+ `${check} Npm run postversion\n`
+ );
+
+ let npm = mocks.npmDetails();
+ expect(npm.length).to.equal(1);
+
+ expect(npm[0].cmd).to.equal("npm run postversion --silent");
+ expect(npm[0].version).to.equal("2.0.0");
+ });
+
+ it("should run all the version scripts and git commands in the correct order", () => {
+ files.create("package.json", {
+ version: "1.0.0",
+ scripts: {
+ preversion: "echo hello world",
+ version: "echo hello world",
+ postversion: "echo hello world",
+ },
+ });
+
+ let cli = bump("major --commit --tag --push");
+
+ expect(cli).to.have.stderr("");
+ expect(cli).to.have.exitCode(0);
+
+ expect(cli).to.have.stdout(
+ `${check} Npm run preversion\n` +
+ `${check} Updated package.json to 2.0.0\n` +
+ `${check} Npm run version\n` +
+ `${check} Git commit\n` +
+ `${check} Git tag\n` +
+ `${check} Npm run postversion\n` +
+ `${check} Git push\n`
+ );
+
+ let bin = mocks.all();
+ expect(bin.length).to.equal(7);
+
+ // The preversion script runs before anything
+ expect(bin[0].cmd).to.equal("npm run preversion --silent");
+ expect(bin[0].version).to.equal("1.0.0");
+
+ // The version script runs after the version has been updated,
+ expect(bin[1].cmd).to.equal("npm run version --silent");
+ expect(bin[1].version).to.equal("2.0.0");
+
+ // Git commit happens after the version has been updated
+ expect(bin[2].cmd).to.equal('git commit --message "release v2.0.0" package.json');
+ expect(bin[2].version).to.equal("2.0.0");
+
+ // Git tag happens after the version has been updated
+ expect(bin[3].cmd).to.equal('git tag --annotate --message "release v2.0.0" v2.0.0');
+ expect(bin[3].version).to.equal("2.0.0");
+
+ // The postversion script runs AFTER "git commit" and "git tag", but BEFORE "git push"
+ expect(bin[4].cmd).to.equal("npm run postversion --silent");
+ expect(bin[4].version).to.equal("2.0.0");
+
+ // Git push happens after everything else
+ expect(bin[5].cmd).to.equal("git push");
+ expect(bin[5].version).to.equal("2.0.0");
+
+ expect(bin[6].cmd).to.equal("git push --tags");
+ expect(bin[6].version).to.equal("2.0.0");
+ });
+
+});
diff --git a/test/specs/patch.spec.js b/test/specs/patch.spec.js
index cb539f7..566302e 100644
--- a/test/specs/patch.spec.js
+++ b/test/specs/patch.spec.js
@@ -1,102 +1,84 @@
"use strict";
-const files = require("../fixtures/files");
-const check = require("../fixtures/check");
-const chaiExec = require("chai-exec");
+const { check, files, bump } = require("../utils");
+const { expect } = require("chai");
-describe("bump --patch", () => {
- it("should not increment a non-existent version number", () => {
- files.create("package.json", {});
- files.create("bower.json", { name: "my-app" });
-
- let bump = chaiExec("--patch");
-
- bump.stderr.should.be.empty;
- bump.stdout.should.be.empty;
- bump.should.have.exitCode(0);
-
- files.json("package.json").should.deep.equal({});
- files.json("bower.json").should.deep.equal({ name: "my-app" });
- });
-
- it("should treat empty version numbers as 0.0.0", () => {
- files.create("package.json", { version: "" });
- files.create("bower.json", { version: null });
- files.create("component.json", { version: 0 });
-
- let bump = chaiExec("--patch");
-
- bump.stderr.should.be.empty;
- bump.should.have.exitCode(0);
-
- bump.should.have.stdout(
- `${check} Updated package.json to 0.0.1\n` +
- `${check} Updated bower.json to 0.0.1\n` +
- `${check} Updated component.json to 0.0.1\n`
- );
-
- files.json("package.json").should.deep.equal({ version: "0.0.1" });
- files.json("bower.json").should.deep.equal({ version: "0.0.1" });
- files.json("component.json").should.deep.equal({ version: "0.0.1" });
- });
+describe("bump patch", () => {
it("should increment an all-zero version number", () => {
files.create("package.json", { version: "0.0.0" });
- let bump = chaiExec("--patch");
+ let cli = bump("patch");
- bump.stderr.should.be.empty;
- bump.should.have.exitCode(0);
+ expect(cli).to.have.stderr("");
+ expect(cli).to.have.exitCode(0);
- bump.should.have.stdout(
+ expect(cli).to.have.stdout(
`${check} Updated package.json to 0.0.1\n`
);
- files.json("package.json").should.deep.equal({ version: "0.0.1" });
+ expect(files.json("package.json")).to.deep.equal({ version: "0.0.1" });
});
it("should increment the patch", () => {
files.create("package.json", { version: "1.2.3" });
- let bump = chaiExec("--patch");
+ let cli = bump("patch");
- bump.stderr.should.be.empty;
- bump.should.have.exitCode(0);
+ expect(cli).to.have.stderr("");
+ expect(cli).to.have.exitCode(0);
- bump.should.have.stdout(
+ expect(cli).to.have.stdout(
`${check} Updated package.json to 1.2.4\n`
);
- files.json("package.json").should.deep.equal({ version: "1.2.4" });
+ expect(files.json("package.json")).to.deep.equal({ version: "1.2.4" });
});
it("should reset the prerelease version", () => {
files.create("package.json", { version: "1.2.3-beta.4" });
- let bump = chaiExec("--patch");
+ let cli = bump("patch");
- bump.stderr.should.be.empty;
- bump.should.have.exitCode(0);
+ expect(cli).to.have.stderr("");
+ expect(cli).to.have.exitCode(0);
- bump.should.have.stdout(
+ expect(cli).to.have.stdout(
`${check} Updated package.json to 1.2.3\n`
);
- files.json("package.json").should.deep.equal({ version: "1.2.3" });
+ expect(files.json("package.json")).to.deep.equal({ version: "1.2.3" });
});
it("should not be affected by the --preid flag", () => {
files.create("package.json", { version: "1.2.3-beta.4" });
- let bump = chaiExec("--patch --preid alpha");
+ let cli = bump("patch --preid alpha");
- bump.stderr.should.be.empty;
- bump.should.have.exitCode(0);
+ expect(cli).to.have.stderr("");
+ expect(cli).to.have.exitCode(0);
- bump.should.have.stdout(
+ expect(cli).to.have.stdout(
`${check} Updated package.json to 1.2.3\n`
);
- files.json("package.json").should.deep.equal({ version: "1.2.3" });
+ expect(files.json("package.json")).to.deep.equal({ version: "1.2.3" });
});
+
+ it("should error if there is no existing version number", () => {
+ files.create("package.json", { name: "my-app" });
+ files.create("bower.json", { version: "" });
+ files.create("component.json", { version: 0 });
+
+ let cli = bump("patch *.json");
+
+ expect(cli).to.have.stdout("");
+ expect(cli).to.have.stderr("Unable to determine the current version number. Checked bower.json, component.json, package.json.\n");
+ expect(cli).to.have.exitCode(1);
+
+ expect(files.json("package.json")).to.deep.equal({ name: "my-app" });
+ expect(files.json("bower.json")).to.deep.equal({ version: "" });
+ expect(files.json("component.json")).to.deep.equal({ version: 0 });
+ });
+
});
diff --git a/test/specs/premajor.spec.js b/test/specs/premajor.spec.js
index 07f2c23..e6d3a88 100644
--- a/test/specs/premajor.spec.js
+++ b/test/specs/premajor.spec.js
@@ -1,102 +1,84 @@
"use strict";
-const files = require("../fixtures/files");
-const check = require("../fixtures/check");
-const chaiExec = require("chai-exec");
+const { check, files, bump } = require("../utils");
+const { expect } = require("chai");
-describe("bump --premajor", () => {
- it("should not increment a non-existent version number", () => {
- files.create("package.json", {});
- files.create("bower.json", { name: "my-app" });
-
- let bump = chaiExec("--premajor");
-
- bump.stderr.should.be.empty;
- bump.stdout.should.be.empty;
- bump.should.have.exitCode(0);
-
- files.json("package.json").should.deep.equal({});
- files.json("bower.json").should.deep.equal({ name: "my-app" });
- });
-
- it("should treat empty version numbers as 0.0.0", () => {
- files.create("package.json", { version: "" });
- files.create("bower.json", { version: null });
- files.create("component.json", { version: 0 });
-
- let bump = chaiExec("--premajor");
-
- bump.stderr.should.be.empty;
- bump.should.have.exitCode(0);
-
- bump.should.have.stdout(
- `${check} Updated package.json to 1.0.0-beta.0\n` +
- `${check} Updated bower.json to 1.0.0-beta.0\n` +
- `${check} Updated component.json to 1.0.0-beta.0\n`
- );
-
- files.json("package.json").should.deep.equal({ version: "1.0.0-beta.0" });
- files.json("bower.json").should.deep.equal({ version: "1.0.0-beta.0" });
- files.json("component.json").should.deep.equal({ version: "1.0.0-beta.0" });
- });
+describe("bump premajor", () => {
it("should increment an all-zero version number", () => {
files.create("package.json", { version: "0.0.0" });
- let bump = chaiExec("--premajor");
+ let cli = bump("premajor");
- bump.stderr.should.be.empty;
- bump.should.have.exitCode(0);
+ expect(cli).to.have.stderr("");
+ expect(cli).to.have.exitCode(0);
- bump.should.have.stdout(
- `${check} Updated package.json to 1.0.0-beta.0\n`
+ expect(cli).to.have.stdout(
+ `${check} Updated package.json to 1.0.0-beta.1\n`
);
- files.json("package.json").should.deep.equal({ version: "1.0.0-beta.0" });
+ expect(files.json("package.json")).to.deep.equal({ version: "1.0.0-beta.1" });
});
it("should reset the minor and patch", () => {
files.create("package.json", { version: "1.2.3" });
- let bump = chaiExec("--premajor");
+ let cli = bump("premajor");
- bump.stderr.should.be.empty;
- bump.should.have.exitCode(0);
+ expect(cli).to.have.stderr("");
+ expect(cli).to.have.exitCode(0);
- bump.should.have.stdout(
- `${check} Updated package.json to 2.0.0-beta.0\n`
+ expect(cli).to.have.stdout(
+ `${check} Updated package.json to 2.0.0-beta.1\n`
);
- files.json("package.json").should.deep.equal({ version: "2.0.0-beta.0" });
+ expect(files.json("package.json")).to.deep.equal({ version: "2.0.0-beta.1" });
});
it("should reset the prerelease version", () => {
files.create("package.json", { version: "1.2.3-beta.4" });
- let bump = chaiExec("--premajor");
+ let cli = bump("premajor");
- bump.stderr.should.be.empty;
- bump.should.have.exitCode(0);
+ expect(cli).to.have.stderr("");
+ expect(cli).to.have.exitCode(0);
- bump.should.have.stdout(
- `${check} Updated package.json to 2.0.0-beta.0\n`
+ expect(cli).to.have.stdout(
+ `${check} Updated package.json to 2.0.0-beta.1\n`
);
- files.json("package.json").should.deep.equal({ version: "2.0.0-beta.0" });
+ expect(files.json("package.json")).to.deep.equal({ version: "2.0.0-beta.1" });
});
it("should honor the --preid flag", () => {
files.create("package.json", { version: "1.2.3-beta.4" });
- let bump = chaiExec("--premajor --preid alpha");
+ let cli = bump("premajor --preid alpha");
- bump.stderr.should.be.empty;
- bump.should.have.exitCode(0);
+ expect(cli).to.have.stderr("");
+ expect(cli).to.have.exitCode(0);
- bump.should.have.stdout(
- `${check} Updated package.json to 2.0.0-alpha.0\n`
+ expect(cli).to.have.stdout(
+ `${check} Updated package.json to 2.0.0-alpha.1\n`
);
- files.json("package.json").should.deep.equal({ version: "2.0.0-alpha.0" });
+ expect(files.json("package.json")).to.deep.equal({ version: "2.0.0-alpha.1" });
});
+
+ it("should error if there is no existing version number", () => {
+ files.create("package.json", { name: "my-app" });
+ files.create("bower.json", { version: "" });
+ files.create("component.json", { version: 0 });
+
+ let cli = bump("premajor *.json");
+
+ expect(cli).to.have.stdout("");
+ expect(cli).to.have.stderr("Unable to determine the current version number. Checked bower.json, component.json, package.json.\n");
+ expect(cli).to.have.exitCode(1);
+
+ expect(files.json("package.json")).to.deep.equal({ name: "my-app" });
+ expect(files.json("bower.json")).to.deep.equal({ version: "" });
+ expect(files.json("component.json")).to.deep.equal({ version: 0 });
+ });
+
});
diff --git a/test/specs/preminor.spec.js b/test/specs/preminor.spec.js
index aad658f..65df293 100644
--- a/test/specs/preminor.spec.js
+++ b/test/specs/preminor.spec.js
@@ -1,102 +1,84 @@
"use strict";
-const files = require("../fixtures/files");
-const check = require("../fixtures/check");
-const chaiExec = require("chai-exec");
+const { check, files, bump } = require("../utils");
+const { expect } = require("chai");
-describe("bump --preminor", () => {
- it("should not increment a non-existent version number", () => {
- files.create("package.json", {});
- files.create("bower.json", { name: "my-app" });
-
- let bump = chaiExec("--preminor");
-
- bump.stderr.should.be.empty;
- bump.stdout.should.be.empty;
- bump.should.have.exitCode(0);
-
- files.json("package.json").should.deep.equal({});
- files.json("bower.json").should.deep.equal({ name: "my-app" });
- });
-
- it("should treat empty version numbers as 0.0.0", () => {
- files.create("package.json", { version: "" });
- files.create("bower.json", { version: null });
- files.create("component.json", { version: 0 });
-
- let bump = chaiExec("--preminor");
-
- bump.stderr.should.be.empty;
- bump.should.have.exitCode(0);
-
- bump.should.have.stdout(
- `${check} Updated package.json to 0.1.0-beta.0\n` +
- `${check} Updated bower.json to 0.1.0-beta.0\n` +
- `${check} Updated component.json to 0.1.0-beta.0\n`
- );
-
- files.json("package.json").should.deep.equal({ version: "0.1.0-beta.0" });
- files.json("bower.json").should.deep.equal({ version: "0.1.0-beta.0" });
- files.json("component.json").should.deep.equal({ version: "0.1.0-beta.0" });
- });
+describe("bump preminor", () => {
it("should increment an all-zero version number", () => {
files.create("package.json", { version: "0.0.0" });
- let bump = chaiExec("--preminor");
+ let cli = bump("preminor");
- bump.stderr.should.be.empty;
- bump.should.have.exitCode(0);
+ expect(cli).to.have.stderr("");
+ expect(cli).to.have.exitCode(0);
- bump.should.have.stdout(
- `${check} Updated package.json to 0.1.0-beta.0\n`
+ expect(cli).to.have.stdout(
+ `${check} Updated package.json to 0.1.0-beta.1\n`
);
- files.json("package.json").should.deep.equal({ version: "0.1.0-beta.0" });
+ expect(files.json("package.json")).to.deep.equal({ version: "0.1.0-beta.1" });
});
it("should reset the minor and patch", () => {
files.create("package.json", { version: "1.2.3" });
- let bump = chaiExec("--preminor");
+ let cli = bump("preminor");
- bump.stderr.should.be.empty;
- bump.should.have.exitCode(0);
+ expect(cli).to.have.stderr("");
+ expect(cli).to.have.exitCode(0);
- bump.should.have.stdout(
- `${check} Updated package.json to 1.3.0-beta.0\n`
+ expect(cli).to.have.stdout(
+ `${check} Updated package.json to 1.3.0-beta.1\n`
);
- files.json("package.json").should.deep.equal({ version: "1.3.0-beta.0" });
+ expect(files.json("package.json")).to.deep.equal({ version: "1.3.0-beta.1" });
});
it("should reset the prerelease version", () => {
files.create("package.json", { version: "1.2.3-beta.4" });
- let bump = chaiExec("--preminor");
+ let cli = bump("preminor");
- bump.stderr.should.be.empty;
- bump.should.have.exitCode(0);
+ expect(cli).to.have.stderr("");
+ expect(cli).to.have.exitCode(0);
- bump.should.have.stdout(
- `${check} Updated package.json to 1.3.0-beta.0\n`
+ expect(cli).to.have.stdout(
+ `${check} Updated package.json to 1.3.0-beta.1\n`
);
- files.json("package.json").should.deep.equal({ version: "1.3.0-beta.0" });
+ expect(files.json("package.json")).to.deep.equal({ version: "1.3.0-beta.1" });
});
it("should honor the --preid flag", () => {
files.create("package.json", { version: "1.2.3-beta.4" });
- let bump = chaiExec("--preminor --preid alpha");
+ let cli = bump("preminor --preid alpha");
- bump.stderr.should.be.empty;
- bump.should.have.exitCode(0);
+ expect(cli).to.have.stderr("");
+ expect(cli).to.have.exitCode(0);
- bump.should.have.stdout(
- `${check} Updated package.json to 1.3.0-alpha.0\n`
+ expect(cli).to.have.stdout(
+ `${check} Updated package.json to 1.3.0-alpha.1\n`
);
- files.json("package.json").should.deep.equal({ version: "1.3.0-alpha.0" });
+ expect(files.json("package.json")).to.deep.equal({ version: "1.3.0-alpha.1" });
});
+
+ it("should error if there is no existing version number", () => {
+ files.create("package.json", { name: "my-app" });
+ files.create("bower.json", { version: "" });
+ files.create("component.json", { version: 0 });
+
+ let cli = bump("preminor *.json");
+
+ expect(cli).to.have.stdout("");
+ expect(cli).to.have.stderr("Unable to determine the current version number. Checked bower.json, component.json, package.json.\n");
+ expect(cli).to.have.exitCode(1);
+
+ expect(files.json("package.json")).to.deep.equal({ name: "my-app" });
+ expect(files.json("bower.json")).to.deep.equal({ version: "" });
+ expect(files.json("component.json")).to.deep.equal({ version: 0 });
+ });
+
});
diff --git a/test/specs/prepatch.spec.js b/test/specs/prepatch.spec.js
index 8c0a7ce..c801a78 100644
--- a/test/specs/prepatch.spec.js
+++ b/test/specs/prepatch.spec.js
@@ -1,102 +1,84 @@
"use strict";
-const files = require("../fixtures/files");
-const check = require("../fixtures/check");
-const chaiExec = require("chai-exec");
+const { check, files, bump } = require("../utils");
+const { expect } = require("chai");
-describe("bump --prepatch", () => {
- it("should not increment a non-existent version number", () => {
- files.create("package.json", {});
- files.create("bower.json", { name: "my-app" });
-
- let bump = chaiExec("--prepatch");
-
- bump.stderr.should.be.empty;
- bump.stdout.should.be.empty;
- bump.should.have.exitCode(0);
-
- files.json("package.json").should.deep.equal({});
- files.json("bower.json").should.deep.equal({ name: "my-app" });
- });
-
- it("should treat empty version numbers as 0.0.0", () => {
- files.create("package.json", { version: "" });
- files.create("bower.json", { version: null });
- files.create("component.json", { version: 0 });
-
- let bump = chaiExec("--prepatch");
-
- bump.stderr.should.be.empty;
- bump.should.have.exitCode(0);
-
- bump.should.have.stdout(
- `${check} Updated package.json to 0.0.1-beta.0\n` +
- `${check} Updated bower.json to 0.0.1-beta.0\n` +
- `${check} Updated component.json to 0.0.1-beta.0\n`
- );
-
- files.json("package.json").should.deep.equal({ version: "0.0.1-beta.0" });
- files.json("bower.json").should.deep.equal({ version: "0.0.1-beta.0" });
- files.json("component.json").should.deep.equal({ version: "0.0.1-beta.0" });
- });
+describe("bump prepatch", () => {
it("should increment an all-zero version number", () => {
files.create("package.json", { version: "0.0.0" });
- let bump = chaiExec("--prepatch");
+ let cli = bump("prepatch");
- bump.stderr.should.be.empty;
- bump.should.have.exitCode(0);
+ expect(cli).to.have.stderr("");
+ expect(cli).to.have.exitCode(0);
- bump.should.have.stdout(
- `${check} Updated package.json to 0.0.1-beta.0\n`
+ expect(cli).to.have.stdout(
+ `${check} Updated package.json to 0.0.1-beta.1\n`
);
- files.json("package.json").should.deep.equal({ version: "0.0.1-beta.0" });
+ expect(files.json("package.json")).to.deep.equal({ version: "0.0.1-beta.1" });
});
it("should reset the minor and patch", () => {
files.create("package.json", { version: "1.2.3" });
- let bump = chaiExec("--prepatch");
+ let cli = bump("prepatch");
- bump.stderr.should.be.empty;
- bump.should.have.exitCode(0);
+ expect(cli).to.have.stderr("");
+ expect(cli).to.have.exitCode(0);
- bump.should.have.stdout(
- `${check} Updated package.json to 1.2.4-beta.0\n`
+ expect(cli).to.have.stdout(
+ `${check} Updated package.json to 1.2.4-beta.1\n`
);
- files.json("package.json").should.deep.equal({ version: "1.2.4-beta.0" });
+ expect(files.json("package.json")).to.deep.equal({ version: "1.2.4-beta.1" });
});
it("should reset the prerelease version", () => {
files.create("package.json", { version: "1.2.3-beta.4" });
- let bump = chaiExec("--prepatch");
+ let cli = bump("prepatch");
- bump.stderr.should.be.empty;
- bump.should.have.exitCode(0);
+ expect(cli).to.have.stderr("");
+ expect(cli).to.have.exitCode(0);
- bump.should.have.stdout(
- `${check} Updated package.json to 1.2.4-beta.0\n`
+ expect(cli).to.have.stdout(
+ `${check} Updated package.json to 1.2.4-beta.1\n`
);
- files.json("package.json").should.deep.equal({ version: "1.2.4-beta.0" });
+ expect(files.json("package.json")).to.deep.equal({ version: "1.2.4-beta.1" });
});
it("should honor the --preid flag", () => {
files.create("package.json", { version: "1.2.3-beta.4" });
- let bump = chaiExec("--prepatch --preid alpha");
+ let cli = bump("prepatch --preid alpha");
- bump.stderr.should.be.empty;
- bump.should.have.exitCode(0);
+ expect(cli).to.have.stderr("");
+ expect(cli).to.have.exitCode(0);
- bump.should.have.stdout(
- `${check} Updated package.json to 1.2.4-alpha.0\n`
+ expect(cli).to.have.stdout(
+ `${check} Updated package.json to 1.2.4-alpha.1\n`
);
- files.json("package.json").should.deep.equal({ version: "1.2.4-alpha.0" });
+ expect(files.json("package.json")).to.deep.equal({ version: "1.2.4-alpha.1" });
});
+
+ it("should error if there is no existing version number", () => {
+ files.create("package.json", { name: "my-app" });
+ files.create("bower.json", { version: "" });
+ files.create("component.json", { version: 0 });
+
+ let cli = bump("prepatch *.json");
+
+ expect(cli).to.have.stdout("");
+ expect(cli).to.have.stderr("Unable to determine the current version number. Checked bower.json, component.json, package.json.\n");
+ expect(cli).to.have.exitCode(1);
+
+ expect(files.json("package.json")).to.deep.equal({ name: "my-app" });
+ expect(files.json("bower.json")).to.deep.equal({ version: "" });
+ expect(files.json("component.json")).to.deep.equal({ version: 0 });
+ });
+
});
diff --git a/test/specs/prerelease.spec.js b/test/specs/prerelease.spec.js
index e5f09be..fce20fa 100644
--- a/test/specs/prerelease.spec.js
+++ b/test/specs/prerelease.spec.js
@@ -1,102 +1,84 @@
"use strict";
-const files = require("../fixtures/files");
-const check = require("../fixtures/check");
-const chaiExec = require("chai-exec");
+const { check, files, bump } = require("../utils");
+const { expect } = require("chai");
-describe("bump --prerelease", () => {
- it("should not increment a non-existent version number", () => {
- files.create("package.json", {});
- files.create("bower.json", { name: "my-app" });
-
- let bump = chaiExec("--prerelease");
-
- bump.stderr.should.be.empty;
- bump.stdout.should.be.empty;
- bump.should.have.exitCode(0);
-
- files.json("package.json").should.deep.equal({});
- files.json("bower.json").should.deep.equal({ name: "my-app" });
- });
-
- it("should treat empty version numbers as 0.0.0", () => {
- files.create("package.json", { version: "" });
- files.create("bower.json", { version: null });
- files.create("component.json", { version: 0 });
-
- let bump = chaiExec("--prerelease");
-
- bump.stderr.should.be.empty;
- bump.should.have.exitCode(0);
-
- bump.should.have.stdout(
- `${check} Updated package.json to 0.0.1-beta.0\n` +
- `${check} Updated bower.json to 0.0.1-beta.0\n` +
- `${check} Updated component.json to 0.0.1-beta.0\n`
- );
-
- files.json("package.json").should.deep.equal({ version: "0.0.1-beta.0" });
- files.json("bower.json").should.deep.equal({ version: "0.0.1-beta.0" });
- files.json("component.json").should.deep.equal({ version: "0.0.1-beta.0" });
- });
+describe("bump prerelease", () => {
it("should increment an all-zero version number", () => {
files.create("package.json", { version: "0.0.0" });
- let bump = chaiExec("--prerelease");
+ let cli = bump("prerelease");
- bump.stderr.should.be.empty;
- bump.should.have.exitCode(0);
+ expect(cli).to.have.stderr("");
+ expect(cli).to.have.exitCode(0);
- bump.should.have.stdout(
- `${check} Updated package.json to 0.0.1-beta.0\n`
+ expect(cli).to.have.stdout(
+ `${check} Updated package.json to 0.0.1-beta.1\n`
);
- files.json("package.json").should.deep.equal({ version: "0.0.1-beta.0" });
+ expect(files.json("package.json")).to.deep.equal({ version: "0.0.1-beta.1" });
});
it("should reset the minor and patch", () => {
files.create("package.json", { version: "1.2.3" });
- let bump = chaiExec("--prerelease");
+ let cli = bump("prerelease");
- bump.stderr.should.be.empty;
- bump.should.have.exitCode(0);
+ expect(cli).to.have.stderr("");
+ expect(cli).to.have.exitCode(0);
- bump.should.have.stdout(
- `${check} Updated package.json to 1.2.4-beta.0\n`
+ expect(cli).to.have.stdout(
+ `${check} Updated package.json to 1.2.4-beta.1\n`
);
- files.json("package.json").should.deep.equal({ version: "1.2.4-beta.0" });
+ expect(files.json("package.json")).to.deep.equal({ version: "1.2.4-beta.1" });
});
it("should reset the prerelease version", () => {
files.create("package.json", { version: "1.2.3-beta.4" });
- let bump = chaiExec("--prerelease");
+ let cli = bump("prerelease");
- bump.stderr.should.be.empty;
- bump.should.have.exitCode(0);
+ expect(cli).to.have.stderr("");
+ expect(cli).to.have.exitCode(0);
- bump.should.have.stdout(
+ expect(cli).to.have.stdout(
`${check} Updated package.json to 1.2.3-beta.5\n`
);
- files.json("package.json").should.deep.equal({ version: "1.2.3-beta.5" });
+ expect(files.json("package.json")).to.deep.equal({ version: "1.2.3-beta.5" });
});
it("should honor the --preid flag", () => {
files.create("package.json", { version: "1.2.3-beta.4" });
- let bump = chaiExec("--prerelease --preid alpha");
+ let cli = bump("prerelease --preid alpha");
- bump.stderr.should.be.empty;
- bump.should.have.exitCode(0);
+ expect(cli).to.have.stderr("");
+ expect(cli).to.have.exitCode(0);
- bump.should.have.stdout(
- `${check} Updated package.json to 1.2.3-alpha.0\n`
+ expect(cli).to.have.stdout(
+ `${check} Updated package.json to 1.2.3-alpha.1\n`
);
- files.json("package.json").should.deep.equal({ version: "1.2.3-alpha.0" });
+ expect(files.json("package.json")).to.deep.equal({ version: "1.2.3-alpha.1" });
});
+
+ it("should error if there is no existing version number", () => {
+ files.create("package.json", { name: "my-app" });
+ files.create("bower.json", { version: "" });
+ files.create("component.json", { version: 0 });
+
+ let cli = bump("prerelease *.json");
+
+ expect(cli).to.have.stdout("");
+ expect(cli).to.have.stderr("Unable to determine the current version number. Checked bower.json, component.json, package.json.\n");
+ expect(cli).to.have.exitCode(1);
+
+ expect(files.json("package.json")).to.deep.equal({ name: "my-app" });
+ expect(files.json("bower.json")).to.deep.equal({ version: "" });
+ expect(files.json("component.json")).to.deep.equal({ version: 0 });
+ });
+
});
diff --git a/test/specs/push.spec.js b/test/specs/push.spec.js
deleted file mode 100644
index d386794..0000000
--- a/test/specs/push.spec.js
+++ /dev/null
@@ -1,75 +0,0 @@
-"use strict";
-
-const mocks = require("../fixtures/mocks");
-const files = require("../fixtures/files");
-const check = require("../fixtures/check");
-const chaiExec = require("chai-exec");
-
-describe("bump --push", () => {
-
- it("should commit and push to git", () => {
- files.create("package.json", { version: "1.0.0" });
-
- let bump = chaiExec("--major --push");
-
- bump.stderr.should.be.empty;
- bump.should.have.exitCode(0);
-
- bump.should.have.stdout(
- `${check} Updated package.json to 2.0.0\n` +
- `${check} Git commit\n` +
- `${check} Git push\n`
- );
-
- let git = mocks.git();
- git.length.should.equal(2);
-
- git[0].cmd.should.equal('git commit package.json -m "release v2.0.0"');
- git[1].cmd.should.equal("git push");
- });
-
- it("should push all files", () => {
- files.create("package.json", { version: "1.0.0" });
-
- let bump = chaiExec("--minor --push --all");
-
- bump.stderr.should.be.empty;
- bump.should.have.exitCode(0);
-
- bump.should.have.stdout(
- `${check} Updated package.json to 1.1.0\n` +
- `${check} Git commit\n` +
- `${check} Git push\n`
- );
-
- let git = mocks.git();
- git.length.should.equal(2);
-
- git[0].cmd.should.equal('git commit -a -m "release v1.1.0"');
- git[1].cmd.should.equal("git push");
- });
-
- it("should push git tags", () => {
- files.create("package.json", { version: "1.0.0" });
-
- let bump = chaiExec("--premajor --tag --push");
-
- bump.stderr.should.be.empty;
- bump.should.have.exitCode(0);
-
- bump.should.have.stdout(
- `${check} Updated package.json to 2.0.0-beta.0\n` +
- `${check} Git commit\n` +
- `${check} Git tag\n` +
- `${check} Git push\n`
- );
-
- let git = mocks.git();
- git.length.should.equal(4);
-
- git[0].cmd.should.equal('git commit package.json -m "release v2.0.0-beta.0"');
- git[1].cmd.should.equal("git tag -a v2.0.0-beta.0 -m 2.0.0-beta.0");
- git[2].cmd.should.equal("git push");
- git[3].cmd.should.equal("git push --tags");
- });
-});
diff --git a/test/specs/release.spec.js b/test/specs/release.spec.js
new file mode 100644
index 0000000..8588b82
--- /dev/null
+++ b/test/specs/release.spec.js
@@ -0,0 +1,152 @@
+"use strict";
+
+const { check, files, bump } = require("../utils");
+const { expect } = require("chai");
+
+describe("bump [version]", () => {
+
+ it("should accept an #.#.# version number", () => {
+ files.create("package.json", { version: "1.0.0" });
+
+ let cli = bump("123.45.678");
+
+ expect(cli).to.have.stderr("");
+ expect(cli).to.have.exitCode(0);
+
+ expect(cli).to.have.stdout(
+ `${check} Updated package.json to 123.45.678\n`
+ );
+
+ expect(files.json("package.json")).to.deep.equal({ version: "123.45.678" });
+ });
+
+ it("should accept an #.#.# version number that's all zeroes", () => {
+ files.create("package.json", { version: "1.0.0" });
+
+ let cli = bump("0.0.0");
+
+ expect(cli).to.have.stderr("");
+ expect(cli).to.have.exitCode(0);
+
+ expect(cli).to.have.stdout(
+ `${check} Updated package.json to 0.0.0\n`
+ );
+
+ expect(files.json("package.json")).to.deep.equal({ version: "0.0.0" });
+ });
+
+ it("should accept an #.#.#-X version number", () => {
+ files.create("package.json", { version: "1.0.0" });
+
+ let cli = bump("123.45.678-beta");
+
+ expect(cli).to.have.stderr("");
+ expect(cli).to.have.exitCode(0);
+
+ expect(cli).to.have.stdout(
+ `${check} Updated package.json to 123.45.678-beta\n`
+ );
+
+ expect(files.json("package.json")).to.deep.equal({ version: "123.45.678-beta" });
+ });
+
+ it("should accept an #.#.#-# version number", () => {
+ files.create("package.json", { version: "1.0.0" });
+
+ let cli = bump("123.45.678-910");
+
+ expect(cli).to.have.stderr("");
+ expect(cli).to.have.exitCode(0);
+
+ expect(cli).to.have.stdout(
+ `${check} Updated package.json to 123.45.678-910\n`
+ );
+
+ expect(files.json("package.json")).to.deep.equal({ version: "123.45.678-910" });
+ });
+
+ it("should accept an #.#.#-X.# version number", () => {
+ files.create("package.json", { version: "1.0.0" });
+
+ let cli = bump("123.45.678-beta.910");
+
+ expect(cli).to.have.stderr("");
+ expect(cli).to.have.exitCode(0);
+
+ expect(cli).to.have.stdout(
+ `${check} Updated package.json to 123.45.678-beta.910\n`
+ );
+
+ expect(files.json("package.json")).to.deep.equal({ version: "123.45.678-beta.910" });
+ });
+
+ it("should accept an #.#.#-#.# version number", () => {
+ files.create("package.json", { version: "1.0.0" });
+
+ let cli = bump("123.45.678-987.654");
+
+ expect(cli).to.have.stderr("");
+ expect(cli).to.have.exitCode(0);
+
+ expect(cli).to.have.stdout(
+ `${check} Updated package.json to 123.45.678-987.654\n`
+ );
+
+ expect(files.json("package.json")).to.deep.equal({ version: "123.45.678-987.654" });
+ });
+
+ it("should accept an #.#.#-X.X version number", () => {
+ files.create("package.json", { version: "1.0.0" });
+
+ let cli = bump("123.45.678-alpha.beta");
+
+ expect(cli).to.have.stderr("");
+ expect(cli).to.have.exitCode(0);
+
+ expect(cli).to.have.stdout(
+ `${check} Updated package.json to 123.45.678-alpha.beta\n`
+ );
+
+ expect(files.json("package.json")).to.deep.equal({ version: "123.45.678-alpha.beta" });
+ });
+
+ it("should not be affected by the --preid flag", () => {
+ files.create("package.json", { version: "1.0.0" });
+
+ let cli = bump("1.2.3-beta.1 --preid alpha");
+
+ expect(cli).to.have.stderr("");
+ expect(cli).to.have.exitCode(0);
+
+ expect(cli).to.have.stdout(
+ `${check} Updated package.json to 1.2.3-beta.1\n`
+ );
+
+ expect(files.json("package.json")).to.deep.equal({ version: "1.2.3-beta.1" });
+ });
+
+ it("should error if there's no current version number", () => {
+ files.create("package.json", { version: "" });
+
+ let cli = bump("1.2.3");
+
+ expect(cli).to.have.stdout("");
+ expect(cli).to.have.exitCode(1);
+ expect(cli).to.have.stderr("Unable to determine the current version number. Checked package.json.\n");
+
+ expect(files.json("package.json")).to.deep.equal({ version: "" });
+ });
+
+ it("should error on an X.X.X version number", () => {
+ files.create("package.json", { version: "1.0.0" });
+
+ let cli = bump("A.B.C");
+
+ expect(cli).to.have.stdout("");
+ expect(cli).to.have.stderr("Could not find file: A.B.C.\n");
+ expect(cli).to.have.exitCode(1);
+
+ expect(files.json("package.json")).to.deep.equal({ version: "1.0.0" });
+ });
+
+});
diff --git a/test/specs/tag.spec.js b/test/specs/tag.spec.js
deleted file mode 100644
index f77f4f5..0000000
--- a/test/specs/tag.spec.js
+++ /dev/null
@@ -1,98 +0,0 @@
-"use strict";
-
-const mocks = require("../fixtures/mocks");
-const files = require("../fixtures/files");
-const check = require("../fixtures/check");
-const chaiExec = require("chai-exec");
-
-describe("bump --tag", () => {
-
- it("should add a git tag", () => {
- files.create("package.json", { version: "1.0.0" });
-
- let bump = chaiExec("--major --commit --tag");
-
- bump.stderr.should.be.empty;
- bump.should.have.exitCode(0);
-
- bump.should.have.stdout(
- `${check} Updated package.json to 2.0.0\n` +
- `${check} Git commit\n` +
- `${check} Git tag\n`
- );
-
- let git = mocks.git();
- git.length.should.equal(2);
-
- git[0].cmd.should.equal('git commit package.json -m "release v2.0.0"');
- git[1].cmd.should.equal("git tag -a v2.0.0 -m 2.0.0");
- });
-
- it("should add a git tag, even if --commit is not specified", () => {
- files.create("package.json", { version: "1.0.0" });
-
- let bump = chaiExec("--minor --tag");
-
- bump.stderr.should.be.empty;
- bump.should.have.exitCode(0);
-
- bump.should.have.stdout(
- `${check} Updated package.json to 1.1.0\n` +
- `${check} Git commit\n` +
- `${check} Git tag\n`
- );
-
- let git = mocks.git();
- git.length.should.equal(2);
-
- git[0].cmd.should.equal('git commit package.json -m "release v1.1.0"');
- git[1].cmd.should.equal("git tag -a v1.1.0 -m 1.1.0");
- });
-
- it("should tag all files", () => {
- files.create("package.json", { version: "1.0.0" });
-
- let bump = chaiExec("--patch --tag --all");
-
- bump.stderr.should.be.empty;
- bump.should.have.exitCode(0);
-
- bump.should.have.stdout(
- `${check} Updated package.json to 1.0.1\n` +
- `${check} Git commit\n` +
- `${check} Git tag\n`
- );
-
- let git = mocks.git();
- git.length.should.equal(2);
-
- git[0].cmd.should.equal('git commit -a -m "release v1.0.1"');
- git[1].cmd.should.equal("git tag -a v1.0.1 -m 1.0.1");
- });
-
- it("should push git tags", () => {
- files.create("package.json", { version: "1.0.0" });
- files.create("bower.json", { version: "1.0.0" });
-
- let bump = chaiExec("--premajor --tag --push");
-
- bump.stderr.should.be.empty;
- bump.should.have.exitCode(0);
-
- bump.should.have.stdout(
- `${check} Updated package.json to 2.0.0-beta.0\n` +
- `${check} Updated bower.json to 2.0.0-beta.0\n` +
- `${check} Git commit\n` +
- `${check} Git tag\n` +
- `${check} Git push\n`
- );
-
- let git = mocks.git();
- git.length.should.equal(4);
-
- git[0].cmd.should.equal('git commit package.json bower.json -m "release v2.0.0-beta.0"');
- git[1].cmd.should.equal("git tag -a v2.0.0-beta.0 -m 2.0.0-beta.0");
- git[2].cmd.should.equal("git push");
- git[3].cmd.should.equal("git push --tags");
- });
-});
diff --git a/test/specs/version-hooks.spec.js b/test/specs/version-hooks.spec.js
deleted file mode 100644
index 58d7f47..0000000
--- a/test/specs/version-hooks.spec.js
+++ /dev/null
@@ -1,140 +0,0 @@
-"use strict";
-
-const mocks = require("../fixtures/mocks");
-const files = require("../fixtures/files");
-const check = require("../fixtures/check");
-const chaiExec = require("chai-exec");
-
-describe("npm version hooks", () => {
- if (process.platform === "win32" && process.env.CI) {
- // Spawning NPM fails on Windows due to a bug in NYC (actually in its dependency, spawn-wrap)
- // So skip these tests until this bug is fixed: https://github.com/istanbuljs/nyc/issues/760
- return;
- }
-
- it("should run the preversion script before updating the version number", () => {
- files.create("package.json", {
- version: "1.0.0",
- scripts: {
- preversion: "echo hello world",
- },
- });
-
- let bump = chaiExec("--major");
-
- bump.stderr.should.be.empty;
- bump.should.have.exitCode(0);
-
- bump.should.have.stdout(
- `${check} Updated package.json to 2.0.0\n`
- );
-
- let npm = mocks.npm();
- npm.length.should.equal(1);
-
- npm[0].cmd.should.equal("npm run preversion");
- npm[0].version.should.equal("1.0.0");
- });
-
- it("should run the version script after updating the version number", () => {
- files.create("package.json", {
- version: "1.0.0",
- scripts: {
- version: "echo hello world",
- },
- });
-
- let bump = chaiExec("--major");
-
- bump.stderr.should.be.empty;
- bump.should.have.exitCode(0);
-
- bump.should.have.stdout(
- `${check} Updated package.json to 2.0.0\n`
- );
-
- let npm = mocks.npm();
- npm.length.should.equal(1);
-
- npm[0].cmd.should.equal("npm run version");
- npm[0].version.should.equal("2.0.0");
- });
-
- it("should run the postversion script after updating the version number", () => {
- files.create("package.json", {
- version: "1.0.0",
- scripts: {
- postversion: "echo hello world",
- },
- });
-
- let bump = chaiExec("--major");
-
- bump.stderr.should.be.empty;
- bump.should.have.exitCode(0);
-
- bump.should.have.stdout(
- `${check} Updated package.json to 2.0.0\n`
- );
-
- let npm = mocks.npm();
- npm.length.should.equal(1);
-
- npm[0].cmd.should.equal("npm run postversion");
- npm[0].version.should.equal("2.0.0");
- });
-
- it("should run all the version scripts and git commands in the correct order", () => {
- files.create("package.json", {
- version: "1.0.0",
- scripts: {
- preversion: "echo hello world",
- version: "echo hello world",
- postversion: "echo hello world",
- },
- });
-
- let bump = chaiExec("--major --commit --tag --push");
-
- bump.stderr.should.be.empty;
- bump.should.have.exitCode(0);
-
- bump.should.have.stdout(
- `${check} Updated package.json to 2.0.0\n` +
- `${check} Git commit\n` +
- `${check} Git tag\n` +
- `${check} Git push\n`
- );
-
- let bin = mocks.all();
- bin.length.should.equal(7);
-
- // The preversion script runs before anything
- bin[0].cmd.should.equal("npm run preversion");
- bin[0].version.should.equal("1.0.0");
-
- // The version script runs after the version has been updated,
- bin[1].cmd.should.equal("npm run version");
- bin[1].version.should.equal("2.0.0");
-
- // Git commit happens after the version has been updated
- bin[2].cmd.should.equal('git commit package.json -m "release v2.0.0"');
- bin[2].version.should.equal("2.0.0");
-
- // Git tag happens after the version has been updated
- bin[3].cmd.should.equal("git tag -a v2.0.0 -m 2.0.0");
- bin[3].version.should.equal("2.0.0");
-
- // The postversion script runs AFTER "git commit" and "git tag", but BEFORE "git push"
- bin[4].cmd.should.equal("npm run postversion");
- bin[4].version.should.equal("2.0.0");
-
- // Git push happens after everything else
- bin[5].cmd.should.equal("git push");
- bin[5].version.should.equal("2.0.0");
-
- bin[6].cmd.should.equal("git push --tags");
- bin[6].version.should.equal("2.0.0");
- });
-
-});
diff --git a/test/fixtures/setup-chai.js b/test/utils/bump.js
similarity index 88%
rename from test/fixtures/setup-chai.js
rename to test/utils/bump.js
index f753718..0a96360 100644
--- a/test/fixtures/setup-chai.js
+++ b/test/utils/bump.js
@@ -4,7 +4,6 @@ const chai = require("chai");
const chaiExec = require("chai-exec");
chai.use(chaiExec);
-chai.should();
chaiExec.defaults = {
command: "node",
@@ -13,3 +12,5 @@ chaiExec.defaults = {
cwd: "test/.tmp",
},
};
+
+module.exports = chaiExec;
diff --git a/test/fixtures/files/index.js b/test/utils/files.js
similarity index 67%
rename from test/fixtures/files/index.js
rename to test/utils/files.js
index f8e18ba..57a86c3 100644
--- a/test/fixtures/files/index.js
+++ b/test/utils/files.js
@@ -2,9 +2,9 @@
const fs = require("fs");
const path = require("path");
+const mkdirp = require("mkdirp");
-const srcDir = __dirname;
-const destDir = path.join(__dirname, "../../.tmp");
+const tempDir = path.resolve(__dirname, "..", ".tmp");
const files = module.exports = {
/**
@@ -17,17 +17,12 @@ const files = module.exports = {
if (typeof contents === "object") {
contents = JSON.stringify(contents, null, 2);
}
- fs.writeFileSync(path.join(destDir, name), contents);
- },
- /**
- * Copies a file from the "test/fixtures/files" directory to the "test/.tmp" directory.
- *
- * @param {string} name - The name of the file to copy (e.g. "README.md", "script1.js")
- */
- copy (name) {
- let contents = fs.readFileSync(path.join(srcDir, name), "utf8");
- files.create(name, contents);
+ let filePath = path.join(tempDir, name);
+ let dirPath = path.dirname(filePath);
+
+ mkdirp.sync(dirPath);
+ fs.writeFileSync(filePath, contents);
},
/**
@@ -38,7 +33,7 @@ const files = module.exports = {
*/
text (name) {
try {
- return fs.readFileSync(path.join(destDir, name), "utf8");
+ return fs.readFileSync(path.join(tempDir, name), "utf8");
}
catch (e) {
return "";
diff --git a/test/utils/fixtures.js b/test/utils/fixtures.js
new file mode 100644
index 0000000..4f32a2c
--- /dev/null
+++ b/test/utils/fixtures.js
@@ -0,0 +1,13 @@
+"use strict";
+
+const fs = require("fs");
+const path = require("path");
+
+const filesDir = path.resolve("test", "fixtures", "files");
+
+module.exports = {
+ license: fs.readFileSync(path.join(filesDir, "LICENSE"), "utf8"),
+ readme: fs.readFileSync(path.join(filesDir, "README.md"), "utf8"),
+ script1: fs.readFileSync(path.join(filesDir, "script1.js"), "utf8"),
+ script2: fs.readFileSync(path.join(filesDir, "script2.js"), "utf8"),
+};
diff --git a/test/utils/index.js b/test/utils/index.js
new file mode 100644
index 0000000..681161a
--- /dev/null
+++ b/test/utils/index.js
@@ -0,0 +1,10 @@
+"use strict";
+
+module.exports = {
+ bump: require("./bump"),
+ check: require("./symbols").check,
+ info: require("./symbols").info,
+ files: require("./files"),
+ fixtures: require("./fixtures"),
+ mocks: require("./mocks"),
+};
diff --git a/test/fixtures/mocks/index.js b/test/utils/mocks.js
similarity index 66%
rename from test/fixtures/mocks/index.js
rename to test/utils/mocks.js
index 15a3049..27c5ee7 100644
--- a/test/fixtures/mocks/index.js
+++ b/test/utils/mocks.js
@@ -1,35 +1,41 @@
"use strict";
-const fs = require("fs");
-const path = require("path");
-const files = require("../files");
-
-// Ensure that the mock binaries are executable
-fs.chmodSync(path.join(__dirname, "git"), "0777");
-fs.chmodSync(path.join(__dirname, "npm"), "0777");
-
-// Inject our this directory path into the PATH variable,
-// so that version-bump-prompt runs our mock `git` and `npm` binaries
-// instead of the real ones.
-let otherPaths = getEnvPath();
-process.env.PATH = __dirname + path.delimiter + otherPaths; // eslint-disable-line no-path-concat
+const files = require("./files");
const mocks = module.exports = {
+ /**
+ * Returns the `git` commands that were executed.
+ *
+ * @returns {string[]}
+ */
+ git () {
+ return mocks.gitDetails().map(mock => mock.cmd);
+ },
+
/**
* Returns information about each time `git` was executed.
*
* @returns {object[]}
*/
- git () {
+ gitDetails () {
return mocks.all().filter(mock => mock.bin === "git");
},
+ /**
+ * Returns the `npm` commands that were executed.
+ *
+ * @returns {string[]}
+ */
+ npm () {
+ return mocks.npmDetails().map(mock => mock.cmd);
+ },
+
/**
* Returns information about each time `npm` was executed.
*
* @returns {object[]}
*/
- npm () {
+ npmDetails () {
return mocks.all().filter(mock => mock.bin === "npm");
},
@@ -56,6 +62,8 @@ const mocks = module.exports = {
array.push({
bin,
+ args,
+
// Record the command that was executed
cmd: bin + " " + args.map(quoteArgs).join(" "),
@@ -68,20 +76,6 @@ const mocks = module.exports = {
},
};
-
-/**
- * Returns the PATH environment variable, case-insensitively
- */
-function getEnvPath () {
- let keys = Object.keys(process.env);
-
- for (let key of keys) {
- if (key.toUpperCase() === "PATH") {
- return process.env[key];
- }
- }
-}
-
/**
* Adds quotes around an argument if it contains whitespace characters
*
diff --git a/test/utils/symbols.js b/test/utils/symbols.js
new file mode 100644
index 0000000..0d7873c
--- /dev/null
+++ b/test/utils/symbols.js
@@ -0,0 +1,18 @@
+"use strict";
+
+const stripAnsi = require("strip-ansi");
+const logSymbols = require("log-symbols");
+
+module.exports = {
+ /**
+ * The check symbol (✔ on Mac/Linux, √ on Windows)
+ * with the ANSI color sequences removed
+ */
+ check: stripAnsi(logSymbols.success),
+
+ /**
+ * The check symbol (ℹ on Mac/Linux, i on Windows)
+ * with the ANSI color sequences removed
+ */
+ info: stripAnsi(logSymbols.info),
+};
diff --git a/tsconfig.json b/tsconfig.json
new file mode 100644
index 0000000..e5405ff
--- /dev/null
+++ b/tsconfig.json
@@ -0,0 +1,31 @@
+{
+ "compilerOptions": {
+ "target": "esnext",
+ "module": "commonjs",
+ "moduleResolution": "node",
+
+ "outDir": "lib",
+ "sourceMap": true,
+ "declaration": true,
+
+ "newLine": "LF",
+ "forceConsistentCasingInFileNames": true,
+ "noFallthroughCasesInSwitch": true,
+ "noImplicitAny": true,
+ "noImplicitThis": true,
+ "strictBindCallApply": true,
+ "strictNullChecks": true,
+ "strictPropertyInitialization": true,
+ "stripInternal": true,
+
+ "plugins": [
+ { "name": "typescript-tslint-plugin" }
+ ]
+ },
+ "include": [
+ "src/**/*.ts"
+ ],
+ "exclude": [
+ "node_modules"
+ ]
+}
diff --git a/tslint.yaml b/tslint.yaml
new file mode 100644
index 0000000..84827da
--- /dev/null
+++ b/tslint.yaml
@@ -0,0 +1,8 @@
+# TSLint config
+# https://palantir.github.io/tslint/usage/configuration/
+# https://github.com/JS-DevTools/tslint-modular
+
+extends:
+ - tslint-modular/best-practices
+ - tslint-modular/style
+ - tslint-modular/node