1.2.1 • Published 5 years ago

stampper v1.2.1

Weekly downloads
1
License
ISC
Repository
github
Last release
5 years ago

TS decorators-based JSON validator.

Example

First, define the model.

class Person {
  @String({ minLength: 3})
  name: string;

  @Number({ optional: true })
  years: number;

  @List({ allowedValues: ['ES', 'EN', 'FR'], separator: ',' })
  languages: string;

  @Class({ class: Country })
  countriesVisited: Country[];
}

class Country {
  @String()
  name: string;

  @Class({ class: City })
  cities: City[];
}

class City {
  @String()
  name: string;
}

And, then, call validateJSON passing the model and the JSON value to be validated.

validateJSON(Person, {
  name: 'Name',
  years: 50,
  languages: 'ES,EN',
  countriesVisited: [
    {
      name: 'Spain',
      cities: [
        { name: 'Madrid' },
        { name: 'Valencia' },
      ]
    }
  ],
});

If an invalid JSON is provided, an error will be thrown. Example:

try {
  validateJSON(Person, {
    name: 'Name',
    years: 50,
    languages: 'ES,EN',
    countriesVisited: [
      {
        // name: 'Spain', <- This required property is removed
        cities: [
          { name: 'Madrid' },
          { name: 'Valencia' },
        ]
      }
    ],
  });
} catch (error) {
  console.error(error);
}

Will result in the following error printed out:

MissingRequiredPropertyJSONError {
  typeCode: 2,
  typeName: 'MissingRequiredProperty',
  name: 'name',
  value: undefined,
  path: [ 'countriesVisited', 'name' ],
  message: 'Missing required property'
}

Validators options

The list below contains the validators/decorators that are currently supported along with their options.

ValidatorProperty nameDescriptionPossible valuesAssociated errorsRequired
@String()minLengthThe minimum length allowed for the string.Integer valuesStringShorterThanAllowedJSONErrorNo
@String()maxLengthThe maximum length allowed for the string.Integer valuesStringLongerThanAllowedJSONErrorNo
@String()allowedValuesThe list of allowed values.Array of stringsStringIsNotInTheAllowedValuesJSONErrorNo
@List()separatorThe string that separates the elements of the list. For example, a comma: ,. 3Any stringNoneYes
@List()allowRepeatedValuesWhether values can be repeated or not.BooleanListValueIsRepeatedNo
@List()allowedValuesList of the values that are allowed. All of them has to be in this array.Array of stringsListValueIsNotInTheAllowedValuesJSONErrorNo
@Number()isIntegerWhether is integer or not.BooleanNumberIsNotIntegerJSONErrorNo
@Class()classThe class that defines the shape of the object associated to the property.Any classNoneYes
*isOptionalIf true and no value (null or undefined), the validator will ignore it.BooleanMissingRequiredPropertyJSONErrorNo`