Skip to content

Changelog

Version 18

18.1.1

  • #3103 fix: allow NaN in schema describe() output validation
  • #3099 Fix braces escaping when template doesn't contains any variable
  • #3098 Support libraryOptions in standard validator validate()
  • #3097 feat: enhance validation to support options in standard function
  • #3094 any.describe() throws an error if the schema contains .allow(NaN)

18.1.0

  • #3102 feat: add Standard JSON Schema
  • #3096 Consider implementing Standard JSON Schema

18.0.2

  • #3092 fix: allow coercion of string booleans with trailing whitespace
  • #3091 Joi.boolean() does not handle strings with trailing spaces

18.0.1

  • #3087 fix: proper types for more complex cases of array
  • #3086 .array().items() dynamic type item type schema causes issues in typescript

18.0.0

  • #3084 feat: add isAsync() helper
  • #3082 Added wrapper option to uuid function
  • #3080 feat: implement standard schema spec
  • #3078 Implement Standard Schema
  • #2993 What version of node does this library support?
  • #2982 feat: Improve array().items type
  • #2981 feat: Improve alternatives type
  • #2926 18.0.0 Release Notes
  • #2925 chore: upgrade modules

Version 17

17.13.3

  • #3043 fix: correct function type in alternatives error

17.13.2

  • #3037 fix: stripUnknown should honor local explicit .unknown(false)

17.13.1

  • #3034 fix: label false should also hide explicit labels
  • #3033 Setting errors.label to false does not remove labels from error messages for keys with labels

17.13.0

  • #3032 feat: support encoding uri (follow-up to #3027)
  • #3027 feat: Support encoding uri
  • #2889 string().uri() not working with accented characters

17.12.3

  • #3026 fix: handle bigint in unique rule

17.12.2

  • #3018 Fix issue 2730 - Wrong State['path'] type
  • #2730 Wrong State['path'] type

17.12.1

  • #3016 fix: domain default tld validation
  • #3015 fix: domain default tld validation
  • #3007 Domain validation not checking IANA registry by default

17.12.0

  • #3014 feat: hex prefix
  • #3011 Allow 0x prefix for hex strings
  • #2386 Allow 0x prefix for hex strings

17.11.1

  • #3013 fix: precision issue on number().multiple()
  • #3009 fix: LanguageMessages type now supports languages in TypeScript
  • #3001 fix: do not override existing labels of underlying schemas in alternatives
  • #2962 Multiple doesn't work correct
  • #2875 Fix for #2874
  • #2874 Missing helper.error() method parameter type definition
  • #2720 Type declaration for messages option of any.validate() inconsistent with the documentation and actual code

17.11.0

  • #2988 feat: allow custom expression functions

17.10.2

  • #2986 fix: missing template reference
  • #2985 Unit test showing example of formula parsing bug
  • #2974 Unable to access object property with a space in its key via expression templates

17.10.1

  • #2983 fix: allow any.error() return type to be ErrorReport[]

17.10.0

  • #2975 property metas in Description
  • #2964 #2963 make return value of validate match type definitions
  • #2961 Associate Buffer with BinarySchema
  • #2960 feat: support bindary buffer that has been JSON.parse(JSON.strinified())
  • #2957 feat: support uuidv6, uuidv7 and uuidv8 guid types
  • #2954 Coerce toJSON'ed Buffer to real Buffer

17.9.2

  • #2945 fix: commit states to avoid memory leak

17.9.1

  • #2932 fix: do not trigger warnings and externals on arrays and alternatives mismatches

17.9.0

  • #2931 feat: improve external helpers

17.8.4

  • #2928 fix: validation warning types
  • #2927 Type definition incorrect for "warning" return type from validateAsync

17.8.3

  • #2919 chore: revert 17.8.x line
  • #2917 Cannot find module '@hapi/hoek/assert' from 'index.js'
  • #2914 Support for older Node versions maybe lost in v17.8
  • #2913 node_modules/@hapi/hoek/lib/deepEqual.js:274

17.8.2

  • #2916 fix: properly transform domain
  • #2915 Email validation error in v17.8.1

17.8.1

  • #2910 fix: transpile optional chaining

17.8.0

  • #2909 chore: use latest address module
  • #2630 Joi.string().domain() treats '_http._tcp.archive.ubuntu.com' as invalid domain name, even though it works

17.7.1

  • #2905 Upgrade @sideway/formula to 3.0.1 for CVE-2023-25166
  • #2892 Allow null values in BooleanSchema methods

17.7.0

  • #2867 fix: better unsafe check of exponential numbers
  • #2762 Add isPresent option to object dependencies
  • #2672 Some exponential notation strings are validated as unsafe numbers
  • #2542 Number validation fails on some strings with E-notation

17.6.4

  • #2859 Fix/throwing errors if required argument is omitted
  • #2729 Some validation methods don't throw an error when their required argument is omitted

17.6.3

  • #2860 fix: allow all schema types to be defined and inferred
  • #2857 Typing issues with attempt()
  • #2753 Typescript typing on Joi.string().validate(...)

17.6.2

  • #2851 Try improving handling of unions
  • #2850 fix: do not confuse booleans for alernatives in strict mode
  • #2848 Strict object schema with a boolean property expects alternative, not boolean

17.6.1

  • #2844 types: support strict alternatives
  • #2843 chore: update license
  • #2842 Fix spelling
  • #2841 Allow sub-objects for TypeScript strict object schema
  • #2838 feat: change validateAsync return type to match options
  • #2836 fix(d.ts): allow nested object schema for strictly typed object
  • #2829 fix(d.ts)!: type details param of ValidationError constructor
  • #2819 Add artifact to typings.
  • #2818 Typescript support for .artifact()
  • #2813 Fix Joi issue #2746
  • #2808 feat(d.ts): Add type information for maxDomainSegments to EmailOptions and DomainOptions interfaces
  • #2797 feat(d.ts): improve attempt return type
  • #2788 Include local into ErrorReport type
  • #2785 fix(typings): incompatible type issue for nested strict object schemas
  • #2764 Incompatible type expected for object schemas nested in strict object schemas
  • #2749 fixed typo
  • #2746 Using Joi.attempt with { convert: false } does not prevent conversion.
  • #2727 Fix validateAsync return type
  • #2663 Property "local" does not exist on type "ErrorReport"

17.6.0

  • #2732 Support length() in templates

