feat(effect-validator): use array formatting for errors (#718)
* feat(effect-validator): use array formatting for errors * add test for `error` * make it as `minor` --------- Co-authored-by: Yusuke Wada <yusuke@kamawada.com>pull/759/head
parent
1ed5c7d7fa
commit
80da4aa50a
|
@ -0,0 +1,5 @@
|
|||
---
|
||||
'@hono/effect-validator': minor
|
||||
---
|
||||
|
||||
format errors with array formatting for improved readability
|
|
@ -1,3 +1,4 @@
|
|||
import { ArrayFormatter } from '@effect/schema'
|
||||
import * as S from '@effect/schema/Schema'
|
||||
import { Either } from 'effect'
|
||||
import type { Env, Input, MiddlewareHandler, ValidationTargets } from 'hono'
|
||||
|
@ -45,7 +46,8 @@ export const effectValidator = <
|
|||
const result = S.decodeUnknownEither(schema)(value)
|
||||
|
||||
return Either.match(result, {
|
||||
onLeft: (error) => c.json({ success: false, error: JSON.parse(JSON.stringify(error)) }, 400),
|
||||
onLeft: (error) =>
|
||||
c.json({ success: false, error: ArrayFormatter.formatErrorSync(error) }, 400),
|
||||
onRight: (data) => {
|
||||
c.req.addValidatedData(target, data as object)
|
||||
return data
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
import type { ArrayFormatter } from '@effect/schema'
|
||||
import { Schema as S } from '@effect/schema'
|
||||
import { Hono } from 'hono'
|
||||
import type { StatusCode } from 'hono/utils/http-status'
|
||||
|
@ -103,8 +104,10 @@ describe('Basic', () => {
|
|||
expect(res).not.toBeNull()
|
||||
expect(res.status).toBe(400)
|
||||
|
||||
const data = (await res.json()) as { success: boolean }
|
||||
const data = await res.json<{ success: boolean; error: ArrayFormatter.Issue[] }>()
|
||||
expect(data.success).toBe(false)
|
||||
expect(data.error[0].path).toEqual(['age'])
|
||||
expect(data.error[0].message).toBeDefined()
|
||||
})
|
||||
})
|
||||
|
||||
|
|
Loading…
Reference in New Issue