Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Introduce linting to the project #303

Closed
jkantr opened this issue Jun 21, 2017 · 8 comments
Closed

Introduce linting to the project #303

jkantr opened this issue Jun 21, 2017 · 8 comments

Comments

@jkantr
Copy link
Collaborator

jkantr commented Jun 21, 2017

@bitinn, @TimothyGu

Mostly in an effort to stop myself from committing things missing semi's (I work on a lot of no semi projects, heh) I think it might be advantageous to set up linting.

There are already a bunch of different styles being used throughout the code but this is mostly auto-fixable using modern tooling. My suggestion:

  • add eslint dev dep
  • add eslint-config-airbnb-base preset dev dep
  • add .eslintrc for custom rule negotiation
  • add npm script to run linting

This would configure linting to the Airbnb style guide, which is very common (especially among front end packages), and can be read here: https://github.com/airbnb/javascript

Advantages:

  • Airbnb style rules have very specific reasonings to back them that are based around clarity and bug avoidance
  • Most of the style guidelines already fit well into the current project
  • We can easily turn off the rules that we don't need and can re-implement them one at a time til compliance.
  • Easier for new contributors to adopt a common style (with even simple things like tabs vs spaces, etc)
  • Increases general perceived code quality with more consistency

After we have all rules implemented/agreed on over some time, we could then also:

  • have the linting npm script autofix
  • implement a git hook or CI step and reject on unlintable styles.

Thoughts?

@jkantr jkantr added the meta label Jun 21, 2017
@TimothyGu
Copy link
Collaborator

Sounds fine to me. I've used Airbnb before with good experiences as well, though I wouldn't mind xo either.

@bitinn
Copy link
Collaborator

bitinn commented Jun 22, 2017

I am kinda against it, and my main reasoning:

  • There are a lot good things we can do before we debate on how to eslint styles.
  • We might end up turning off rules because sometimes the best practice isn't what we want.

But I do agree eventually eslint would be a good tool for improving on our codebase.

@jimmywarting
Copy link
Collaborator

I have always hated it, never dose what I want.
I only get frustrated when i use new syntax that isn't well supported

My principle is only:

  • Code it so it looks consistent with the rest of the code
  • Have somewhere in the back of you head some guidelines, eg like the jsStandard rules
    • Dosen't have to be those or everything they rule out
  • And what bitinn said about "turning off rules"

Otherwise you add more complexity, dependencies, compile time, researching "what is wrong with my code, how to make linters happy" and sending new bug reports to something that is wrong or not supported like when the new async/await came for example

But i must admit, Linters is a good tool for the quality of your code. but you must put some more effort into it. But to me it's not worth it

@jkantr jkantr added the on hold label Jun 25, 2017
@jkantr
Copy link
Collaborator Author

jkantr commented Jun 25, 2017

Ok, everyone seems to be split on this :) Putting it on hold for now and can revisit in the future

@SimenB
Copy link

SimenB commented Jul 19, 2017

Can stick prettier in there instead of full eslint? Pretty easy win in my eyes

@TimothyGu
Copy link
Collaborator

@SimenB IMO it's more the other stuff that's useful, like let/const usage, var scoping etc. Code formatting is always the easy part.

@Richienb
Copy link
Member

Richienb commented Sep 7, 2019

Linting has now been added as part of 3.x in 684f781 and 43b2aa4.

@Richienb Richienb closed this as completed Sep 7, 2019
@jimmywarting
Copy link
Collaborator

have not been a fan of xo due to it's size and taking long time to install, adds 100mb of data and 644 packages. Sometimes i worry what i'm installing without knowing what goes into a package

$ time npm i xo
npm WARN eslint-import-resolver-webpack@0.12.2 requires a peer of webpack@>=1.11.0 but none is installed. You must install peer dependencies yourself.

+ xo@0.33.1
added 644 packages from 356 contributors and audited 644 packages in 46.514s

57 packages are looking for funding
  run `npm fund` for details

found 0 vulnerabilities


