eslint-plugin-modularity
v2.0.4
Published
ESLint rules for architecture, DDD patterns, and module isolation with AI-parseable guidance.
Maintainers
Readme
Description
This plugin provides Security-focused ESLint plugin. By using this plugin, you can proactively identify and mitigate security risks across your entire codebase.
Philosophy
Interlace fosters strength through integration. Instead of stacking isolated rules, we interlace security directly into your workflow to create a resilient fabric of code. We believe tools should guide rather than gatekeep, providing educational feedback that strengthens the developer with every interaction.
Getting Started
- To check out the guide, visit eslint.interlace.tools. 📚
- 要查看中文 指南, 请访问 eslint.interlace.tools. 📚
- 가이드 문서는 eslint.interlace.tools에서 확인하실 수 있습니다. 📚
- ガイドは eslint.interlace.toolsでご確認ください。 📚
- Para ver la guía, visita eslint.interlace.tools. 📚
- للاطلاع على الدليل، قم بزيارة eslint.interlace.tools. 📚
npm install eslint-plugin-modularity --save-dev⚙️ Configuration Presets
| Preset | Description |
| :------------ | :----------------------------------------- |
| recommended | Balanced DDD and architecture enforcement |
| strict | All rules as errors for strict enforcement |
🏢 Usage Example
// eslint.config.js
import modularity from 'eslint-plugin-modularity';
export default [
modularity.configs.recommended,
// Apply strict DDD enforcement to domain layer
{
files: ['src/domain/**/*.ts'],
...modularity.configs.strict,
},
];Why These Rules?
ddd-anemic-domain-model
Detects domain entities that are just data containers without behavior — a common anti-pattern.
// ❌ Bad: Anemic model, no behavior
class Order {
id: string;
items: OrderItem[];
status: OrderStatus;
}
// ✅ Good: Rich domain model with behavior
class Order {
id: string;
private items: OrderItem[];
private status: OrderStatus;
addItem(item: OrderItem): void {
/* ... */
}
submit(): void {
/* ... */
}
cancel(reason: string): void {
/* ... */
}
}ddd-value-object-immutability
Value objects should be immutable. This rule catches mutable value objects.
// ❌ Bad: Mutable value object
class Money {
amount: number; // Can be mutated!
}
// ✅ Good: Immutable value object
class Money {
readonly amount: number;
readonly currency: string;
add(other: Money): Money {
return new Money(this.amount + other.amount, this.currency);
}
}no-external-api-calls-in-utils
Utility modules should be pure functions without side effects like API calls.
// ❌ Bad: Utils with external dependencies
// src/utils/formatters.ts
import axios from 'axios';
export async function fetchAndFormat(id: string) {
const data = await axios.get(`/api/${id}`); // External API call!
return format(data);
}
// ✅ Good: Pure utility function
export function format(data: Data): FormattedData {
return {
/* pure transformation */
};
}Rules
Legend
| Icon | Description |
| :---: | :--- |
| 💼 | Recommended: Included in the recommended preset. |
| ⚠️ | Warns: Set towarn in recommended preset. |
| 🔧 | Auto-fixable: Automatically fixable by the --fix CLI option. |
| 💡 | Suggestions: Providing code suggestions in IDE. |
| 🚫 | Deprecated: This rule is deprecated. |
| Rule | CWE | OWASP | CVSS | Description | 💼 | ⚠️ | 🔧 | 💡 | 🚫 | | :--- | :---: | :---: | :---: | :--- | :---: | :---: | :---: | :---: | :---: | | ddd-anemic-domain-model | | | | ESLint rule documentation for ddd-anemic-domain-model | | | | | | | ddd-value-object-immutability | | | | ESLint rule documentation for ddd-value-object-immutability | | | | | | | enforce-naming | | | | ESLint rule documentation for enforce-naming | | | | | | | enforce-rest-conventions | | | | ESLint rule documentation for enforce-rest-conventions | | | | | | | no-external-api-calls-in-utils | | | | ESLint rule documentation for no-external-api-calls-in-utils | | | | | |
🔗 Related ESLint Plugins
Part of the Interlace ESLint Ecosystem — AI-native security plugins with LLM-optimized error messages:
| Plugin | Downloads | Description |
| :--- | :---: | :--- |
| eslint-plugin-secure-coding | | General security rules & OWASP guidelines. |
|
eslint-plugin-pg | | PostgreSQL security & best practices. |
|
eslint-plugin-crypto | | NodeJS Cryptography security rules. |
|
eslint-plugin-jwt | | JWT security & best practices. |
|
eslint-plugin-browser-security | | Browser-specific security & XSS prevention. |
|
eslint-plugin-express-security | | Express.js security hardening rules. |
|
eslint-plugin-lambda-security | | AWS Lambda security best practices. |
|
eslint-plugin-nestjs-security | | NestJS security rules & patterns. |
|
eslint-plugin-mongodb-security | | MongoDB security best practices. |
|
eslint-plugin-vercel-ai-security | | Vercel AI SDK security hardening. |
|
eslint-plugin-import-next | | Next-gen import sorting & architecture. |
📄 License
MIT © Ofri Peretz
