CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/npm-eslint-plugin-import

ESLint plugin that enforces ES2015+ import/export syntax rules and prevents common issues with module imports.

Pending
Quality

Pending

Does it follow best practices?

Impact

Pending

No eval scenarios have been run

SecuritybySnyk

Pending

The risk profile of this skill

Overview
Eval results
Files

configuration-presets.mddocs/

Configuration Presets

Pre-configured rule sets optimized for different environments and use cases, available in both legacy and flat configuration formats.

Capabilities

Legacy Configurations

Traditional ESLint configuration format for ESLint versions prior to v9.

/**
 * Legacy configurations object for ESLint < 9
 * @type {{ [configName: string]: Linter.LegacyConfig }}
 */
const configs = {
  recommended: LegacyConfig,
  errors: LegacyConfig,
  warnings: LegacyConfig,
  "stage-0": LegacyConfig,
  react: LegacyConfig,
  "react-native": LegacyConfig,
  electron: LegacyConfig,
  typescript: LegacyConfig
};

interface LegacyConfig {
  plugins: string[];
  rules: { [ruleName: string]: RuleConfig };
  parserOptions?: {
    sourceType: "module" | "script";
    ecmaVersion: number;
  };
  extends?: string[];
  env?: { [envName: string]: boolean };
  settings?: { [settingName: string]: any };
}

Flat Configurations

Modern ESLint configuration format for ESLint v9 and later.

/**
 * Flat configurations object for ESLint >= 9
 * @type {{ [configName: string]: Linter.FlatConfig }}
 */
const flatConfigs = {
  recommended: FlatConfig,
  errors: FlatConfig,
  warnings: FlatConfig,
  react: FlatConfig,
  "react-native": FlatConfig,
  electron: FlatConfig,
  typescript: FlatConfig
  // Note: stage-0 config not available in flat format
};

interface FlatConfig {
  name: string;
  plugins: { [pluginName: string]: any };
  rules: { [ruleName: string]: RuleConfig };
  languageOptions?: {
    sourceType: "module" | "script";
    ecmaVersion: number;
    parser?: any;
    parserOptions?: any;
  };
  settings?: { [settingName: string]: any };
}

Configuration Details

recommended

Essential rules for import/export validation - the baseline configuration for most projects.

/**
 * Recommended configuration with essential import/export rules
 */
// Legacy format
const recommendedLegacy = {
  plugins: ["import"],
  rules: {
    // Static analysis/correctness  
    "import/no-unresolved": "error",
    "import/named": "error",
    "import/namespace": "error", 
    "import/default": "error",
    "import/export": "error",
    
    // Red flags (warnings)
    "import/no-named-as-default": "warn",
    "import/no-named-as-default-member": "warn", 
    "import/no-duplicates": "warn"
  },
  parserOptions: {
    sourceType: "module",
    ecmaVersion: 2018
  }
};

// Flat format  
const recommendedFlat = {
  name: "import/recommended",
  plugins: { import: importPlugin },
  rules: {
    "import/no-unresolved": "error",
    "import/named": "error",
    "import/namespace": "error",
    "import/default": "error", 
    "import/export": "error",
    "import/no-named-as-default": "warn",
    "import/no-named-as-default-member": "warn",
    "import/no-duplicates": "warn"
  },
  languageOptions: {
    ecmaVersion: 2018,
    sourceType: "module"
  }
};

Usage Examples:

// Legacy ESLint config
module.exports = {
  extends: ["plugin:import/recommended"]
};

// Flat ESLint config  
import importPlugin from "eslint-plugin-import";
export default [importPlugin.flatConfigs.recommended];

errors

Configuration with only error-level rules, focusing on critical import issues.

/**
 * Errors-only configuration focusing on critical issues
 */
const errorsConfig = {
  // Legacy format
  plugins: ["import"],
  rules: {
    "import/no-unresolved": "error",
    "import/named": "error",
    "import/namespace": "error",
    "import/default": "error",
    "import/export": "error"
  },
  parserOptions: {
    sourceType: "module",
    ecmaVersion: 2018
  }
};

warnings

Configuration with only warning-level rules for less critical issues.

/**
 * Warnings-only configuration for less critical issues
 */
const warningsConfig = {
  // Legacy format
  plugins: ["import"],
  rules: {
    "import/no-named-as-default": "warn",
    "import/no-named-as-default-member": "warn",
    "import/no-duplicates": "warn"
  },
  parserOptions: {
    sourceType: "module", 
    ecmaVersion: 2018
  }
};

stage-0

Experimental "work in progress" rules not yet ready for production use.

/**
 * Stage-0 configuration with experimental rules
 */
const stage0Config = {
  // Legacy format
  plugins: ["import"],
  rules: {
    "import/no-deprecated": "warn"
  },
  parserOptions: {
    sourceType: "module",
    ecmaVersion: 2018
  }
};

react

Configuration optimized for React projects with additional React-specific rules.

/**
 * React-optimized configuration
 */
const reactConfig = {
  // Legacy format
  plugins: ["import"],
  rules: {
    // All recommended rules
    "import/no-unresolved": "error",
    "import/named": "error",
    "import/namespace": "error",
    "import/default": "error",
    "import/export": "error",
    "import/no-named-as-default": "warn",
    "import/no-named-as-default-member": "warn",
    "import/no-duplicates": "warn",
    
    // React-specific additions
    "import/no-anonymous-default-export": "error"
  },
  parserOptions: {
    sourceType: "module",
    ecmaVersion: 2018,
    ecmaFeatures: {
      jsx: true
    }
  },
  env: {
    es6: true
  }
};

react-native

Configuration for React Native projects with mobile-specific considerations.

/**
 * React Native configuration
 */
const reactNativeConfig = {
  // Legacy format
  plugins: ["import"],
  rules: {
    // All React rules
    "import/no-unresolved": "error",
    "import/named": "error", 
    "import/namespace": "error",
    "import/default": "error",
    "import/export": "error",
    "import/no-named-as-default": "warn",
    "import/no-named-as-default-member": "warn",
    "import/no-duplicates": "warn",
    "import/no-anonymous-default-export": "error",
    
    // React Native specific  
    "import/no-nodejs-modules": "error"
  },
  parserOptions: {
    sourceType: "module",
    ecmaVersion: 2018,
    ecmaFeatures: {
      jsx: true
    }
  },
  env: {
    es6: true
  }
};

electron

Configuration for Electron applications supporting both main and renderer processes.

/**
 * Electron configuration for main and renderer processes
 */
const electronConfig = {
  // Legacy format
  plugins: ["import"],
  rules: {
    // All recommended rules
    "import/no-unresolved": "error",
    "import/named": "error",
    "import/namespace": "error", 
    "import/default": "error",
    "import/export": "error",
    "import/no-named-as-default": "warn",
    "import/no-named-as-default-member": "warn",
    "import/no-duplicates": "warn"
    
    // Note: Node.js modules allowed for main process
    // Renderer process may need additional restrictions
  },
  parserOptions: {
    sourceType: "module",
    ecmaVersion: 2018
  },
  env: {
    node: true,
    es6: true
  }
};

typescript

Configuration optimized for TypeScript projects with type-aware rules.

/**
 * TypeScript-optimized configuration
 */
const typescriptConfig = {
  // Legacy format
  plugins: ["import"],
  rules: {
    // All recommended rules
    "import/no-unresolved": "error",
    "import/named": "error",
    "import/namespace": "error",
    "import/default": "error", 
    "import/export": "error",
    "import/no-named-as-default": "warn",
    "import/no-named-as-default-member": "warn",
    "import/no-duplicates": "warn",
    
    // TypeScript-specific
    "import/consistent-type-specifier-style": ["error", "prefer-inline"]
  },
  parserOptions: {
    sourceType: "module",
    ecmaVersion: 2018
  },
  settings: {
    "import/extensions": [".js", ".jsx", ".ts", ".tsx"],
    "import/parsers": {
      "@typescript-eslint/parser": [".ts", ".tsx"]
    },
    "import/resolver": {
      typescript: {
        alwaysTryTypes: true
      }
    }
  }
};

Usage Examples

Using Preset Configurations

// Legacy ESLint config - single preset
module.exports = {
  extends: ["plugin:import/recommended"]
};

// Legacy ESLint config - multiple presets
module.exports = {
  extends: [
    "plugin:import/recommended",
    "plugin:import/typescript"
  ]
};

// Flat ESLint config - single preset
import importPlugin from "eslint-plugin-import";
export default [
  importPlugin.flatConfigs.recommended
];

// Flat ESLint config - multiple presets
export default [
  importPlugin.flatConfigs.recommended,
  importPlugin.flatConfigs.typescript
];

Customizing Preset Configurations

// Legacy config with customizations
module.exports = {
  extends: ["plugin:import/recommended"],  
  rules: {
    // Override preset rules
    "import/no-unresolved": "warn", // Change from error to warn
    "import/order": ["error", {     // Add additional rule
      "newlines-between": "always"
    }]
  }
};

// Flat config with customizations
import importPlugin from "eslint-plugin-import";
export default [{
  ...importPlugin.flatConfigs.recommended,
  rules: {
    ...importPlugin.flatConfigs.recommended.rules,
    "import/no-unresolved": "warn",
    "import/order": ["error", { "newlines-between": "always" }]
  }
}];

Environment-Specific Configurations

// Multi-environment project
export default [
  // Base config for all files
  {
    ...importPlugin.flatConfigs.recommended,
    files: ["src/**/*.{js,ts}"]
  },
  
  // Node.js specific (server files)
  {
    ...importPlugin.flatConfigs.recommended,
    files: ["server/**/*.js"],
    rules: {
      ...importPlugin.flatConfigs.recommended.rules,
      "import/no-nodejs-modules": "off" // Allow Node.js modules
    }
  },
  
  // React specific (client files)  
  {
    ...importPlugin.flatConfigs.react,
    files: ["src/components/**/*.{js,jsx,ts,tsx}"]
  },
  
  // TypeScript specific
  {
    ...importPlugin.flatConfigs.typescript,
    files: ["**/*.{ts,tsx}"]
  }
];

Configuration Inheritance

// Custom configuration extending presets
const customConfig = {
  ...importPlugin.flatConfigs.recommended,
  name: "custom-import-config",
  rules: {
    ...importPlugin.flatConfigs.recommended.rules,
    ...importPlugin.flatConfigs.typescript.rules,
    // Additional custom rules
    "import/order": ["error", {
      "groups": ["builtin", "external", "internal", "parent", "sibling"],
      "newlines-between": "always",
      "alphabetize": { "order": "asc" }
    }]
  }
};

export default [customConfig];

docs

configuration-presets.md

helpful-warnings-rules.md

index.md

module-systems-rules.md

plugin-interface.md

static-analysis-rules.md

style-guide-rules.md

tile.json