Skip to content

technote-space/eslint-plugin-strict-dependencies

 
 

Repository files navigation

eslint-plugin-strict-dependencies

ESlint plugin to define custom module dependency rules.

NOTE: eslint-plugin-strict-dependencies uses tsconfig, tsconfig.json must be present.

Table of Contents

Details

Installation

npm install @technote-space/eslint-plugin-strict-dependencies --save-dev

Supported Rules

  • strict-dependencies
    • module: string (Glob or Forward matching string)
      • target module path
    • allowReferenceFrom: string[] (Glob or Forward matching string)
      • Paths of files where target module imports are allowed.
    • allowSameModule: boolean
      • Whether it can be imported by other files in the same directory
    • allowTypeImport: boolean
      • Whether to allow type import

Options

  • resolveRelativeImport: boolean[default = false]
    • Whether to resolve relative import as in the following example
    • src/components/aaa.ts
    import bbb from './bbb';
    • ./bbb: resolveRelativeImport = false
    • src/components/bbb: resolveRelativeImport = true
  • allowTypeImport: boolean
    • Whether to allow type import

Usage

.eslintrc:

"plugins": [
  "@technote-space/strict-dependencies",
],
"rules": {
  "@technote-space/strict-dependencies/strict-dependencies": [
    "error",
    [
      /**
       * Example:
       * Limit the dependencies in the following directions
       * pages -> components/page -> components/ui
       */
      {
        "module": "src/components/page",
        "allowReferenceFrom": ["src/pages"],
        // components/page can't import other components/page
        "allowSameModule": false,
        "allowTypeImport": true
      },
      {
        "module": "src/components/ui",
        "allowReferenceFrom": ["src/components/page"],
        // components/ui can import other components/ui
        "allowSameModule": true
      },

      /**
       * example:
       * Disallow to import `next/router` directly. it should always be imported using `libs/router.ts`.
       */
      {
        "module": "next/router",
        "allowReferenceFrom": ["src/libs/router.ts"],
        "allowSameModule": false
      },
    ],
    // options
    // {
    //   "resolveRelativeImport": true,
    //   "allowTypeImport": true
    // }
  ]
}

License

MIT

About

No description, website, or topics provided.

Resources

License

Code of conduct

Stars

Watchers

Forks

Languages

  • TypeScript 97.4%
  • JavaScript 2.0%
  • Shell 0.6%