Skip to content

Joi v16: TypeError issue with valid(Joi.ref(x)).error() #2147

@BanovMiroslav

Description

@BanovMiroslav

Context

  • node version:10.16.3
  • joi version:16.1.4
  • environment (node, browser):node
  • used with (hapi, standalone, ...):hapi/standalone
  • any other relevant information:

What are you trying to achieve or the steps to reproduce ?

Trying to validate two fields, making sure they are the same. Use case: password + re_password fields. This worked on Joi v15 but doesn't appear to work with Joi v16.

const schema = Joi.object().keys({
          key_first: Joi.string().required(),
          key_second: Joi.string().required().valid(Joi.ref('key_first')).error(() => 'key_second must match key_first'),
        })
schema.validate({
          key_first: 'something',
          key_second: 'something else',
        }, {abortEarly: false})

Seems to work if I remove the error() call. The problem is item.path is undefined, and it throws an exception.

Which result you had ?

Debug: internal, implementation, error 
    TypeError: Cannot read property 'filter' of undefined
    at Object.exports.details (/home/miroslav/Projects/joitest/node_modules/@hapi/joi/lib/errors.js:227:29)
    at Object.exports.process (/home/miroslav/Projects/joitest/node_modules/@hapi/joi/lib/errors.js:177:52)
    at Object.internals.entry (/home/miroslav/Projects/joitest/node_modules/@hapi/joi/lib/validator.js:139:26)
    at Object.exports.entry (/home/miroslav/Projects/joitest/node_modules/@hapi/joi/lib/validator.js:25:30)
    at internals.Base.validate (/home/miroslav/Projects/joitest/node_modules/@hapi/joi/lib/base.js:531:26)
    at handler (/home/miroslav/Projects/joitest/server.js:18:12)
    at module.exports.internals.Manager.execute (/home/miroslav/Projects/joitest/node_modules/@hapi/hapi/lib/toolkit.js:41:33)
    at Object.internals.handler (/home/miroslav/Projects/joitest/node_modules/@hapi/hapi/lib/handler.js:46:48)
    at exports.execute (/home/miroslav/Projects/joitest/node_modules/@hapi/hapi/lib/handler.js:31:36)
    at Request._lifecycle (/home/miroslav/Projects/joitest/node_modules/@hapi/hapi/lib/request.js:312:68)
Debug: internal, implementation, error 
    TypeError: Cannot read property 'filter' of undefined
    at Object.exports.details (/home/miroslav/Projects/joitest/node_modules/@hapi/joi/lib/errors.js:227:29)
    at Object.exports.process (/home/miroslav/Projects/joitest/node_modules/@hapi/joi/lib/errors.js:177:52)
    at Object.internals.entry (/home/miroslav/Projects/joitest/node_modules/@hapi/joi/lib/validator.js:139:26)
    at Object.exports.entry (/home/miroslav/Projects/joitest/node_modules/@hapi/joi/lib/validator.js:25:30)
    at internals.Base.validate (/home/miroslav/Projects/joitest/node_modules/@hapi/joi/lib/base.js:531:26)
    at handler (/home/miroslav/Projects/joitest/server.js:18:12)
    at module.exports.internals.Manager.execute (/home/miroslav/Projects/joitest/node_modules/@hapi/hapi/lib/toolkit.js:41:33)
    at Object.internals.handler (/home/miroslav/Projects/joitest/node_modules/@hapi/hapi/lib/handler.js:46:48)
    at exports.execute (/home/miroslav/Projects/joitest/node_modules/@hapi/hapi/lib/handler.js:31:36)
    at Request._lifecycle (/home/miroslav/Projects/joitest/node_modules/@hapi/hapi/lib/request.js:312:68)

What did you expect ?

{
  value: {...}
  error: {...}
}

Metadata

Metadata

Assignees

Labels

bugBug or defect

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions