Changelog

#351
Fix 'compare is not a function'
#352
Prevent prototype poisoning in clone()
#350
Clone fails to copy override array prototype
#349
Fix shallow defaults clone
9.0.0
breaking changes
#347
Support only node 12
#343
Safer and faster shallow handling
#353
Prevent prototype poisoning in clone() (v8)
#346
Add isPromise()
#345
Add ts.XOR<>
#344
Improve clone() performance
#342
contain() part option allows no matches
#341
Block once in contain() when subject is an object
#340
Error.captureStackTrace can't be used in Joi's browser build
#338
Export interfaces
#337
deepEqual with skip seems to ignore missing properties
#330
Remove deep limit on contain with object
#329
deepEqual() fails to compare errors when prototype is false
#327
contain() passes with extra values with only and not once
#324
Fix empty ref bug in contain when only is true
#323
contain() is always true for empty ref with only and not once
#322
Break methods for deep require
#321
Handle no Buffer support
#319
skip and deepFunction options for deepEqual()
#317
Restore ability to assert with pre-made error
#316
Make assert() generate a named Error so bounce can identify
#315
v8.0.0 Release Notes
#314
Change assert() AssertionError to Error
#313
Remove uniqueFilename()
#312
Minor performance
#311
Support reach into Set and Map objects
#308
Shallow clone of entire object
#306
v7.0.0 Release Notes
#305
Support symbols in merge()
#304
Replace applyToDefaultsWithShallow() with applyToDefaults(..., { shallow })
#303
Replace cloneWithShallow() with clone(value, { shallow })
#285
Change all individual option arguments to { options } object
#284
Default handling of symbols to true by default
#328
deepEqual() skip fails when number of keys is diff
#302
Fix clone of subclassed Set and Map
#301
Fix: Add map and set to seen map
#300
Stack overflow in clone in v6.2.3
#298
Typescript enhancements
6.2.3
breaking changes
#299
Set deepEqual() prototype option to true by default, not just when no options are passed
#297
Clone Map and Set
#228
Hoek.clone() issues
#295
Bootstrap types from @types
#294
Handle promises in deepEqual()
#291
Update deps
#289
Change module namespace
#290
Fix clone without prototype
#283
Revert cloning of symbols to false by default
#282
Ignore symbols by default in deepEqual()
#281
Symbol support
#278
Hoek.clone() defineProperty issue
#277
Don't apply part option to contain() by default
#276
Fix contain() with duplicates and only
#274
Remove engines
6.0.0
breaking changes
#268
API deprecations
#260
deepEqual does not check both sides in full
#254
Add Map and Set support to deepEqual()
#242
Rework deepEqual()
#238
deepEqual and array properties
#236
Hoek.deepEqual false positive
#269
Try object ref comparison first in deepClone()
#227
Don't use deprecated new Buffer() api
#221
Update deps
#220
Throw instances of AssertionError on asserts
5.0.1
breaking changes
#218
base64urlDecode() should throw, not return errors
5.0.0
breaking changes
#212
Remove nextTick()
#211
Remove Timer
#210
Require node v8
#206
Add a wait() method
#288
Commercial version for 4.x branch
#204
Add escape json
#203
Fix isInteger for unsafe integers
#197
Enhancement: Make contain see non-enumerable's
#195
npmignore
#191
update to code 3.x.x
#190
Use map for cloning memoizer
4.0.0
breaking changes
#186
update lab
#185
improve .unique to make use of es6 `Set` performance
#184
improve .unique performance
#183
Fix for issue #177
#181
removed isAbsolutePath method
#180
refactor(merge): use !== rather than ^
#179
isAbsolutePath obsolete?
#177
Assert when value is not a string
#124
transform method does not respect separator option
#152
Hoek.reach and non standard JS objects
#164
Hoek.deepEqual providing false positive result
#173
fix linting error
#171
fix mapToObject documentation
#169
Lint errors. Closes #168
#168
ES6 lint errors
3.0.0
breaking changes
#167
Es6
#166
ES6 style, node v4
#165
es6 updates WIP
#162
Hoek.clone on process.env
#161
hoek.reach should allow empty keys
#160
cleanup loop from #148
#159
Allow reach to work with falsy values (empty str)
#148
generalize Hoek.transform to accept an array of objects
#147
Reach template
#146
Add reachTemplate() to apply reach() functionality to a templatized string
#139
Clone fails on objects with null prototypes
#145
options for deepEqual don't pass on to recursive calls in arrays
#134
Allow for deep partial contain
#140
Add isNullOverride to applyToDefaults
#133
Added option parameter to deepEqual.
#131
Clone even non-enumerable properties.
#130
Hoek.deepEqual({a: 'foo'}, {a: 'foo', b: 'bar'}) return true
#128
Fix deepEqual on empty objects. Fixes #127.
#127
deepEqual behaving unexpectedly with empty object
#117
Throw error directly if it is the only thing passed in as the message
#116
Hoek.assert - throw error that is passed in as message
#115
Adds ability to do Hoek.reach with negative index
#110
enhance withShallow methods to support nested keys. Closes #109
#109
Enhance shallow clone methods to support nested keys
#108
Fix applyToDefaultsWithShallow default clone. Closes #107
#107
applyToDefaultsWithShallow() fail to retain defaults shallow key
#106
Clone, shallow, and stringify
#105
Move shallow and stringify from hapi
#104
Clone fails to copy object property if only setter used
#103
avoid hasOwnProperty so plain objects work
#102
Plain objects can't be compared.
#99
assert() adds whitespace even when arguments are empty
#97
Add contain()
#96
Add contain() comparison function for strings, objects, and arrays
#95
deepEqual() fails to compare arrays with non literal members
#94
deepEqual
#93
dont execute getters when cloning
#91
Added util.format
#89
Don't clone properties with getter by executing the getter
#88
Allow falsey values to be used as default value in Hoek.reach()
#84
Replaced __proto__ with Object.create()
#82
uniqueFilename
#79
Update to lab 4.x
#76
Close #75, properly preform test
#75
Test 43 case for applyToDefaults not accurately testing
#71
Allow assert to be optimized
#72
Rename spumko to hapijs
#70
Protect against null prototypes
#68
Transform Function
#66
Default Value for Reach
#62
Cannot read property 'isImmutable' of null
#59
merge() shallow copies array members when merging
#58
Shallow copy objects with prototype.isImmutable flag
#57
clone() creates multiple copies of the same date, regex, or buffer object
#54
Detect [[Class]] instead of using instanceof
#51
Add isInteger()
#49
match() -> test()
2.0.0
breaking changes
#48
Bring coverage back to 100% after lab logical statement support
#47
Add isAbsolutePath for unix and windows when using node <0.11
#46
Cleanup API and remove/move unused functions
#45
Rename should throw an error for invalid property .
#44
Bring coverage back to 100% after lab fix