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
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:
stripUnknownshould honor local explicit.unknown(false)
17.13.1
- #3034 fix: label false should also hide explicit labels
- #3033 Setting
errors.labeltofalsedoes 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
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
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
messagesoption 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
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/formulato3.0.1forCVE-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
maxDomainSegmentstoEmailOptionsandDomainOptionsinterfaces - #2797 feat(d.ts): improve attempt return type
- #2788 Include local into
ErrorReporttype - #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.attemptwith{ 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
multiplerule 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.jsdoesn'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
- #2450 Update dev site
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 thanis 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
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
funcalias - #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
- #2119 Use ^version
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
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
noin when() - #2078 Default
isto 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
rawafter 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
languagepreference tomessages - #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
- #1926 Add legacy API
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
Version 14
14.5.0
- #1928 Add legacy API
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 onfunc()` - #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
- #1634 Remove engines
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
Version 12
12.1.0
- #1757 Commercial version of v12 branch
12.0.0
Version 11
11.4.0
- #1325 Allow
alternatives.whento "peek" inside the current value
11.3.4
- #1230 Missing
languageentry injoi.extendcauses obscure runtime error
11.3.1
- #1311 import { any } does not work on v11
11.3.0
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
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
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
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
8.1.1
- #900 When using reach, changing the label doesn't get applied, when an existing label is there
8.1.0
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()anddate.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
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
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
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
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
