ESLint Drizzle 플러그인

특정 시나리오에서 타입 검사를 수행할 수 없거나, 가능하더라도 오류 메시지를 이해하기 어려운 경우를 대비해 ESLint 패키지를 만들었습니다. 이 패키지는 개발 과정에서 중요한 시나리오를 다루는 데 도움을 주기 위해 권장 규칙을 제공합니다.

설치

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

위 패키지들을 설치하려면 다음 명령어를 사용하세요:

npm install eslint-plugin-drizzle @typescript-eslint/eslint-plugin @typescript-eslint/parser --save-dev

이 명령어는 eslint-plugin-drizzle와 함께 TypeScript 관련 ESLint 플러그인도 함께 설치합니다. --save-dev 옵션을 사용하면 개발 의존성으로 설치됩니다.

사용 방법

.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 설정을 제공합니다.

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

권장 설정

현재 all 설정은 recommended 설정과 동일합니다.

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

Rules

enforce-delete-with-where

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

선택적으로, 플러그인 옵션에서 drizzleObjectName을 정의할 수 있습니다. 이 옵션은 string 또는 string[]을 받습니다. 이는 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 문이 필요합니다.

선택적으로, 플러그인 옵션에서 drizzleObjectName을 정의할 수 있습니다. 이는 string 또는 string[]을 받습니다. 이 옵션은 Drizzle이 아닌 다른 객체나 클래스에 update 메서드가 있을 때 유용합니다. 예를 들어, Drizzle이 아닌 객체의 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: drizzleObjectName 설정

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()