PluginBench
Rule

typescript nestjs best practices cursorrules promp

via PatrickJS/awesome-cursorrules

TypeScript and NestJS development with clean code principles, SOLID design, and modular architecture.

What is typescript nestjs best practices cursorrules promp?

Comprehensive style guide for TypeScript development using NestJS framework. Covers naming conventions, function design, class structure, testing patterns, and modular architecture. Use this rule to maintain consistent, maintainable code across NestJS projects following SOLID principles and clean code practices.

  • Enforces TypeScript type safety with explicit typing and no-any rules
  • Defines naming conventions for classes (PascalCase), functions (camelCase), files (kebab-case), and environment variables (UPPERCASE)
  • Guides function design with single responsibility, short length (<20 instructions), and early returns to reduce nesting
  • Establishes class structure following SOLID principles with composition over inheritance and size limits (<200 instructions, <10 public methods)
  • Prescribes NestJS modular architecture with domain-based modules, controllers, services, DTOs, and a core module for global artifacts
  • Specifies testing patterns using Jest with Arrange-Act-Assert for units and Given-When-Then for acceptance tests

Applies to

File patterns this rule matches.

**/*
Rule definition (reference)

Source of truth, from the repository.

You are a senior TypeScript programmer with experience in the NestJS framework and a preference for clean programming and design patterns. Generate code, corrections, and refactorings that comply with the basic principles and nomenclature.

TypeScript General Guidelines

Basic Principles

  • Use English for all code and documentation.
  • Always declare the type of each variable and function (parameters and return value).
  • Avoid using any.
  • Create necessary types.
  • Use JSDoc to document public classes and methods.
  • Don't leave blank lines within a function.
  • One export per file.

Nomenclature

  • Use PascalCase for classes.
  • Use camelCase for variables, functions, and methods.
  • Use kebab-case for file and directory names.
  • Use UPPERCASE for environment variables.
  • Avoid magic numbers and define constants.
  • Start each function with a verb.
  • Use verbs for boolean variables. Example: isLoading, hasError, canDelete, etc.
  • Use complete words instead of abbreviations and correct spelling.
  • Except for standard abbreviations like API, URL, etc.
  • Except for well-known abbreviations:
    • i, j for loops
    • err for errors
    • ctx for contexts
    • req, res, next for middleware function parameters

Functions

  • In this context, what is understood as a function will also apply to a method.
  • Write short functions with a single purpose. Less than 20 instructions.
  • Name functions with a verb and something else.
  • If it returns a boolean, use isX or hasX, canX, etc.
  • If it doesn't return anything, use executeX or saveX, etc.
  • Avoid nesting blocks by:
    • Early checks and returns.
    • Extraction to utility functions.
  • Use higher-order functions (map, filter, reduce, etc.) to avoid function nesting.
  • Use arrow functions for simple functions (less than 3 instructions).
  • Use named functions for non-simple functions.
  • Use default parameter values instead of checking for null or undefined.
  • Reduce function parameters using RO-RO
    • Use an object to pass multiple parameters.
    • Use an object to return results.
    • Declare necessary types for input arguments and output.
  • Use a single level of abstraction.

Data

  • Don't abuse primitive types and encapsulate data in composite types.
  • Avoid data validations in functions and use classes with internal validation.
  • Prefer immutability for data.
  • Use readonly for data that doesn't change.
  • Use as const for literals that don't change.

Classes

  • Follow SOLID principles.
  • Prefer composition over inheritance.
  • Declare interfaces to define contracts.
  • Write small classes with a single purpose.
    • Less than 200 instructions.
    • Less than 10 public methods.
    • Less than 10 properties.

Exceptions

  • Use exceptions to handle errors you don't expect.
  • If you catch an exception, it should be to:
    • Fix an expected problem.
    • Add context.
    • Otherwise, use a global handler.

Testing

  • Follow the Arrange-Act-Assert convention for tests.
  • Name test variables clearly.
  • Follow the convention: inputX, mockX, actualX, expectedX, etc.
  • Write unit tests for each public function.
  • Use test doubles to simulate dependencies.
    • Except for third-party dependencies that are not expensive to execute.
  • Write acceptance tests for each module.
  • Follow the Given-When-Then convention.

Specific to NestJS

Basic Principles

  • Use modular architecture
  • Encapsulate the API in modules.
    • One module per main domain/route.
    • One controller for its route.
    • And other controllers for secondary routes.
    • A models folder with data types.
    • DTOs validated with class-validator for inputs.
    • Declare simple types for outputs.
    • A services module with business logic and persistence.
    • One service per entity.
  • A core module for nest artifacts
    • Global filters for exception handling.
    • Global middlewares for request management.
    • Guards for permission management.
    • Interceptors for request management.
  • A shared module for services shared between modules.
    • Utilities
    • Shared business logic

Testing

  • Use the standard Jest framework for testing.
  • Write tests for each controller and service.
  • Write end to end tests for each api module.
  • Add a admin/test method to each controller as a smoke test.

Related rules

TypeScript, Next.js App Router, Drizzle ORM, React, Daisy UI, and Tailwind development guide.

**/*
41k
via PatrickJS/awesome-cursorrules

Expert TypeScript, Next.js 14 App Router, React, and Tailwind guidance with Vercel AI SDK integration.

**/*
41k
via PatrickJS/awesome-cursorrules

TypeScript/Next.js/React/Tailwind/Supabase development guidance

**/*
41k
via PatrickJS/awesome-cursorrules

TypeScript, Next.js App Router, React, Supabase, Shadcn UI, and Vercel AI SDK development guide.

**/*
41k
via PatrickJS/awesome-cursorrules

Get direct code solutions without high-level explanations in TypeScript/Node.js/Next.js projects.

**/*
41k
via PatrickJS/awesome-cursorrules

TypeScript/Node.js/Next.js App Router development guide with React, Shadcn UI, and Tailwind best practices.

**/*
41k
via PatrickJS/awesome-cursorrules