node package manager
Stop wasting time. Easily manage code sharing in your team. Create a free org »



This module provides a simple, consolidated, promise-based API that extends the Joi object schema validator with functionality for performing transformations (synchronous / asynchronous) on successfully-validated data.

Lead Maintainer: Tim Ambler


In the following example, three arguments are passed to the transform() method, the first two of which should be familiar to those with previous experience using Joi:

  • A payload of data to be validated and transformed
  • A Joi schema object
  • A transformation object

The third argument - the transformation object - is used to define one or more transformations to be run once Joi's validation process has finished. Each transformation can run synchronously or asynchronously (by returning a promise).

Transformation functions always receive as their first argument the result of Joi's validation process. They may also specify additional parameters to reference other entries within the transformation object.

var transform = require('joi-transform');
    'first_name': 'John',
    'last_name': 'Doe',
    'age': 30
}, {
    'first_name': Joi.string().required(),
    'last_name': Joi.string().required(),
    'age': Joi.number().integer().positive().required().label('Age')
}, {
    'name': function(data, something) {
        return `Something: ${something}`;
    'something': function(data) {
        return data.age;
    .spread((data, transforms) => {
        console.log('data', data);
        console.log('transforms', transforms);

Related Resources