Skip to content

Commit

Permalink
feat(joi): isValid, undefinedIfInvalid
Browse files Browse the repository at this point in the history
  • Loading branch information
kirillgroshkov committed Jul 8, 2019
1 parent a5cbd32 commit ecea173
Show file tree
Hide file tree
Showing 4 changed files with 698 additions and 438 deletions.
4 changes: 4 additions & 0 deletions src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,9 @@ import {
import { JoiValidationError } from './validation/joi/joi.validation.error'
import {
getValidationResult,
isValid,
JoiValidationResult,
undefinedIfInvalid,
validate,
} from './validation/joi/joi.validation.util'

Expand All @@ -63,6 +65,8 @@ export {
JoiValidationResult,
validate,
getValidationResult,
isValid,
undefinedIfInvalid,
Joi,
ExtendedJoi,
booleanSchema,
Expand Down
12 changes: 11 additions & 1 deletion src/validation/joi/joi.validation.util.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import {
stringSchema,
} from './joi.shared.schemas'
import { JoiValidationError } from './joi.validation.error'
import { getValidationResult, validate } from './joi.validation.util'
import { getValidationResult, isValid, undefinedIfInvalid, validate } from './joi.validation.util'

class Obj1 {
a1!: string
Expand Down Expand Up @@ -271,3 +271,13 @@ test('default to empty array', () => {
const _partialSchema = objectSchema<Obj1>({
a2: stringSchema,
})

test('isValid', () => {
expect(isValid('asd', stringSchema)).toBe(true)
expect(isValid(56, stringSchema)).toBe(false)
})

test('undefinedIfInvalid', () => {
expect(undefinedIfInvalid('asd', stringSchema)).toBe('asd')
expect(undefinedIfInvalid(56, stringSchema)).toBeUndefined()
})
21 changes: 21 additions & 0 deletions src/validation/joi/joi.validation.util.ts
Original file line number Diff line number Diff line change
Expand Up @@ -92,6 +92,27 @@ export function getValidationResult<IN, OUT = IN> (
return vr
}

/**
* Convenience function that returns true if !error.
*/
export function isValid<IN, OUT = IN> (value: IN, schema?: AnySchemaTyped<IN, OUT>): boolean {
if (!schema) return { value } as any

const { error } = Joi.validate(value, schema, defaultOptions)
return !error
}

export function undefinedIfInvalid<IN, OUT = IN> (
value: IN,
schema?: AnySchemaTyped<IN, OUT>,
): OUT | undefined {
if (!schema) return { value } as any

const { value: returnValue, error } = Joi.validate(value, schema, defaultOptions)

return error ? undefined : (returnValue as any)
}

function createError (value: any, err: ValidationError, objectName?: string): JoiValidationError {
if (!err) return undefined as any
const tokens: string[] = []
Expand Down
Loading

0 comments on commit ecea173

Please sign in to comment.