17.5.0

  • #2708 How can I define both specific error messages and a default error message?
  • #2706 Error messages do not distinguish between numbers and strings!Easily misleading
  • #2703 issue #2606: pass TSchema from ObjectSchema to .validate function
  • #2698 Add Date -> Joi.DateSchema map to ObjectPropertiesSchema<T>
  • #2687 string().min(0) is failing to validate a zero-length string
  • #2666 Updated multiple rule to support decimal/float base
  • #2665 Fix typings on any.external(): add helpers argument
  • #2651 Fix label elimination for externals
  • #2649 fix: Joi.string().hostname() not returning errors for CIDR notation
  • #2648 Incorrect hostname validation
  • #2635 any.external: can't disable label
  • #2605 "ExternalValidationFunction" type is missing "helpers" parameter in index.d.ts
  • #2600 Joi.external() error message
  • #2590 defaults in alternatives should work recursively
  • #2589 merge subschema matches when subchemas are objects, or alternatives of objects
  • #2577 add subschema property validation failures to context

17.4.3

  • #2685 Joi.string().email() passes for foo@bar%2ecom

17.4.2

  • #2642 Fix issue with only required items. Fixes #2620.
  • #2624 Fix Web Workers compatibility
  • #2620 If all elements of array is required, it does not validate unknown items
  • #2251 dist/joi-browser.min.js doesn't work in workers

17.4.1

  • #2627 Add object type guards schema
  • #2586 fix isSchema type definition
  • #2585 type problem in Joi.isSchema function
  • #2573 Add option array type to AlternativesSchema.conditional

17.4.0

  • #2556 fix: any.when() options parameters not supported as Array in index.d.ts
  • #2555 Type definition for the function any.when() mismatch the documentation and usage
  • #2551 feat: Make Joi.Schema generic
  • #2548 fix: defaults in ordered array are not filled
  • #2543 URI validation, allowRelative with domain
  • #2536 merge the results of a .match('all') if all the subschemas are objects
  • #2535 defaults in alternatives with a match mode set are not returned
  • #2534 Remove incorrect errors type
  • #2532 Fix confusing message when refs are passed
  • #2528 Added guid separator and made version optional
  • #2523 errors is always undefined in ValidationResult
  • #2521 Fix type of schema passed to alter functions
  • #2518 fix for stripUnknown not working for nested object on invalid object
  • #2502 Appends the allowed object keys in typescript
  • #2479 Inconsistency with stripUnknown: true and failing validation rules
  • #2471 Joi.object().xor() throws with "must be a string or a reference" when passed a reference
  • #2459 stripUnknown doesn't work for nested objects
  • #2404 defaults in ordered array are not filled

17.3.0

  • #2477 Add RegExp to the supported types for Extension.type
  • #2475 Add render property to ReferenceOptions TS def
  • #2465 @hapi/formula@2.0.0 Deprecated
  • #2455 Expose prefs in external()
  • #2454 CustomValidator return type adjusted in typescript
  • #2442 Update index.d.ts
  • #2441 Wrong field name in ValidationError (index.d.ts)

17.2.1

17.2.0

  • #2431 Import types from DT
  • #2421 Support ISO8601 with hours timeshift only
  • #2419 isoDate doesn't recognize correct string
  • #2408 Fix number padding (e.g. 00000) and trailing decimal points (e.g. 2.)
  • #2407 "2." throws number.unsafe
  • #2406 "00000" throws number.unsafe
  • #2398 Support maxDomainSegments
  • #2380 Joi.build() does not work with complex extension bases
  • #2377 Add extension validation for "cast"
  • #2361 Validation artifacts collected from successful rules
  • #2348 object.default() broke when object is extended
  • #2337 tlds fails to error on invalid segment
  • #2330 Consistently apply wrap setting
  • #2320 invalid GUID/UUID is validated as valid
  • #2318 larger than is incorrect for comparing quanties
  • #2303 Add option to resolve .ref() and .in() values in error messages.
  • #2284 Array item could not be an Error

17.1.1

  • #2316 Validate domain in relative uri
  • #2293 Fix error on changeless forks. Fixes #2292.
  • #2292 Fork object with option already applied

17.1.0

  • #2280 isError()
  • #2279 Remove annotate() from assert() when used in the browser

17.0.2

  • #2269 Ensure keys term always has right constructor

17.0.1

  • #2268 Move flag back to proto

17.0.0

  • #2263 Update deps
  • #2262 17.0.0 Release Notes
  • #2261 Remove ValidationError.annotate() from browser build
  • #2260 object.regex()
  • #2254 Giving an array argument to any.valid returns incorrect error
  • #2243 Allow _ in alias, arg, flag, modifier, override, rule, and term names
  • #2242 Can you allow _ in rule names?
  • #2231 Change errors.wrapArrays to errors.wrap.array
  • #2219 Add the ability to extend all types in place
  • #2200 Move ip and uri logic to address
  • #2199 Remove node 8, 10
  • #2189 Change default function second argument to full helpers (from prefs)
  • #2182 Remove quotation marks from error messages
  • #2163 string().hostiname() - validation of non-ASCII chars containing domains

Version 16

16.1.8

  • #2226 object.with and object.without throw error on $ prefixed keys
  • #2218 Maximum call stack size exceeded​​ error for dataUri validation
  • #2212 Joi.string().email() considers "a@a.com/asd" as valid email
  • #2208 fix: describe() on schema with default value null
  • #2207 describe() on schema with default value null results in "Cannot read property 'Symbol(literal)' of null"
  • #2205 Cannot require a minimal number of matching object properties with pattern
  • #2190 Joi.string().domain() treats an email address as a valid domain name
  • #2187 Giving an array argument to any.allow(...values) gives incorrect error
  • #2181 Joi.alternatives produces confusing message when used with nested object and { abortEarly: false }
  • #2176 joi.types() is missing func alias
  • #2173 [Request] Allow mixing patch version

16.1.7

  • #2168 Date fails to enforce format when value is a number string

16.1.6

  • #2167 Error.captureStackTrace can't be used in all browser builds
  • #2165 Cannot read property 'delete' of undefined

16.1.5

  • #2156 node.get is not a function when validating
  • #2147 Joi v16: TypeError issue with valid(Joi.ref(x)).error()

16.1.4

  • #2134 Joi.any().default(<object>).describe() throws validation errors

16.1.3

  • #2131 TypeError: false.byteLength is not a function

16.1.2

  • #2128 when() fails when combined with prefs()

16.1.1

16.1.0

  • #2118 array.items() fails to invalidate when custom item error is used
  • #2116 Support .when({ is, then }) without subject ref

16.0.1

  • #2113 Valid emails are considered invalid
  • #2111 Joi.only is not a function

16.0.0

  • #2103 Support errors in manifest
  • #2102 Always convert -0 to 0
  • #2101 Apply link.concat() on resolved schema
  • #2099 Add when() break
  • #2097 Number validation fails with "1E3"
  • #2096 Apply link whens on linked schema, not the link
  • #2093 Manifest type conflicts with key type
  • #2092 Support Joi.in() for object keys
  • #2091 "-0" throw number.unsafe
  • #2089 Joi.in()
  • #2088 Always perform deep equal on valid() and invalid()
  • #2087 Fix comparison of array values (literals and references)
  • #2086 Preference to change label to path edge instead of full path
  • #2085 Default assert() to include stack
  • #2084 Shared schemas in links
  • #2083 Add a browser build to the github repo and npm package
  • #2082 Fix error thrown in the browser build. Closes #2081
  • #2081 The browser build (produced by webpack) throws an error when loading
  • #2080 Named schema links
  • #2079 Support no in when()
  • #2078 Default is to Joi.invalid(null, false, 0, '').required()
  • #2077 Compile valid values into valid+override
  • #2076 Allow/disallow list override
  • #2075 Log when() partials
  • #2074 Compile function into Joi.custom()
  • #2073 When object.pattern() matches option is not an array(), apply to each item
  • #2072 Custom function error shortcut
  • #2068 schema.describe() does not work, when default value is assigned to array in schema
  • #2065 Change alternatives to be consistent with other spread arguments
  • #2064 Throw on invalid schema during validation
  • #2062 Support chained when()
  • #2061 Keep switch as single condition on when() and conditional()
  • #2060 object.assert() ref should be relative to parent, not self
  • #2059 Support multiple usage of same schema with id
  • #2056 Schema test coverage
  • #2054 Rename alternatives.when() to alternatives.conditional()
  • #2051 Support for combine schema: allOf, oneOf, anyOf
  • #2049 Compile literals into any type with exact literal
  • #2048 Replace marker with Symbol.for()
  • #2046 Cast multi values of into a single type with valid()
  • #2041 Exclude error stack trace by default
  • #2040 Replace boolean.insensitive() with sensitive() and not apply to allow()
  • #2039 Allow mapping flags to rule methods with a different name
  • #2038 Stop matching object patterns once a match is found
  • #2037 v16.0.0 Release Notes
  • #2036 { result, error } changed to error undefined instead of null
  • #2035 Skip error rendering preference
  • #2034 Consolidate date format errors
  • #2033 msg() template function to access other messages
  • #2032 Support custom sync functions for rules
  • #2031 Remove object and array string coerce
  • #2030 string.isoDate() fails on allow() and convert:false
  • #2027 Support templates as object.assert() subject
  • #2026 Change object.assert error context and rule argument name
  • #2024 Remove binary and string encoding support from the browser
  • #2023 Rule arguments validation
  • #2022 Support reverse order coerce
  • #2019 Consolidate refs with args
  • #2018 Support joi schema in refs assert
  • #2016 Consolidate refs assert's message/code
  • #2015 Ensure all levels of coerce are only called on non-undefined values
  • #2014 Change all _methods used on schema to use definition
  • #2013 Expose all internal extend() options externally
  • #2012 Rename func to function
  • #2010 New extension API
  • #2009 Global defaults
  • #2007 Change Infinity errors from any.invalid to number.infinity
  • #2006 Change error code any.empty to string.empty
  • #2005 Merging of two empty() should allow '' if it was explicitly defined
  • #2002 Remove prefs schema validation
  • #2001 Remove joi.defaults()
  • #1999 Fix outdated use of Joi.func().ref()
  • #1998 Split validate() to sync and async versions
  • #1995 Replace strip flag with result flag
  • #1994 Joi.string().uri() accepts 'http:/' as valid URL
  • #1993 Root reference
  • #1987 Extension build() support
  • #1986 Improve schema description validation
  • #1985 Refactor root
  • #1983 Change any.notes() to any.note() and require separate arguments
  • #1982 Change any.tags() to any.tag() and require separate arguments
  • #1981 Change any.example() to append by default
  • #1980 Rename string.regex() to string.pattern()
  • #1979 Link to root (regardless of depth)
  • #1978 Change only() to flag instead of alias of valid()
  • #1977 Replace date multiple and timestamp flag with format
  • #1976 Rename object.allowUnknown error to object.unknown
  • #1975 Remove description for default() function
  • #1974 Deep clone all values returned in describe()
  • #1973 Behavior of .concat() with tests redefinition
  • #1972 Applying raw after successful validation
  • #1968 Repalce lazy with link
  • #1965 How to properly detect domains?
  • #1962 Don't require pre function to take 3 arguments
  • #1961 Lazy once ignored when using with when()
  • #1960 Fix object peer dependencies error path
  • #1959 Debug tools
  • #1958 Warnings
  • #1957 Feature: Marking options as deprecated
  • #1956 Extension messages override base
  • #1954 Schema specialization
  • #1952 Support fork into array and alternatives
  • #1951 Remove requiredKeys(), optionalKeys(), and forbiddenKeys()
  • #1950 any.fork()
  • #1949 Replace Joi.reach() with schema.extract()
  • #1948 Cannot read property 'ancestors' of null
  • #1946 Remove applyFunctionToChildren()
  • #1945 Throw when Joi.reach() is reaching into non-object
  • #1944 Remove any._getLabel()
  • #1943 Rename any.schemaType to any.type
  • #1942 Rename object.type() to object.instance()
  • #1941 Remove root.validate() and root.describe()
  • #1940 Array validation with .error()
  • #1939 Replace attempt() with assert() alias
  • #1938 Remove callback support
  • #1937 Support post-validation async operations
  • #1935 Rename var to expression and x
  • #1932 Support base parameters in extend()
  • #1930 Template calculations
  • #1929 Cast date and boolean to number
  • #1925 Cast to string
  • #1924 Move dateFormat pref out of errors
  • #1922 Support ref into Set and Map cast values
  • #1921 Replace raw flag with result flag in description
  • #1920 Remove support for raw(false)
  • #1919 Cannot combine function rules with object keys
  • #1917 Complex conditional validation
  • #1914 A way to cast the result of a array to Set and object to Map
  • #1913 Prevent mixing different versions of joi schema types
  • #1912 Identify blocked schema (valid + invalid = no valid options)
  • #1911 Unknown object keys ignore abortEarly flag
  • #1907 Support ref in prefs.errors.language
  • #1906 Precompile prefs.messages and extensions
  • #1905 Move error related prefs to errors
  • #1904 Remove ability to change template for implicit label prefix in error messages
  • #1903 Remove implicit label prefix for error messages
  • #1902 Rename language preference to messages
  • #1901 Rename messages.wrapArrays with wrapArrays
  • #1898 Change object.rename() from description to { regex } when using from pattern
  • #1896 Support {.} in error for value
  • #1895 Remove isJoi from Errors.Report
  • #1894 Pre-compile error messages
  • #1893 Language format requires # prefix for error context
  • #1892 Change "context:" ref prefix in errors to "ref:global:"
  • #1891 Replace ref.type description to ref.ref
  • #1890 Replace {{!var}} notation with
  • #1889 Replace escapeHtml with escapeErrors
  • #1888 Joi.ref() is not a function
  • #1887 Remove object.rename.regex.multiple and object.rename.regex.override errors
  • #1886 Change object.rename() override option to not delete existing if nothing match
  • #1885 array().sort([{ order, by }])
  • #1884 Fix: Exponential decimal #1876
  • #1881 Mark rule for keep
  • #1878 Flatten language object
  • #1877 Rule sets
  • #1876 Joi.number() throws error for "0.00000095" string.
  • #1875 Labels only used on path edge
  • #1874 Remove flags argument from createError()
  • #1873 Add object.schema() type support
  • #1872 Replace alternatives.child with alternatives.match error code
  • #1870 New alternatives.types error code
  • #1869 Remove support for string or array or errors return value from error() function
  • #1867 Bidirectional describe() <-> build()
  • #1866 Support multiple languages at the same time
  • #1865 Joi.ref() map option
  • #1864 Merge positive and negative number rules into single sign rule
  • #1862 Consistently use Utils.assertOptions() in all rules with options
  • #1860 when() switch statement
  • #1859 Remove any.createOverrideError()
  • #1858 Remove this from error() function
  • #1857 Remove self option from error()
  • #1856 Remove automatic example validation
  • #1854 .rename() causes errors when nothing has to be renamed
  • #1853 Remove case flag
  • #1852 Remove trim flag
  • #1851 Remove byteAligned flag
  • #1850 Remove precision flag
  • #1849 Error on unreachable when() statement
  • #1848 Forbid chaining when() calls when the first was not on alternatives type
  • #1847 any.error() fails to clear self option in override call
  • #1846 Skip type check if valids fail
  • #1843 Change object and array errors to use path instead of nested errors
  • #1842 String multiple email address
  • #1840 Limit array.single() to only non-array items
  • #1839 Remove Hoek.reach() options from Ref
  • #1838 Unique tests duplicated on concat()
  • #1837 Perform base type conversions before extension pre
  • #1836 Apply array.single() regardless of options.convert
  • #1835 Run extension coerce only if options.convert is true
  • #1834 Remove isJoi from schema
  • #1833 Array items using references to array peers are ignored in order of processing
  • #1832 Change reference view in array item rules
  • #1831 Move func().ref() to object().ref()
  • #1830 Change Ref to class
  • #1828 Remove isRegExp from object.rename description
  • #1827 string min/max/length description missing encoding
  • #1826 string.truncate() doesn't account for max with ref
  • #1825 Apply only last min/max/length rules
  • #1824 string methods change provided options
  • #1823 Description changes
  • #1822 Inconsistent reference error reporting
  • #1819 Reduce reach
  • #1812 Multiple email address validation
  • #1807 Ability to perform custom calculations on referenced fields
  • #1806 Number validation fails with a valid number (".30")
  • #1796 fix: copy object including Symbols
  • #1778 Make certain rules (min/max/length) override themselves revisited
  • #1770 Don't delete object key when it equals the rename.to in a rename with regex
  • #1769 Merge v14 changes
  • #1767 V14 temp
  • #1762 Customize formatting for dates in error messages of min/max/greater/less (with ISO default)
  • #1746 Validate base64 URI safe strings
  • #1737 Translate validation messages based on header request
  • #1736 truthy() / falsy() values apply when convert is false
  • #1732 Joi.string().uri() accepts "https://" as a valid url
  • #1730 Continue array validation even if items() fails
  • #1727 Caching for strings / numbers / booleans
  • #1723 Allow validate options to be passed through assert/attempt #1722
  • #1722 Check all errors on joi.assert and joi.attempt
  • #1705 Validate URI domain
  • #1702 Ref inside top-level array items/ordered
  • #1696 Joi should not strip non-enumerable properties of an object
  • #1695 Support schema keys with '.' (without forcing path reach)
  • #1687 Validation fails with valid UUID 3
  • #1652 Throw typed ValidationErrors
  • #1651 Reference above parent. Closes #1650
  • #1650 Support references above the parent
  • #1648 Move object rename to own function
  • #1646 Remove flatten arguments. Closes #1644
  • #1645 Support self references. Closes #1569
  • #1644 Remove all arguments flattening
  • #1623 Check for valid/invalid values after conversion only
  • #1613 Support ISO 8601 duration as a string validator
  • #1612 Validate ISO Duration string
  • #1606 schema.describe minor issues and feature suggestions
  • #1569 Allow self references
  • #1535 failover() support for default on errors
  • #1457 Specify required matches for .pattern()
  • #1403 Support regexp capture group for rename
  • #1264 Override rule message with any.message() rule
  • #1244 Throw typed errors
  • #925 Validating a FQDN
  • #667 Validate a number, which depends on other validate numbers

Version 15

15.1.1

  • #2047 Replace marker with Symbol.for()

15.1.0

15.0.3

  • #1808 bool() cannot be binded

15.0.2

  • #1801 remove strip from defaults now that it has been removed

15.0.1

  • #1761 Validate object keys related to another value
  • #1753 Override extension language
  • #1750 Pass options to pattern validation to support refs
  • #1748 .pattern doesn't respect .valid when using .ref
  • #1747 Extension which has a return value in setup() does not call validate()
  • #1714 Undocumented strip option on Joi.validate
  • #1704 Resolved issue of maximum call stack exceeded
  • #1700 base64 validation returns RangeError

15.0.0

  • #1776 Replace isemail with @hapi/address
  • #1768 Fix dependency

Version 14

14.5.0

14.4.0

  • #1766 Change module namespace

14.3.1

  • #1691 joi.bind yields any() methods not fully bound

14.3.0

  • #1665 path-related methods (with(), nand()...) broken when applied on func()`
  • #1631 Destructuring Throws Fatal

14.2.0

  • #1659 Add array().assertItem(). Closes #1656
  • #1656 Complex array validation requirements
  • #1608 Custom message overload another one
  • #1528 joi errors not overriding for nested objects
  • #1219 In case custom error messages are passed to Joi.any.error, joi.validate returning parent object error even if child validation fails.

14.1.1

  • #1658 Extensions remove language of previous extension with the same base

14.1.0

  • #1654 Bump to lab@18. Fixes #1653.
  • #1647 Add object().oxor(). Closes #1628
  • #1628 xor but none required

14.0.6

  • #1607 invalid mime types on data uri

14.0.5

  • #1638 fix condition, add tests for safe numbers
  • #1637 Using Number.MAX_SAFE_INTEGER throw error that number unsafe.

14.0.4

14.0.2

  • #1622 Maximum call stack size exceeded​​ error from Joi.defaults with Joi.empty flags

14.0.1

  • #1617 object().with using nested paths validates when it shouldn't in Joi 14

14.0.0

  • #1615 14.0.0 Release Notes
  • #1614 Default stripUnknown = true to only strip object keys, not arrays
  • #1595 Overriding array.min() when using reach
  • #1568 Trying to get multiple custom error messages in details array with
  • #1555 Chaining multiple examples does not overwrite the old examples
  • #1554 #1477 Add Support for nested path with Joi.object().or(), .nand(), .and(), .with(), .without(), .xor()
  • #1544 Error at integer validation
  • #1504 Max safe integers
  • #1478 .example SHOULD perform validation on the provided value
  • #1477 Joi.object().or() does not support nested paths
  • #1429 Joi.string().regex() with support for all modifiers
  • #1364 Need to override twice the key name for error messages
  • #1258 Feature Request: lazy once
  • #1247 Year-only iso date string is parsed incorrectly
  • #1191 Chaining string.insensitive() will not convert values with lowercase/uppercase modifiers
  • #1127 Make certain rules override themselves
  • #1113 Number validation on '0x1' reports no error with a value of 0.

Version 13

13.7.0

13.6.0

  • #1558 Add value to number.base errors

13.5.2

13.5.1

13.5.0

  • #1532 Add enabled flag to string.trim()
  • #1525 Add boolean flag to Joi.string().trim()
  • #1511 Add optional "config" param to array.unique for ignoreUndefined. Closes #1498
  • #1510 Data uri validation
  • #1498 Validating unique optional fields in array elements.
  • #1487 Allow square braces in URL validation
  • #1461 URI validator rejects query param square brackets
  • #999 Where is the documentation for this.createError()?

13.4.0

  • #1521 Extended object does not parse JSON
  • #1515 Joi.reach() can no longer handles empty string path
  • #1514 remove indirect require reference to index.js
  • #1513 require('../') statement in schemas.js causing bundler issues.
  • #1500 add date greater less rules
  • #1499 Allow object keys to be verified by schema
  • #1382 Add a key validator with Joi objects
  • #1000 Correct way to write an "identity" extension?

13.3.0

  • #1479 Is it possible to capture the value of field being validated in custom error messages using the options - language
  • #1438 Use Set() for handling of unprocessed keys
  • #1422 Add byteAligned option to hex string
  • #1415 Use Set() for internal Set backend

13.2.0

  • #1476 Cannot validate an array with 'constructor' as unique entry
  • #1452 Add new validation number().port()
  • #1448 Include describe() documentation in API. Fixes #1447
  • #1435 Add an object.append() method. Fixes #1381.
  • #1433 Changed a separator for path parameter to pre-split array approach for Joi.reach
  • #1423 Avoid redundant copies of settings
  • #1414 Fix cloned valid() / invalid() object values
  • #1383 Add an separator parameter to Joi.reach
  • #1381 Add an object.append() method
  • #1346 Validate port numbers

13.1.2

  • #1392 undefined in the array with label returns wrong missing value message

13.1.1

  • #1395 Asserts that two arguments are provided to object.with() and object.without()

13.1.0

  • #1386 Fix object pattern in combination with empty

13.0.2

  • #1354 Remove validation from .example
  • #1350 joi.ref doesn't work properly with max() function for dependant dates
  • #1189 Should .example perform validation on the provided value?

13.0.1

  • #1334 Impossible to disable language.key in options

13.0.0

  • #1328 13.0.0 Release Notes
  • #1327 Bump joi to node 8+

Version 12

12.1.0

  • #1757 Commercial version of v12 branch

12.0.0

  • #1326 12.0.0 Release Notes
  • #921 $-sign in object keys are escaped in the ValidationError message

Version 11

11.4.0

  • #1325 Allow alternatives.when to "peek" inside the current value

11.3.4

  • #1230 Missing language entry in joi.extend causes obscure runtime error

11.3.1

  • #1311 import { any } does not work on v11

11.3.0

  • #1240 Fixes [#1239]
  • #1239 Rename multiple keys to another name

11.2.0

  • #1308 Add Joi.func().class()

11.1.1

  • #1316 Remove items module dependency

11.1.0

  • #1315 Add promise-like API to validate. Fixes #1314.
  • #1314 Support promises on validate()
  • #1291 Add string.normalize for unicode normalization
  • #1289 Feature request: Unicode normalization

11.0.3

  • #1266 remove empty flag if only reset is used
  • #1249 describe doesn't work for empty() breaking lout

11.0.2

  • #1303 empty string is wrongly accepted as a timestamp

11.0.0

  • #1302 11.0.0 Release Notes
  • #1283 Error: Item cannot come after itself
  • #1282 There is a bug in 10.6.0 API Reference.
  • #1278 Joi.defaults(): Cannot default object type
  • #1256 Add Joi.defaults()
  • #1254 ipv6 with cidr greater than 32
  • #1235 Fix Value Range for IPv6 CIDRs
  • #1232 ipv6 string with mask between 33 and 128 are rejected.
  • #1229 Update isemail from 2.x.x to 3.x.x
  • #1197 Allow passing an option to string().isoDate()
  • #1196 string isoDate should allow the string to be converted to same format as date iso schema
  • #1167 Errors: context.key is actually the label, not the key
  • #1126 Passes the "default" function to the schema description
  • #1121 [Request] Add detail to .describe for function defaults
  • #931 Email validation doesn't allow emails which are compliant with RFC 6530

Version 10

10.6.0

  • #1215 #1201 - setup can return joi object to replace origin schema
  • #1211 Performance Improvements for string().guid()
  • #1206 Added the ability to use a reference for Array min/max/length
  • #1201 Question: how to extend joi to add some key by rule?
  • #1174 Fix #1156 - Adds support for optional base64 padding validation.
  • #1156 base64 validation too strict; padding is optional
  • #1017 Array length cannot reference to another field

10.5.2

  • #1199 Make isemail an optional dependency

10.5.1

  • #1203 Nested child/uncle condition causes annotate() to throw

10.5.0

  • #1183 add forbiddenKeys method to object

10.4.2

  • #1161 Alternatives respect subsequent "when"s if first has only "otherwise"
  • #1151 Alternatives based on a type with only otherwise take precedence over any following one
  • #1146 Keep converted values even when stripped for reference uses
  • #1132 Add "options" to describe output
  • #1130 Joi.any().options() should be reported in .describe()

10.4.1

  • #1119 alternatives doesn't work with error
  • #844 Label in object.and()

10.4.0

  • #1131 Add basic error overriding

10.3.4

  • #1143 number().integer() can fail for values outside MAX_SAFE_INTEGER

10.3.3

  • #1145 Don't try to touch custom error messages with attempt message

10.3.2

  • #1144 Possible bug in custom Error message

10.3.1

  • #1097 Fix #964 Joi wrong value parsing
  • #964 Joi wrong value parsing

10.3.0

  • #1128 Avoid unnecessary clones
  • #1067 "Describe" behavior changes for "implicit" Any with extended Joi
  • #1047 Creating multiple extensions for the same base type
  • #983 Unexpected interaction between Joi.object().unknown() and stripUnknown
  • #831 Joi valid fails, when ref is used with a stripped key.

10.2.2

  • #1103 allow param defaults to be set by the param validations

10.2.1

  • #1095 noDefaults behaviour with any.empty()

10.2.0

  • #1076 Added support for ISO_8601 expansion (+/-YYYYYY)

10.1.0

  • #1075 Allow shorthand accessor string in array().unique()
  • #1073 Provide value which duplicates an item in array().unique()
  • #1072 Path of array().unique() is wrong

10.0.6

  • #1065 Fix boolean strings parsing

10.0.4

10.0.3

  • #1054 adding validation for unnecessary arguments in primary types.
  • #1009 Request: Warn when functions are passed unexpected arguments

10.0.2

  • #1052 [Request] truthy/falsy case insensitive

10.0.1

  • #1039 trim + empty confuses me

10.0.0

  • #1037 10.0.0 Release Notes
  • #1035 Implement String.regex "invalidate" configuration
  • #1034 added support for string.uri relativeOnly option
  • #1032 Clean up any.valid code
  • #1030 Conditional validation of object properties with different parent key
  • #1028 Extend describe() for type
  • #1027 Extending describe() to include renames in metadata
  • #1026 object renames do not appear in describe api.
  • #1020 Joi.string().invalid (not, disallow) doesn't support regex?
  • #1016 Added a string.base64() method.
  • #1015 Suggestion: Joi.string().uri({ allowRelativeOnly })
  • #1010 Update Joi.validate options with removal of error
  • #998 Add support for truthy/falsy boolean values
  • #985 Move time rules to an extension

Version 9

9.2.0

  • #1008 Bugfix/error annotate

9.1.1

  • #1002 Ref will not be converted if it is inside array passed to default

9.1.0

  • #989 Adds UUID Support

9.0.4

  • #947 .without(), runs before .empty()

9.0.3

  • #945 required() does not catch specific empty values

9.0.2

  • #960 Coercion doesn't run early enough

9.0.1

  • #949 Returning credit card number when is valid, fixes #948
  • #948 Credit Card returning null when valid

9.0.0

  • #934 Fix missing top-level methods
  • #933 Extended Joi does not contain certain top-level functions
  • #929 labels don't always get included in error messages with Joi.extend()
  • #928 Different error message for date().format()
  • #927 Check error messages in tests
  • #920 9.0.0 Release Notes
  • #918 number.multiple() enhancement - Issue #916
  • #916 number.multiple() throws exception for non-integer and ref values
  • #899 Treat empty string as null
  • #894 Add Joi.object().schema()
  • #893 Fix item ref. Closes #892
  • #892 References in array items() do not work
  • #880 Add synchronous extensibility
  • #874 any.label() significantly slows validation of large arrays
  • #860 Add the ability to specify a comparator for array.unique() for objects only
  • #859 custom compare for Joi.array().unique()
  • #856 Allow 1 to be true and 0 to be false.
  • #577 RFC: Joi plugins/extensions/custom functions

Version 8

8.4.2

  • #919 joi.date().timestamp() failing validation for millisecond value

8.4.1

  • #909 Using empty in items on sparse array allows undefined elements.

8.4.0

  • #884 Synchronous schema.validate fails if called with options

8.3.0

  • #904 Add stripUnknownKeys option to Joi.validate
  • #903 stripUnknown: What is the expected behavior when validating nested data? (array)

8.2.0

  • #833 Proposal: string().truncate()
  • #379 Recursive schema (tree-like) validation

8.1.1

  • #900 When using reach, changing the label doesn't get applied, when an existing label is there

8.1.0

  • #883 Support error override per rule. Closes #882
  • #882 Support error override per rule

8.0.5

  • #851 Joi 8.x breaks describe().meta in alternatives

8.0.4

  • #837 Fix RegEx translation of IP6 BNF, where [] denotes an option

8.0.3

  • #834 TypeError: cannot delete property '0' of [object String]

8.0.2

  • #830 Return any.empty error for trimmed whitespace (fixes #827)
  • #828 Example for Array Schema Not Possible
  • #827 Unexpected Errors with Strings

8.0.1

  • #824 Description of assert modifying the original value

8.0.0

  • #823 8.0.0 Release Notes
  • #822 Problem with multiple when and conditional forbidden field
  • #763 Multiple alternatives with default
  • #735 Print string versions of NaN, Infinity and -Infinity - resolves #696
  • #696 NaN printed in cosole as null
  • #592 Some refs not converted in .describe()

Version 7

7.3.0

  • #815 uri() fails RFC3986 4.2 relative reference URIs
  • #807 Question: Validate against sub-schema?
  • #565 Combine uppercase with valid

7.2.3

  • #812 Improve error message

7.2.2

  • #803 Label declaration/Validation

7.2.1

  • #800 Generate versioned API Reference link in README

7.2.0

  • #791 Date enhancements and support for Unix Timestamps
  • #789 Date() does not validate Unix timestamp with fractional seconds (decimals)
  • #787 Add a arity predicate for functions

7.1.0

  • #779 Throw custom Joi Errors

7.0.1

  • #774 Fix any.default() returns default object reference
  • #773 Joi.validate() returns default object reference instead of clone

7.0.0

  • #759 7.0.0 Release Notes
  • #756 es6. Closes #754. Closes 755
  • #755 Don't annotate non-object values
  • #754 ES6 style changes and node v4

Version 6

6.10.1

  • #777 Fix any.default() returns default object reference

6.10.0

  • #753 Add default status 400 to error thrown by Joi.assert()
  • #747 removes leading "." from path at root object level
  • #740 Exception throw on undefined object key makes it difficult to track down issue

6.9.1

  • #745 Describe ordered arrays
  • #737 makes allow/valid/invalid not accept undefined #734
  • #734 Joi shouldn't allow Joi.any().valid(undefined).required()

6.9.0

  • #688 Toggable ordered flag for array to match items against input in order
  • #659 Allow treating arrays as objects

6.8.1

  • #730 Fix function properties validation. Closes #729
  • #729 Function keys validation converts function to object

6.8.0

  • #728 Allow functions to act as objects. Closes #727
  • #727 Allow function types to behave as object (e.g. have keys)

6.7.1

  • #721 The index of an incorrect array entry is returned instead of the field name

6.7.0

  • #710 Extending a schema
  • #708 add attempt function
  • #703 No dependency validation when object stripUnknown set to true
  • #702 add hapi to package.json keywords so joi is searchable

6.6.1

  • #693 Use hasOwnProperty from native object

6.6.0

  • #690 removes trailing "." from or path
  • #684 fix unknown nested key path
  • #683 Add the "noDefaults" option
  • #682 Validate without applying default values

6.5.0

  • #668 allow passing an error object as message to assert
  • #656 Updated regexp for more robust ISO 8601 validation
  • #649 Implementation of white space normalisation.
  • #648 Allow normalisation of white space
  • #586 [request] string().replace(pattern)

6.4.3

  • #660 stripUnkown on arrays removes valid objects when multiple items are defined

6.4.2

  • #654 Fix allowing context refs on some string, number and date methods

6.4.0

  • #629 help with .or()

6.3.0

  • #632 Nested whens don't work

6.2.0

  • #413 Create default [highly nested] object easily?

6.1.2

  • #628 Alternatives throw typeError when "is: null" is used

6.1.1

  • #627 Property is always required even when my When() condition isn't met.

6.1.0

  • #619 Add IP Address Validation and Separate IP and URI Logic to Files
  • #616 Add ignoreUndefined flag for rename()
  • #614 Error when .rename() from undefined
  • #611 Number compare functions allow decimal numbers
  • #610 Support for decimal numbers for min, max, less, greater number methods
  • #609 number min/max/greater/less do not allow decimal values
  • #597 Add reference support for String.min/max/length
  • #596 Add reference support for Number.min/max/greater/less
  • #583 do ref-able operations support referring to a list?
  • #560 References for Number comparisons?
  • #380 Comparison between fields

6.0.7

  • #580 Annotate fails on circular objects

6.0.6

  • #602 Validate multiple options with presence key in it
  • #601 Error: stripUnknown should be one of required, optional, forbidden, ignore

6.0.5

  • #600 Fix regression on unsafe string escaping in language

6.0.4

  • #593 .rename() does not work when new value is undefined

6.0.3

  • #589 Joi.array().items(...) error message changes

6.0.1

  • #585 No conversion is done inside Joi.array().items

6.0.0

  • #579 6.0.0 Release Notes
  • #578 respect stripUnknown in arrays
  • #572 add any.strip for objects and arrays
  • #569 Lost key after validation on assert
  • #567 Object with 'or', keys contains an array with a 'null' element
  • #561 how to concat array of objects inside an object property
  • #559 deprecate array.includes and array.excludes, use array.items and allow required and forbidden within
  • #557 Incomplete validation message
  • #555 add some additional guards and tests for #363
  • #553 Does array include allow nested object properties
  • #547 string hex characters only
  • #546 Really custom messages are impossible
  • #545 allow passing a method to .default(), for #363
  • #538 added number.multiple()
  • #536 Consider renaming 'valid' to 'enum' or an alias
  • #534 Bad behavior of Joi.object().concat()
  • #532 multipleOf method for Number?
  • #511 throw when invalid options are provided
  • #495 joi.array().includes path and errors mismatch
  • #488 Allow options to be passed to string.email().
  • #484 Helpful regexp message
  • #457 Add URI Validation
  • #363 support factory-function in .default() ?

Version 5

5.1.0

  • #525 Strange behaviour with date + raw
  • #513 Make alternatives.describe more consistent
  • #510 Add new requiredKeys option specifically for object keys
  • #509 Option to validate a date format but not convert to a date object
  • #477 Support for references in date.min() and date.max()?
  • #404 Possible referencing date field to other date field?

5.0.2

  • #505 Convert date regex to date before comparison. Closes #503.
  • #503 Joi.date().iso() throws error when required() is used.

5.0.1

  • #502 Joi.array() modifies original array

5.0.0

  • #501 5.0.0 Release Notes
  • #498 array().single()
  • #497 array.unique doesn't validate duplicate dates
  • #494 Joi.number allows Infinity
  • #489 add missing semicolon
  • #486 array().includes() should not allow undefined
  • #485 Round number.precision if options.convert
  • #462 Return context with errors.
  • #381 Transformation support

Version 4

4.9.0

  • #487 Code assertions requires () for exist tests
  • #481 Validate object constructor.
  • #408 Check if value is a RegEx

4.8.1

  • #480 Date "now" refers to date when schema was compiled

4.8.0

  • #478 Retain object reference when no rules specified
  • #476 Upgrade Lab
  • #470 Address internationalization issues.
  • #469 change implementation of creditcard to use string
  • #466 Named string regex patterns.
  • #465 implements credit card validation
  • #464 implements nand
  • #461 Add greater() and less() to number type. Closes #411
  • #456 correction for Describe with a "0" argument
  • #454 Describe with a "0" argument
  • #449 Enable to pass "now" in date.min and date.max
  • #446 Use Object.create in Any.clone to improve IE9 support
  • #440 Added any.label method
  • #435 Add format and iso to date type
  • #422 Credit card validation
  • #411 Number min/max exclusive or closed ranges respectively?
  • #407 ensure date does not occur in the past
  • #396 Negative-Integer-Strings are not properly converted to Date instances
  • #362 Support NAND

4.7.0

  • #437 Support optional message prefix in assert()
  • #434 Fix typo.
  • #433 Override default presence
  • #432 Set different default presence mode (required, forbidden)
  • #427 Added ability to validate the number of decimal places
  • #403 Add duplicates validation to array
  • #398 Upgrade lab 4.0
  • #397 Added check for global flag in pattern.
  • #389 Default Assert Message
  • #385 Path for array includes to contain key
  • #383 Describe object.pattern

4.6.2

  • #378 Removed unused sys import.

4.6.1

  • #366 Bug Hunt: empty object() + pattern() + unknown(false) fails to error
  • #359 Allow empty string after trim
  • #357 Cast milisecond strings to a date object
  • #355 Don't rename when there is nothing to rename.
  • #299 Sanitizing blanks

4.6.0

4.5.0

  • #351 Add Hoek isImmutable flag

4.4.0

  • #349 Support {{!key}} notation to securely encode unsafe values
  • #335 Recognize Joi errors

4.3.0

  • #341 Array includes fails if called multiple times
  • #340 Replace internal implementation of required/optional/forbidden
  • #339 when() option 'is' cannot be falsey
  • #337 alternatives().when() behaves inconsistently with any().when()
  • #336 concat() fails to remove valid/invalid values
  • #334 Bug hunt: Joi.any().when is not evaluated it its value is empty even if the when condition is fulfilled.
  • #332 Joi.any().when is not evaluated if empty
  • #326 Bug Hunt: unable to rename keys that are empty strings
  • #325 Bug Hunt: empty string key causes incorrect validation
  • #321 add uppercase, lowercase, and trim for strings
  • #317 Bug Hunt: invalid Date objects do not cause failure.
  • #313 Recursively describes the includes of array schemas #312
  • #312 Describe should also compile and describe array's rules
  • #311 Feature/meta
  • #310 Bug Hunt: email addresses longer than 254 should not be valid
  • #309 Bug Hunt: email addresses with a "local part" > 64 characters should not be validated
  • #293 Verify encoding type is string
  • #292 Add test to check for valid encoding param to binary
  • #288 Bug Hunt: valid IPv6 domain literals in email addresses fail validation
  • #282 Bug Hunt: double-quoted local-parts of email addresses cause validation failure
  • #261 Object key rules by patterns
  • #241 Thoughts on something like any.meta(obj)?
  • #220 string().lowercase() and string().uppsercase()

4.2.1

  • #330 Cannot override context
  • #329 Joi.forbidden() fails when added to an existing type

4.2.0

  • #328 Support references to external context
  • #324 Test for retaining ignored values
  • #323 Joi.forbidden()
  • #322 Make callback optional argument
  • #318 Convert tests to actual async style

4.1.0

  • #296 Allow valid to take buffer values
  • #291 remove extra var internals. Closes #290
  • #290 extra var internals in binary.js
  • #287 object.unknown()
  • #285 Fix to make object.and all-or-nothing - fixes #284
  • #284 Bug Hunt: object.and is supposed to be all-or-nothing

4.0.0

  • #278 Cleanup language file
  • #277 date() allows boolean value
  • #276 binary().encoding()
  • #275 Support when() on any()
  • #274 Undo #273, remove options from schema.validate()
  • #273 Remove module generic validate() and describe()
  • #272 Undo 268
  • #271 schema concat()
  • #270 Alt fails to report references
  • #269 Rename alternatives.attempt() with try()
  • #268 Move interfaces from func at root to const
  • #267 Add alternatives.attempt() to allow adding more schemas
  • #266 Make [] and alternatives() behave exactly the same
  • #265 object.and()
  • #264 Support references in default()
  • #263 object.assert()
  • #262 object.keys() append behavior
  • #260 Allow referencing the value of other keys in conditions
  • #259 Error messages should not include <root>
  • #258 Array should only convert string arrays
  • #257 Move dependencies (with,without, or, xor) to object level
  • #256 Keep input const and return modified value via validate callback
  • #255 Remove modify option
  • #254 4.0.0
  • #253 Validate callback, rename move to object
  • #252 Move rename() to object()
  • #250 Change validate() to return value via callback
  • #249 Alternatives bug fixes
  • #248 Move object() constructor args to keys() method
  • #247 unit() documentation method
  • #246 rename() applied incorrectly
  • #245 alternatives() fails to apply conversion when lower priority match has valid()
  • #244 alternatives() fails to apply conversion of matching schema
  • #243 alternatives() incorrectly allows null when no valids present
  • #239 Error inheritance is troublesome
  • #238 match() -> test()
  • #237 Support literal values as valid() condition
  • #234 testling support
  • #233 Add testling-ci badges
  • #226 Add support for binary type
  • #217 Incorrect ValidationError.annotated() output with abortEarly
  • #214 example() documentation method
  • #210 Add hostname matching to Joi.String
  • #206 Find full path to nested errors
  • #202 array() should set a specific detail.path
  • #196 Precompile schema
  • #194 Conditional rule based on value of another key
  • #192 64-bit limits in min()/max()/integer()
  • #191 Added support for buffer length

Version 3

3.4.1

  • #345 Describe references as such
  • #343 Ref and Alternatives.when don't handle empty string keys

3.0.0

  • #231 Remove language file support
  • #230 3.0.0
  • #229 Bring coverage back to 100% after lab logical statement support
  • #228 hoek 2.0
  • #227 number allows string even with strict()
  • #224 Immutable schema objects. Closes #221
  • #221 Change object to immutable
  • #216 Change locale support to something that works with browserify.

Version 2

2.9.0

  • #215 Enable all any() methods on array()
  • #201 Allows using any.rename() and any.default() together

2.8.0

  • #198 Allow language override directly via options
  • #197 Support for union types in schemas.
  • #195 Bring coverage back to 100% after lab fix
  • #187 Polluted request.payload by adding undefined field
  • #184 Throws error when field is missing and abortEarly=false
  • #183 set defaults #181
  • #181 setting defaults
  • #180 #179; add failing test for renames nested within array
  • #178 Embedded validators in Array().includes don't work
  • #177 Modify does not change internal values in array
  • #176 closes #175. missing required keys no longer throws.
  • #166 Required based on value on other key
  • #142 alternatives()

2.0.0

  • #232 2.0.0
  • #133 Array.includes() does not support more than 1 type
  • #128 with constraint doesn't seem to be respected
  • #126 Validate date supporting arbitrary format
  • #124 Array doesn't validate correctly if includes() uses valid()
  • #122 Update error messages to not have encoded characters
  • #121 Array is accepted as an Object type
  • #112 Remove Number.float()
  • #88 .valid() and .invalid() need a case-insensitive mode

Version 0

0.4.0

  • #110 Adding support for special Any type
  • #107 .with and .without accept an array of args as well
  • #106 Add Type.Any
  • #105 Consistent usage of Array.isArray()
  • #95 Custom Error Messages

0.0.6

  • #25 Rewrite Readme.md
  • #23 Add validation tests for every type's methods with complex combinations
  • #20 String().valid doesn't invalidate bad values
  • #19 StringType.min(3) doesn't validate undefined correctly
  • #18 Adding tests to joi

Deploys by Netlify