smeijer / unimported

Find and fix dangling files and unused dependencies in your JavaScript projects.
MIT License
1.97k stars 71 forks source link

feat: add support for alternative config files with cosmiconfig #178

Closed ryanwilsonperkin closed 1 year ago

ryanwilsonperkin commented 1 year ago

Fixes #118

Introduces cosmiconfig as requested in #118 in order to support loading the config from alternative file formats like:

.unimportedrc.js
.unimportedrc.yml
package.json > "unimported" key

I'm using cosmiconfigSync utilities instead of the async version, despite them being available since the getConfig is an async method. When we use the async equivalent, we hit a segfault in Node as a result of cosmiconfig trying to call a dynamic import on the file within a Jest context that doesn't allow it to. Patched in a recent version of Node, and once the test infra can require the latest version it should be fine to switch to the async version.

See https://github.com/nodejs/node/issues/35889 and https://github.com/jestjs/jest/issues/11438

I haven't made any efforts to change the update function to write updates to the loaded files, as this would be difficult/impossible to update something like a .js or .yml (if using features like anchors) in a meaningful way.

A few notes on the other changes included:

  1. cosmiconfig pulls in a newer version of TypeScript which was incompatible with the version of @types/node we used, updated it
  2. One of the tests produced invalid JSON to a config file, which failed silently before and passed the test, but now fails loudly when cosmiconfig tries to read and parse the JSON. Updated it to be valid to fulfill the spirit of the test.
smeijer commented 1 year ago

@all-contributors please add @ryanwilsonperkin for code, test

allcontributors[bot] commented 1 year ago

@smeijer

I've put up a pull request to add @ryanwilsonperkin! :tada:

smeijer commented 1 year ago

I've also added you as a collaborator on the project. Please continue to make PRs as you feel the need. You can now make your branches directly on the repo rather than your fork if you want.

Thanks for your contributions! Much appreciated. :heart:

ryanwilsonperkin commented 1 year ago

Thanks! Had started building a similar tool to help me do some dead code analysis and then came across this tool. Happy to be able to contribute to it

smeijer commented 1 year ago

:tada: This PR is included in version 1.30.0 :tada:

The release is available on:

Your semantic-release bot :package::rocket: