npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

import-sort-style-jsxpragma

v1.0.2

Published

An import-sort style that places jsx pragma compiler directives and associated jsx imports at the top of code files, and groups and sorts by module with support for scoped modules.

Downloads

4

Readme

@webstackbuilders/import-sort-style-jsxpragma

It you are using a custom jsx pragma compiler directive, such as from emotion or theme-ui, other import-sort styles won't handle moving the compiler directive and pragma import together to the top of the file. You'll end up with an unused-import error from eslint-plugin-unused-imports if you are using that ESLint rule which is included in a number of ESLint presets. This forces you to also include an eslint-disable-next-line directive before the jsx import, or to turn off an otherwise-helpful rule if you are using custom jsx pragmas on a per-page basis.

Correct:

/** @jsx jsx */
import { jsx } from 'theme-ui'

// ... other imports

This is a style for import-sort that ensures custom jsx pragmas and their associated imports are always sorted at the top of a module, and then groups modules together. It also handles scoped modules e.g. @myScope using TypeScript paths in tsconfig or a similar approach.

Install

NPM:

npm i --save-dev @webstackbuilders/import-sort-style-jsxpragma sort-importer

Yarn:

yarn add @webstackbuilders/import-sort-style-jsxpragma sort-importer -D

Configure

Add the following to your package.json file. You can also change your parser.

"importSort": {
  ".js, .jsx, .es6, .es, .mjs, .ts, .tsx": {
    "style": "jsxpragma"
  }
}

Behavior

Any import of a jsx pragma will placed at the top of the code file. The compiler directive (/** @jsx jsx */) should be on the line directly above the jsx pragma import.

//
//----------------------------------------------------------------------------
/** @jsx jsx */
import { jsx } from 'theme-ui'

// Absolute modules with side effects, not sorted because order may matter)
import 'a'
import 'c'
import 'b'

// Relative modules with side effects, not sorted because order may matter
import './a'
import './c'
import './b'

// Modules from the Node.js "standard" library sorted by name
import { readFile, writeFile } from 'fs'
import * as path from 'path'

// Third-party modules sorted by name
import aa from 'aa'
import bb from 'bb'

// Scoped modules
import aa from '@myScope/aa'
import bb from '@myScope/bb'
import cc from '@yourScope/cc'

// First-party modules sorted by "relative depth" and then by name
import aaa from '../../aaa'
import bbb from '../../bbb'
import aaaa from '../aaaa'

Sorting imports

There are multiple ways to sort your imports:

To sort from the command line, install sort-importer with npm install -g import-sort-cli or use it directly with npx import-sort-cli.

Comments

Comments are moved with their associated import if there are no blank lines between the two, and also if they are inline.

import foo from 'bar' // This comment will move with the import
// This comment will also move with the import
import foo from 'bar'
// This comment won't move with the import

// This comment will move with the import
import foo from 'bar'
// This comment won't move with the import

For copyright headers and compiler pragmas like @flow that are not in a comment block, a blank line should be added after the comment with the exception of jsx compiler directives (to avoid ESLint unused-import errors if you are using that rule).

// @flow

import foo from 'bar'

Tests

Tests use Jest snapshots to test sorting matchers:

npm run test

Snapshots can be updated if code changes as follows. They will not automatically be updated in CI but are committed to the repo.

npm run test --updateSnapshot