🌏 한국어 | English
safe-promise는 프로미스의 반환값을 런타임에서 검증할 수 있는 가볍고 타입 안전한 프로미스 래퍼입니다.
StandardSchema 인터페이스를 통해 다양한 런타임 타입 체크 라이브러리와 손쉽게 통합할 수 있습니다.
실제 애플리케이션을 개발하다 보면, API 응답이 프론트엔드에서 기대하는 타입과 다를 수 있습니다.
있어야 할 필드가 없거나, string이어야 하는데 number로 내려오는 등, 이러한 불일치는 미묘한 버그를 유발하며 디버깅을 어렵게 만듭니다.
safe-promise는 프로미스의 결괏값을 스키마에 따라 검증하여 이러한 문제를 미연에 방지하고, 검증 실패 시 적절한 처리를 할 수 있도록 도와줍니다.
npm install promi-safe
pnpm add promi-safe
pnpm add promi-safe
StandardSchema 인터페이스를 만족하는 라이브러리와 함께 사용하시길 권장합니다.
아래 예시에서는 zod를 사용했습니다.
import { makeSafePromise } from "promi-safe";
import { z } from "zod";
const promise = (await fetch("/test")).json();
const promiseWithSafe = makeSafePromise(apiCall);
const schema = z.object({ id: z.string() }); // with zod
const response = promiseWithSafe.safe(schema);
httpClient를 추상화하는 경우, 더 편리하게 사용할 수 있습니다.
import { type SafePromise, makeSafePromise } from "promi-safe";
export const createHttpClient = (): HttpClient => {
return {
get: <T>(url: string, options?: RequestOptions): SafePromise<T> =>
makeSafePromise(request<T>("GET", url, undefined, options)),
...
};
};
import { z } from "zod";
const schema = z.object({ id: z.string() }); // with zod
const response = await api.get("/test").safe(schema);
-
validateResponse(promise)(schema, options?):
제공된 프로미스의 반환값을 주어진 스키마를 기준으로 검증합니다. 옵션은 아래와 같습니다:onFail
: 검증 실패 시 발생한 이슈를 인자로 호출되는 콜백 함수.throwOnError
: 이 값이 true일 경우, 검증 실패 시ValidationError
가 발생합니다.
-
makeSafePromise(promise):
주어진 프로미스에safe
메서드를 추가하여 위와 동일한 검증을 할 수 있도록 확장합니다. -
ValidationError
검증 실패 시 (throwOnError 옵션 사용 시) 발생하는 에러 클래스입니다. 에러 객체에는issues
프로퍼티가 포함되어 있어 검증 문제 목록을 제공합니다.
MIT