ESLint Drizzle Plugin

ESLint Drizzle Plugin

특정 시나리오에서 타입 체크를 수행하는 것이 불가능하거나, 가능하더라도 에러 메시지를 이해하기 어려운 경우를 위해 권장 규칙이 포함된 ESLint 패키지를 만들었습니다. 이 패키지는 개발 중 중요한 시나리오를 처리하는 데 도움을 줍니다.

설치

npm
yarn
pnpm
bun
npm i eslint-plugin-drizzle
npm i @typescript-eslint/eslint-plugin @typescript-eslint/parser

사용법

.eslintrc.yml 예제

root: true
parser: '@typescript-eslint/parser'
parserOptions:
  project: './tsconfig.json'
plugins:
  - drizzle
rules:
  'drizzle/enforce-delete-with-where': "error"
  'drizzle/enforce-update-with-where': "error"

All 설정

이 플러그인은 모든 규칙(지원 중단된 규칙 제외)을 사용하는 all 설정을 제공합니다.

root: true
extends:
  - "plugin:drizzle/all"
parser: '@typescript-eslint/parser'
parserOptions:
  project: './tsconfig.json'
plugins:
  - drizzle

Recommended 설정

현재 allrecommended와 동일합니다

root: true
extends:
  - "plugin:drizzle/recommended"
parser: '@typescript-eslint/parser'
parserOptions:
  project: './tsconfig.json'
plugins:
  - drizzle

규칙

enforce-delete-with-where

.delete() 문에서 .where() 절과 함께 delete를 사용하도록 강제합니다. 대부분의 경우, 테이블의 모든 행을 삭제할 필요가 없으며 어떤 형태의 WHERE 문이 필요합니다.

선택적으로 플러그인 옵션에서 string 또는 string[]을 받는 drizzleObjectName을 정의할 수 있습니다. 이는 Drizzle이 아닌 다른 객체나 클래스가 delete 메서드를 가지고 있을 때 유용합니다. 그러한 delete 메서드는 ESLint 규칙을 트리거합니다. 이를 방지하려면 코드베이스에서 사용하는 Drizzle 객체의 이름(예: db)을 정의하여, 해당 객체에서 오는 delete 메서드에서만 규칙이 트리거되도록 할 수 있습니다:

예제, 설정 1:

rules:
  'drizzle/enforce-delete-with-where': "error"
class MyClass {
  public delete() {
    return {}
  }
}

const myClassObj = new MyClass();

// ---> ESLint 규칙에 의해 트리거됨
myClassObj.delete()

const db = drizzle(...)
// ---> ESLint 규칙에 의해 트리거됨
db.delete()

예제, 설정 2:

rules:
  'drizzle/enforce-delete-with-where':
    - "error"
    - "drizzleObjectName": 
      - "db"
class MyClass {
  public delete() {
    return {}
  }
}

const myClassObj = new MyClass();

// ---> ESLint 규칙에 의해 트리거되지 않음
myClassObj.delete()

const db = drizzle(...)
// ---> ESLint 규칙에 의해 트리거됨
db.delete()

enforce-update-with-where:

.update() 문에서 .where() 절과 함께 update를 사용하도록 강제합니다. 대부분의 경우, 테이블의 모든 행을 업데이트할 필요가 없으며 어떤 형태의 WHERE 문이 필요합니다.

선택적으로 플러그인 옵션에서 string 또는 string[]을 받는 drizzleObjectName을 정의할 수 있습니다. 이는 Drizzle이 아닌 다른 객체나 클래스가 update 메서드를 가지고 있을 때 유용합니다. 그러한 update 메서드는 ESLint 규칙을 트리거합니다. 이를 방지하려면 코드베이스에서 사용하는 Drizzle 객체의 이름(예: db)을 정의하여, 해당 객체에서 오는 update 메서드에서만 규칙이 트리거되도록 할 수 있습니다:

예제, 설정 1:

rules:
  'drizzle/enforce-update-with-where': "error"
class MyClass {
  public update() {
    return {}
  }
}

const myClassObj = new MyClass();

// ---> ESLint 규칙에 의해 트리거됨
myClassObj.update()

const db = drizzle(...)
// ---> ESLint 규칙에 의해 트리거됨
db.update()

예제, 설정 2:

rules:
  'drizzle/enforce-update-with-where':
    - "error"
    - "drizzleObjectName": 
      - "db"
class MyClass {
  public update() {
    return {}
  }
}

const myClassObj = new MyClass();

// ---> ESLint 규칙에 의해 트리거되지 않음
myClassObj.update()

const db = drizzle(...)
// ---> ESLint 규칙에 의해 트리거됨
db.update()