real	0m47.776s
user	0m17.012s
sys	0m7.167s
npm ls
└─┬ xo@0.33.1
  ├─┬ @typescript-eslint/eslint-plugin@3.10.1
  │ ├─┬ @typescript-eslint/experimental-utils@3.10.1
  │ │ ├── @types/json-schema@7.0.6
  │ │ ├── @typescript-eslint/types@3.10.1 deduped
  │ │ ├── @typescript-eslint/typescript-estree@3.10.1 deduped
  │ │ ├── eslint-scope@5.1.0 deduped
  │ │ └── eslint-utils@2.1.0 deduped
  │ ├── debug@4.1.1 deduped
  │ ├── functional-red-black-tree@1.0.1
  │ ├── regexpp@3.1.0
  │ ├── semver@7.3.2 deduped
  │ └─┬ tsutils@3.17.1
  │   └── tslib@1.13.0
  ├─┬ @typescript-eslint/parser@3.10.1
  │ ├── @types/eslint-visitor-keys@1.0.0
  │ ├── @typescript-eslint/experimental-utils@3.10.1 deduped
  │ ├── @typescript-eslint/types@3.10.1
  │ ├─┬ @typescript-eslint/typescript-estree@3.10.1
  │ │ ├── @typescript-eslint/types@3.10.1 deduped
  │ │ ├─┬ @typescript-eslint/visitor-keys@3.10.1
  │ │ │ └── eslint-visitor-keys@1.3.0 deduped
  │ │ ├── debug@4.1.1 deduped
  │ │ ├── glob@7.1.6 deduped
  │ │ ├── is-glob@4.0.1 deduped
  │ │ ├── lodash@4.17.20 deduped
  │ │ ├── semver@7.3.2 deduped
  │ │ └── tsutils@3.17.1 deduped
  │ └── eslint-visitor-keys@1.3.0
  ├── arrify@2.0.1
  ├─┬ cosmiconfig@7.0.0
  │ ├── @types/parse-json@4.0.0
  │ ├─┬ import-fresh@3.2.1
  │ │ ├─┬ parent-module@1.0.1
  │ │ │ └── callsites@3.1.0
  │ │ └── resolve-from@4.0.0
  │ ├─┬ parse-json@5.1.0
  │ │ ├── @babel/code-frame@7.10.4 deduped
  │ │ ├─┬ error-ex@1.3.2
  │ │ │ └── is-arrayish@0.2.1
  │ │ ├── json-parse-even-better-errors@2.3.1
  │ │ └── lines-and-columns@1.1.6
  │ ├── path-type@4.0.0
  │ └── yaml@1.10.0
  ├─┬ debug@4.1.1
  │ └── ms@2.1.2
  ├─┬ eslint@7.8.1
  │ ├─┬ @babel/code-frame@7.10.4
  │ │ └─┬ @babel/highlight@7.10.4
  │ │   ├── @babel/helper-validator-identifier@7.10.4
  │ │   ├─┬ chalk@2.4.2
  │ │   │ ├── ansi-styles@3.2.1 deduped
  │ │   │ ├── escape-string-regexp@1.0.5 deduped
  │ │   │ └─┬ supports-color@5.5.0
  │ │   │   └── has-flag@3.0.0
  │ │   └── js-tokens@4.0.0
  │ ├─┬ @eslint/eslintrc@0.1.3
  │ │ ├── ajv@6.12.4 deduped
  │ │ ├── debug@4.1.1 deduped
  │ │ ├── espree@7.3.0 deduped
  │ │ ├── globals@12.4.0 deduped
  │ │ ├── ignore@4.0.6 deduped
  │ │ ├── import-fresh@3.2.1 deduped
  │ │ ├── js-yaml@3.14.0 deduped
  │ │ ├── lodash@4.17.20 deduped
  │ │ ├── minimatch@3.0.4 deduped
  │ │ └── strip-json-comments@3.1.1 deduped
  │ ├─┬ ajv@6.12.4
  │ │ ├── fast-deep-equal@3.1.3
  │ │ ├── fast-json-stable-stringify@2.1.0
  │ │ ├── json-schema-traverse@0.4.1
  │ │ └─┬ uri-js@4.4.0
  │ │   └── punycode@2.1.1
  │ ├─┬ chalk@4.1.0
  │ │ ├─┬ ansi-styles@4.2.1
  │ │ │ ├── @types/color-name@1.1.1
  │ │ │ └─┬ color-convert@2.0.1
  │ │ │   └── color-name@1.1.4
  │ │ └─┬ supports-color@7.2.0
  │ │   └── has-flag@4.0.0 deduped
  │ ├─┬ cross-spawn@7.0.3
  │ │ ├── path-key@3.1.1
  │ │ ├─┬ shebang-command@2.0.0
  │ │ │ └── shebang-regex@3.0.0
  │ │ └─┬ which@2.0.2
  │ │   └── isexe@2.0.0
  │ ├── debug@4.1.1 deduped
  │ ├─┬ doctrine@3.0.0
  │ │ └── esutils@2.0.3 deduped
  │ ├─┬ enquirer@2.3.6
  │ │ └── ansi-colors@4.1.1
  │ ├─┬ eslint-scope@5.1.0
  │ │ ├─┬ esrecurse@4.3.0
  │ │ │ └── estraverse@5.2.0
  │ │ └── estraverse@4.3.0
  │ ├─┬ eslint-utils@2.1.0
  │ │ └── eslint-visitor-keys@1.3.0 deduped
  │ ├── eslint-visitor-keys@1.3.0 deduped
  │ ├─┬ espree@7.3.0
  │ │ ├── acorn@7.4.0
  │ │ ├── acorn-jsx@5.2.0
  │ │ └── eslint-visitor-keys@1.3.0 deduped
  │ ├─┬ esquery@1.3.1
  │ │ └── estraverse@5.2.0
  │ ├── esutils@2.0.3
  │ ├─┬ file-entry-cache@5.0.1
  │ │ └─┬ flat-cache@2.0.1
  │ │   ├── flatted@2.0.2
  │ │   ├─┬ rimraf@2.6.3
  │ │   │ └── glob@7.1.6 deduped
  │ │   └─┬ write@1.0.3
  │ │     └─┬ mkdirp@0.5.5
  │ │       └── minimist@1.2.5 deduped
  │ ├── functional-red-black-tree@1.0.1 deduped
  │ ├─┬ glob-parent@5.1.1
  │ │ └── is-glob@4.0.1 deduped
  │ ├─┬ globals@12.4.0
  │ │ └── type-fest@0.8.1
  │ ├── ignore@4.0.6
  │ ├── import-fresh@3.2.1 deduped
  │ ├── imurmurhash@0.1.4 deduped
  │ ├─┬ is-glob@4.0.1
  │ │ └── is-extglob@2.1.1
  │ ├─┬ js-yaml@3.14.0
  │ │ ├─┬ argparse@1.0.10
  │ │ │ └── sprintf-js@1.0.3
  │ │ └── esprima@4.0.1
  │ ├── json-stable-stringify-without-jsonify@1.0.1 deduped
  │ ├─┬ levn@0.4.1
  │ │ ├── prelude-ls@1.2.1
  │ │ └─┬ type-check@0.4.0
  │ │   └── prelude-ls@1.2.1 deduped
  │ ├── lodash@4.17.20 deduped
  │ ├─┬ minimatch@3.0.4
  │ │ └─┬ brace-expansion@1.1.11
  │ │   ├── balanced-match@1.0.0
  │ │   └── concat-map@0.0.1
  │ ├── natural-compare@1.4.0
  │ ├─┬ optionator@0.9.1
  │ │ ├── deep-is@0.1.3
  │ │ ├── fast-levenshtein@2.0.6
  │ │ ├── levn@0.4.1 deduped
  │ │ ├── prelude-ls@1.2.1 deduped
  │ │ ├── type-check@0.4.0 deduped
  │ │ └── word-wrap@1.2.3
  │ ├── progress@2.0.3
  │ ├── regexpp@3.1.0 deduped
  │ ├── semver@7.3.2 deduped
  │ ├─┬ strip-ansi@6.0.0
  │ │ └── ansi-regex@5.0.0
  │ ├── strip-json-comments@3.1.1
  │ ├─┬ table@5.4.6
  │ │ ├── ajv@6.12.4 deduped
  │ │ ├── lodash@4.17.20 deduped
  │ │ ├─┬ slice-ansi@2.1.0
  │ │ │ ├─┬ ansi-styles@3.2.1
  │ │ │ │ └─┬ color-convert@1.9.3
  │ │ │ │   └── color-name@1.1.3
  │ │ │ ├── astral-regex@1.0.0
  │ │ │ └── is-fullwidth-code-point@2.0.0
  │ │ └─┬ string-width@3.1.0
  │ │   ├── emoji-regex@7.0.3
  │ │   ├── is-fullwidth-code-point@2.0.0 deduped
  │ │   └─┬ strip-ansi@5.2.0
  │ │     └── ansi-regex@4.1.0
  │ ├── text-table@0.2.0
  │ └── v8-compile-cache@2.1.1
  ├─┬ eslint-config-prettier@6.11.0
  │ └── get-stdin@6.0.0
  ├─┬ eslint-config-xo@0.32.1
  │ └── confusing-browser-globals@1.0.9
  ├── eslint-config-xo-typescript@0.32.0
  ├─┬ eslint-formatter-pretty@4.0.0
  │ ├─┬ ansi-escapes@4.3.1
  │ │ └── type-fest@0.11.0
  │ ├─┬ chalk@4.1.0
  │ │ ├─┬ ansi-styles@4.2.1
  │ │ │ ├── @types/color-name@1.1.1 deduped
  │ │ │ └─┬ color-convert@2.0.1
  │ │ │   └── color-name@1.1.4
  │ │ └─┬ supports-color@7.2.0
  │ │   └── has-flag@4.0.0 deduped
  │ ├── eslint-rule-docs@1.1.207
  │ ├─┬ log-symbols@4.0.0
  │ │ └─┬ chalk@4.1.0
  │ │   ├─┬ ansi-styles@4.2.1
  │ │   │ ├── @types/color-name@1.1.1 deduped
  │ │   │ └─┬ color-convert@2.0.1
  │ │   │   └── color-name@1.1.4
  │ │   └─┬ supports-color@7.2.0
  │ │     └── has-flag@4.0.0 deduped
  │ ├─┬ plur@4.0.0
  │ │ └── irregular-plurals@3.2.0
  │ ├─┬ string-width@4.2.0
  │ │ ├── emoji-regex@8.0.0
  │ │ ├── is-fullwidth-code-point@3.0.0
  │ │ └── strip-ansi@6.0.0 deduped
  │ └─┬ supports-hyperlinks@2.1.0
  │   ├── has-flag@4.0.0 deduped
  │   └─┬ supports-color@7.2.0
  │     └── has-flag@4.0.0 deduped
  ├─┬ eslint-import-resolver-webpack@0.12.2
  │ ├── array-find@1.0.0
  │ ├─┬ debug@2.6.9
  │ │ └── ms@2.0.0
  │ ├─┬ enhanced-resolve@0.9.1
  │ │ ├── graceful-fs@4.2.4 deduped
  │ │ ├── memory-fs@0.2.0
  │ │ └── tapable@0.1.10
  │ ├── find-root@1.1.0
  │ ├─┬ has@1.0.3
  │ │ └── function-bind@1.1.1
  │ ├── interpret@1.4.0
  │ ├── lodash@4.17.20 deduped
  │ ├─┬ node-libs-browser@2.2.1
  │ │ ├─┬ assert@1.5.0
  │ │ │ ├── object-assign@4.1.1
  │ │ │ └─┬ util@0.10.3
  │ │ │   └── inherits@2.0.1
  │ │ ├─┬ browserify-zlib@0.2.0
  │ │ │ └── pako@1.0.11
  │ │ ├─┬ buffer@4.9.2
  │ │ │ ├── base64-js@1.3.1
  │ │ │ ├── ieee754@1.1.13
  │ │ │ └── isarray@1.0.0 deduped
  │ │ ├── console-browserify@1.2.0
  │ │ ├── constants-browserify@1.0.0
  │ │ ├─┬ crypto-browserify@3.12.0
  │ │ │ ├─┬ browserify-cipher@1.0.1
  │ │ │ │ ├─┬ browserify-aes@1.2.0
  │ │ │ │ │ ├── buffer-xor@1.0.3
  │ │ │ │ │ ├── cipher-base@1.0.4 deduped
  │ │ │ │ │ ├── create-hash@1.2.0 deduped
  │ │ │ │ │ ├── evp_bytestokey@1.0.3 deduped
  │ │ │ │ │ ├── inherits@2.0.4 deduped
  │ │ │ │ │ └── safe-buffer@5.2.1 deduped
  │ │ │ │ ├─┬ browserify-des@1.0.2
  │ │ │ │ │ ├── cipher-base@1.0.4 deduped
  │ │ │ │ │ ├─┬ des.js@1.0.1
  │ │ │ │ │ │ ├── inherits@2.0.4 deduped
  │ │ │ │ │ │ └── minimalistic-assert@1.0.1 deduped
  │ │ │ │ │ ├── inherits@2.0.4 deduped
  │ │ │ │ │ └── safe-buffer@5.2.1 deduped
  │ │ │ │ └─┬ evp_bytestokey@1.0.3
  │ │ │ │   ├── md5.js@1.3.5 deduped
  │ │ │ │   └── safe-buffer@5.2.1 deduped
  │ │ │ ├─┬ browserify-sign@4.2.1
  │ │ │ │ ├── bn.js@5.1.3
  │ │ │ │ ├─┬ browserify-rsa@4.0.1
  │ │ │ │ │ ├── bn.js@4.11.9
  │ │ │ │ │ └── randombytes@2.1.0 deduped
  │ │ │ │ ├── create-hash@1.2.0 deduped
  │ │ │ │ ├── create-hmac@1.1.7 deduped
  │ │ │ │ ├─┬ elliptic@6.5.3
  │ │ │ │ │ ├── bn.js@4.11.9
  │ │ │ │ │ ├── brorand@1.1.0
  │ │ │ │ │ ├─┬ hash.js@1.1.7
  │ │ │ │ │ │ ├── inherits@2.0.4 deduped
  │ │ │ │ │ │ └── minimalistic-assert@1.0.1 deduped
  │ │ │ │ │ ├─┬ hmac-drbg@1.0.1
  │ │ │ │ │ │ ├── hash.js@1.1.7 deduped
  │ │ │ │ │ │ ├── minimalistic-assert@1.0.1 deduped
  │ │ │ │ │ │ └── minimalistic-crypto-utils@1.0.1 deduped
  │ │ │ │ │ ├── inherits@2.0.4 deduped
  │ │ │ │ │ ├── minimalistic-assert@1.0.1
  │ │ │ │ │ └── minimalistic-crypto-utils@1.0.1
  │ │ │ │ ├── inherits@2.0.4 deduped
  │ │ │ │ ├─┬ parse-asn1@5.1.6
  │ │ │ │ │ ├─┬ asn1.js@5.4.1
  │ │ │ │ │ │ ├── bn.js@4.11.9
  │ │ │ │ │ │ ├── inherits@2.0.4 deduped
  │ │ │ │ │ │ ├── minimalistic-assert@1.0.1 deduped
  │ │ │ │ │ │ └── safer-buffer@2.1.2
  │ │ │ │ │ ├── browserify-aes@1.2.0 deduped
  │ │ │ │ │ ├── evp_bytestokey@1.0.3 deduped
  │ │ │ │ │ ├── pbkdf2@3.1.1 deduped
  │ │ │ │ │ └── safe-buffer@5.2.1 deduped
  │ │ │ │ ├─┬ readable-stream@3.6.0
  │ │ │ │ │ ├── inherits@2.0.4 deduped
  │ │ │ │ │ ├── string_decoder@1.3.0 deduped
  │ │ │ │ │ └── util-deprecate@1.0.2 deduped
  │ │ │ │ └── safe-buffer@5.2.1 deduped
  │ │ │ ├─┬ create-ecdh@4.0.4
  │ │ │ │ ├── bn.js@4.11.9
  │ │ │ │ └── elliptic@6.5.3 deduped
  │ │ │ ├─┬ create-hash@1.2.0
  │ │ │ │ ├─┬ cipher-base@1.0.4
  │ │ │ │ │ ├── inherits@2.0.4 deduped
  │ │ │ │ │ └── safe-buffer@5.2.1 deduped
  │ │ │ │ ├── inherits@2.0.4 deduped
  │ │ │ │ ├─┬ md5.js@1.3.5
  │ │ │ │ │ ├─┬ hash-base@3.1.0
  │ │ │ │ │ │ ├── inherits@2.0.4 deduped
  │ │ │ │ │ │ ├─┬ readable-stream@3.6.0
  │ │ │ │ │ │ │ ├── inherits@2.0.4 deduped
  │ │ │ │ │ │ │ ├── string_decoder@1.3.0 deduped
  │ │ │ │ │ │ │ └── util-deprecate@1.0.2 deduped
  │ │ │ │ │ │ └── safe-buffer@5.2.1 deduped
  │ │ │ │ │ ├── inherits@2.0.4 deduped
  │ │ │ │ │ └── safe-buffer@5.2.1 deduped
  │ │ │ │ ├─┬ ripemd160@2.0.2
  │ │ │ │ │ ├── hash-base@3.1.0 deduped
  │ │ │ │ │ └── inherits@2.0.4 deduped
  │ │ │ │ └─┬ sha.js@2.4.11
  │ │ │ │   ├── inherits@2.0.4 deduped
  │ │ │ │   └── safe-buffer@5.2.1 deduped
  │ │ │ ├─┬ create-hmac@1.1.7
  │ │ │ │ ├── cipher-base@1.0.4 deduped
  │ │ │ │ ├── create-hash@1.2.0 deduped
  │ │ │ │ ├── inherits@2.0.4 deduped
  │ │ │ │ ├── ripemd160@2.0.2 deduped
  │ │ │ │ ├── safe-buffer@5.2.1 deduped
  │ │ │ │ └── sha.js@2.4.11 deduped
  │ │ │ ├─┬ diffie-hellman@5.0.3
  │ │ │ │ ├── bn.js@4.11.9
  │ │ │ │ ├─┬ miller-rabin@4.0.1
  │ │ │ │ │ ├── bn.js@4.11.9
  │ │ │ │ │ └── brorand@1.1.0 deduped
  │ │ │ │ └── randombytes@2.1.0 deduped
  │ │ │ ├── inherits@2.0.4 deduped
  │ │ │ ├─┬ pbkdf2@3.1.1
  │ │ │ │ ├── create-hash@1.2.0 deduped
  │ │ │ │ ├── create-hmac@1.1.7 deduped
  │ │ │ │ ├── ripemd160@2.0.2 deduped
  │ │ │ │ ├── safe-buffer@5.2.1 deduped
  │ │ │ │ └── sha.js@2.4.11 deduped
  │ │ │ ├─┬ public-encrypt@4.0.3
  │ │ │ │ ├── bn.js@4.11.9
  │ │ │ │ ├── browserify-rsa@4.0.1 deduped
  │ │ │ │ ├── create-hash@1.2.0 deduped
  │ │ │ │ ├── parse-asn1@5.1.6 deduped
  │ │ │ │ ├── randombytes@2.1.0 deduped
  │ │ │ │ └── safe-buffer@5.2.1 deduped
  │ │ │ ├─┬ randombytes@2.1.0
  │ │ │ │ └── safe-buffer@5.2.1 deduped
  │ │ │ └─┬ randomfill@1.0.4
  │ │ │   ├── randombytes@2.1.0 deduped
  │ │ │   └── safe-buffer@5.2.1 deduped
  │ │ ├── domain-browser@1.2.0
  │ │ ├── events@3.2.0
  │ │ ├── https-browserify@1.0.0
  │ │ ├── os-browserify@0.3.0
  │ │ ├── path-browserify@0.0.1
  │ │ ├── process@0.11.10
  │ │ ├── punycode@1.4.1
  │ │ ├── querystring-es3@0.2.1
  │ │ ├─┬ readable-stream@2.3.7
  │ │ │ ├── core-util-is@1.0.2
  │ │ │ ├── inherits@2.0.4 deduped
  │ │ │ ├── isarray@1.0.0 deduped
  │ │ │ ├── process-nextick-args@2.0.1
  │ │ │ ├── safe-buffer@5.1.2
  │ │ │ ├─┬ string_decoder@1.1.1
  │ │ │ │ └── safe-buffer@5.1.2 deduped
  │ │ │ └── util-deprecate@1.0.2
  │ │ ├─┬ stream-browserify@2.0.2
  │ │ │ ├── inherits@2.0.4 deduped
  │ │ │ └── readable-stream@2.3.7 deduped
  │ │ ├─┬ stream-http@2.8.3
  │ │ │ ├── builtin-status-codes@3.0.0
  │ │ │ ├── inherits@2.0.4 deduped
  │ │ │ ├── readable-stream@2.3.7 deduped
  │ │ │ ├── to-arraybuffer@1.0.1
  │ │ │ └── xtend@4.0.2
  │ │ ├─┬ string_decoder@1.3.0
  │ │ │ └── safe-buffer@5.2.1
  │ │ ├─┬ timers-browserify@2.0.11
  │ │ │ └── setimmediate@1.0.5
  │ │ ├── tty-browserify@0.0.0
  │ │ ├─┬ url@0.11.0
  │ │ │ ├── punycode@1.3.2
  │ │ │ └── querystring@0.2.0
  │ │ ├─┬ util@0.11.1
  │ │ │ └── inherits@2.0.3
  │ │ └── vm-browserify@1.1.2
  │ ├─┬ resolve@1.17.0
  │ │ └── path-parse@1.0.6
  │ └── semver@5.7.1
  ├─┬ eslint-plugin-ava@10.5.0
  │ ├─┬ deep-strict-equal@0.2.0
  │ │ └─┬ core-assert@0.2.1
  │ │   ├── buf-compare@1.0.1
  │ │   └── is-error@2.2.2
  │ ├─┬ enhance-visitors@1.0.0
  │ │ └── lodash@4.17.20 deduped
  │ ├── espree@7.3.0 deduped
  │ ├── espurify@2.0.1
  │ ├── import-modules@2.0.0
  │ ├── micro-spelling-correcter@1.1.1
  │ ├─┬ pkg-dir@4.2.0
  │ │ └── find-up@4.1.0 deduped
  │ └── resolve-from@5.0.0 deduped
  ├─┬ eslint-plugin-eslint-comments@3.2.0
  │ ├── escape-string-regexp@1.0.5
  │ └── ignore@5.1.8
  ├─┬ eslint-plugin-import@2.22.0
  │ ├─┬ array-includes@3.1.1
  │ │ ├─┬ define-properties@1.1.3
  │ │ │ └── object-keys@1.1.1
  │ │ ├─┬ es-abstract@1.17.6
  │ │ │ ├─┬ es-to-primitive@1.2.1
  │ │ │ │ ├── is-callable@1.2.0 deduped
  │ │ │ │ ├── is-date-object@1.0.2
  │ │ │ │ └─┬ is-symbol@1.0.3
  │ │ │ │   └── has-symbols@1.0.1 deduped
  │ │ │ ├── function-bind@1.1.1 deduped
  │ │ │ ├── has@1.0.3 deduped
  │ │ │ ├── has-symbols@1.0.1
  │ │ │ ├── is-callable@1.2.0
  │ │ │ ├─┬ is-regex@1.1.1
  │ │ │ │ └── has-symbols@1.0.1 deduped
  │ │ │ ├── object-inspect@1.8.0
  │ │ │ ├── object-keys@1.1.1 deduped
  │ │ │ ├─┬ object.assign@4.1.0
  │ │ │ │ ├── define-properties@1.1.3 deduped
  │ │ │ │ ├── function-bind@1.1.1 deduped
  │ │ │ │ ├── has-symbols@1.0.1 deduped
  │ │ │ │ └── object-keys@1.1.1 deduped
  │ │ │ ├─┬ string.prototype.trimend@1.0.1
  │ │ │ │ ├── define-properties@1.1.3 deduped
  │ │ │ │ └── es-abstract@1.17.6 deduped
  │ │ │ └─┬ string.prototype.trimstart@1.0.1
  │ │ │   ├── define-properties@1.1.3 deduped
  │ │ │   └── es-abstract@1.17.6 deduped
  │ │ └── is-string@1.0.5
  │ ├─┬ array.prototype.flat@1.2.3
  │ │ ├── define-properties@1.1.3 deduped
  │ │ └── es-abstract@1.17.6 deduped
  │ ├── contains-path@0.1.0
  │ ├─┬ debug@2.6.9
  │ │ └── ms@2.0.0
  │ ├─┬ doctrine@1.5.0
  │ │ ├── esutils@2.0.3 deduped
  │ │ └── isarray@1.0.0
  │ ├─┬ eslint-import-resolver-node@0.3.4
  │ │ ├─┬ debug@2.6.9
  │ │ │ └── ms@2.0.0
  │ │ └── resolve@1.17.0 deduped
  │ ├─┬ eslint-module-utils@2.6.0
  │ │ ├─┬ debug@2.6.9
  │ │ │ └── ms@2.0.0
  │ │ └─┬ pkg-dir@2.0.0
  │ │   └─┬ find-up@2.1.0
  │ │     └─┬ locate-path@2.0.0
  │ │       ├─┬ p-locate@2.0.0
  │ │       │ └─┬ p-limit@1.3.0
  │ │       │   └── p-try@1.0.0
  │ │       └── path-exists@3.0.0
  │ ├── has@1.0.3 deduped
  │ ├── minimatch@3.0.4 deduped
  │ ├─┬ object.values@1.1.1
  │ │ ├── define-properties@1.1.3 deduped
  │ │ ├── es-abstract@1.17.6 deduped
  │ │ ├── function-bind@1.1.1 deduped
  │ │ └── has@1.0.3 deduped
  │ ├─┬ read-pkg-up@2.0.0
  │ │ ├─┬ find-up@2.1.0
  │ │ │ └─┬ locate-path@2.0.0
  │ │ │   ├─┬ p-locate@2.0.0
  │ │ │   │ └─┬ p-limit@1.3.0
  │ │ │   │   └── p-try@1.0.0
  │ │ │   └── path-exists@3.0.0
  │ │ └─┬ read-pkg@2.0.0
  │ │   ├─┬ load-json-file@2.0.0
  │ │   │ ├── graceful-fs@4.2.4 deduped
  │ │   │ ├─┬ parse-json@2.2.0
  │ │   │ │ └── error-ex@1.3.2 deduped
  │ │   │ ├── pify@2.3.0
  │ │   │ └── strip-bom@3.0.0 deduped
  │ │   ├── normalize-package-data@2.5.0 deduped
  │ │   └─┬ path-type@2.0.0
  │ │     └── pify@2.3.0 deduped
  │ ├── resolve@1.17.0 deduped
  │ └─┬ tsconfig-paths@3.9.0
  │   ├── @types/json5@0.0.29
  │   ├─┬ json5@1.0.1
  │   │ └── minimist@1.2.5 deduped
  │   ├── minimist@1.2.5 deduped
  │   └── strip-bom@3.0.0
  ├─┬ eslint-plugin-no-use-extend-native@0.5.0
  │ ├─┬ is-get-set-prop@1.0.0
  │ │ ├── get-set-props@0.1.0
  │ │ └── lowercase-keys@1.0.1
  │ ├─┬ is-js-type@2.0.0
  │ │ └── js-types@1.0.0
  │ ├─┬ is-obj-prop@1.0.0
  │ │ ├── lowercase-keys@1.0.1 deduped
  │ │ └── obj-props@1.3.0
  │ └─┬ is-proto-prop@2.0.0
  │   ├── lowercase-keys@1.0.1 deduped
  │   └── proto-props@2.0.0
  ├─┬ eslint-plugin-node@11.1.0
  │ ├─┬ eslint-plugin-es@3.0.1
  │ │ ├── eslint-utils@2.1.0 deduped
  │ │ └── regexpp@3.1.0 deduped
  │ ├── eslint-utils@2.1.0 deduped
  │ ├── ignore@5.1.8
  │ ├── minimatch@3.0.4 deduped
  │ ├── resolve@1.17.0 deduped
  │ └── semver@6.3.0
  ├─┬ eslint-plugin-prettier@3.1.4
  │ └─┬ prettier-linter-helpers@1.0.0
  │   └── fast-diff@1.2.0
  ├── eslint-plugin-promise@4.2.1
  ├─┬ eslint-plugin-unicorn@21.0.0
  │ ├── ci-info@2.0.0
  │ ├─┬ clean-regexp@1.0.0
  │ │ └── escape-string-regexp@1.0.5 deduped
  │ ├─┬ eslint-ast-utils@1.1.0
  │ │ ├── lodash.get@4.4.2
  │ │ └── lodash.zip@4.2.0
  │ ├─┬ eslint-template-visitor@2.2.1
  │ │ ├─┬ babel-eslint@10.1.0
  │ │ │ ├── @babel/code-frame@7.10.4 deduped
  │ │ │ ├── @babel/parser@7.11.5
  │ │ │ ├─┬ @babel/traverse@7.11.5
  │ │ │ │ ├── @babel/code-frame@7.10.4 deduped
  │ │ │ │ ├─┬ @babel/generator@7.11.6
  │ │ │ │ │ ├── @babel/types@7.11.5 deduped
  │ │ │ │ │ ├── jsesc@2.5.2
  │ │ │ │ │ └── source-map@0.5.7 deduped
  │ │ │ │ ├─┬ @babel/helper-function-name@7.10.4
  │ │ │ │ │ ├─┬ @babel/helper-get-function-arity@7.10.4
  │ │ │ │ │ │ └── @babel/types@7.11.5 deduped
  │ │ │ │ │ ├─┬ @babel/template@7.10.4
  │ │ │ │ │ │ ├── @babel/code-frame@7.10.4 deduped
  │ │ │ │ │ │ ├── @babel/parser@7.11.5 deduped
  │ │ │ │ │ │ └── @babel/types@7.11.5 deduped
  │ │ │ │ │ └── @babel/types@7.11.5 deduped
  │ │ │ │ ├─┬ @babel/helper-split-export-declaration@7.11.0
  │ │ │ │ │ └── @babel/types@7.11.5 deduped
  │ │ │ │ ├── @babel/parser@7.11.5 deduped
  │ │ │ │ ├── @babel/types@7.11.5 deduped
  │ │ │ │ ├── debug@4.1.1 deduped
  │ │ │ │ ├── globals@11.12.0
  │ │ │ │ └── lodash@4.17.20 deduped
  │ │ │ ├─┬ @babel/types@7.11.5
  │ │ │ │ ├── @babel/helper-validator-identifier@7.10.4 deduped
  │ │ │ │ ├── lodash@4.17.20 deduped
  │ │ │ │ └── to-fast-properties@2.0.0
  │ │ │ ├── eslint-visitor-keys@1.3.0 deduped
  │ │ │ └── resolve@1.17.0 deduped
  │ │ ├── eslint-visitor-keys@1.3.0 deduped
  │ │ ├── esquery@1.3.1 deduped
  │ │ └── multimap@1.1.0
  │ ├── eslint-utils@2.1.0 deduped
  │ ├── import-modules@2.0.0 deduped
  │ ├── lodash@4.17.20 deduped
  │ ├── pluralize@8.0.0
  │ ├─┬ read-pkg-up@7.0.1
  │ │ ├── find-up@4.1.0 deduped
  │ │ ├─┬ read-pkg@5.2.0
  │ │ │ ├── @types/normalize-package-data@2.4.0
  │ │ │ ├── normalize-package-data@2.5.0 deduped
  │ │ │ ├── parse-json@5.1.0 deduped
  │ │ │ └── type-fest@0.6.0
  │ │ └── type-fest@0.8.1 deduped
  │ ├── regexp-tree@0.1.21
  │ ├── reserved-words@0.1.2
  │ ├─┬ safe-regex@2.1.1
  │ │ └── regexp-tree@0.1.21 deduped
  │ └── semver@7.3.2 deduped
  ├─┬ find-cache-dir@3.3.1
  │ ├── commondir@1.0.1
  │ ├─┬ make-dir@3.1.0
  │ │ └── semver@6.3.0
  │ └── pkg-dir@4.2.0 deduped
  ├─┬ find-up@4.1.0
  │ ├─┬ locate-path@5.0.0
  │ │ └─┬ p-locate@4.1.0
  │ │   └─┬ p-limit@2.3.0
  │ │     └── p-try@2.2.0
  │ └── path-exists@4.0.0 deduped
  ├─┬ fs-extra@9.0.1
  │ ├── at-least-node@1.0.0
  │ ├── graceful-fs@4.2.4
  │ ├─┬ jsonfile@6.0.1
  │ │ ├── graceful-fs@4.2.4 deduped
  │ │ └── universalify@1.0.0 deduped
  │ └── universalify@1.0.0
  ├── get-stdin@8.0.0
  ├─┬ globby@9.2.0
  │ ├─┬ @types/glob@7.1.3
  │ │ ├── @types/minimatch@3.0.3
  │ │ └── @types/node@14.6.3
  │ ├─┬ array-union@1.0.2
  │ │ └── array-uniq@1.0.3
  │ ├─┬ dir-glob@2.2.2
  │ │ └─┬ path-type@3.0.0
  │ │   └── pify@3.0.0
  │ ├─┬ fast-glob@2.2.7
  │ │ ├─┬ @mrmlnc/readdir-enhanced@2.2.1
  │ │ │ ├── call-me-maybe@1.0.1
  │ │ │ └── glob-to-regexp@0.3.0
  │ │ ├── @nodelib/fs.stat@1.1.3
  │ │ ├─┬ glob-parent@3.1.0
  │ │ │ ├─┬ is-glob@3.1.0
  │ │ │ │ └── is-extglob@2.1.1 deduped
  │ │ │ └── path-dirname@1.0.2
  │ │ ├── is-glob@4.0.1 deduped
  │ │ ├── merge2@1.4.1
  │ │ └─┬ micromatch@3.1.10
  │ │   ├── arr-diff@4.0.0
  │ │   ├── array-unique@0.3.2
  │ │   ├─┬ braces@2.3.2
  │ │   │ ├── arr-flatten@1.1.0
  │ │   │ ├── array-unique@0.3.2 deduped
  │ │   │ ├─┬ extend-shallow@2.0.1
  │ │   │ │ └── is-extendable@0.1.1
  │ │   │ ├─┬ fill-range@4.0.0
  │ │   │ │ ├─┬ extend-shallow@2.0.1
  │ │   │ │ │ └── is-extendable@0.1.1 deduped
  │ │   │ │ ├─┬ is-number@3.0.0
  │ │   │ │ │ └─┬ kind-of@3.2.2
  │ │   │ │ │   └── is-buffer@1.1.6
  │ │   │ │ ├── repeat-string@1.6.1
  │ │   │ │ └─┬ to-regex-range@2.1.1
  │ │   │ │   ├── is-number@3.0.0 deduped
  │ │   │ │   └── repeat-string@1.6.1 deduped
  │ │   │ ├── isobject@3.0.1
  │ │   │ ├── repeat-element@1.1.3
  │ │   │ ├── snapdragon@0.8.2 deduped
  │ │   │ ├─┬ snapdragon-node@2.1.1
  │ │   │ │ ├─┬ define-property@1.0.0
  │ │   │ │ │ └─┬ is-descriptor@1.0.2
  │ │   │ │ │   ├─┬ is-accessor-descriptor@1.0.0
  │ │   │ │ │   │ └── kind-of@6.0.3 deduped
  │ │   │ │ │   ├─┬ is-data-descriptor@1.0.0
  │ │   │ │ │   │ └── kind-of@6.0.3 deduped
  │ │   │ │ │   └── kind-of@6.0.3 deduped
  │ │   │ │ ├── isobject@3.0.1 deduped
  │ │   │ │ └─┬ snapdragon-util@3.0.1
  │ │   │ │   └─┬ kind-of@3.2.2
  │ │   │ │     └── is-buffer@1.1.6 deduped
  │ │   │ ├─┬ split-string@3.1.0
  │ │   │ │ └── extend-shallow@3.0.2 deduped
  │ │   │ └── to-regex@3.0.2 deduped
  │ │   ├─┬ define-property@2.0.2
  │ │   │ ├─┬ is-descriptor@1.0.2
  │ │   │ │ ├─┬ is-accessor-descriptor@1.0.0
  │ │   │ │ │ └── kind-of@6.0.3 deduped
  │ │   │ │ ├─┬ is-data-descriptor@1.0.0
  │ │   │ │ │ └── kind-of@6.0.3 deduped
  │ │   │ │ └── kind-of@6.0.3 deduped
  │ │   │ └── isobject@3.0.1 deduped
  │ │   ├─┬ extend-shallow@3.0.2
  │ │   │ ├── assign-symbols@1.0.0
  │ │   │ └─┬ is-extendable@1.0.1
  │ │   │   └─┬ is-plain-object@2.0.4
  │ │   │     └── isobject@3.0.1 deduped
  │ │   ├─┬ extglob@2.0.4
  │ │   │ ├── array-unique@0.3.2 deduped
  │ │   │ ├─┬ define-property@1.0.0
  │ │   │ │ └─┬ is-descriptor@1.0.2
  │ │   │ │   ├─┬ is-accessor-descriptor@1.0.0
  │ │   │ │   │ └── kind-of@6.0.3 deduped
  │ │   │ │   ├─┬ is-data-descriptor@1.0.0
  │ │   │ │   │ └── kind-of@6.0.3 deduped
  │ │   │ │   └── kind-of@6.0.3 deduped
  │ │   │ ├─┬ expand-brackets@2.1.4
  │ │   │ │ ├─┬ debug@2.6.9
  │ │   │ │ │ └── ms@2.0.0
  │ │   │ │ ├─┬ define-property@0.2.5
  │ │   │ │ │ └── is-descriptor@0.1.6 deduped
  │ │   │ │ ├─┬ extend-shallow@2.0.1
  │ │   │ │ │ └── is-extendable@0.1.1 deduped
  │ │   │ │ ├── posix-character-classes@0.1.1
  │ │   │ │ ├── regex-not@1.0.2 deduped
  │ │   │ │ ├── snapdragon@0.8.2 deduped
  │ │   │ │ └── to-regex@3.0.2 deduped
  │ │   │ ├─┬ extend-shallow@2.0.1
  │ │   │ │ └── is-extendable@0.1.1 deduped
  │ │   │ ├── fragment-cache@0.2.1 deduped
  │ │   │ ├── regex-not@1.0.2 deduped
  │ │   │ ├── snapdragon@0.8.2 deduped
  │ │   │ └── to-regex@3.0.2 deduped
  │ │   ├─┬ fragment-cache@0.2.1
  │ │   │ └── map-cache@0.2.2
  │ │   ├── kind-of@6.0.3 deduped
  │ │   ├─┬ nanomatch@1.2.13
  │ │   │ ├── arr-diff@4.0.0 deduped
  │ │   │ ├── array-unique@0.3.2 deduped
  │ │   │ ├── define-property@2.0.2 deduped
  │ │   │ ├── extend-shallow@3.0.2 deduped
  │ │   │ ├── fragment-cache@0.2.1 deduped
  │ │   │ ├── is-windows@1.0.2 deduped
  │ │   │ ├── kind-of@6.0.3 deduped
  │ │   │ ├── object.pick@1.3.0 deduped
  │ │   │ ├── regex-not@1.0.2 deduped
  │ │   │ ├── snapdragon@0.8.2 deduped
  │ │   │ └── to-regex@3.0.2 deduped
  │ │   ├─┬ object.pick@1.3.0
  │ │   │ └── isobject@3.0.1 deduped
  │ │   ├─┬ regex-not@1.0.2
  │ │   │ ├── extend-shallow@3.0.2 deduped
  │ │   │ └─┬ safe-regex@1.1.0
  │ │   │   └── ret@0.1.15
  │ │   ├─┬ snapdragon@0.8.2
  │ │   │ ├─┬ base@0.11.2
  │ │   │ │ ├─┬ cache-base@1.0.1
  │ │   │ │ │ ├─┬ collection-visit@1.0.0
  │ │   │ │ │ │ ├─┬ map-visit@1.0.0
  │ │   │ │ │ │ │ └── object-visit@1.0.1 deduped
  │ │   │ │ │ │ └─┬ object-visit@1.0.1
  │ │   │ │ │ │   └── isobject@3.0.1 deduped
  │ │   │ │ │ ├── component-emitter@1.3.0 deduped
  │ │   │ │ │ ├── get-value@2.0.6
  │ │   │ │ │ ├─┬ has-value@1.0.0
  │ │   │ │ │ │ ├── get-value@2.0.6 deduped
  │ │   │ │ │ │ ├─┬ has-values@1.0.0
  │ │   │ │ │ │ │ ├── is-number@3.0.0 deduped
  │ │   │ │ │ │ │ └─┬ kind-of@4.0.0
  │ │   │ │ │ │ │   └── is-buffer@1.1.6 deduped
  │ │   │ │ │ │ └── isobject@3.0.1 deduped
  │ │   │ │ │ ├── isobject@3.0.1 deduped
  │ │   │ │ │ ├─┬ set-value@2.0.1
  │ │   │ │ │ │ ├─┬ extend-shallow@2.0.1
  │ │   │ │ │ │ │ └── is-extendable@0.1.1 deduped
  │ │   │ │ │ │ ├── is-extendable@0.1.1 deduped
  │ │   │ │ │ │ ├── is-plain-object@2.0.4 deduped
  │ │   │ │ │ │ └── split-string@3.1.0 deduped
  │ │   │ │ │ ├─┬ to-object-path@0.3.0
  │ │   │ │ │ │ └─┬ kind-of@3.2.2
  │ │   │ │ │ │   └── is-buffer@1.1.6 deduped
  │ │   │ │ │ ├─┬ union-value@1.0.1
  │ │   │ │ │ │ ├── arr-union@3.1.0 deduped
  │ │   │ │ │ │ ├── get-value@2.0.6 deduped
  │ │   │ │ │ │ ├── is-extendable@0.1.1 deduped
  │ │   │ │ │ │ └── set-value@2.0.1 deduped
  │ │   │ │ │ └─┬ unset-value@1.0.0
  │ │   │ │ │   ├─┬ has-value@0.3.1
  │ │   │ │ │   │ ├── get-value@2.0.6 deduped
  │ │   │ │ │   │ ├── has-values@0.1.4
  │ │   │ │ │   │ └─┬ isobject@2.1.0
  │ │   │ │ │   │   └── isarray@1.0.0 deduped
  │ │   │ │ │   └── isobject@3.0.1 deduped
  │ │   │ │ ├─┬ class-utils@0.3.6
  │ │   │ │ │ ├── arr-union@3.1.0
  │ │   │ │ │ ├─┬ define-property@0.2.5
  │ │   │ │ │ │ └── is-descriptor@0.1.6 deduped
  │ │   │ │ │ ├── isobject@3.0.1 deduped
  │ │   │ │ │ └─┬ static-extend@0.1.2
  │ │   │ │ │   ├─┬ define-property@0.2.5
  │ │   │ │ │   │ └── is-descriptor@0.1.6 deduped
  │ │   │ │ │   └─┬ object-copy@0.1.0
  │ │   │ │ │     ├── copy-descriptor@0.1.1
  │ │   │ │ │     ├─┬ define-property@0.2.5
  │ │   │ │ │     │ └── is-descriptor@0.1.6 deduped
  │ │   │ │ │     └─┬ kind-of@3.2.2
  │ │   │ │ │       └── is-buffer@1.1.6 deduped
  │ │   │ │ ├── component-emitter@1.3.0
  │ │   │ │ ├─┬ define-property@1.0.0
  │ │   │ │ │ └─┬ is-descriptor@1.0.2
  │ │   │ │ │   ├─┬ is-accessor-descriptor@1.0.0
  │ │   │ │ │   │ └── kind-of@6.0.3 deduped
  │ │   │ │ │   ├─┬ is-data-descriptor@1.0.0
  │ │   │ │ │   │ └── kind-of@6.0.3 deduped
  │ │   │ │ │   └── kind-of@6.0.3 deduped
  │ │   │ │ ├── isobject@3.0.1 deduped
  │ │   │ │ ├─┬ mixin-deep@1.3.2
  │ │   │ │ │ ├── for-in@1.0.2
  │ │   │ │ │ └─┬ is-extendable@1.0.1
  │ │   │ │ │   └── is-plain-object@2.0.4 deduped
  │ │   │ │ └── pascalcase@0.1.1
  │ │   │ ├─┬ debug@2.6.9
  │ │   │ │ └── ms@2.0.0
  │ │   │ ├─┬ define-property@0.2.5
  │ │   │ │ └─┬ is-descriptor@0.1.6
  │ │   │ │   ├─┬ is-accessor-descriptor@0.1.6
  │ │   │ │   │ └─┬ kind-of@3.2.2
  │ │   │ │   │   └── is-buffer@1.1.6 deduped
  │ │   │ │   ├─┬ is-data-descriptor@0.1.4
  │ │   │ │   │ └─┬ kind-of@3.2.2
  │ │   │ │   │   └── is-buffer@1.1.6 deduped
  │ │   │ │   └── kind-of@5.1.0
  │ │   │ ├─┬ extend-shallow@2.0.1
  │ │   │ │ └── is-extendable@0.1.1 deduped
  │ │   │ ├── map-cache@0.2.2 deduped
  │ │   │ ├── source-map@0.5.7
  │ │   │ ├─┬ source-map-resolve@0.5.3
  │ │   │ │ ├── atob@2.1.2
  │ │   │ │ ├── decode-uri-component@0.2.0
  │ │   │ │ ├── resolve-url@0.2.1
  │ │   │ │ ├── source-map-url@0.4.0
  │ │   │ │ └── urix@0.1.0
  │ │   │ └── use@3.1.1
  │ │   └─┬ to-regex@3.0.2
  │ │     ├── define-property@2.0.2 deduped
  │ │     ├── extend-shallow@3.0.2 deduped
  │ │     ├── regex-not@1.0.2 deduped
  │ │     └─┬ safe-regex@1.1.0
  │ │       └── ret@0.1.15 deduped
  │ ├─┬ glob@7.1.6
  │ │ ├── fs.realpath@1.0.0
  │ │ ├─┬ inflight@1.0.6
  │ │ │ ├── once@1.4.0 deduped
  │ │ │ └── wrappy@1.0.2
  │ │ ├── inherits@2.0.4
  │ │ ├── minimatch@3.0.4 deduped
  │ │ ├─┬ once@1.4.0
  │ │ │ └── wrappy@1.0.2 deduped
  │ │ └── path-is-absolute@1.0.1
  │ ├── ignore@4.0.6 deduped
  │ ├── pify@4.0.1
  │ └── slash@2.0.0
  ├── has-flag@4.0.0
  ├── imurmurhash@0.1.4
  ├── is-path-inside@3.0.2
  ├── json-stable-stringify-without-jsonify@1.0.1
  ├─┬ json5@2.1.3
  │ └── minimist@1.2.5
  ├── lodash@4.17.20
  ├─┬ meow@7.1.1
  │ ├── @types/minimist@1.2.0
  │ ├─┬ camelcase-keys@6.2.2
  │ │ ├── camelcase@5.3.1
  │ │ ├── map-obj@4.1.0
  │ │ └── quick-lru@4.0.1
  │ ├─┬ decamelize-keys@1.1.0
  │ │ ├── decamelize@1.2.0
  │ │ └── map-obj@1.0.1
  │ ├── hard-rejection@2.1.0
  │ ├─┬ minimist-options@4.1.0
  │ │ ├── arrify@1.0.1
  │ │ ├── is-plain-obj@1.1.0
  │ │ └── kind-of@6.0.3
  │ ├─┬ normalize-package-data@2.5.0
  │ │ ├── hosted-git-info@2.8.8
  │ │ ├── resolve@1.17.0 deduped
  │ │ ├── semver@5.7.1
  │ │ └─┬ validate-npm-package-license@3.0.4
  │ │   ├─┬ spdx-correct@3.1.1
  │ │   │ ├── spdx-expression-parse@3.0.1 deduped
  │ │   │ └── spdx-license-ids@3.0.5
  │ │   └─┬ spdx-expression-parse@3.0.1
  │ │     ├── spdx-exceptions@2.3.0
  │ │     └── spdx-license-ids@3.0.5 deduped
  │ ├─┬ read-pkg-up@7.0.1
  │ │ ├── find-up@4.1.0 deduped
  │ │ ├─┬ read-pkg@5.2.0
  │ │ │ ├── @types/normalize-package-data@2.4.0 deduped
  │ │ │ ├── normalize-package-data@2.5.0 deduped
  │ │ │ ├── parse-json@5.1.0 deduped
  │ │ │ └── type-fest@0.6.0
  │ │ └── type-fest@0.8.1
  │ ├─┬ redent@3.0.0
  │ │ ├── indent-string@4.0.0
  │ │ └─┬ strip-indent@3.0.0
  │ │   └── min-indent@1.0.1
  │ ├── trim-newlines@3.0.0
  │ ├── type-fest@0.13.1
  │ └─┬ yargs-parser@18.1.3
  │   ├── camelcase@5.3.1 deduped
  │   └── decamelize@1.2.0 deduped
  ├─┬ micromatch@4.0.2
  │ ├─┬ braces@3.0.2
  │ │ └─┬ fill-range@7.0.1
  │ │   └─┬ to-regex-range@5.0.1
  │ │     └── is-number@7.0.0
  │ └── picomatch@2.2.2
  ├─┬ open-editor@2.0.1
  │ ├── env-editor@0.4.1
  │ ├─┬ line-column-path@2.0.0
  │ │ └── type-fest@0.4.1
  │ └─┬ open@6.4.0
  │   └── is-wsl@1.1.0
  ├── p-reduce@2.1.0
  ├── path-exists@4.0.0
  ├── prettier@2.0.4
  ├─┬ resolve-cwd@3.0.0
  │ └── resolve-from@5.0.0 deduped
  ├── resolve-from@5.0.0
  ├── semver@7.3.2
  ├── slash@3.0.0
  ├─┬ to-absolute-glob@2.0.2
  │ ├─┬ is-absolute@1.0.0
  │ │ ├─┬ is-relative@1.0.0
  │ │ │ └─┬ is-unc-path@1.0.0
  │ │ │   └── unc-path-regex@0.1.2
  │ │ └── is-windows@1.0.2
  │ └── is-negated-glob@1.0.0
  ├── typescript@3.9.7
  ├─┬ update-notifier@4.1.1
  │ ├─┬ boxen@4.2.0
  │ │ ├─┬ ansi-align@3.0.0
  │ │ │ └── string-width@3.1.0 deduped
  │ │ ├── camelcase@5.3.1 deduped
  │ │ ├─┬ chalk@3.0.0
  │ │ │ ├─┬ ansi-styles@4.2.1
  │ │ │ │ ├── @types/color-name@1.1.1 deduped
  │ │ │ │ └─┬ color-convert@2.0.1
  │ │ │ │   └── color-name@1.1.4
  │ │ │ └─┬ supports-color@7.2.0
  │ │ │   └── has-flag@4.0.0 deduped
  │ │ ├── cli-boxes@2.2.1
  │ │ ├─┬ string-width@4.2.0
  │ │ │ ├── emoji-regex@8.0.0
  │ │ │ ├── is-fullwidth-code-point@3.0.0
  │ │ │ └── strip-ansi@6.0.0 deduped
  │ │ ├── term-size@2.2.0
  │ │ ├── type-fest@0.8.1 deduped
  │ │ └─┬ widest-line@3.1.0
  │ │   └─┬ string-width@4.2.0
  │ │     ├── emoji-regex@8.0.0
  │ │     ├── is-fullwidth-code-point@3.0.0
  │ │     └── strip-ansi@6.0.0 deduped
  │ ├─┬ chalk@3.0.0
  │ │ ├─┬ ansi-styles@4.2.1
  │ │ │ ├── @types/color-name@1.1.1 deduped
  │ │ │ └─┬ color-convert@2.0.1
  │ │ │   └── color-name@1.1.4
  │ │ └─┬ supports-color@7.2.0
  │ │   └── has-flag@4.0.0 deduped
  │ ├─┬ configstore@5.0.1
  │ │ ├─┬ dot-prop@5.2.0
  │ │ │ └── is-obj@2.0.0
  │ │ ├── graceful-fs@4.2.4 deduped
  │ │ ├── make-dir@3.1.0 deduped
  │ │ ├─┬ unique-string@2.0.0
  │ │ │ └── crypto-random-string@2.0.0
  │ │ ├─┬ write-file-atomic@3.0.3
  │ │ │ ├── imurmurhash@0.1.4 deduped
  │ │ │ ├── is-typedarray@1.0.0
  │ │ │ ├── signal-exit@3.0.3
  │ │ │ └─┬ typedarray-to-buffer@3.1.5
  │ │ │   └── is-typedarray@1.0.0 deduped
  │ │ └── xdg-basedir@4.0.0 deduped
  │ ├── has-yarn@2.1.0
  │ ├── import-lazy@2.1.0
  │ ├─┬ is-ci@2.0.0
  │ │ └── ci-info@2.0.0 deduped
  │ ├─┬ is-installed-globally@0.3.2
  │ │ ├─┬ global-dirs@2.0.1
  │ │ │ └── ini@1.3.5
  │ │ └── is-path-inside@3.0.2 deduped
  │ ├── is-npm@4.0.0
  │ ├── is-yarn-global@0.3.0
  │ ├─┬ latest-version@5.1.0
  │ │ └─┬ package-json@6.5.0
  │ │   ├─┬ got@9.6.0
  │ │   │ ├── @sindresorhus/is@0.14.0
  │ │   │ ├─┬ @szmarczak/http-timer@1.1.2
  │ │   │ │ └── defer-to-connect@1.1.3
  │ │   │ ├─┬ cacheable-request@6.1.0
  │ │   │ │ ├─┬ clone-response@1.0.2
  │ │   │ │ │ └── mimic-response@1.0.1 deduped
  │ │   │ │ ├─┬ get-stream@5.2.0
  │ │   │ │ │ └── pump@3.0.0 deduped
  │ │   │ │ ├── http-cache-semantics@4.1.0
  │ │   │ │ ├─┬ keyv@3.1.0
  │ │   │ │ │ └── json-buffer@3.0.0
  │ │   │ │ ├── lowercase-keys@2.0.0
  │ │   │ │ ├── normalize-url@4.5.0
  │ │   │ │ └─┬ responselike@1.0.2
  │ │   │ │   └── lowercase-keys@1.0.1 deduped
  │ │   │ ├─┬ decompress-response@3.3.0
  │ │   │ │ └── mimic-response@1.0.1 deduped
  │ │   │ ├── duplexer3@0.1.4
  │ │   │ ├─┬ get-stream@4.1.0
  │ │   │ │ └─┬ pump@3.0.0
  │ │   │ │   ├─┬ end-of-stream@1.4.4
  │ │   │ │   │ └── once@1.4.0 deduped
  │ │   │ │   └── once@1.4.0 deduped
  │ │   │ ├── lowercase-keys@1.0.1 deduped
  │ │   │ ├── mimic-response@1.0.1
  │ │   │ ├── p-cancelable@1.1.0
  │ │   │ ├── to-readable-stream@1.0.0
  │ │   │ └─┬ url-parse-lax@3.0.0
  │ │   │   └── prepend-http@2.0.0
  │ │   ├─┬ registry-auth-token@4.2.0
  │ │   │ └─┬ rc@1.2.8
  │ │   │   ├── deep-extend@0.6.0
  │ │   │   ├── ini@1.3.5 deduped
  │ │   │   ├── minimist@1.2.5 deduped
  │ │   │   └── strip-json-comments@2.0.1
  │ │   ├─┬ registry-url@5.1.0
  │ │   │ └── rc@1.2.8 deduped
  │ │   └── semver@6.3.0
  │ ├─┬ pupa@2.0.1
  │ │ └── escape-goat@2.1.1
  │ ├─┬ semver-diff@3.1.1
  │ │ └── semver@6.3.0
  │ └── xdg-basedir@4.0.0
  └── UNMET PEER DEPENDENCY webpack@>=1.11.0

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

6 participants