stemil23 Hono-EdgeDB-Cloudflare-starter .cursorrules file for TypeScript (stars: 2)

# .cursorrules

rules:
  # General TypeScript Rules
  - match: "*.ts"
    rules:
      - description: "Prefer explicit types for variables and function returns"
        regex: "(let|const) [a-zA-Z_][a-zA-Z0-9_]* ="
        replace: "$1 $2: type ="
        message: "Specify the type explicitly for better readability and type safety."

      - description: "Use camelCase for variable and function names"
        regex: "(let|const|function) [a-z0-9_]+"
        replace: "$1 camelCaseName"
        message: "Use camelCase for variable and function names to maintain consistency."

      - description: "Use PascalCase for class and interface names"
        regex: "(class|interface) [a-z][a-zA-Z0-9_]+"
        replace: "$1 PascalCaseName"
        message: "Use PascalCase for class and interface names for consistency."

  # EdgeDB-js Rules
  - match: "*.ts"
    rules:
      - description: "Prefer using edgeql-js query builder over raw EdgeQL strings"
        regex: "client\\.query\\(`"
        replace: "e.<query_method>()"
        message: "Use the edgeql-js query builder for type-safe and readable queries."

      - description: "Use generated edgeql-js types for better type safety"
        regex: "any"
        replace: "<GeneratedEdgeDBType>"
        message: "Replace 'any' with specific EdgeDB types generated by edgeql-js."

  # Hono Framework Rules
  - match: "*.ts"
    rules:
      - description: "Use Hono's request handler typing for type-safe route handlers"
        regex: "async function (req, res)"
        replace: "async (c: Context) =>"
        message: "Use Hono's context type for request handlers to ensure type safety."

  # File Structure Rules for Atomic Files
  - match: "*.ts"
    rules:
      - description: "Limit to one export per file to ensure atomic file structure"
        regex: "(export const|export function|export class) .*\\n(export const|export function|export class)"
        replace: ""
        message: "Consider breaking this file into multiple files with a single export per file."

      - description: "Ensure file names reflect their content and purpose (e.g., getUser.ts, createUserRoute.ts)"
        regex: "(queries|routes)\\/(.*)\\.(ts|js)"
        replace: "$1/$2.$3"
        message: "Follow the naming convention: queries should describe the action (e.g., getUser.ts), and routes should reflect the endpoint or handler (e.g., createUserRoute.ts)."

  # Enforce Documentation and Comments
  - match: "*.ts"
    rules:
      - description: "Ensure all functions have JSDoc comments"
        regex: "function [a-zA-Z_][a-zA-Z0-9_]*\\(.*\\)\\s*{"
        replace: "/**\n * Description of the function\n * @param {type} param - Description of the parameter\n * @returns {type} Description of the return value\n */\n$0"
        message: "Add JSDoc comments to functions to improve code readability and maintainability."

  # Optimize Import Statements
  - match: "*.ts"
    rules:
      - description: "Remove unused imports"
        regex: "import .* from '.*';\\s*"
        replace: ""
        message: "Remove unused imports to keep the codebase clean."

      - description: "Sort import statements alphabetically"
        regex: "(import .+ from '.+');\\n(import .+ from '.+');"
        replace: "$2\n$1"
        message: "Sort import statements alphabetically for better readability."

  # Error Handling Rules
  - match: "*.ts"
    rules:
      - description: "Use a consistent error handling approach in async functions"
        regex: "async function .+\$begin:math:text$.*\\$end:math:text$ \\{"
        replace: "async function <functionName>(<params>) {\n  try {\n    // your code here\n  } catch (error) {\n    // handle error\n  }\n}"
        message: "Ensure consistent error handling in async functions using try/catch."

  # Limit Function and Class Length
  - match: "*.ts"
    rules:
      - description: "Limit function length to 30 lines for better readability and maintainability"
        regex: "function [a-zA-Z_][a-zA-Z0-9_]*\$begin:math:text$.*\\$end:math:text$ {([^}]*)}"
        replace: ""
        message: "Refactor this function to reduce its length and improve readability."

      - description: "Limit class length to 200 lines for better maintainability"
        regex: "class [a-zA-Z_][a-zA-Z0-9_]* {([^}]*)}"
        replace: ""
        message: "Consider splitting this class into smaller, more focused classes."

  # Additional Best Practices
  - match: "*.ts"
    rules:
      - description: "Encourage the use of TypeScript interfaces for function parameters"
        regex: "function [a-zA-Z_][a-zA-Z0-9_]*\$begin:math:text$([^)]*)\\$end:math:text$:"
        replace: "interface FunctionParams {\n  // define parameter types here\n}\n\nfunction <functionName>(params: FunctionParams):"
        message: "Use TypeScript interfaces to define function parameters for better type safety."
css
edgeql
html
typescript

First Time Repository

Starter for Hono & EdgeDB using edgeql-js and EdgeDB generated TypeScript interfaces

TypeScript

Languages:

CSS: 0.7KB
EdgeQL: 8.4KB
HTML: 3.1KB
TypeScript: 46.8KB
Created: 9/6/2024
Updated: 9/30/2024

All Repositories (1)

Starter for Hono & EdgeDB using edgeql-js and EdgeDB generated TypeScript interfaces