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

@snowball-tech/eslint-config

v5.6.2

Published

ESLint ruleset by Snowball supporting React & Next.JS, Typescript, Prettier and more, based on Airbnb config

Downloads

454

Readme

Snowball ESLint Config


eslint-config eslint-config-dependants eslint-config-downloads eslint-config-score


This package provides a rich, composable and opinionated ESLint configuration based on Snowball engineering standards.

This configuration supports:

Checkout all the js files to learn more about the configurations.

Installation

Using Yarn:

yarn add --dev @snowball-tech/eslint-config eslint

Or using NPM:

npm install --save-dev @snowball-tech/eslint-config eslint

Note that depending on the configuration you use, you might need to install additionals dependency like prettier or typescript

Usage

This package comes with a patch coming from the Rushstack project

This patch allows to use ESLint dependencies bundled with the package instead of having to manually install them in your repository.

To be able to properly use the config thanks to the patch, you must use the JavaScript style of ESLint configuration (e.g. .eslintrc.js) and start your configuration by importing the patch:

// This allows to use the dependencies installed by the package instead of
// having to manually install all dependencies.
require('@snowball-tech/eslint-config/patch')

Default configuration

The package offers a default ESLint configuration containing:

To use this default configuration, simply extend it in you own ESLint configuration using JavaScript configuration file .eslintrc.js:

require('@snowball-tech/eslint-config/patch')

module.exports = {
  extends: ['@snowball-tech/eslint-config'],
}

Ignored files

Ignored files are defined in the ignorePatterns config of the base configuration.

Complete configuration

You also have the possibility to use the full configuration, including:

require('@snowball-tech/eslint-config/patch')

module.exports = {
  extends: ['@snowball-tech/eslint-config/full'],
}

Make your own configuration

Finally, you can also compose you own configuration using each set of configuration exposed by the config.

To do so, simply extend the configuration you want to use in your own ESLint and pick whichever you want in the list below:

It's recommended to always include the base configuration in the first position.

Note that the base configuration also contains the default ignorePatterns.

{
  "extends": [
    "@snowball-tech/eslint-config/base",
    "@snowball-tech/eslint-config/html",
    "@snowball-tech/eslint-config/json",
    "@snowball-tech/eslint-config/markdown",
    "@snowball-tech/eslint-config/sql",
    "@snowball-tech/eslint-config/yml",
    "@snowball-tech/eslint-config/secrets",
    "@snowball-tech/eslint-config/import",
    "@snowball-tech/eslint-config/typescript",
    "@snowball-tech/eslint-config/typescript-with-type-checking",
    "@snowball-tech/eslint-config/react",
    "@snowball-tech/eslint-config/next",
    "@snowball-tech/eslint-config/jest",
    "@snowball-tech/eslint-config/testing-library",
    "@snowball-tech/eslint-config/lodash",
    "@snowball-tech/eslint-config/storybook",
    "@snowball-tech/eslint-config/perfectionist",
    "@snowball-tech/eslint-config/tailwind",
    "@snowball-tech/eslint-config/prettier"
  ]
}

⚠️ Important notes: when composing your own configuration, try to keep the configurations files in the order above to ensure the proper behavior of the linter.

Prettier must always be the last!

typescript-with-type-checking must always be after typescript!

Note that enabling type checking linting might have a serious impact on your linter performances. Also note that when enabling type checking linting, you will have to add additional configuration to your own linter configuration:

module.exports = {
  // [...] skipped for brevity.

  parserOptions: {
    // You can also use `__dirname`.
    tsconfigRootDir: './',
  },

  // [...] skipped for brevity.
}

Also, to improve performances, you can specify the tsconfig.json file name(s) you want to use instead of relying on project: true. For example:

module.exports = {
  // [...] skipped for brevity.

  parserOptions: {
    project: ['apps/**/tsconfig.json', 'packages/**/tsconfig*.json'],
    // You can also use `__dirname`.
    tsconfigRootDir: './',
  },

  // [...] skipped for brevity.
}

See https://typescript-eslint.io/linting/typed-linting/#how-is-performance and more generally see https://typescript-eslint.io/linting/typed-linting/ for more information

Of course, you can also extend any other configuration coming from any other config or plugin and add you own rules and overrides to your configuration.

Development

If you want to contribute, update or edit this ESLint configuration:

  • First, install the needed dependencies:
yarn

Or (if you use NPM):

npm install
  • Make the modifications you want
  • Test your updates

All your modification should be immediately picked up by the linter in your IDE or using the CLI scripts, so you can check that everything works as expected.

  • Commit and push your changes and open a Pull Request.
  • When your changes are approved and merged in the main branch, a new release will be automatically created and published to NPM.

Useful Commands

  • yarn run format-fix to format the code according to our formatting guidelines (using Prettier);
  • yarn run lint-fix: to check that the code matches our coding guidelines and automatically fix what can be fixed (using ESLint);
  • yarn run test: run all the unit tests;
  • yarn run test-dev: run the tests for modified components and re-trigger runs everytime something is modified;

Linting & Formatting

See the dedicated CONVENTIONS.md and TOOLING.md documentations.

Dependencies

Always remember to add dependency if you really need it to avoid cluttering the packages and degrading the performance both in the developers and users side.

It is your duty as a member of the Snowball's engineering team to help mainting the dependencies up to date. This means that you are expected and should help reviewing, testing and merging dependencies updates PRs on a regular basis.

The best way to do so is to regularly check the Renovate dashboard and the list of Pull Requests, for example every morning at the beginning of your day.

Also, see the dedicated TOOLING.md documentation for more information.

Tooling

See the dedicated TOOLING.md documentation.

Contributing

See the dedicated CONTRIBUTING.md documentation.

Conventions

See the dedicated CONVENTIONS.md documentation.

Help and feedback

If you have any questions or feedback, feel free to reach out to us using this repository issues or discussions.

You can also use the internal #engineering Slack channel if you are a member of the Snowball tech team.