Sign Up for Free

RunKit +

Try any Node.js package right in your browser

This is a playground to test code. It runs a full Node.js environment and already has all of npm’s 1,000,000+ packages pre-installed, including jsx-info with all npm packages installed. Try it out:

jsx-info lists no main file and has no index.js, so it can't be directly required. If this is a mistake, please let us know. It may however contain internal files that you can require manually:

// require("jsx-info/[??]")

This service is provided by RunKit and is not affiliated with npm, Inc or the package authors.

jsx-info v1.6.1

displays a report of JSX component and prop usage

jsx-info

Displays a report of JSX component and prop usage.

Watch my demonstration video for more information.

Why

First of all, I thought it would be cool to see all this info. But more importantly, I think jsx-info can be used to help refactor your code.

Let's say you have a component called <DataTable> that takes 43 different props. If you needed to rewrite <DataTable> from scratch, you might not want to keep as many different props. Using jsx-info you could analyze which props get used the most and start porting that functionality first.

If the usage of a particular prop is very low, you might even choose to get rid of that prop and rewrite the calling code to use something else instead.

The intended workflow here is to run jsx-info and compare the data with your prop-types or TypeScript/Flow type definitions to find discrepencies.

Installation

Automatically install and run jsx-info:

$ npx jsx-info

(Optional) Install locally to your project to speed up repeated usage:

$ npm i -D jsx-info
$ npx jsx-info

Usage

$ npx jsx-info

jsx-info hooks into .gitignore files to automatically ignore files that are not part of your project (typically node_modules/ and other directories). It does not have any other way of filtering out files, currently.

If you pass additional arguments, they are JSX element names to scan for (instead of scanning every JSX element):

$ npx jsx-info div button React.Fragment

By default jsx-info starts scanning in the current directory, but you can use a different directory like this:

$ npx jsx-info --directory app/src

Find <Button kind="primary">

$ npx jsx-info --report lines --prop kind=primary Button

Find all uses of the prop id

$ npx jsx-info --report lines --prop id

Configuration

In order to avoid repeating command line arguments as often, jsx-info supports reading command line argument defaults from a configuration file. You can either put defaults in a .jsx-info.json file or under a key named "jsx-info" in your package.json file.

Either way, your configuration should be JSON that looks like this, where every key is optional:

{
  "babelPlugins": ["decorators-legacy", "pipelineOperator"],
  "directory": "src",
  "ignore": ["**/__test__", "legacy/**"],
  "files": ["**/*.{js,jsx,tsx}"]
}

Note

jsx-info strives to parse all standard JS, JSX, and TypeScript syntax. This means that only stage-3 or higher proposals will be supported. I do not recommend using non-official JS syntax in your project.

If you are having problems with jsx-info parsing your code, please file an issue. There are many options I can pass to Babel's parse function, and I'm trying to be conservative with how many I pass.

Updates

My hope is to update jsx-info based on community feedback. It is NOT available as a library to require() on npm, only as a command line program. The current text output format is NOT stable and should not be parsed by programs. If there is sufficient community interest, I may consider exposing the code as a JS library for more customized use cases (such as parsing non-standard syntax).

Contributions

Please read the Code of Conduct before contributing to the project. It is non-negotiable.

All types of contributions are welcome: code, documentation, questions, suggestions, etc. Yes, I think questions are a form of contribution. The only way I can make this tool better is by getting feedback from users.

License

Copyright © Brian Mock under the MIT License.

Metadata

RunKit is a free, in-browser JavaScript dev environment for prototyping Node.js code, with every npm package installed. Sign up to share your code.
Sign Up for Free