Compare commits

...

15 Commits

Author SHA1 Message Date
e0f208ba41 8.0.5 2017-08-02 13:20:05 +02:00
d2cf4346d4 update dependencies 2017-08-02 13:20:01 +02:00
b769dcae4f 8.0.4 2017-07-31 15:43:36 +02:00
7b58535dda update to latest version of smartsystem 2017-07-31 15:43:31 +02:00
f16103a632 8.0.3 2017-07-31 14:43:56 +02:00
befed099c5 update highlighting 2017-07-31 14:43:50 +02:00
6c0fa380a9 remove old Changelog 2017-07-31 14:39:46 +02:00
22de2c784f 8.0.2 2017-07-31 14:36:38 +02:00
e8fe4f1720 update docs and description 2017-07-31 14:36:33 +02:00
d7443bbf17 8.0.1 2017-07-30 22:39:55 +02:00
c4668bc0a6 add docs 2017-07-30 22:39:42 +02:00
bc489b6bf3 8.0.0 2017-07-30 22:27:59 +02:00
e2d0a7a939 update to more favorable testfile loading approach 2017-07-30 22:27:51 +02:00
0f5e451e60 7.2.10 2017-07-28 17:33:31 +02:00
3595bf3590 fix module testimport recognition 2017-07-28 17:33:28 +02:00
10 changed files with 124 additions and 2954 deletions

View File

@ -1,11 +0,0 @@
Please view this file on the master branch, on stable branches it's out of date.
v 6.0.0 (released)
- remove TypeDoc, please look at npmpage
- check package.json
v 7.0.0
- switch from mocha to tap
- run tests in SubProcesses with coverage
- improve ES6 handling
- add smartanalytics

12
dist/mod02/index.js vendored
View File

@ -30,15 +30,6 @@ let tap = function (configArg) {
*/
let testableFilesSmartstream = new plugins.smartstream.Smartstream([
plugins.smartgulp.src([plugins.path.join(paths.cwd, './ts/**/*.ts')]),
plugins.gulpFunction.forEach((fileArg) => __awaiter(this, void 0, void 0, function* () {
let stringToModify = fileArg.contents.toString();
let testRegex = /\/\/\smodule\stestimport\nimport[a-zA-Z0-9\*\s]*\sfrom\s'(..\/ts\/index)'/;
let replacer = (match, group1, offset, completeString) => {
return match.replace(group1, '../dist/index');
};
fileArg.setContentsFromString(stringToModify.replace(testRegex, replacer));
return fileArg;
})),
plugins.gulpSourcemaps.init(),
plugins.gulpTypeScript({
target: 'ES5',
@ -46,9 +37,6 @@ let tap = function (configArg) {
experimentalDecorators: true,
lib: ['DOM', 'ES5', 'ES2015.Promise', 'ES2015.Generator', 'ES2015.Iterable']
}),
plugins.gulpFunction.forEach((file) => __awaiter(this, void 0, void 0, function* () {
file.path = file.path.replace(paths.tsDir, paths.distDir);
})),
plugins.gulpSourcemaps.write(),
npmtsTapBuffer.pipeTestableFiles(),
plugins.smartstream.cleanPipe()

9
docs/changelog.md Normal file
View File

@ -0,0 +1,9 @@
# Changelog
## 2017-07-30: Version 7.x.x -> 8.x.x
Testfiles in ./test/ can now import files directly from the ts dir:
```javascript
// ./test/test.ts
import * as myModule from '../ts/index
```

38
docs/getstarted.md Normal file
View File

@ -0,0 +1,38 @@
---
name: Get Started
description: learn how to quickly write npm TypeScript modules
---
# Get Started with NPMTS
and learn how to quickly write npm TypeScript modules
## Step1: Install the tools
To use npmts install it using npm or yarn:
```sh
npm install -g npmts # install with npm
yarn global add npmts # install with yarn
```
For the purpose of getting started quickly please also install **gitzone**.
It'll proovide awesome scaffolding for new npmts maintained modules and also updates them later on.
```sh
npm install -g gitzone # install with npm
yarn global add gitzone # install with yarn
```
You can make sure npmts and gitzone are installed correctly by typing `npmts -v && gitzone -v`.
## Scaffold a new module
To scaffold a new module type
```shell
gitzone template npm
```
This will run you through a series of question to get gitzone to know the specifics of your module.
Enter all information accordingly.
## Run NPMTS for the first time

View File

@ -1,8 +1,9 @@
---
name: Start
name: Index
description: best practice npm TypeScript modules
---
# npmts
Write npm modules with TypeScript without hassle. TypeScript ready. Fully ES6.
best practice npm TypeScript modules
## Availabililty
[![npm](https://gitzone.gitlab.io/assets/repo-button-npm.svg)](https://www.npmjs.com/package/npmts)

2826
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -1,7 +1,7 @@
{
"name": "npmts",
"version": "7.2.9",
"description": "Write npm modules with TypeScript without hassle. TypeScript ready. Fully ES6.",
"version": "8.0.5",
"description": "best practice npm TypeScript modules",
"main": "dist/index.js",
"bin": {
"npmts": "assets/cliNpmts.js"
@ -51,14 +51,14 @@
"smartcli": "^2.0.7",
"smartcov": "^1.0.2",
"smarterror": "^1.0.3",
"smartfile": "^4.2.17",
"smartfile": "^4.2.20",
"smartgulp": "^1.0.6",
"smartpath": "^3.2.8",
"smartq": "^1.1.6",
"smartstream": "^1.0.10",
"smartstring": "^2.0.24",
"smartsystem": "^1.0.18",
"tapbuffer": "^1.0.24",
"smartsystem": "^2.0.2",
"tapbuffer": "^1.0.29",
"through2": "^2.0.3",
"tsn": "^2.0.15",
"typescript": "^2.4.2",

View File

@ -1,5 +1,5 @@
# npmts
Write npm modules with TypeScript without hassle. TypeScript ready. Fully ES6.
best practice npm TypeScript modules
## Availabililty
[![npm](https://gitzone.gitlab.io/assets/repo-button-npm.svg)](https://www.npmjs.com/package/npmts)
@ -38,6 +38,9 @@ For more information about how to best write tap tests check out the [tapbundle
This works on your machine and in CI. There is a prebuild docker image available that includes npmts to make CI a breeze:
[hosttoday/ht-docker-node:npmts on Dockerhub](https://hub.docker.com/r/hosttoday/ht-docker-node/)
## Changelog
For breaking changes please see the [changelog](https://gitzone.gitlab.io/npmts/changelog.html).
For further information read the linked docs at the top of this README.
> MIT licensed | **©** [Lossless GmbH](https://lossless.gmbh)

View File

@ -29,15 +29,6 @@ let tap = function (configArg: INpmtsConfig) {
*/
let testableFilesSmartstream = new plugins.smartstream.Smartstream([
plugins.smartgulp.src([ plugins.path.join(paths.cwd, './ts/**/*.ts') ]),
plugins.gulpFunction.forEach(async (fileArg: Smartfile) => {
let stringToModify = fileArg.contents.toString()
let testRegex = /\/\/\smodule\stestimport\nimport[a-zA-Z0-9\*\s]*\sfrom\s'(..\/ts\/index)'/
let replacer = (match, group1, offset, completeString: string) => {
return match.replace(group1, '../dist/index')
}
fileArg.setContentsFromString(stringToModify.replace(testRegex, replacer))
return fileArg
}),
plugins.gulpSourcemaps.init(),
plugins.gulpTypeScript({
target: 'ES5',
@ -45,9 +36,6 @@ let tap = function (configArg: INpmtsConfig) {
experimentalDecorators: true,
lib: [ 'DOM', 'ES5', 'ES2015.Promise', 'ES2015.Generator', 'ES2015.Iterable' ]
}),
plugins.gulpFunction.forEach(async file => {
file.path = file.path.replace(paths.tsDir, paths.distDir)
}),
plugins.gulpSourcemaps.write(),
npmtsTapBuffer.pipeTestableFiles(),
plugins.smartstream.cleanPipe()

150
yarn.lock
View File

@ -33,8 +33,8 @@
"@types/chai" "*"
"@types/chai@*":
version "4.0.1"
resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.0.1.tgz#37fea779617cfec3fd2b19a0247e8bbdd5133bf6"
version "4.0.2"
resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.0.2.tgz#cce9666f5ee2fa27ffd505d2dfaf53bb02ed2584"
"@types/chai@^3.4.35":
version "3.5.2"
@ -56,9 +56,9 @@
dependencies:
"@types/node" "*"
"@types/fs-extra@3.x.x":
version "3.0.3"
resolved "https://registry.yarnpkg.com/@types/fs-extra/-/fs-extra-3.0.3.tgz#1d66eb670ebf657e57c0fda014df340c19d8aa0c"
"@types/fs-extra@4.x.x":
version "4.0.0"
resolved "https://registry.yarnpkg.com/@types/fs-extra/-/fs-extra-4.0.0.tgz#1dd742ad5c9bce308f7a52d02ebc01421bc9102f"
dependencies:
"@types/node" "*"
@ -80,13 +80,9 @@
version "2.0.29"
resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-2.0.29.tgz#5002e14f75e2d71e564281df0431c8c1b4a2a36a"
"@types/mocha@^2.2.31":
version "2.2.41"
resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-2.2.41.tgz#e27cf0817153eb9f2713b2d3f6c68f1e1c3ca608"
"@types/node@*", "@types/node@^8.0.10":
version "8.0.17"
resolved "https://registry.yarnpkg.com/@types/node/-/node-8.0.17.tgz#677bc8c118cfb76013febb62ede1f31d2c7222a1"
version "8.0.19"
resolved "https://registry.yarnpkg.com/@types/node/-/node-8.0.19.tgz#e46e2b0243de7d03f15b26b45c59ebb84f657a4e"
"@types/promises-a-plus@*":
version "0.0.27"
@ -106,9 +102,9 @@
dependencies:
"@types/node" "*"
"@types/source-map-support@^0.2.28":
version "0.2.28"
resolved "https://registry.yarnpkg.com/@types/source-map-support/-/source-map-support-0.2.28.tgz#ce6497dfa9c9fbd21a753955b4a51d8993d759dd"
"@types/source-map-support@^0.4.0":
version "0.4.0"
resolved "https://registry.yarnpkg.com/@types/source-map-support/-/source-map-support-0.4.0.tgz#a62a1866614af68c888173c001481f242aaf148b"
dependencies:
"@types/node" "*"
@ -793,10 +789,10 @@ duplexer2@0.0.2:
readable-stream "~1.1.9"
duplexify@^3.2.0:
version "3.5.0"
resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.5.0.tgz#1aa773002e1578457e9d9d4a50b0ccaaebcbd604"
version "3.5.1"
resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.5.1.tgz#4e1516be68838bc90a49994f0b39a6e5960befcd"
dependencies:
end-of-stream "1.0.0"
end-of-stream "^1.0.0"
inherits "^2.0.1"
readable-stream "^2.0.0"
stream-shift "^1.0.0"
@ -815,11 +811,11 @@ ecc-jsbn@~0.1.1:
dependencies:
jsbn "~0.1.0"
end-of-stream@1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.0.0.tgz#d4596e702734a93e40e9af864319eabd99ff2f0e"
end-of-stream@^1.0.0:
version "1.4.0"
resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.0.tgz#7a90d833efda6cfa6eac0f4949dbb0fad3a63206"
dependencies:
once "~1.3.0"
once "^1.4.0"
error-ex@^1.2.0:
version "1.3.1"
@ -845,8 +841,8 @@ es-to-primitive@^1.1.1:
is-symbol "^1.0.1"
es5-ext@^0.10.12, es5-ext@^0.10.13, es5-ext@^0.10.14, es5-ext@^0.10.9, es5-ext@~0.10.14, es5-ext@~0.10.2:
version "0.10.24"
resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.24.tgz#a55877c9924bc0c8d9bd3c2cbe17495ac1709b14"
version "0.10.26"
resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.26.tgz#51b2128a531b70c4f6764093a73cbebb82186372"
dependencies:
es6-iterator "2"
es6-symbol "~3.1"
@ -1065,9 +1061,9 @@ fs-extra@^2.0.0, fs-extra@^2.1.2:
graceful-fs "^4.1.2"
jsonfile "^2.1.0"
fs-extra@^3.0.1:
version "3.0.1"
resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-3.0.1.tgz#3794f378c58b342ea7dbbb23095109c4b3b62291"
fs-extra@^4.0.0:
version "4.0.1"
resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-4.0.1.tgz#7fc0c6c8957f983f57f306a24e5b9ddd8d0dd880"
dependencies:
graceful-fs "^4.1.2"
jsonfile "^3.0.0"
@ -1179,7 +1175,7 @@ glob@^5.0.15, glob@^5.0.3:
once "^1.3.0"
path-is-absolute "^1.0.0"
glob@^7.0.0, glob@^7.0.5, glob@^7.1.1:
glob@^7.0.0, glob@^7.0.5, glob@^7.1.1, glob@^7.1.2:
version "7.1.2"
resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15"
dependencies:
@ -1595,9 +1591,9 @@ js-tokens@^3.0.0:
version "3.0.2"
resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b"
js-yaml@3.x, js-yaml@^3.2.7, js-yaml@^3.3.1, js-yaml@^3.4.2, js-yaml@^3.7.0, js-yaml@^3.8.3:
version "3.9.0"
resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.9.0.tgz#4ffbbf25c2ac963b8299dc74da7e3740de1c18ce"
js-yaml@3.x, js-yaml@^3.2.7, js-yaml@^3.3.1, js-yaml@^3.4.2, js-yaml@^3.7.0, js-yaml@^3.9.1:
version "3.9.1"
resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.9.1.tgz#08775cebdfdd359209f0d2acd383c8f86a6904a0"
dependencies:
argparse "^1.0.7"
esprima "^4.0.0"
@ -1860,8 +1856,8 @@ map-obj@^1.0.0, map-obj@^1.0.1:
resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d"
mathjs@^3.10.3:
version "3.14.2"
resolved "https://registry.yarnpkg.com/mathjs/-/mathjs-3.14.2.tgz#bb79b7dc878b7f586ce408ab067a9a42db2e7a2d"
version "3.15.0"
resolved "https://registry.yarnpkg.com/mathjs/-/mathjs-3.15.0.tgz#520390fc6447f8e0e580b34a43427691c9ce671e"
dependencies:
complex.js "2.0.4"
decimal.js "7.2.3"
@ -2110,18 +2106,12 @@ object.omit@^2.0.0:
for-own "^0.1.4"
is-extendable "^0.1.1"
once@1.x, once@^1.3.0, once@^1.3.3:
once@1.x, once@^1.3.0, once@^1.3.3, once@^1.4.0:
version "1.4.0"
resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
dependencies:
wrappy "1"
once@~1.3.0:
version "1.3.3"
resolved "https://registry.yarnpkg.com/once/-/once-1.3.3.tgz#b2e261557ce4c314ec8304f3fa82663e4297ca20"
dependencies:
wrappy "1"
onetime@^1.0.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/onetime/-/onetime-1.1.0.tgz#a1f7838f8314c516f05ecefcbc4ccfe04b4ed789"
@ -2728,21 +2718,20 @@ smartfile@4.1.6:
vinyl "^2.0.1"
vinyl-file "^3.0.0"
smartfile@^4.1.4, smartfile@^4.2.15, smartfile@^4.2.17:
version "4.2.17"
resolved "https://registry.yarnpkg.com/smartfile/-/smartfile-4.2.17.tgz#9eba8f65eea7e4db51aa30562f6039815a88b125"
smartfile@^4.1.4, smartfile@^4.2.15, smartfile@^4.2.17, smartfile@^4.2.20:
version "4.2.20"
resolved "https://registry.yarnpkg.com/smartfile/-/smartfile-4.2.20.tgz#abc37c04fb7b3afea68fa295dfb80083361a8028"
dependencies:
"@types/fs-extra" "3.x.x"
"@types/fs-extra" "4.x.x"
"@types/vinyl" "^2.0.0"
fs-extra "^3.0.1"
glob "^7.1.1"
js-yaml "^3.8.3"
fs-extra "^4.0.0"
glob "^7.1.2"
js-yaml "^3.9.1"
require-reload "0.2.2"
smartpath "^3.2.8"
smartq "^1.1.1"
smartrequest "^1.0.4"
typings-global "^1.0.16"
vinyl "^2.0.2"
smartq "^1.1.6"
smartrequest "^1.0.6"
typings-global "^1.0.20"
vinyl-file "^3.0.0"
smartgulp@^1.0.6:
@ -2757,17 +2746,15 @@ smartgulp@^1.0.6:
smartstream "^1.0.8"
typings-global "^1.0.16"
smartinject@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/smartinject/-/smartinject-1.0.1.tgz#c345e8035b6c8349acda3da64ff6c684f649919a"
smartinject@^1.0.15:
version "1.0.15"
resolved "https://registry.yarnpkg.com/smartinject/-/smartinject-1.0.15.tgz#9b25e4311e92b586aab5b01cbd28f8482b3f11fe"
dependencies:
"@types/source-map-support" "^0.2.28"
"@types/through2" "^2.0.32"
smartchai "^1.0.3"
source-map-support "^0.4.11"
"@types/source-map-support" "^0.4.0"
"@types/through2" "^2.0.33"
source-map-support "^0.4.15"
through2 "^2.0.3"
typings-global "^1.0.14"
typings-test "^1.0.3"
typings-global "^1.0.20"
smartipc@^1.0.9:
version "1.0.9"
@ -2814,7 +2801,7 @@ smartq@^1.0.4, smartq@^1.1.0, smartq@^1.1.1, smartq@^1.1.6:
typings-global "^1.0.19"
util.promisify "^1.0.0"
smartrequest@^1.0.4:
smartrequest@^1.0.4, smartrequest@^1.0.6:
version "1.0.6"
resolved "https://registry.yarnpkg.com/smartrequest/-/smartrequest-1.0.6.tgz#a006454332453b0a70d38a003a29963d039a7783"
dependencies:
@ -2848,14 +2835,14 @@ smartstring@2.0.24, smartstring@^2.0.24:
js-base64 "^2.1.9"
typings-global "^1.0.14"
smartsystem@^1.0.18:
version "1.0.18"
resolved "https://registry.yarnpkg.com/smartsystem/-/smartsystem-1.0.18.tgz#f1e9a19d1a6048d3e99c5ee95e64f728147da901"
smartsystem@^2.0.2:
version "2.0.2"
resolved "https://registry.yarnpkg.com/smartsystem/-/smartsystem-2.0.2.tgz#89f94ff74cd6c5fae33d82bf0ef80233ef521215"
dependencies:
lik "^1.0.30"
smartq "^1.1.1"
systemjs "^0.20.12"
typings-global "^1.0.19"
lik "^1.0.38"
smartq "^1.1.6"
systemjs "^0.20.17"
typings-global "^1.0.20"
sntp@1.x.x:
version "1.0.9"
@ -2872,7 +2859,7 @@ source-map-resolve@^0.3.0:
source-map-url "~0.3.0"
urix "~0.1.0"
source-map-support@^0.4.11, source-map-support@^0.4.15:
source-map-support@^0.4.15:
version "0.4.15"
resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.15.tgz#03202df65c06d2bd8c7ec2362a193056fef8d3b1"
dependencies:
@ -3058,7 +3045,7 @@ symbol-observable@^1.0.1:
version "1.0.4"
resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.0.4.tgz#29bf615d4aa7121bdd898b22d4b3f9bc4e2aa03d"
systemjs@^0.20.12:
systemjs@^0.20.17:
version "0.20.17"
resolved "https://registry.yarnpkg.com/systemjs/-/systemjs-0.20.17.tgz#b3143bb7e02d2f41b9a640351a06024b7b63ae59"
@ -3086,9 +3073,9 @@ tap-parser@^5.1.0:
optionalDependencies:
readable-stream "^2"
tapbuffer@^1.0.24:
version "1.0.24"
resolved "https://registry.yarnpkg.com/tapbuffer/-/tapbuffer-1.0.24.tgz#5f6779061f3d45261cda78edcde69736c91090a3"
tapbuffer@^1.0.29:
version "1.0.29"
resolved "https://registry.yarnpkg.com/tapbuffer/-/tapbuffer-1.0.29.tgz#dbff08197a889912ea5be68ad9bfa37b6ca98dd1"
dependencies:
"@types/istanbul" "^0.4.29"
beautylog "^6.1.10"
@ -3097,12 +3084,12 @@ tapbuffer@^1.0.24:
remap-istanbul "^0.9.5"
smarterror "^1.0.3"
smartfile "^4.2.17"
smartinject "^1.0.1"
smartinject "^1.0.15"
smartipc "^1.0.9"
smartq "^1.1.6"
smartshell "^1.0.13"
tap-mocha-reporter "^3.0.6"
typings-global "^1.0.19"
typings-global "^1.0.20"
tar-pack@^3.4.0:
version "3.4.0"
@ -3255,20 +3242,13 @@ typescript@^2.1.5, typescript@^2.4.2:
version "2.4.2"
resolved "https://registry.yarnpkg.com/typescript/-/typescript-2.4.2.tgz#f8395f85d459276067c988aa41837a8f82870844"
typings-global@*, typings-global@^1.0.14, typings-global@^1.0.16, typings-global@^1.0.17, typings-global@^1.0.19, typings-global@^1.0.20, typings-global@^1.0.3:
typings-global@^1.0.14, typings-global@^1.0.16, typings-global@^1.0.17, typings-global@^1.0.19, typings-global@^1.0.20, typings-global@^1.0.3:
version "1.0.20"
resolved "https://registry.yarnpkg.com/typings-global/-/typings-global-1.0.20.tgz#3da769c54db538247c5d877d1d9e97eb2ec981ff"
dependencies:
semver "^5.3.0"
smartshell "^1.0.6"
typings-test@^1.0.3:
version "1.0.3"
resolved "https://registry.yarnpkg.com/typings-test/-/typings-test-1.0.3.tgz#fbab895eb3f0c44842e73db059f65946b971e369"
dependencies:
"@types/mocha" "^2.2.31"
typings-global "*"
uglify-js@^2.6:
version "2.8.29"
resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.29.tgz#29c5733148057bb4e1f75df35b7a9cb72e6a59dd"
@ -3388,7 +3368,7 @@ vinyl@^0.5.0:
clone-stats "^0.0.1"
replace-ext "0.0.1"
vinyl@^2.0.1, vinyl@^2.0.2:
vinyl@^2.0.1:
version "2.1.0"
resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-2.1.0.tgz#021f9c2cf951d6b939943c89eb5ee5add4fd924c"
dependencies:
@ -3412,8 +3392,8 @@ which-module@^2.0.0:
resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a"
which@^1.1.1, which@^1.2.14, which@^1.2.4, which@^1.2.9:
version "1.2.14"
resolved "https://registry.yarnpkg.com/which/-/which-1.2.14.tgz#9a87c4378f03e827cecaf1acdf56c736c01c14e5"
version "1.3.0"
resolved "https://registry.yarnpkg.com/which/-/which-1.3.0.tgz#ff04bdfc010ee547d780bec38e1ac1c2777d253a"
dependencies:
isexe "^2.0.0"