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

eslint-plugin-force-barrel-imports

v1.0.0

Published

ESLint rule to prevent importing modules hidden behind an index.js barrel file

Downloads

116

Readme

eslint-plugin-force-barrel-imports


This ESLint plugin adds a single rule force-barrel-imports that prevents importing a JavaScript/TypeScript file directly if it has a parent barrel file (index.js/index.ts). This helps enforce internal modularization of projects and promote file-level visibility control.

Consider the following file structure for example:

root
├ module1
│ ├ index.ts
│ └ private1.ts
│
├ module2
│ ├ index.ts
│ └ private2.ts
│
└ top.ts

The rule will forbid directly importing private1.ts file from outside of module1 folder. Symbols defined in private1.ts can only be accessed from top.ts and private2.ts if they are re-exported from module1/index.ts.

Rule allows reaching to parent files. In this case, both private1.ts and private2.ts can reach to top.ts. Reaching to parent index.ts is not allowed.

Modules can contain other modules, in this case same rules apply.

root
├ module1
│ ├ module3
│ │ ├ index.ts
│ │ └ private3.ts
│ │
│ ├ index.ts
│ └ private1.ts
│
├ module2
│ ├ index.ts
│ └ private2.ts
│
└ top.ts
  • private1.ts can reach to module3/index.ts but not to private3.ts
  • private3.ts can reach to private1.ts, module2/index.ts and top.ts
  • top.ts can reach to module1/index.ts and module2/index.ts, but not to any of the private*.ts files

Installation

This plugin depends on the resolver logic from eslint-plugin-import, so it has to be installed too along with the required resolvers.

npm install --save-dev \
  eslint-plugin-force-barrel-imports \
  eslint-plugin-import \
  eslint-import-resolver-node \
  eslint-import-resolver-typescript

Enable both plugins, resolvers, and the force-barrel-imports rule in the eslint config of your project (.eslintrc.json):

{
  "plugins": [
    "import",
    "force-barrel-imports"
  ],
  "rules": {
    "force-barrel-imports/force-barrel-imports": "error"
  },
  "settings": {
    "import/resolver": {
      "typescript": true,
      "node": true
    }
  }
}

If you are not using TypeScript, eslint-import-resolver-typescript and "typescript": true should be omitted.